aboutsummaryrefslogtreecommitdiff
path: root/doc/pddp
diff options
context:
space:
mode:
authorJonathan Wilkes <jancsika1@users.sourceforge.net>2010-08-25 00:31:27 +0000
committerJonathan Wilkes <jancsika1@users.sourceforge.net>2010-08-25 00:31:27 +0000
commit7d6affca746f49f5ffb2818b8a9ccf9d91388e8f (patch)
treec906633b5bb39eb9b566f5209b2b1eae28703878 /doc/pddp
parent2f615ffbf13571a928856b8207d1ea215e857e3f (diff)
revised help docs that conform to the PDDP template
svn path=/trunk/; revision=13942
Diffstat (limited to 'doc/pddp')
-rw-r--r--doc/pddp/Nmop~3pIsdn~tno9V~llV.pd50
-rw-r--r--doc/pddp/TODO11
-rw-r--r--doc/pddp/abs-help.pd74
-rw-r--r--doc/pddp/acoustics-help.pd104
-rw-r--r--doc/pddp/acoustics~-help.pd129
-rw-r--r--doc/pddp/adc~-help.pd196
-rw-r--r--doc/pddp/adc~_dac~-help.pd188
-rw-r--r--doc/pddp/all_about.pd17
-rw-r--r--doc/pddp/append-help.pd119
-rw-r--r--doc/pddp/array-help.pd150
-rw-r--r--doc/pddp/atan-help.pd72
-rw-r--r--doc/pddp/atan2-help.pd126
-rw-r--r--doc/pddp/bag-help.pd91
-rw-r--r--doc/pddp/bang-help.pd278
-rw-r--r--doc/pddp/bang~-help.pd80
-rw-r--r--doc/pddp/bendin-help.pd167
-rw-r--r--doc/pddp/bendout-help.pd168
-rw-r--r--doc/pddp/biquad~-help.pd93
-rw-r--r--doc/pddp/block~-help.pd194
-rw-r--r--doc/pddp/bng-help.pd717
-rw-r--r--doc/pddp/bonk~-help.pd289
-rw-r--r--doc/pddp/bp~-help.pd93
-rw-r--r--doc/pddp/canvas-help.pd89
-rw-r--r--doc/pddp/catch~-help.pd85
-rw-r--r--doc/pddp/change-help.pd159
-rw-r--r--doc/pddp/choice-help.pd111
-rw-r--r--doc/pddp/clip-help.pd240
-rw-r--r--doc/pddp/clip~-help.pd95
-rw-r--r--doc/pddp/closebang-abs.pd9
-rw-r--r--doc/pddp/closebang-help.pd77
-rw-r--r--doc/pddp/complex-mod~-help.pd98
-rw-r--r--doc/pddp/cos-help.pd97
-rw-r--r--doc/pddp/cos~-help.pd146
-rw-r--r--doc/pddp/cpole~-help.pd193
-rw-r--r--doc/pddp/cputime-help.pd283
-rw-r--r--doc/pddp/ctlin-help.pd213
-rw-r--r--doc/pddp/ctlout-help.pd221
-rw-r--r--doc/pddp/czero_rev~-help.pd211
-rw-r--r--doc/pddp/czero~-help.pd195
-rw-r--r--doc/pddp/dac~-help.pd219
-rw-r--r--doc/pddp/dbtopow-help.pd72
-rw-r--r--doc/pddp/dbtopow~-help.pd80
-rw-r--r--doc/pddp/dbtorms-help.pd77
-rw-r--r--doc/pddp/dbtorms~-help.pd84
-rw-r--r--doc/pddp/declare-help.pd73
-rw-r--r--doc/pddp/delay-help.pd329
-rw-r--r--doc/pddp/delread~-help.pd92
-rw-r--r--doc/pddp/delwrite~-help.pd100
-rw-r--r--doc/pddp/drawnumber-help.pd166
-rw-r--r--doc/pddp/drawpolygon-help.pd173
-rw-r--r--doc/pddp/drawsymbol-help.pd163
-rw-r--r--doc/pddp/dynamic_sends.pd557
-rw-r--r--doc/pddp/element-help.pd139
-rw-r--r--doc/pddp/env~-help.pd81
-rw-r--r--doc/pddp/exp-help.pd74
-rw-r--r--doc/pddp/expr-help.pd296
-rw-r--r--doc/pddp/expr~-help.pd203
-rw-r--r--doc/pddp/fexpr~-help.pd458
-rw-r--r--doc/pddp/fft~-help.pd117
-rw-r--r--doc/pddp/fiddle~-help.pd238
-rw-r--r--doc/pddp/float-help.pd309
-rw-r--r--doc/pddp/framp~-help.pd91
-rw-r--r--doc/pddp/ftom-help.pd76
-rw-r--r--doc/pddp/ftom~-help.pd84
-rw-r--r--doc/pddp/gatom-help.pd148
-rw-r--r--doc/pddp/get-help.pd126
-rw-r--r--doc/pddp/getsize-help.pd103
-rw-r--r--doc/pddp/graph-help.pd64
-rw-r--r--doc/pddp/gripd-help.pd73
-rw-r--r--doc/pddp/hdial-help.pd283
-rw-r--r--doc/pddp/hidin-help.pd158
-rw-r--r--doc/pddp/hilbert~-help.pd85
-rw-r--r--doc/pddp/hip~-help.pd100
-rw-r--r--doc/pddp/hradio-help.pd405
-rw-r--r--doc/pddp/hslider-help.pd444
-rw-r--r--doc/pddp/import-help.pd87
-rw-r--r--doc/pddp/initbang-help-ex1-loadbang.pd18
-rw-r--r--doc/pddp/initbang-help-ex2-initbang.pd15
-rw-r--r--doc/pddp/initbang-help.pd85
-rw-r--r--doc/pddp/inlet-help.pd99
-rw-r--r--doc/pddp/inlet~-help.pd183
-rw-r--r--doc/pddp/int-help.pd220
-rw-r--r--doc/pddp/intro-help.pd360
-rw-r--r--doc/pddp/key-help.pd222
-rw-r--r--doc/pddp/keyname-help.pd140
-rw-r--r--doc/pddp/keyup-help.pd138
-rw-r--r--doc/pddp/line-help.pd378
-rw-r--r--doc/pddp/line~-help.pd105
-rw-r--r--doc/pddp/list-help.pd629
-rw-r--r--doc/pddp/loadbang-help.pd228
-rw-r--r--doc/pddp/log-help.pd73
-rw-r--r--doc/pddp/loop~-help.pd171
-rw-r--r--doc/pddp/lop~-help.pd96
-rw-r--r--doc/pddp/lrshift~-help.pd87
-rw-r--r--doc/pddp/makefilename-help.pd540
-rw-r--r--doc/pddp/makenote-help.pd133
-rw-r--r--doc/pddp/math-help.pd266
-rw-r--r--doc/pddp/max-help.pd81
-rw-r--r--doc/pddp/message-help.pd266
-rw-r--r--doc/pddp/metro-help.pd152
-rw-r--r--doc/pddp/midi-help.pd212
-rw-r--r--doc/pddp/midiin-help.pd93
-rw-r--r--doc/pddp/midiout-help.pd96
-rw-r--r--doc/pddp/min-help.pd80
-rw-r--r--doc/pddp/moses-help.pd182
-rw-r--r--doc/pddp/mtof-help.pd76
-rw-r--r--doc/pddp/mtof~-help.pd83
-rw-r--r--doc/pddp/my_canvas-help.pd726
-rw-r--r--doc/pddp/namecanvas-help.pd58
-rw-r--r--doc/pddp/netreceive-help.pd131
-rw-r--r--doc/pddp/netsend-help.pd115
-rw-r--r--doc/pddp/noise~-help.pd67
-rw-r--r--doc/pddp/notein-help.pd215
-rw-r--r--doc/pddp/noteout-help.pd212
-rw-r--r--doc/pddp/nqpoly4-help.pd26
-rw-r--r--doc/pddp/nqpoly~-help.pd21
-rw-r--r--doc/pddp/numbox2-help.pd428
-rw-r--r--doc/pddp/openpanel-help.pd77
-rw-r--r--doc/pddp/operators-help.pd388
-rw-r--r--doc/pddp/osc~-help.pd102
-rw-r--r--doc/pddp/otherbinops-help.pd740
-rw-r--r--doc/pddp/outlet-help.pd100
-rw-r--r--doc/pddp/outlet~-help.pd184
-rw-r--r--doc/pddp/output~-help.pd93
-rw-r--r--doc/pddp/pack-help.pd341
-rw-r--r--doc/pddp/parazit-help.pd5
-rw-r--r--doc/pddp/pd-help.pd158
-rw-r--r--doc/pddp/pddp-style-guide.pd72
-rw-r--r--doc/pddp/pgmin-help.pd172
-rw-r--r--doc/pddp/pgmout-help.pd175
-rw-r--r--doc/pddp/phasor~-help.pd90
-rw-r--r--doc/pddp/pipe-help.pd345
-rw-r--r--doc/pddp/pique-help.pd89
-rw-r--r--doc/pddp/plot-help.pd187
-rw-r--r--doc/pddp/pointer-help.pd190
-rw-r--r--doc/pddp/poly-help.pd106
-rw-r--r--doc/pddp/polytouch-out.pd100
-rw-r--r--doc/pddp/polytouchin-help.pd100
-rw-r--r--doc/pddp/pow-help.pd89
-rw-r--r--doc/pddp/powtodb-help.pd72
-rw-r--r--doc/pddp/powtodb~-help.pd82
-rw-r--r--doc/pddp/print-help.pd237
-rw-r--r--doc/pddp/print~-help.pd68
-rw-r--r--doc/pddp/qlist-help.pd150
-rw-r--r--doc/pddp/random-help.pd762
-rw-r--r--doc/pddp/readsf~-help.pd130
-rw-r--r--doc/pddp/realtime-help.pd272
-rw-r--r--doc/pddp/receive-help.pd317
-rw-r--r--doc/pddp/rev1~-help.pd120
-rw-r--r--doc/pddp/rev2~-help.pd135
-rw-r--r--doc/pddp/rev3~-help.pd137
-rw-r--r--doc/pddp/rmstodb-help.pd73
-rw-r--r--doc/pddp/rmstodb~-help.pd83
-rw-r--r--doc/pddp/route-help.pd522
-rw-r--r--doc/pddp/rpole~-help.pd146
-rw-r--r--doc/pddp/rsqrt~-help.pd79
-rw-r--r--doc/pddp/rzero_rev~-help.pd141
-rw-r--r--doc/pddp/rzero~-help.pd139
-rw-r--r--doc/pddp/samphold~-help.pd112
-rw-r--r--doc/pddp/samplerate~-help.pd70
-rw-r--r--doc/pddp/savepanel-help.pd74
-rw-r--r--doc/pddp/scalar-help.pd456
-rw-r--r--doc/pddp/select-help.pd499
-rw-r--r--doc/pddp/send-help.pd306
-rw-r--r--doc/pddp/send~-help.pd78
-rw-r--r--doc/pddp/set-help.pd240
-rw-r--r--doc/pddp/setsize-help.pd112
-rw-r--r--doc/pddp/sigbinops-help.pd121
-rw-r--r--doc/pddp/sigmund~-help.pd262
-rw-r--r--doc/pddp/sig~-help.pd70
-rw-r--r--doc/pddp/sin-help.pd97
-rw-r--r--doc/pddp/snapshot~-help.pd86
-rw-r--r--doc/pddp/soundfiler-help.pd127
-rw-r--r--doc/pddp/spigot-help.pd301
-rw-r--r--doc/pddp/sqrt-help.pd72
-rw-r--r--doc/pddp/sqrt~-help.pd83
-rw-r--r--doc/pddp/stripnote-help.pd114
-rw-r--r--doc/pddp/struct-help.pd162
-rw-r--r--doc/pddp/sublist-help.pd72
-rw-r--r--doc/pddp/swap-help.pd419
-rw-r--r--doc/pddp/switch~-help.pd175
-rw-r--r--doc/pddp/symbol-help.pd196
-rw-r--r--doc/pddp/sysexin-help.pd94
-rw-r--r--doc/pddp/table-help.pd124
-rw-r--r--doc/pddp/table_of_contents.pd142
-rw-r--r--doc/pddp/tabosc4~-help.pd197
-rw-r--r--doc/pddp/tabplay~-help.pd163
-rw-r--r--doc/pddp/tabread-help.pd228
-rw-r--r--doc/pddp/tabread4-help.pd273
-rw-r--r--doc/pddp/tabread4~-help.pd146
-rw-r--r--doc/pddp/tabreceive~-help.pd59
-rw-r--r--doc/pddp/tabsend~-help.pd97
-rw-r--r--doc/pddp/tabwrite-help.pd234
-rw-r--r--doc/pddp/tabwrite~-help.pd114
-rw-r--r--doc/pddp/tan-help.pd97
-rw-r--r--doc/pddp/test-loop~.pd58
-rw-r--r--doc/pddp/text-help.pd68
-rw-r--r--doc/pddp/textfile-help.pd116
-rw-r--r--doc/pddp/threshold~-help.pd98
-rw-r--r--doc/pddp/throw~-help.pd92
-rw-r--r--doc/pddp/time_measurements.pd140
-rw-r--r--doc/pddp/timer-help.pd273
-rw-r--r--doc/pddp/toggle-help.pd400
-rw-r--r--doc/pddp/touchin-help.pd93
-rw-r--r--doc/pddp/touchout-help.pd95
-rw-r--r--doc/pddp/trigger-help.pd593
-rw-r--r--doc/pddp/unpack-help.pd174
-rw-r--r--doc/pddp/until-help.pd254
-rw-r--r--doc/pddp/value-help.pd248
-rw-r--r--doc/pddp/vcf~-help.pd99
-rw-r--r--doc/pddp/vdial-help.pd283
-rw-r--r--doc/pddp/vd~-help.pd97
-rw-r--r--doc/pddp/vline~-help.pd105
-rw-r--r--doc/pddp/vradio-help.pd391
-rw-r--r--doc/pddp/vslider-help.pd438
-rw-r--r--doc/pddp/vsnapshot~-help.pd109
-rw-r--r--doc/pddp/vu-help.pd378
-rw-r--r--doc/pddp/wrap~-help.pd74
-rw-r--r--doc/pddp/writesf~-help.pd103
-rw-r--r--doc/pddp/x_all_guis.pd19
-rw-r--r--doc/pddp/zexy.pd317
221 files changed, 32288 insertions, 6528 deletions
diff --git a/doc/pddp/Nmop~3pIsdn~tno9V~llV.pd b/doc/pddp/Nmop~3pIsdn~tno9V~llV.pd
new file mode 100644
index 00000000..63ad08e6
--- /dev/null
+++ b/doc/pddp/Nmop~3pIsdn~tno9V~llV.pd
@@ -0,0 +1,50 @@
+#N canvas 0 0 448 189 10;
+#X obj 1 165 cnv 15 445 20 empty \$0-pddp.cnv.header Nmop~3p!sdn~+no9V~llV
+175 10 1 18 -261106 -33289 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0 14
+-233017 -33289 0;
+#X obj 7 166 pddp/pddplink http://puredata.info/dev/pddp -text dppd
+;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X obj 101 101 cnv 15 45 16 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X text 100 100 VL3W pd;
+#X coords 0 -1 1 1 47 18 2 100 100;
+#X restore 2 3 pd;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X obj 101 101 cnv 15 117 16 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X text 100 100 s+>3(9O~p3+V13J pd;
+#X coords 0 -1 1 1 119 18 2 100 100;
+#X restore 104 3 pd;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X obj 101 91 cnv 15 23 16 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X text 101 100 l +;
+#X obj 65 56 inlet;
+#X obj 131 228 outlet;
+#X text 100 99 T;
+#X coords 0 -1 1 1 25 18 2 100 100;
+#X restore 64 75 pd;
+#X floatatom 64 46 5 0 0 0 - #0-gatom -;
+#N canvas 0 0 450 300 foo 0;
+#X obj 100 100 cnv 10 10 10 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X obj 130 61 inlet;
+#X obj 130 137 s \$0-gatom;
+#X msg 130 115 set \$1;
+#X text 91 26 IT'S A SECRET TO EVERYBODY.;
+#X obj 130 88 + 10000;
+#X connect 1 0 5 0;
+#X connect 3 0 2 0;
+#X connect 5 0 3 0;
+#X coords 0 -1 1 1 10 10 2 100 100;
+#X restore 64 121 pd foo;
+#X msg 64 103 48008;
+#X text 66 133 `pd u! Nmop-3p!sdn H>+Vd o+ ( +|n>!tt!p +n9) 3|9!ssod
+s! +I;
+#X text 109 75 <-- H>+Vd Nmop-3p!sdn;
+#X obj 416 3 pddp/pddplink pddp/help.pd -text d13H;
+#X connect 5 0 8 0;
+#X connect 6 0 5 0;
+#X connect 8 0 7 0;
diff --git a/doc/pddp/TODO b/doc/pddp/TODO
index 5b42a561..c46b9d1d 100644
--- a/doc/pddp/TODO
+++ b/doc/pddp/TODO
@@ -2,7 +2,12 @@
- create message-help.pd, namecanvas-help.pd and all_about_messages which
include [namecanvas] and the additional/pd-msg docs
-- update route-help.pd to discuss the three modes of [route]: float mode,
- symbol mode, and data type mode.
+- finish all_about.pd and remove table_of_contents.pd
-- change [pwd] to [getdir]
+- improve glossary
+
+- finish all_about_externals.pd
+
+- finish all_about_libraries.pd
+
+- update PDDP guidelines (or remove it)
diff --git a/doc/pddp/abs-help.pd b/doc/pddp/abs-help.pd
new file mode 100644
index 00000000..f4cc584e
--- /dev/null
+++ b/doc/pddp/abs-help.pd
@@ -0,0 +1,74 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 foo \$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 abs 3 12 0 18 -204280
+-1 0;
+#X obj 0 452 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 15 12 0 13
+-228856 -1 0;
+#N canvas 48 237 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION absolute value;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 25 NAME abs;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 598 pd META;
+#X obj 0 511 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 542 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 570 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 546 (none);
+#N canvas 102 479 428 109 Related_objects 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 236 42 sqrt;
+#X obj 271 42 pow;
+#X obj 56 75 cos~;
+#X obj 88 75 osc~;
+#X obj 22 75 expr;
+#X obj 22 42 sin;
+#X obj 48 42 cos;
+#X obj 75 42 tan;
+#X obj 108 42 atan;
+#X obj 143 42 atan2;
+#X obj 181 42 exp;
+#X text 7 1 [abs] Related Objects;
+#X obj 208 42 log;
+#X restore 102 598 pd Related_objects;
+#X obj 78 460 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 479 list;
+#X text 98 518 float;
+#X obj 78 519 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 239 225 0 0 0 0 - - -;
+#X floatatom 239 168 0 0 0 0 - - -;
+#X text 112 248 [abs] will output the absolute value of a number.;
+#X obj 239 198 abs;
+#X obj 492 4 abs;
+#X obj 465 21 pddp/pddplink http://wiki.puredata.info/en/abs -text
+pdpedia: abs;
+#X text 11 24 absolute value;
+#X text 168 479 - a list will be truncated \, and the first element
+will be used as input.;
+#X text 168 518 - the absolute value of the number given at the inlet.
+;
+#X text 98 459 float;
+#X text 168 459 - the incoming value.;
+#X obj 4 598 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
diff --git a/doc/pddp/acoustics-help.pd b/doc/pddp/acoustics-help.pd
new file mode 100644
index 00000000..b80f4345
--- /dev/null
+++ b/doc/pddp/acoustics-help.pd
@@ -0,0 +1,104 @@
+#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 acoustics 3 12 0
+18 -204280 -1 0;
+#X obj 0 433 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 KEYWORDS control conversion MIDI;
+#X text 12 25 NAME mtof ftom dbtorms rmstodb dbtopow powtodb;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION control objects for conversion;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#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 536 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 442 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 540 (none);
+#N canvas 71 422 428 163 Related_objects 0;
+#X text 19 37 Control objects for conversion:;
+#X obj 59 66 dbtorms;
+#X obj 113 66 rmstodb;
+#X obj 167 66 dbtopow;
+#X obj 222 66 powtodb;
+#X obj 22 125 mtof~;
+#X obj 67 125 ftom~;
+#X obj 110 125 dbtorms~;
+#X obj 175 125 rmstodb~;
+#X obj 241 125 dbtopow~;
+#X obj 303 125 powtodb~;
+#X text 19 102 Signal objects for conversion:;
+#X obj 22 66 mtof;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [ftom] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 512 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 441 float;
+#X text 98 468 list;
+#X text 98 512 float;
+#X text 158 468 - lists will be truncated \, and the first element
+will be used as input.;
+#X obj 392 250 ftom;
+#X obj 392 198 mtof;
+#X floatatom 392 170 0 0 0 0 - - -;
+#X floatatom 392 225 0 0 0 0 - - -;
+#X floatatom 392 274 0 0 0 0 - - -;
+#X floatatom 231 170 0 0 0 0 - - -;
+#X floatatom 231 225 0 0 0 0 - - -;
+#X floatatom 231 274 0 0 0 0 - - -;
+#X obj 231 198 dbtorms;
+#X obj 231 250 rmstodb;
+#X floatatom 58 170 0 0 0 0 - - -;
+#X floatatom 58 225 0 0 0 0 - - -;
+#X floatatom 58 274 0 0 0 0 - - -;
+#X obj 58 198 dbtopow;
+#X obj 58 250 powtodb;
+#X obj 258 2 mtof;
+#X obj 294 2 ftom;
+#X obj 330 3 dbtorms;
+#X obj 386 3 rmstodb;
+#X obj 440 3 dbtopow;
+#X obj 497 3 powtodb;
+#X obj 433 20 pddp/pddplink http://wiki.puredata.info/en/acoustics
+-text pdpedia: acoustics;
+#X text 11 23 control objects for conversion;
+#X obj 110 197 pddp/pddplink dbtopow-help.pd -text dbtopow-help;
+#X obj 110 251 pddp/pddplink powtodb-help.pd -text powtodb-help;
+#X obj 282 197 pddp/pddplink dbtorms-help.pd -text dbtorms-help;
+#X obj 282 251 pddp/pddplink rmstodb-help.pd -text rmstodb-help;
+#X obj 426 197 pddp/pddplink ftom-help.pd -text ftom-help;
+#X obj 426 251 pddp/pddplink mtof-help.pd -text mtof-help;
+#X text 158 441 - the incoming value.;
+#X obj 98 569 pddp/pddplink all_about_acoustic_conversions.pd;
+#X text 87 126 Click on the links next to each object for more help:
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 15 0 19 0;
+#X connect 16 0 18 0;
+#X connect 17 0 16 0;
+#X connect 18 0 15 0;
+#X connect 20 0 23 0;
+#X connect 21 0 24 0;
+#X connect 23 0 21 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 29 0;
+#X connect 28 0 26 0;
+#X connect 29 0 27 0;
diff --git a/doc/pddp/acoustics~-help.pd b/doc/pddp/acoustics~-help.pd
new file mode 100644
index 00000000..efb0de90
--- /dev/null
+++ b/doc/pddp/acoustics~-help.pd
@@ -0,0 +1,129 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 550 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 550 40 empty \$0-pddp.cnv.header (acoustics~) 3 12
+0 18 -204280 -1 0;
+#X obj 0 424 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 KEYWORDS signal conversion MIDI;
+#X text 12 85 DESCRIPTION signal objects for conversion;
+#X text 12 25 NAME mtof~ ftom~ dbtorms~ rmstodb~ dbtopow~ powtodb~
+;
+#X text 12 5 GENRE help;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 536 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 433 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 540 (none);
+#N canvas 71 422 428 163 Related_objects 0;
+#X text 19 37 Control objects for conversion:;
+#X obj 59 66 dbtorms;
+#X obj 113 66 rmstodb;
+#X obj 167 66 dbtopow;
+#X obj 222 66 powtodb;
+#X obj 22 125 mtof~;
+#X obj 67 125 ftom~;
+#X obj 110 125 dbtorms~;
+#X obj 175 125 rmstodb~;
+#X obj 241 125 dbtopow~;
+#X obj 303 125 powtodb~;
+#X text 19 102 Signal objects for conversion:;
+#X obj 22 66 mtof;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (acoustics) Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 508 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 433 20 pddp/pddplink http://wiki.puredata.info/en/acoustics
+-text pdpedia: acoustics;
+#X text 11 23 signal objects for conversion;
+#X text 98 432 signal;
+#X text 98 508 signal;
+#X text 158 508 - the outgoing signal.;
+#X text 158 432 - the incoming signal.;
+#X floatatom 68 136 0 0 0 0 - - -;
+#X obj 68 160 dbtopow~;
+#X obj 67 217 snapshot~;
+#X floatatom 67 246 0 0 0 0 - - -;
+#X obj 67 294 powtodb~;
+#X obj 67 341 snapshot~;
+#X floatatom 67 368 0 0 0 0 - - -;
+#X obj 242 3 mtof~;
+#X obj 281 3 ftom~;
+#X obj 320 3 dbtorms~;
+#X obj 377 3 rmstodb~;
+#X obj 434 3 dbtopow~;
+#X obj 491 3 powtodb~;
+#X floatatom 248 136 0 0 0 0 - - -;
+#X obj 247 217 snapshot~;
+#X floatatom 247 246 0 0 0 0 - - -;
+#X obj 247 341 snapshot~;
+#X floatatom 247 368 0 0 0 0 - - -;
+#X obj 248 160 dbtorms~;
+#X obj 247 294 rmstodb~;
+#X floatatom 418 136 0 0 0 0 - - -;
+#X obj 417 217 snapshot~;
+#X floatatom 417 246 0 0 0 0 - - -;
+#X obj 417 341 snapshot~;
+#X floatatom 417 368 0 0 0 0 - - -;
+#X obj 418 160 ftom~;
+#X obj 417 294 mtof~;
+#X obj 29 190 bang~;
+#X obj 209 190 bang~;
+#X obj 379 190 bang~;
+#X obj 438 180 pddp/pddplink ftom~-help.pd -text ftom~-help;
+#X obj 88 314 pddp/pddplink powtodb~-help.pd -text powtodb~-help;
+#X obj 268 314 pddp/pddplink rmstodb~-help.pd -text rmstodb~-help;
+#X obj 438 314 pddp/pddplink mtof~-help.pd -text mtof~-help;
+#X obj 268 180 pddp/pddplink dbtorms~-help.pd -text dbtorms~-help;
+#X obj 88 180 pddp/pddplink dbtopow~-help.pd -text dbtopow~-help;
+#X text 98 452 float;
+#X text 158 452 - an incoming float will be converted to a signal.
+;
+#X text 98 472 list;
+#X text 158 472 - a list will be truncated to the first element.;
+#X obj 98 569 pddp/pddplink all_about_acoustic_conversions.pd;
+#X text 97 96 Click on the links under each object for more help:;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 30 0 35 0;
+#X connect 31 0 32 0;
+#X connect 32 0 36 0;
+#X connect 33 0 34 0;
+#X connect 35 0 31 0;
+#X connect 36 0 33 0;
+#X connect 37 0 42 0;
+#X connect 38 0 39 0;
+#X connect 39 0 43 0;
+#X connect 40 0 41 0;
+#X connect 42 0 38 0;
+#X connect 43 0 40 0;
+#X connect 44 0 19 0;
+#X connect 44 0 22 0;
+#X connect 45 0 31 0;
+#X connect 45 0 33 0;
+#X connect 46 0 38 0;
+#X connect 46 0 40 0;
diff --git a/doc/pddp/adc~-help.pd b/doc/pddp/adc~-help.pd
index fd825110..c59b0578 100644
--- a/doc/pddp/adc~-help.pd
+++ b/doc/pddp/adc~-help.pd
@@ -1,67 +1,153 @@
-#N canvas 578 22 544 568 12;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#N canvas 85 22 593 609 More_Info 0;
-#X text 16 13 MULTI-CHANNEL AUDIO;
-#X text 32 40 All sound cards are capable of at least two channels
+#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 adc~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 297 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 44 246 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION: audio input;
+#X text 12 125 INLET_0;
+#X text 12 145 OUTLET_N signal;
+#X text 12 25 NAME adc~;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 501 597 pd META;
+#X obj 0 334 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 421 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 508 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 79 306 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 94 375 428 209 Related_objects 0;
+#X obj 22 43 dac~;
+#X obj 62 43 switch~;
+#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 [adc~] Related Objects;
+#X text 114 43 [block~];
+#X text 19 66 (Note: having a [block~] and a [switch~] in the same
+window causes an error \, which is why [block~] is shown above as a
+comment.);
+#X text 19 118 Externals;
+#X obj 173 43 throw~;
+#X obj 225 43 catch~;
+#X obj 277 43 send~;
+#X obj 321 43 receive~;
+#X obj 19 142 pddp/helplink pdogg/oggcast~;
+#X obj 19 162 pddp/helplink unauthorized/mp3cast~;
+#X text 18 183 [shoutcast~] (What library is this object in?);
+#X restore 102 597 pd Related_objects;
+#X obj 490 3 adc~;
+#X obj 466 20 pddp/pddplink http://wiki.puredata.info/en/adc~ -text
+pdpedia: adc~;
+#X text 99 343 signal;
+#X obj 79 343 cnv 17 3 70 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 86 59 adc~;
+#X obj 86 196 adc~ 5;
+#X text 144 197 a mono signal from channel 5;
+#X obj 86 227 adc~ 1 3 8 6 11 15 19 22 23 24 36;
+#X text 360 228 11 channels of audio;
+#X obj 86 257 adc~ 1 2 3 4 5 6 7 8;
+#X text 257 258 all channels on an 8-channel device;
+#X text 130 59 default stereo signals: same as:;
+#X obj 332 60 adc~ 1 2;
+#X text 168 438 - the object defaults to 2 incoming audio channels
+(usually a left and right stereo pair). Any number of arguments (integers)
+can be used to define one or multiple input channels - each integer
+corresponds to an input channel on your audio hardware.;
+#X text 80 438 n) float;
+#X text 169 343 - the number of outlets corresponds with the number
+of arguments - each outlet represents an input channel on your audio
+hardware which corresponds to the argument you provide. If no arguments
+are provided \, then there are two outlets which represent audio channels
+1 and 2 on your computers sound card.;
+#X obj 87 103 env~;
+#X floatatom 87 151 5 0 0 0 - - -;
+#X obj 87 127 spigot;
+#X obj 150 104 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 180 104 <- Click to get amplitude of channel 1;
+#X text 130 151 RMS amplitude (dB);
+#X text 169 305 - the inlet to [adc~] is not used.;
+#X text 99 305 (inactive);
+#X obj 5 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#N canvas 44 65 428 471 Multi-channel_audio 0;
+#X text 19 38 All sound cards are capable of at least two channels
of audio. Pd supports these two channels by default and uses your system's
generic audio drivers to communicate with your hardware. However \,
for faster input/output and for more than two channels of audio \,
PD incorporates the use of "PortAudio" which uses ASIO drivers to communicate
with your hardware. So \, to instruct Pd to use more than two channels
of audio \, your command line should read like below:;
-#X text 93 182 c:/pd/bin/pd.exe -pa -inchannels 8 -outchannels 8;
-#X text 32 211 The "-pa" switch means "PortAudio". This switch is new
+#X text 80 145 c:/pd/bin/pd.exe -pa -inchannels 8 -outchannels 8;
+#X text 19 174 The "-pa" switch means "PortAudio". This switch is new
as of Pd version 0.37 TEST 4 and replaces the old "-asio" switch.;
-#X text 32 271 The "-inchannels" and "-outchannels" switches can be
+#X text 19 234 The "-inchannels" and "-outchannels" switches can be
summarized by using "-channels 8" because currently PortAudio requires
that the number of incoming and outgoing channels must be equal. This
may change in the Pd's future...;
-#X text 32 361 To further optimize Pd's usage of your audio hardware
+#X text 19 314 To further optimize Pd's usage of your audio hardware
\, you can explore the following:;
-#X text 42 402 - audiobuf;
-#X text 43 420 - blocksize;
-#X text 42 436 - audioindev;
-#X text 42 454 - audiooutdev;
-#X text 38 480 With the right hardware \, Pd can manage audio input
+#X text 29 355 - audiobuf;
+#X text 30 373 - blocksize;
+#X text 29 389 - audioindev;
+#X text 29 407 - audiooutdev;
+#X text 25 433 With the right hardware \, Pd can manage audio input
and output with lower than 10 milliseconds of latency.;
-#X restore 104 514 pd More_Info;
-#N canvas 85 22 395 244 Related_Objects 0;
-#X text 25 8 Native Pd Objects;
-#X text 25 92 Externals and other object libraries;
-#X obj 45 46 dac~;
-#X obj 98 46 switch~;
-#X obj 171 46 block~;
-#X restore 104 488 pd Related_Objects;
-#X text 16 107 ARGUMENTS:;
-#X text 32 188 OUTLETS:;
-#X text 23 344 EXAMPLES:;
-#X text 20 487 SEE ALSO:;
-#X obj 33 20 adc~;
-#X text 30 53 PURPOSE:;
-#X text 108 18 - AUDIO INPUT: ANALOG/DIGITAL CONVERTER SIGNAL;
-#X text 112 541 - Dave Sabine \, May 6 \, 2003;
-#X text 104 53 [adc~] is an acronym meaning "Analog/Digital Converter
-Signal" and is Pd's interface to access the audio information arriving
-at your soundcard(s).;
-#X text 106 106 The object defaults to 2 incoming audio channels (usually
-a left and right stereo pair). Any number of arguments (integers) can
-be used to define multiple input channels - each integer corresponds
-to an input channel on your audio hardware.;
-#X text 107 188 Signal: the number of outlets correspond with the number
-of arguments - each outlet represents an input channel on your audio
-hardware which corresponds to the argument you provide. If no arguments
-are provided \, then there are two outlets which represent audio channels
-1 and 2 on your computers sound card.;
-#X text 107 290 The information at each outlet is an audio signal (i.e.
-the object operates at 'audio-rate') and therefore must be connected
-to an audio inlet on a related object.;
-#X obj 109 346 adc~;
-#X text 153 346 default stereo signals: same as;
-#X obj 411 348 adc~ 1 2;
-#X obj 109 373 adc~ 5;
-#X text 167 374 a mono signal from channel 5;
-#X obj 109 404 adc~ 1 3 8 6 11 15 19 22 23 24 36;
-#X text 383 405 11 channels of audio;
-#X obj 109 434 adc~ 1 2 3 4 5 6 7 8;
-#X text 280 435 all channels on an 8-channel device;
+#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 [dac~] Multi-channel Audio;
+#X restore 102 542 pd Multi-channel_audio;
+#N canvas 84 165 428 347 sample_rate 0;
+#X text 19 37 [adc~] and [dac~] always operate at the sample rate that
+is specified in Pd's command line. By default \, the sample rate is
+44100 hz. But Pd operates any sample rate supported by standard audio
+hardware. Sample rates cannot be changed at run-time in Pd \, but must
+be stated in the command line when Pd is instantiated. As well \, two
+or more instances of Pd running simoultaneously can each be using different
+sample rates! Having said that \, Pd can easily upsample or downsample
+by using the [block~] object. Here are some example of the common sample
+rates:;
+#X text 19 191 c:/pd/bin/pd.exe -r 11025;
+#X text 19 221 c:/pd/bin/pd.exe -r 22050;
+#X text 19 281 c:/pd/bin/pd.exe -r 88200;
+#X text 19 176 c:/pd/bin/pd.exe -r 8000;
+#X text 19 206 c:/pd/bin/pd.exe -r 16000;
+#X text 19 236 c:/pd/bin/pd.exe -r 32000;
+#X text 19 251 c:/pd/bin/pd.exe -r 44100 CD Quality;
+#X text 19 266 c:/pd/bin/pd.exe -r 48000 DAT Quality;
+#X text 19 311 c:/pd/bin/pd.exe -r 192000 DVD-Audio Quality;
+#X text 19 296 c:/pd/bin/pd.exe -r 96000 DVD-Video/Audio Quality;
+#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 [dac~] Sample Rate;
+#X restore 102 517 pd sample_rate;
+#N canvas 59 444 428 117 defeating_audio_computation 0;
+#X text 19 37 There may be cases when you do not want Pd to send or
+receive audio signal with your soundcard. You can manually disable
+the [dac~] and [adc~] objects separately using the "-nodac" and "-noadc"
+switch \, or disable both using the "-nosound" switch.;
+#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 [dac~] -nodac and -noadc;
+#X restore 102 567 pd defeating_audio_computation;
+#X text 12 23 audio input;
+#X connect 13 0 25 0;
+#X connect 25 0 27 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 1;
diff --git a/doc/pddp/adc~_dac~-help.pd b/doc/pddp/adc~_dac~-help.pd
index 4b8dc717..1ebf71ff 100644
--- a/doc/pddp/adc~_dac~-help.pd
+++ b/doc/pddp/adc~_dac~-help.pd
@@ -1,105 +1,113 @@
-#N canvas 847 22 553 572 12;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#N canvas 129 22 415 237 More_Info 0;
-#N canvas 131 29 532 435 sample_rate 0;
-#X text 12 24 SAMPLE RATE;
-#X text 29 46 [adc~] and [dac~] always operate at the sample rate that
-is specified in Pd's command line. By default \, the sample rate is
-44100 hz. But Pd operates any sample rate supported by standard audio
-hardware. Sample rates cannot be changed at run-time in Pd \, but must
-be stated in the command line when Pd is instantiated. As well \, two
-or more instances of Pd running simoultaneously can each be using different
-sample rates! Having said that \, Pd can easily upsample or downsample
-by using the [block~] object. Here are some example of the common sample
-rates:;
-#X text 85 232 c:/pd/bin/pd.exe -r 11025;
-#X text 85 262 c:/pd/bin/pd.exe -r 22050;
-#X text 86 329 c:/pd/bin/pd.exe -r 88200;
-#X text 85 217 c:/pd/bin/pd.exe -r 8000;
-#X text 85 247 c:/pd/bin/pd.exe -r 16000;
-#X text 86 278 c:/pd/bin/pd.exe -r 32000;
-#X text 86 294 c:/pd/bin/pd.exe -r 44100 CD Quality;
-#X text 86 311 c:/pd/bin/pd.exe -r 48000 DAT Quality;
-#X text 87 366 c:/pd/bin/pd.exe -r 192000 DVD-Audio Quality;
-#X text 86 347 c:/pd/bin/pd.exe -r 96000 DVD-Video/Audio Quality;
-#X restore 40 75 pd sample_rate;
-#N canvas 131 31 564 558 multi-channel_audio 0;
-#X text 16 13 MULTI-CHANNEL AUDIO;
-#X text 32 40 All sound cards are capable of at least two channels
+#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 (adc~/dac~) 3 12
+0 18 -204280 -1 0;
+#N canvas 44 246 494 344 META 0;
+#X text 12 85 TEMPLATE template-help.pd v0.1;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 25 NAME adc~ dac~;
+#X text 12 5 GENRE help;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X restore 501 597 pd META;
+#X obj 0 508 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 98 338 428 239 Related_objects 0;
+#X obj 22 43 dac~;
+#X obj 62 43 switch~;
+#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 [adc~] Related Objects;
+#X text 114 43 [block~];
+#X text 19 66 (Note: having a [block~] and a [switch~] in the same
+window causes an error \, which is why [block~] is shown above as a
+comment.);
+#X text 19 118 Externals;
+#X obj 173 43 throw~;
+#X obj 225 43 catch~;
+#X obj 277 43 send~;
+#X obj 321 43 receive~;
+#X obj 19 138 pddp/helplink pdogg/oggcast~;
+#X obj 19 158 pddp/helplink unauthorized/mp3cast~;
+#X text 18 180 [shoutcast~] (What library is this in?);
+#X restore 102 597 pd Related_objects;
+#X obj 469 3 adc~;
+#X obj 5 597 pddp/pddplink pddp/help.pd -text help;
+#N canvas 44 65 428 471 Multi-channel_audio 0;
+#X text 19 38 All sound cards are capable of at least two channels
of audio. Pd supports these two channels by default and uses your system's
generic audio drivers to communicate with your hardware. However \,
for faster input/output and for more than two channels of audio \,
PD incorporates the use of "PortAudio" which uses ASIO drivers to communicate
with your hardware. So \, to instruct Pd to use more than two channels
of audio \, your command line should read like below:;
-#X text 93 182 c:/pd/bin/pd.exe -pa -inchannels 8 -outchannels 8;
-#X text 32 211 The "-pa" switch means "PortAudio". This switch is new
+#X text 80 145 c:/pd/bin/pd.exe -pa -inchannels 8 -outchannels 8;
+#X text 19 174 The "-pa" switch means "PortAudio". This switch is new
as of Pd version 0.37 TEST 4 and replaces the old "-asio" switch.;
-#X text 32 271 The "-inchannels" and "-outchannels" switches can be
+#X text 19 234 The "-inchannels" and "-outchannels" switches can be
summarized by using "-channels 8" because currently PortAudio requires
that the number of incoming and outgoing channels must be equal. This
may change in the Pd's future...;
-#X text 32 361 To further optimize Pd's usage of your audio hardware
+#X text 19 314 To further optimize Pd's usage of your audio hardware
\, you can explore the following:;
-#X text 42 402 - audiobuf;
-#X text 43 420 - blocksize;
-#X text 42 436 - audioindev;
-#X text 42 454 - audiooutdev;
-#X text 38 480 With the right hardware \, Pd can manage audio input
+#X text 29 355 - audiobuf;
+#X text 30 373 - blocksize;
+#X text 29 389 - audioindev;
+#X text 29 407 - audiooutdev;
+#X text 25 433 With the right hardware \, Pd can manage audio input
and output with lower than 10 milliseconds of latency.;
-#X restore 40 112 pd multi-channel_audio;
-#N canvas 132 30 528 211 defeating_audio_computation 0;
-#X text 21 15 -NODAC and -NOADC;
-#X text 26 37 There may be cases when you do not want Pd to send or
+#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 [dac~] Multi-channel Audio;
+#X restore 102 542 pd Multi-channel_audio;
+#N canvas 84 179 428 341 sample_rate 0;
+#X text 19 37 [adc~] and [dac~] always operate at the sample rate that
+is specified in Pd's command line. By default \, the sample rate is
+44100 hz. But Pd operates any sample rate supported by standard audio
+hardware. Sample rates cannot be changed at run-time in Pd \, but must
+be stated in the command line when Pd is instantiated. As well \, two
+or more instances of Pd running simoultaneously can each be using different
+sample rates! Having said that \, Pd can easily upsample or downsample
+by using the [block~] object. Here are some example of the common sample
+rates:;
+#X text 19 191 c:/pd/bin/pd.exe -r 11025;
+#X text 19 221 c:/pd/bin/pd.exe -r 22050;
+#X text 19 281 c:/pd/bin/pd.exe -r 88200;
+#X text 19 176 c:/pd/bin/pd.exe -r 8000;
+#X text 19 206 c:/pd/bin/pd.exe -r 16000;
+#X text 19 236 c:/pd/bin/pd.exe -r 32000;
+#X text 19 251 c:/pd/bin/pd.exe -r 44100 CD Quality;
+#X text 19 266 c:/pd/bin/pd.exe -r 48000 DAT Quality;
+#X text 19 311 c:/pd/bin/pd.exe -r 192000 DVD-Audio Quality;
+#X text 19 296 c:/pd/bin/pd.exe -r 96000 DVD-Video/Audio Quality;
+#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 [dac~] Sample Rate;
+#X restore 102 517 pd sample_rate;
+#N canvas 59 444 428 117 defeating_audio_computation 0;
+#X text 19 37 There may be cases when you do not want Pd to send or
receive audio signal with your soundcard. You can manually disable
the [dac~] and [adc~] objects separately using the "-nodac" and "-noadc"
switch \, or disable both using the "-nosound" switch.;
-#X restore 41 152 pd defeating_audio_computation;
-#X restore 104 488 pd More_Info;
-#N canvas 85 22 399 248 Related_Objects 0;
-#X text 25 8 Native Pd Objects;
-#X text 25 118 Externals and other object libraries;
-#X text 35 143 [shoutcast~];
-#X text 35 166 [oggcast~];
-#X obj 55 35 send~;
-#X obj 109 35 receive~;
-#X obj 58 66 throw~;
-#X obj 121 66 catch~;
-#X obj 185 66 block~;
-#X obj 249 66 switch~;
-#X text 35 196 [mp3cast~];
-#X restore 104 462 pd Related_Objects;
-#X text 14 84 ARGUMENTS:;
-#X text 22 219 EXAMPLES:;
-#X text 21 463 SEE ALSO:;
-#X obj 12 19 adc~;
-#X obj 61 19 dac~;
-#X text 108 18 - AUDIO INPUT/OUTPUT;
-#X text 30 47 PURPOSE:;
-#X text 104 47 [adc~] and [dac~] provide real-time audio input and
-output for Pd \, respectively \, whether analog or digital.;
-#X text 102 515 - Dave Sabine \, May 5 \, 2003;
-#X text 104 83 Both of these objects accept arguments (numbers) which
-indicate which audio channels are to be used by Pd. By default \, these
-objects are stereo and communicate on audio channels 1 and 2 (left
-and right respectively) but by using arguments \, other channel numbers
-can be specified. These objects can communicate with hundreds of audio
-channels \, but you are likely limited by your audio hardware to 2
-\, 4 \, 6 \, 8 \, 12 \, 16 \, 32 \, 64 \, etc.;
-#X obj 114 222 adc~;
-#X text 162 222 incoming stereo signals;
-#X obj 114 251 dac~;
-#X text 162 252 outgoing stereo signals;
-#X obj 114 280 adc~ 1 2 3 4 5 6 7 8;
-#X text 290 281 eight incoming audio signals;
-#X text 210 314 three outgoing signals on channels 1 \, 5 \, and 6
-;
-#X obj 115 314 dac~ 1 5 6;
-#X text 107 345 The actual number of Pd inputs and outputs are set
-on Pd's command line. You can open patches that want to use more channels
-\, but channel numbers that out of range will be dropped by [dac~]
-or appears as zero by [adc~].;
-#X text 14 344 IMPORTANT:;
-#X text 108 419 Also \, these objects do not operate unless Pd is instructed
-to "Compute Audio".;
+#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 [dac~] -nodac and -noadc;
+#X restore 102 567 pd defeating_audio_computation;
+#X obj 509 3 adc~;
+#X obj 436 20 pddp/pddplink http://wiki.puredata.info/en/adc~_dac~
+-text pdpedia: adc~_dac~;
+#X text 12 23 audio input/output;
+#X obj 101 107 pddp/pddplink adc~-help.pd;
+#X text 98 56 [adc~] and [dac~] provide real-time audio input and output
+for Pd \, respectively \, whether analog or digital. Click below for
+the individual help patches:;
+#X obj 101 127 pddp/pddplink dac~-help.pd;
diff --git a/doc/pddp/all_about.pd b/doc/pddp/all_about.pd
index e3eb77e6..77cfb8ae 100644
--- a/doc/pddp/all_about.pd
+++ b/doc/pddp/all_about.pd
@@ -6,15 +6,13 @@
#X obj 1 352 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
14 -233017 -33289 0;
#N canvas 44 246 494 344 META 0;
-#X text 12 85 PLATFORM windows macosx gnulinux;
-#X text 12 125 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
+#X text 12 85 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
Wilkes revised the patch to conform to the PDDP template for Pd version
0.42.;
-#X text 12 105 LIBRARY PDDP;
+#X text 12 65 LIBRARY PDDP;
#X text 12 5 GENRE all_about_pd;
#X text 12 25 KEYWORDS needs_work;
-#X text 12 45 LICENSE GPL v2;
-#X text 12 65 DESCRIPTION beginner's info for Pure Data;
+#X text 12 45 DESCRIPTION general info for Pure Data;
#X restore 392 354 pd META;
#N canvas 10 196 428 105 Related_objects 0;
#X text 31 37 Hm...what to put here?;
@@ -38,8 +36,7 @@ take a few minutes to read the following patches:;
About Help Patches;
#X text 20 197 If you're coming from Max/MSP/Jitter \, have a look
at the cyclone library for compatible objects:;
-#X text 5 311 Every help patch for the basic Pd objects has a link
-to a general help file in the bottom left-hand corner.;
-#X text 20 257 There are many more "All About..." patches. You can
-find links to them in the tutorials and in the "More Info" section
-of a relevant object's help patch.;
+#X text 20 257 There are many more "All About..." patches here:;
+#X obj 20 277 pddp/pddplink table_of_contents.pd;
+#X text 5 311 All PDDP help patches have a link to a general help file
+in the bottom left-hand corner.;
diff --git a/doc/pddp/append-help.pd b/doc/pddp/append-help.pd
new file mode 100644
index 00000000..763dfea8
--- /dev/null
+++ b/doc/pddp/append-help.pd
@@ -0,0 +1,119 @@
+#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 append 3 12 0 18
+-204280 -1 0;
+#X obj 0 226 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 247 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Updated for Pd version 0.4. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure;
+#X text 12 85 DESCRIPTION add item to a list;
+#X text 12 165 INLET_R pointer;
+#X text 12 185 OUTLET_0 pointer;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_N float;
+#X text 12 25 NAME append;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 392 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 436 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 527 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 319 cnv 17 3 35 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 235 cnv 17 3 78 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 319 float;
+#N canvas 62 491 428 101 Related_objects 0;
+#X obj 14 38 get;
+#X obj 46 38 set;
+#X obj 136 38 getsize;
+#X obj 193 38 setsize;
+#X obj 121 63 element;
+#X obj 13 64 sublist;
+#X obj 79 38 pointer;
+#X obj 69 63 struct;
+#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 [append] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 484 3 append;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/append -text
+pdpedia: append;
+#N canvas 114 104 428 109 help-append-template1 0;
+#X obj 22 69 filledpolygon z z 0 0 0 20 0 20 30 0 30;
+#X obj 22 42 struct help-append-template1 float x float y float z;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [append] Template for "help-append-template1";
+#X restore 372 196 pd help-append-template1;
+#N canvas 98 282 428 207 help-append-data 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [append] Data Window;
+#X restore 372 174 pd help-append-data;
+#X obj 261 104 pointer;
+#X msg 261 80 traverse pd-help-append-data \, bang;
+#X obj 60 152 append help-append-template1 x y z;
+#X floatatom 60 95 5 20 400 0 - - -;
+#X obj 60 115 t f f;
+#X msg 372 138 \; pd-help-append-data clear;
+#X text 98 234 float;
+#X text 98 264 list;
+#X msg 18 95 5 6 7;
+#X obj 78 401 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 401 pointer;
+#X obj 78 360 cnv 17 3 27 empty \$0-pddp.cnv.let.r r 5 9 0 16 -228856
+-162280 0;
+#X text 98 360 pointer;
+#X text 98 531 You may append objects of different templates using
+different [append] objects.;
+#X text 11 23 add item to a list;
+#X text 168 360 - the final inlet takes a pointer to a scalar (or to
+the head of a list).;
+#X text 168 234 - a float to the left inlet initializes the field(s)
+of a scalar and appends the scalar to a glist.;
+#X text 168 264 - a list to the first inlet is distributed among the
+inlets of [append]. In the example above \, you can use the message
+box to assign the values "5" \, "6" \, and "7" to fields "x" \, "y"
+\, and "z" \, respectively.;
+#X text 168 319 - an additional inlet is created for each field specified
+by the creation arguments. A float sent to one of these inlets will
+be stored for later use.;
+#X text 168 401 - after [append] receives a value at its left inlet
+\, it outputs a pointer to the new scalar that has been created.;
+#X text 15 74 2) ...then here;
+#X text 224 174 3) result is in here ->;
+#X text 259 56 1) go to (and output) "head" of the list;
+#X text 168 482 - all subsequent arguments are names of fields to initialize.
+At least one field must be specified in order to append a new scalar.
+;
+#X text 80 455 1) symbol atom;
+#X text 80 482 n) symbol atom;
+#X text 168 455 - a [struct] name that specifies the template of a
+new scalar to append.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 572 pddp/pddplink ../4.data.structures/04.append.pd -text
+doc/4.data.structures/04.append.pd;
+#X obj 98 557 pddp/pddplink all_about_z_order.pd;
+#X obj 325 557 pddp/pddplink scalar-help.pd;
+#X connect 15 0 17 3;
+#X connect 16 0 15 0;
+#X connect 18 0 19 0;
+#X connect 19 0 17 0;
+#X connect 19 1 17 1;
+#X connect 19 1 17 2;
+#X connect 23 0 17 0;
diff --git a/doc/pddp/array-help.pd b/doc/pddp/array-help.pd
new file mode 100644
index 00000000..aeb9d3fb
--- /dev/null
+++ b/doc/pddp/array-help.pd
@@ -0,0 +1,150 @@
+#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 (array) 3 12 0 18
+-204280 -1 0;
+#X obj 0 235 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 GENRE help;
+#X text 12 45 KEYWORDS signal GUI storage array;
+#X text 12 85 DESCRIPTION graphical array from the "Put" menu;
+#X text 12 205 RELEASE_VERSION;
+#X text 12 185 RELEASE_DATE 2009;
+#X text 12 25 NAME array;
+#X restore 500 597 pd META;
+#X obj 0 261 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 288 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 456 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 (array) Related Objects;
+#X obj 21 43 table;
+#X restore 102 598 pd Related_objects;
+#X text 80 375 1) symbol atom;
+#X text 98 238 (none);
+#X text 98 264 (none);
+#X text 80 390 2) float;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array garray 100 float 3;
+#A 0 -0.425444 -0.481432 -0.535517 -0.587484 -0.637133 -0.684269 -0.728706
+-0.770268 -0.808792 -0.844127 -0.876131 -0.904665 -0.92963 -0.950928
+-0.968475 -0.982202 -0.992055 -0.997994 -0.999998 -0.998043 -0.992148
+-0.982339 -0.968655 -0.95115 -0.929894 -0.90497 -0.876476 -0.844518
+-0.80922 -0.770731 -0.729202 -0.684796 -0.63769 -0.588068 -0.536126
+-0.482068 -0.4261 -0.368453 -0.309353 -0.249032 -0.18773 -0.125687
+-0.0631471 -0.000357709 0.0624333 0.124977 0.187027 0.248339 0.308672
+0.367787 0.425452 0.481439 0.535524 0.587491 0.63714 0.684275 0.728712
+0.770274 0.808797 0.844132 0.876135 0.904668 0.929633 0.95093 0.968477
+0.982203 0.992056 0.997995 0.999998 0.998043 0.992148 0.98234 0.968656
+0.951152 0.929896 0.904973 0.876479 0.844522 0.809224 0.770735 0.729207
+0.684802 0.637696 0.588075 0.536134 0.482076 0.426108 0.368461 0.309361
+0.249041 0.187738 0.125695 0.0631558 0.000366437 -0.0624246 -0.124968
+-0.187019 -0.248331 -0.308664 -0.367779;
+#X coords 0 1 99 -1 40 8 1;
+#X restore 485 13 graph;
+#X obj 331 66 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 451 20 pddp/pddplink http://wiki.puredata.info/en/garray -text
+pdpedia: garray;
+#X floatatom 382 66 5 0 0 0 - - -;
+#X floatatom 355 136 5 0 0 0 - - -;
+#X obj 331 89 metro 150;
+#X obj 355 158 osc~ 1000;
+#X text 93 557 For help on using graphs \, see:;
+#X obj 93 572 pddp/pddplink graph-help.pd -text graph-help;
+#X obj 93 504 pddp/pddplink all_about_arrays.pd -text all_about_arrays
+;
+#X text 167 375 - the name of the array. (Must be unique.);
+#X text 167 390 - size of the array. (Default is 100.);
+#X text 167 405 - (checkbox) save array contents with patch.;
+#X text 80 405 3) float;
+#X text 80 420 4) float;
+#X text 167 435 - (checkbox) delete the array (but not the graph).
+;
+#X text 80 435 5) float;
+#X text 167 420 - (radio) visual display style of elements.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#N canvas 70 34 428 450 Graphs_and_Garrays 0;
+#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 (subpatch) 0;
+#X array \$0-graphs-vs-garrays 100 float 3;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0666666
+-0.0733333 -0.0866666 -0.106667 -0.106667 -0.106667 -0.106667 -0.0999999
+-0.0666666 -0.00666666 -0.00666666 -0.00666666 -0.00999999 -0.0133333
+-0.02 -0.0266666 -0.05 -0.0599999 -0.0733333 -0.0866666 -0.0933332
+-0.0999999 -0.106667 -0.126667 -0.133333 -0.153333 -0.156667 -0.16
+-0.16 -0.16 -0.16 -0.16 -0.16 -0.16 -0.16 -0.146667 -0.133333 -0.106667
+-0.0999999 -0.0833333 -0.0666666 -0.04 -0.0333333 -0.0266666 -0.0133333
+-0.0133333 -0.0133333 -0.0133333 -0.0133333 -0.0133333 -0.0133333 -0.0133333
+-0.0133333 -0.0133333 -0.0133333 -0.0133333 -0.0133333 -0.0133333 -0.0133333
+-0.0133333 -0.02 -0.0333333 -0.0466666 -0.0466666 0 0 0 0 0 0 0 0;
+#X coords 0 1 99 -1 200 140 1 0 0;
+#X restore 23 298 graph;
+#X text 8 2 [pd] Graphs and Graphical Arrays;
+#X text 20 37 So which part is the graph \, and which is the array?
+Below is a graphical array created from the "Put" menu. The graph that
+contains it is just a subcanvas that is partly visible in this subpatch
+(i.e. \, a true "graph on parent"). Even though you can click and drag
+elements of the graphical array \, you're interacting with it through
+the graph itself. Thus \, if you right-click anywhere on the graph
+below and choose "Help" \, you'll be taken to the help patch for graphs
+\, not arrays.;
+#X text 20 157 Now right-click on the graph and choose "Open". Once
+inside the graph you can interact directly with the graphical array
+\, which merely consists of the small black lines that represent each
+element of the array (yep \, that's it). You can click-drag them as
+you could from the parent window \, but now if you right-click on an
+element and choose "Help" \, you'll be taken to the help patch for
+graphical arrays.;
+#X text 20 253 It's hard work finding help on this!;
+#X restore 97 465 pd Graphs_and_Garrays;
+#X text 11 23 graphical array from the "Put" menu;
+#X text 80 307 You can't access "Put" menu array arguments directly
+\, but you can change the properties by right-clicking on the containing
+graph and choosing "Properties". (You can also send messages to the
+array: see "more_info" below.);
+#X text 80 360 "Put" Menu Array Properties;
+#X text 94 486 For more help on arrays in Pd \, see:;
+#X obj 93 522 pddp/pddplink ../2.control.examples/15.array.pd;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 93 540 pddp/pddplink ../2.control.examples/16.more.arrays.pd
+;
+#X text 96 213 A "Put" menu array is created inside a graph.;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 100 float 3;
+#A 0 -0.684486 -0.621979 -0.555232 -0.484682 -0.410829 -0.334176 -0.255242
+-0.174561 -0.0926915 -0.01019 0.0723822 0.154459 0.235482 0.314901
+0.392167 0.466754 0.538161 0.605901 0.669491 0.728515 0.782575 0.8313
+0.87433 0.911401 0.942262 0.96669 0.984505 0.995611 0.999933 0.997419
+0.988092 0.972032 0.949348 0.920163 0.884703 0.843214 0.795976 0.743285
+0.68553 0.623103 0.556422 0.485934 0.412136 0.335528 0.256626 0.175972
+0.0941189 0.0116234 -0.070952 -0.153042 -0.234089 -0.313542 -0.390846
+-0.465486 -0.536954 -0.604758 -0.668423 -0.727533 -0.781686 -0.830496
+-0.873631 -0.910812 -0.941787 -0.966316 -0.984251 -0.995479 -0.999924
+-0.997515 -0.988309 -0.972368 -0.949791 -0.920714 -0.885364 -0.84398
+-0.796828 -0.74423 -0.686562 -0.624215 -0.557595 -0.48717 -0.413427
+-0.336864 -0.257993 -0.177366 -0.095529 -0.0130394 0.0695391 0.151643
+0.232713 0.312195 0.389541 0.464233 0.535762 0.603626 0.667368 0.726563
+0.780808 0.829702 0.87294 0.91023;
+#X coords 0 1 99 -1 200 140 1;
+#X restore 105 62 graph;
+#X obj 331 185 tabwrite~ \$0-array;
+#X connect 13 0 17 0;
+#X connect 15 0 17 1;
+#X connect 16 0 18 0;
+#X connect 17 0 41 0;
+#X connect 18 0 41 0;
diff --git a/doc/pddp/atan-help.pd b/doc/pddp/atan-help.pd
new file mode 100644
index 00000000..60e49c20
--- /dev/null
+++ b/doc/pddp/atan-help.pd
@@ -0,0 +1,72 @@
+#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 atan 3 12 0 18 -204280
+-1 0;
+#X obj 0 436 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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. Revised by Jonathan Wilkes to conform to the PDDP template for
+Pd version 0.42.;
+#X text 12 45 KEYWORDS control trigonometry;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION arctangent function;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 OUTLET_0 float;
+#X text 12 25 NAME atan;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 501 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 537 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 text 98 542 (none);
+#N canvas 57 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 109 43 atan2;
+#X obj 149 43 exp;
+#X obj 177 43 log;
+#X obj 204 43 abs;
+#X obj 232 43 sqrt;
+#X obj 267 43 pow;
+#X obj 57 76 cos~;
+#X obj 89 76 osc~;
+#X obj 23 76 expr;
+#X obj 23 43 sin;
+#X obj 49 43 cos;
+#X obj 76 43 tan;
+#X text 8 2 [atan] Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 78 445 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 444 float;
+#X text 98 464 list;
+#X text 98 509 float;
+#X obj 78 510 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 493 3 atan;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/atan -text
+pdpedia: atan;
+#X floatatom 247 209 0 0 0 0 - - -;
+#X floatatom 247 164 0 0 0 0 - - -;
+#X obj 247 186 atan;
+#X text 96 122 The [atan] object produces the arctangent of a number
+as a numeric value between -Pi/2 and Pi/2.;
+#X text 11 23 arctangent function;
+#X text 168 464 - a list will be truncated \, and the first element
+will be used as input.;
+#X obj 3 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 18 0;
+#X connect 18 0 16 0;
diff --git a/doc/pddp/atan2-help.pd b/doc/pddp/atan2-help.pd
new file mode 100644
index 00000000..a270824c
--- /dev/null
+++ b/doc/pddp/atan2-help.pd
@@ -0,0 +1,126 @@
+#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 atan2 3 12 0 18
+-204280 -1 0;
+#X obj 0 405 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 243 494 362 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control trigonometry;
+#X text 12 85 DESCRIPTION arctangent of two variables;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 25 NAME atan2;
+#X text 12 245 RELEASE_DATE 2009;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 492 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 528 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 557 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 533 (none);
+#N canvas 54 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 149 43 exp;
+#X obj 177 43 log;
+#X obj 204 43 abs;
+#X obj 232 43 sqrt;
+#X obj 267 43 pow;
+#X obj 57 76 cos~;
+#X obj 89 76 osc~;
+#X obj 23 76 expr;
+#X obj 23 43 sin;
+#X obj 49 43 cos;
+#X obj 76 43 tan;
+#X obj 109 43 atan;
+#X text 8 2 [atan2] Related Objects;
+#X restore 101 598 pd Related_objects;
+#X obj 78 414 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 413 float;
+#X text 98 433 list;
+#X text 98 500 float;
+#X obj 78 501 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 484 3 atan2;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/atan2 -text
+pdpedia: atan2;
+#X text 92 97 The [atan2] object produces the arctangent of the quotient
+of its two arguments. The number produced is a value between Pi and
+-Pi and represents the counterclockwise angle in radians (not degrees)
+between the positive X axis and the point (x \, y). Note that the X
+coordinate is passed to the right inlet and the Y coordinate is passed
+to the left inlet.;
+#X text 11 23 arctangent of two variables;
+#N canvas 92 356 428 204 atan2_vs_atan 0;
+#X floatatom 321 97 0 0 0 0 - - -;
+#X floatatom 112 66 0 0 0 0 - - -;
+#X floatatom 35 153 0 0 0 0 - - -;
+#X floatatom 35 65 0 0 0 0 - - -;
+#X obj 35 133 atan2;
+#X text 20 65 Y;
+#X text 101 65 X;
+#X floatatom 321 170 0 0 0 0 - - -;
+#X obj 321 130 /;
+#X obj 321 150 atan;
+#X text 147 62 This example on the;
+#X text 146 78 right is an alternative;
+#X text 146 96 of finding the arctangent;
+#X text 146 113 of two coordinates \, but;
+#X text 147 146 than [atan2].;
+#X text 344 131 Y;
+#X text 308 131 X;
+#X floatatom 352 97 0 0 0 0 - - -;
+#X text 147 130 it runs slightly slower;
+#X obj 352 43 r X;
+#X obj 321 43 r Y;
+#X obj 50 97 s Y;
+#X obj 112 97 s X;
+#X obj 321 70 swap;
+#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 [atan2] Build Your Own [atan2] with [atan];
+#X connect 0 0 8 0;
+#X connect 1 0 4 1;
+#X connect 1 0 22 0;
+#X connect 3 0 4 0;
+#X connect 3 0 21 0;
+#X connect 4 0 2 0;
+#X connect 8 0 9 0;
+#X connect 9 0 7 0;
+#X connect 17 0 8 1;
+#X connect 19 0 23 1;
+#X connect 20 0 23 0;
+#X connect 23 0 0 0;
+#X connect 23 1 17 0;
+#X restore 101 566 pd atan2_vs_atan;
+#X floatatom 224 217 5 0 0 0 - - -;
+#X floatatom 261 217 5 0 0 0 - - -;
+#X obj 224 241 atan2;
+#X floatatom 224 268 5 0 0 0 - - -;
+#X obj 78 464 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 463 float;
+#X text 168 413 - Y coordinate;
+#X text 168 463 - X coordinate;
+#X text 168 433 - a list will be distributed between the two inlets
+of [atan2].;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 19 0 21 0;
+#X connect 20 0 21 1;
+#X connect 21 0 22 0;
diff --git a/doc/pddp/bag-help.pd b/doc/pddp/bag-help.pd
new file mode 100644
index 00000000..3cee2775
--- /dev/null
+++ b/doc/pddp/bag-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 bag 3 12 0 18 -204280
+-1 0;
+#X obj 0 288 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 242 494 367 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 85 DESCRIPTION collection of numbers;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 125 INLET_0 float list flush clear;
+#X text 12 25 NAME bag;
+#X text 12 45 KEYWORDS control storage list_op;
+#X text 12 245 RELEASE_DATE 2009;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 495 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 538 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 text 98 542 (none);
+#N canvas 54 478 428 109 Related_objects 0;
+#X obj 62 43 makenote;
+#X obj 22 43 poly;
+#X obj 123 43 list;
+#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 [bag] Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 79 297 cnv 17 3 130 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 296 float;
+#X text 98 353 list;
+#X text 98 503 float;
+#X obj 79 504 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 79 440 cnv 17 3 45 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 439 float;
+#X text 98 383 flush;
+#X text 98 413 clear;
+#X text 168 383 - output all values one by one \, in the order they
+were received \, and clear the collection.;
+#X text 168 503 - upon sending the "flush" message to the left inlet
+\, [bag] will output each value in the order it was received.;
+#X text 99 570 You can use [bag] to mimic a sustain pedal \, for example.
+;
+#X msg 162 88 60 64;
+#X msg 213 88 60 0;
+#X msg 257 88 62 64;
+#X msg 304 88 62 0;
+#X obj 162 215 print;
+#X text 207 216 Output is in the printout window.;
+#X msg 304 134 clear;
+#X msg 303 111 flush;
+#X obj 162 185 bag;
+#X text 168 353 - a (value \, flag) pair is distributed to the two
+inlets. Lists with more than two elements will be truncated.;
+#X text 11 23 collection of numbers;
+#X obj 493 3 bag;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/bag -text
+pdpedia: bag;
+#X text 168 413 - clear the collection.;
+#X text 167 439 - a float to the right inlet sets the "flag": if zero
+\, values to the left inlet will not be added to the collection. If
+nonzero \, values to the right inlet will be added to the collection.
+;
+#X text 168 296 - a float to the left inlet will be added to the collection
+if the last value the right inlet received was nonzero. If the last
+value the right inlet received was zero \, the float sent to the right
+inlet will be removed from the collection.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 21 0 29 0;
+#X connect 22 0 29 0;
+#X connect 23 0 29 0;
+#X connect 24 0 29 0;
+#X connect 27 0 29 0;
+#X connect 28 0 29 0;
+#X connect 29 0 25 0;
diff --git a/doc/pddp/bang-help.pd b/doc/pddp/bang-help.pd
index 9de0c5c0..4a450974 100644
--- a/doc/pddp/bang-help.pd
+++ b/doc/pddp/bang-help.pd
@@ -1,140 +1,138 @@
-#N canvas 12 2 916 656 10;
-#X obj 502 191 print;
-#X obj 22 14 bang;
-#X msg 514 133 walk the cat;
-#X msg 501 112 45;
-#X obj 502 166 bang;
-#X text 110 13 - SEND "BANG" MESSAGE;
-#X obj 76 14 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 22 38 The bang object is one of the basic building blocks of
-PD and are normally used to activate events. The bang object can be
-created in two different ways.;
-#X obj 45 83 bang;
-#X text 22 82 1;
-#X text 21 141 2;
-#X obj 45 142 bng 15 250 50 0 empty empty empty 18 7 0 8 -262144 -1
--1;
-#X text 45 107 This version uses minimal CPU but serves essentially
-the same purpose as the GUI version.;
-#X text 43 286 1 Size;
-#X obj 122 289 bng 8 250 50 0 empty empty 8 10 4 0 8 -262144 -1 -1
-;
-#X obj 147 282 bng 15 250 50 0 empty empty 15 17 9 0 8 -262144 -1 -1
-;
-#X obj 182 272 bng 25 250 50 0 empty empty 25 27 20 0 8 -262144 -1
--1;
-#X text 69 304 Default size is 15 pixels. The minimum size is 8 and
-it does not have a maximum size.;
-#X text 41 465 3 Hold;
-#X obj 111 465 bng 15 50 10 0 empty empty 50 17 8 0 8 -262144 -1 -1
-;
-#X obj 146 465 bng 15 750 50 0 empty empty 750 17 8 0 8 -262144 -1
--1;
-#X text 41 538 4 Receive Symbol/Send Symbol;
-#X text 67 553 This object can act as its own send or receive object.
-;
-#X obj 69 575 bng 15 250 50 0 link_this_bang empty This_one_sends_a_bang
-17 8 128 8 -262144 -1 -1;
-#X obj 69 596 bng 15 250 50 0 empty link_this_bang This_one_receives_it.
-17 8 64 8 -262144 -1 -1;
-#X text 280 567 Here is the alternative method.;
-#X text 44 644 5 GUI Options;
-#X obj 506 368 bng 8 250 50 0 empty empty empty 0 -6 0 12 -262144 -1
--1;
-#X msg 679 359 label Name_that_bang;
-#X msg 692 383 label Rename_that_bang;
-#X msg 719 405 size 8;
-#X text 67 666 The other properties are 'name' \, 'x/y offset' \, 'font
-size' \, and colours (for the background \, front \, and labels [name])
-;
-#X obj 471 19 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 471 659 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 495 55 WHAT CAN IT DO?;
-#X text 495 67 The bang object outputs "bang" when it receives something
-in its inlet or its 'internal' receive symbol (GUI version only).;
-#X text 547 190 The output window will print "bang" to demonstrate.
-;
-#X obj 647 162 print;
-#X msg 647 116 walk the cat;
-#X obj 647 141 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 502 215 It is important to note that "bang" is not boolean.
-It's neither a zero or a one \; it's not true or false \; it's just
-"bang". For a boolean object \, you should check out the toggle.;
-#X obj 502 487 loadbang;
-#X obj 643 487 tgl 15 0 empty empty Toggle 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 557 487 trigger;
-#X obj 606 487 bang~;
-#X text 502 290 OTHER HELPFUL INFO;
-#X msg 735 427 size 25;
-#X text 502 312 The label and size properties of the bng object (from
-IEM library) can be updated dynamically by sending messages to its
-inlet.;
-#X text 512 461 RELATED OBJECTS;
-#X text 44 165 This version uses a little more CPU than its cousin
-because it lights-up when it receives a message or is clicked on and
-can be coloured \, resized \, or renamed. It is sometimes 'friendlier'
-as well because it can act as its own send and receive object (see
-properties...). This object can be put in a Pd patch either by keyboard
-shortcut: ALT+B or by creating and object (CTRL+1) called "bng".;
-#X text 66 482 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 261 621 s linked_bngs;
-#X obj 370 583 r linked_bngs;
-#X text 40 334 2 Interrupt (milliseconds);
-#X text 66 348 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 42 421 bng 15 1000 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 65 405 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 261 603 bang;
-#X obj 370 602 bang;
-#X msg 261 584 send a message;
-#X obj 370 620 print;
-#X text 69 143 a.k.a. "bng";
-#X text 43 264 PROPERTIES OF BNG;
-#X text 497 548 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.;
-#N canvas 4 24 432 275 related_objects_from_other_libraries 0;
-#X obj 8 10 pddp/pddplink ../../extra/mjlib/metroplus-help.pd -text mjlib/metroplus;
-#X obj 8 30 pddp/pddplink ../../extra/unauthorized/exciter-help.pd -text unauthorized/exciter;
-#X obj 8 50 pddp/pddplink ../../extra/ggee/toddle-help.pd -text ggee/toddle;
-#X obj 8 70 pddp/pddplink ../../extra/iemlib/init-help.pd -text iemlib/init;
-#X obj 198 10 pddp/pddplink ../../extra/cyclone/counter-help.pd -text cyclone/counter;
-#X obj 198 30 pddp/pddplink ../../extra/markex/oneshot-help.pd -text markex/oneshot;
-#X obj 198 50 pddp/pddplink ../../extra/unauthorized/countund-help.pd -text unauthorized/countund;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X restore 501 513 pd related_objects_from_other_libraries;
-#X connect 2 0 4 0;
-#X connect 3 0 4 0;
-#X connect 4 0 0 0;
-#X connect 28 0 27 0;
-#X connect 29 0 27 0;
-#X connect 30 0 27 0;
-#X connect 32 0 33 0;
-#X connect 38 0 39 0;
-#X connect 39 0 37 0;
-#X connect 46 0 27 0;
-#X connect 52 0 58 0;
-#X connect 57 0 51 0;
-#X connect 58 0 60 0;
-#X connect 59 0 57 0;
+#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 bang 3 12 0 18 -204280
+-1 0;
+#X obj 0 329 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 244 494 366 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS 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. Revised by Jonathan Wilkes to conform to the PDDP template for
+Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 105 DESCRIPTION output a "bang" message whatever the input
+;
+#X text 12 145 INLET_0 anything;
+#X text 12 165 OUTLET_0 bang;
+#X text 12 45 ALIAS b;
+#X text 12 25 NAME bang;
+#X text 12 65 KEYWORDS control bang_op;
+#X text 12 245 RELEASE_DATE 2009;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 373 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 409 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 437 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 338 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 413 (none);
+#N canvas 40 482 428 108 Related_objects 0;
+#X obj 21 42 trigger;
+#X obj 191 43 loadbang;
+#X msg 91 43;
+#X obj 262 43 until;
+#X obj 144 43 bang;
+#X obj 312 43 metro;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [bang] Related Objects;
+#X restore 101 598 pd Related_objects;
+#X text 98 381 bang;
+#X obj 78 381 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/bang -text
+pdpedia: bang;
+#X obj 469 3 bang;
+#X obj 139 224 print;
+#X msg 152 171 walk the cat;
+#X msg 139 145 45;
+#X obj 139 199 bang;
+#X obj 288 199 print;
+#X msg 288 147 walk the cat;
+#X obj 288 175 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 310 173 <- gui "bng" object;
+#X text 98 337 anything;
+#N canvas 57 48 428 509 More_bang_objects 0;
+#X obj 23 42 bang;
+#X obj 66 42 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 43 116 bang;
+#X text 20 115 1;
+#X text 19 172 2;
+#X obj 43 173 bng 15 250 50 0 empty empty empty 18 7 0 8 -262144 -1
+-1;
+#X text 178 42 - sending "bang" messages;
+#X obj 140 42 t b;
+#X msg 92 42 bang;
+#X text 19 288 3;
+#X msg 45 289 bang;
+#X msg 98 342 bang \, bang;
+#X obj 98 368 f;
+#X obj 131 368 + 1;
+#X floatatom 98 393 5 0 0 0 - - -;
+#X msg 46 342 bang;
+#X text 19 418 4;
+#X obj 43 419 trigger bang;
+#X text 151 419 Abbrevation:;
+#X obj 253 419 t b;
+#X obj 271 471 b;
+#X text 43 138 This version uses minimal CPU but serves essentially
+the same purpose as the GUI version below.;
+#X text 42 309 The word "bang" in a message box (CTRL+2) makes a clickable
+bang object. Use commas to send multiple messages:;
+#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 [bang] Common Objects for Sending bang Messages;
+#X text 20 65 The [bang] object is one of the basic building blocks
+of PD and is normally used to activate events. The four basic ways
+to send a "bang" message are:;
+#X text 42 441 When given a single argument of "bang" \, the trigger
+object is essentially the same as #1 above \, so in this case it's
+preferable (and less typing) to use:;
+#X text 67 174 a.k.a. [bng];
+#X text 42 191 This version uses a little more CPU than its cousin
+because it lights up when it receives a message or is clicked on and
+can be coloured \, resized \, or renamed. It is sometimes 'friendlier'
+as well because it can act as its own send and receive object (see
+properties...). This object can be put in a Pd patch either by keyboard
+shortcut: ALT+SHIFT+B or by creating an object (CTRL+1) and naming
+it "bng".;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 12 1;
+#X connect 15 0 12 0;
+#X restore 100 473 pd More_bang_objects;
+#X text 98 441 Many objects in Pd output a "bang" message. Click the
+subpatch below to read about the most common ones:;
+#X obj 100 569 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 98 498 It is important to note that "bang" is not boolean.
+It's neither a zero or a one \; it's not true or false \; it's just
+"bang". For a boolean object \, you should check out [toggle]:;
+#X text 11 23 output a "bang" message whatever the input;
+#X text 122 567 <- Right click and choose "Help" for [toggle] helpfile.
+;
+#X text 168 381 - the [bang] object always outputs a bang message.
+;
+#X text 168 337 - [bang] takes any message supplied to its inlet and
+outputs a bang message in response.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 521 3 b;
+#X text 501 3 or;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
+#X connect 17 0 14 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
diff --git a/doc/pddp/bang~-help.pd b/doc/pddp/bang~-help.pd
new file mode 100644
index 00000000..b22842b2
--- /dev/null
+++ b/doc/pddp/bang~-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 bang~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 445 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 43 242 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Revised
+by Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION output a "bang" message after each DSP cycle
+;
+#X text 12 125 INLET_0;
+#X text 12 145 OUTLET_0 bang;
+#X text 12 26 NAME bang~;
+#X text 12 45 KEYWORDS signal conversion bang_op;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 482 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 537 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 454 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 541 (none);
+#N canvas 31 477 428 114 Related_objects 0;
+#X obj 15 34 print~;
+#X obj 72 34 bang;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [bang~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X text 98 491 bang;
+#X obj 78 491 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 483 3 bang~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/bang~ -text
+pdpedia: bang~;
+#X obj 116 213 bang~;
+#X obj 116 281 print;
+#X text 228 169 click to test;
+#X obj 116 249 spigot;
+#X msg 190 253 dsp \$1;
+#X obj 190 280 s pd;
+#X msg 190 171 bang;
+#X obj 190 219 1;
+#X obj 226 219 0;
+#X obj 226 195 delay 10;
+#X obj 340 170 loadbang;
+#X msg 340 196 dsp 0;
+#X obj 340 221 s pd;
+#X text 11 23 output a "bang" message after each DSP cycle;
+#X text 168 453 - the inlet of [bang~] is not used.;
+#X text 168 491 - [bang~] outputs a bang after each DSP cycle (at the
+same logical time as the DSP cycle). This is primarily useful for sampling
+the outputs of analysis algorithms.;
+#X text 98 453 (inactive);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 17 0;
+#X connect 17 0 15 0;
+#X connect 18 0 19 0;
+#X connect 20 0 21 0;
+#X connect 20 0 23 0;
+#X connect 21 0 17 1;
+#X connect 21 0 18 0;
+#X connect 22 0 17 1;
+#X connect 22 0 18 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
diff --git a/doc/pddp/bendin-help.pd b/doc/pddp/bendin-help.pd
index 5afd60bf..f7f65a95 100644
--- a/doc/pddp/bendin-help.pd
+++ b/doc/pddp/bendin-help.pd
@@ -1,66 +1,103 @@
-#N canvas 244 81 496 558 10;
-#X text 118 123 outlets:;
-#X floatatom 16 149 5 0 0 0 - - -;
-#X floatatom 59 149 5 0 0 0 - - -;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 7 29 ctlin;
-#X obj 49 29 pgmin;
-#X obj 92 28 bendin;
-#X obj 143 27 touchin;
-#X obj 204 27 polytouchin;
-#X obj 289 27 midiin;
-#X obj 340 26 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 160 84 bendout;
-#X obj 217 83 touchout;
-#X obj 281 82 polytouchout;
-#X obj 370 82 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
+#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 bendin 3 12 0 18
+-204280 -1 0;
+#X obj 0 395 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 245 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This document was updated for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION read incoming pitch bend values;
+#X text 12 125 OUTLET_0 float;
+#X text 12 145 OUTLET_1 float;
+#X text 12 25 NAME bendin;
+#X text 12 225 RELEASE_DATE 1997;
+#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 495 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 560 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 439 float;
+#N canvas 50 112 428 456 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 [bendin] Related Objects;
+#X obj 75 89 ctlin;
+#X obj 25 116 pgmin;
+#X obj 25 89 bendin;
+#X obj 205 116 touchin;
+#X obj 69 116 polytouchin;
+#X obj 119 89 midiin;
+#X obj 149 116 sysexin;
+#X obj 131 176 noteout;
+#X obj 25 176 ctlout;
+#X obj 25 36 bendout;
+#X obj 161 203 touchout;
+#X obj 75 203 polytouchout;
+#X obj 75 176 midiout;
+#X obj 25 203 pgmout;
+#X obj 25 258 makenote;
+#X text 22 235 MIDI note construction:;
+#X text 22 149 MIDI output:;
+#X text 22 66 MIDI input:;
+#X obj 185 258 stripnote;
+#X text 22 305 Additional useful objects for MIDI processing (Maxlib
by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X restore 20 401 pd other_midi_objects;
-#X text 18 346 related object;
-#X obj 104 447 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 18 421 for an explanation of MIDI usage in Pd see:;
-#X obj 33 18 bendin;
-#X text 119 103 inlets : none (reads directly from the MIDI port);
-#X obj 23 107 bendin;
-#X text 9 49 The [bendin] object reads incoming pitch bend values and
-reports them. If started with no arguments it reports the channel number
-through the right outlet.;
-#X text 14 192 Arguments: the MIDI channel number from which to read.
-If the argument is present \, the [bendin] object does not show the
-second (right) outlet:;
-#X obj 25 256 bendin 2;
-#X floatatom 25 278 5 0 0 0 - - -;
-#X obj 21 361 bendout;
-#X text 76 279 <-- pitch bend values on channel 2;
-#X text 16 312 Output (int) is a 14-bit pitchbend value;
-#X text 130 142 left: pitchbend value;
-#X text 129 159 right: MIDI channel number (if no argument);
-#X text 81 19 - read incoming pitch bend values.;
-#X text 19 482 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 9 0 1 0;
-#X connect 9 1 2 0;
-#X connect 12 0 13 0;
+#X text 21 384 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X obj 169 89 notein;
+#X text 182 235 MIDI note deconstruction:;
+#X text 22 286 Externals;
+#X obj 22 335 pddp/helplink maxlib/pitch;
+#X obj 22 350 pddp/helplink maxlib/score;
+#X obj 22 365 pddp/helplink maxlib/chord;
+#X obj 22 400 pddp/helplink cyclone/midiformat;
+#X obj 22 415 pddp/helplink cyclone/midiparse;
+#X obj 22 430 pddp/helplink cyclone/midiflush;
+#X restore 101 597 pd Related_objects;
+#X obj 482 3 bendin;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/bendin -text
+pdpedia: bendin;
+#X text 98 405 (none);
+#X obj 78 439 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 467 cnv 17 3 17 empty \$0-pddp.cnv.let.0 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 467 float;
+#X floatatom 148 171 5 0 0 0 - - -;
+#X floatatom 191 171 5 0 0 0 - - -;
+#X obj 148 144 bendin;
+#X text 85 221 The [bendin] object reads incoming pitch bend values
+and reports them. If started with no arguments it reports the channel
+number through the right outlet.;
+#X obj 260 144 bendin 2;
+#X floatatom 260 171 5 0 0 0 - - -;
+#X text 311 171 <-- pitch bend values on channel 2;
+#X obj 99 564 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 11 23 read incoming pitch bend values;
+#X text 167 514 - (optional) a single MIDI channel number from which
+to read. If the argument is present \, the [bendin] object does not
+show the second (right) outlet.;
+#X text 168 405 - [bendin] reads directly from the MIDI port.;
+#X text 168 439 - pitchbend value (a 14-bit integer).;
+#X text 168 467 - MIDI channel number (available unless argument is
+given).;
+#X text 80 514 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 15 0;
+#X connect 17 1 16 0;
+#X connect 19 0 20 0;
diff --git a/doc/pddp/bendout-help.pd b/doc/pddp/bendout-help.pd
index e1e16c21..ffe6c1bc 100644
--- a/doc/pddp/bendout-help.pd
+++ b/doc/pddp/bendout-help.pd
@@ -1,67 +1,101 @@
-#N canvas 249 47 492 554 10;
-#X floatatom 17 124 5 0 0;
-#X floatatom 61 141 5 0 0;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 55 31 ctlin;
-#X obj 97 31 pgmin;
-#X obj 140 30 bendin;
-#X obj 191 29 touchin;
-#X obj 252 29 polytouchin;
-#X obj 337 29 midiin;
-#X obj 388 28 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 161 85 touchout;
-#X obj 225 84 polytouchout;
-#X obj 314 84 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X obj 8 31 midiin;
-#X restore 20 392 pd other_midi_objects;
-#X text 18 337 related object;
-#X obj 282 412 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 18 412 for an explanation of MIDI usage in Pd see:;
-#X floatatom 20 266 5 0 0;
-#X text 111 263 <-- pitch bend values on channel 2;
-#X obj 39 21 bendout;
-#X obj 17 165 bendout;
-#X text 120 114 inlets:;
-#X text 119 165 outlets : none (writes directly to the MIDI port);
-#X text 128 132 left: 14-bit pitchbend value;
-#X text 127 148 right: MIDI channel number;
-#X text 14 198 Arguments: the MIDI channel number to which to write
-to. If no argument is given [bendout] defaults to channel 1 The channel
-can be then chaned byy sending an int to the right inlet:;
-#X obj 20 284 bendout 2;
-#X text 16 314 Output: the output is direct to the MIDI port.;
-#X obj 21 352 bendin;
-#X text 12 51 The [bendout] object takes a pitchbend value (0-127)
-and formats it into a pitchbend MIDI message and sends out the MIDI
-port on the appropriate channel. If no argument is given it defaults
-to channel 1;
-#X text 87 22 - send pitchbend value to the MIDI port;
-#X text 18 482 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 0 0 9 0;
-#X connect 1 0 9 1;
-#X connect 6 0 15 0;
+#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 bendout 3 12 0 18
+-204280 -1 0;
+#X obj 0 377 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION send pitchbend value to the MIDI port;
+#X text 12 145 INLET_1 float;
+#X text 12 125 INLET_0 float list;
+#X text 12 25 NAME bendout;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 458 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 561 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 387 float;
+#N canvas 60 184 441 421 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 [bendout] Related Objects;
+#X obj 73 80 ctlin;
+#X obj 216 80 pgmin;
+#X obj 23 33 bendin;
+#X obj 78 107 touchin;
+#X obj 260 80 polytouchin;
+#X obj 117 80 midiin;
+#X obj 22 107 sysexin;
+#X obj 178 167 noteout;
+#X obj 75 167 ctlout;
+#X obj 23 167 bendout;
+#X obj 365 167 touchout;
+#X obj 279 167 polytouchout;
+#X obj 122 167 midiout;
+#X obj 230 167 pgmout;
+#X obj 23 221 makenote;
+#X text 20 198 MIDI note construction:;
+#X text 20 140 MIDI output:;
+#X text 20 57 MIDI input:;
+#X obj 183 221 stripnote;
+#X obj 167 80 notein;
+#X text 180 198 MIDI note deconstruction:;
+#X text 22 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 21 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 22 246 Externals;
+#X obj 22 295 pddp/helplink maxlib/pitch;
+#X obj 22 310 pddp/helplink maxlib/score;
+#X obj 22 325 pddp/helplink maxlib/chord;
+#X obj 22 360 pddp/helplink cyclone/midiformat;
+#X obj 22 375 pddp/helplink cyclone/midiparse;
+#X obj 22 390 pddp/helplink cyclone/midiflush;
+#X restore 101 598 pd Related_objects;
+#X text 98 462 (none);
+#X obj 78 387 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 430 cnv 17 3 17 empty \$0-pddp.cnv.let.0 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 430 float;
+#X obj 99 565 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X obj 470 3 bendout;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/bendout -text
+pdpedia: bendout;
+#X floatatom 111 146 5 0 0 0 - - -;
+#X floatatom 150 163 5 0 0 0 - - -;
+#X obj 111 186 bendout;
+#X floatatom 231 163 5 0 0 0 - - -;
+#X text 305 186 <-- pitch bend values on channel 2;
+#X obj 231 186 bendout 2;
+#X text 11 23 send pitchbend value to the MIDI port;
+#X text 168 505 - (optional) the MIDI channel number to be written
+to. If no argument is given \, [bendout] defaults to channel 1 . The
+channel can be changed by sending an integer to the right inlet.;
+#X text 168 387 - pitchbend value (0-127).;
+#X text 168 430 - MIDI channel number (defaults to channel 1).;
+#X text 168 462 - [bendin] writes directly to the MIDI port.;
+#X text 80 505 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 407 list;
+#X text 168 407 - a list is distributed to the inlets.;
+#X connect 16 0 18 0;
+#X connect 17 0 18 1;
+#X connect 19 0 21 0;
diff --git a/doc/pddp/biquad~-help.pd b/doc/pddp/biquad~-help.pd
new file mode 100644
index 00000000..3c1035ad
--- /dev/null
+++ b/doc/pddp/biquad~-help.pd
@@ -0,0 +1,93 @@
+#N canvas 0 0 555 619 10;
+#X obj -1 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj -1 0 cnv 15 552 40 empty \$0-pddp.cnv.header biquad~ 3 12 0
+18 -204280 -1 0;
+#X obj -1 321 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version-0.30. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filters;
+#X text 12 85 DESCRIPTION 2-pole-2-zero-filter;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 125 INLET_0 list signal set clear;
+#X text 12 25 NAME biquad~;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj -1 416 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj -1 453 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj -1 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8
+12 0 13 -228856 -1 0;
+#N canvas 46 487 428 102 Related_objects 0;
+#X obj 22 42 hip~;
+#X obj 62 41 lop~;
+#X obj 104 41 bp~;
+#X obj 139 41 vcf~;
+#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 [biquad~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 330 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 471 3 biquad~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/biquad~ -text
+pdpedia: biquad~;
+#X obj 155 216 env~;
+#X floatatom 155 243 0 0 0 0 - - -;
+#X floatatom 66 98 0 0 0 0 - - -;
+#X obj 66 214 env~;
+#X floatatom 66 242 0 0 0 0 - - -;
+#X obj 155 183 biquad~ 1.41407 -0.9998 1 -1.41421 1;
+#X msg 155 99 1.41407 -0.9998 1 -1.41421 1;
+#X text 220 237 (= SR/8 = 5512.5 Hz @44.1k);
+#X text 167 77 list sets filter parameters;
+#X msg 190 129 set 0 0;
+#X msg 191 154 clear;
+#X obj 66 138 osc~ 5512.5;
+#X text 260 131 set internal state;
+#X text 258 153 ... or just clear it;
+#X text 98 350 list;
+#X text 98 330 signal;
+#X text 98 370 set;
+#X text 98 390 clear;
+#X obj 78 425 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 426 signal;
+#X text 169 503 y(n) = ff1 * w(n) + ff2 * w(n-1) + ff3 * w(n-2);
+#X text 169 519 w(n) = x(n) + fb1 * w(n-1) + fb2 * w(n-2);
+#X text 169 541 Syntax: biquad~ fb1 fb2 ff1 ff2 ff3;
+#X text 59 267 Compare the value of the straight signal on the left
+with the value of the filtered signal on the right.;
+#X text 11 23 2-pole-2-zero-filter;
+#X text 169 472 - [biquad~] takes five floats as arguments which are
+used to calculate the following difference equation:;
+#X text 168 370 - set internal state.;
+#X text 168 390 - clear the internal state.;
+#X text 85 472 5 floats;
+#X text 214 218 this [biquad~] is a notch filter for fn = Pi/4;
+#X text 168 350 - a list of 5 floats is used to set filter parameters.
+;
+#X text 168 330 - the incoming signal;
+#X text 168 426 - the outgoing signal;
+#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 13 0 22 0;
+#X connect 14 0 15 0;
+#X connect 16 0 11 0;
+#X connect 17 0 16 0;
+#X connect 20 0 16 0;
+#X connect 21 0 16 0;
+#X connect 22 0 14 0;
+#X connect 22 0 16 0;
diff --git a/doc/pddp/block~-help.pd b/doc/pddp/block~-help.pd
new file mode 100644
index 00000000..17c3fcc7
--- /dev/null
+++ b/doc/pddp/block~-help.pd
@@ -0,0 +1,194 @@
+#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 block~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 271 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.4. Revised
+by Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 GENRE help;
+#X text 12 105 DESCRIPTION block \, overlap \, and resampling control
+for DSP;
+#X text 12 145 INLET_0 set;
+#X text 12 25 NAME block~;
+#X text 12 65 KEYWORDS signal block_oriented canvas_op;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X text 12 45 ALIAS switch~;
+#X restore 500 597 pd META;
+#X obj 0 336 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 365 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 435 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 48 485 428 105 Related_objects 0;
+#X obj 83 42 fft~;
+#X obj 23 42 switch~;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 1 [block~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 280 cnv 17 3 40 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/block~ -text
+pdpedia: block~;
+#X text 98 280 set;
+#X text 98 341 (none);
+#X floatatom 78 247 0 0 0 0 - - -;
+#X text 155 248 <- measured time (msec) between blocks;
+#X text 161 49 block size 4096 \, no overlap \, no resampling;
+#X text 162 71 bigger block size;
+#X text 160 92 double overlap;
+#X text 169 116 downsampled by factor of 2;
+#X text 160 139 upsampled by factor of 2;
+#X msg 78 50 set 4096 1 1;
+#X msg 78 72 set 8192 1 1;
+#X msg 78 94 set 4096 2 1;
+#X msg 78 116 set 4096 1 0.5;
+#X msg 78 138 set 4096 1 2;
+#N canvas 44 414 428 153 a-simple-block-example 0;
+#X obj 22 42 block~ 1024 4;
+#X text 19 64 This object specifies that DSP in this subwindow is to
+be computed at a block size of 1024 \, and an overlap of 4 \, i.e.
+\, every 256 samples. You may not (yet) specify a block size smaller
+than your superpatch. This is useful for writing FFT based patches
+(see the "fft examples" tutorial series.);
+#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 [block~] A Simple Example;
+#X restore 282 556 pd a-simple-block-example;
+#N canvas 56 284 428 261 block-interactions 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 [block~]/[switch~] Interactions with Other PD Objects;
+#X text 20 36 [dac~] and [adc~] don't work correctly if reblocked \,
+nor if a parent window is reblocked \, even if the window containing
+the [dac~] or [adc~] is reblocked back to the default block size and
+sample rate.;
+#X text 19 103 If using [send~] or [delwrite~] from a switched-off
+patch \, the output of corresponding [receive~] and [delread~] objects
+in other \, running patches will cycle old input (and sound like garbage).
+[throw~] may be switched with impunity \, but not [catch~].;
+#X text 21 184 Patches using [send~]/[receive~] or [throw~]/[catch~]
+to intercommunicate must have the same blocking -- and if their parents
+are blocked bigger than they are \, there might be weirdness.;
+#X restore 102 555 pd block-interactions;
+#X text 257 224 <- toggle display;
+#X text 11 23 block \, overlap \, and resampling control for DSP;
+#N canvas 22 87 428 396 visualize 0;
+#X obj 49 219 f;
+#X obj 81 219 + 1;
+#X obj 117 170 i;
+#X obj 117 243 s \$0-bng-rcv;
+#X msg 117 218 flashtime 50 \$1;
+#X obj 117 195 max 50;
+#X obj 49 139 t b a;
+#X obj 258 318 outlet;
+#X obj 258 181 t a;
+#X obj 201 315 tgl 15 0 \$0-tgl \$0-nothing empty 17 7 0 10 -262144
+-1 -1 0 1;
+#X obj 49 187 spigot;
+#X obj 110 124 r \$0-tgl;
+#X obj 49 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+-262144 -1 -1;
+#X obj 64 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+-262144 -1 -1;
+#X obj 79 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+-262144 -1 -1;
+#X obj 94 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+-262144 -1 -1;
+#X obj 109 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv 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 1 [block~] Bang every block;
+#X text 10 347 This subpatch just triggers a series of bng objects
+to display how different "set" messages change the block size.;
+#X obj 260 114 inlet;
+#X obj 260 138 block~ 4096 1;
+#X obj 49 63 bang~;
+#X obj 49 89 t b b;
+#X obj 49 115 timer;
+#X obj 49 273 sel 0 1 2 3 4 5 6 7 8 9;
+#X obj 124 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+10 -262144 -1 -1;
+#X obj 139 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+10 -262144 -1 -1;
+#X obj 154 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+10 -262144 -1 -1;
+#X obj 169 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+10 -262144 -1 -1;
+#X obj 184 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+10 -262144 -1 -1;
+#X obj 49 246 mod 10;
+#X connect 0 0 1 0;
+#X connect 0 0 31 0;
+#X connect 1 0 0 1;
+#X connect 2 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 10 0;
+#X connect 6 1 2 0;
+#X connect 6 1 8 0;
+#X connect 8 0 7 0;
+#X connect 10 0 0 0;
+#X connect 11 0 10 1;
+#X connect 20 0 21 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 6 0;
+#X connect 25 0 12 0;
+#X connect 25 1 13 0;
+#X connect 25 2 14 0;
+#X connect 25 3 15 0;
+#X connect 25 4 16 0;
+#X connect 25 5 26 0;
+#X connect 25 6 27 0;
+#X connect 25 7 28 0;
+#X connect 25 8 29 0;
+#X connect 25 9 30 0;
+#X connect 31 0 25 0;
+#X coords 0 -1 1 1 175 35 1 45 300;
+#X restore 78 209 pd visualize;
+#X obj 422 3 block~;
+#X text 90 161 IMPORTANT NOTE: Since you may have at most one block~/switch~
+object in any window \, [block~] has been put in a subpatch (below)
+for this example:;
+#X text 170 384 - blocksize.;
+#X text 170 398 - (optional) overlap.;
+#X text 170 411 - (optional) resampling factor (relative to super-patch).
+;
+#X text 80 398 2) float;
+#X text 80 411 3) float;
+#X text 168 280 - [block] has a single inlet that accepts a "set" message--
+"set" followed by one to three floats-- that determines the block size
+\, overlap \, and resampling for the window (see example above).;
+#X text 80 384 1) float;
+#X text 99 439 Pd's default block size is 64 samples. The [inlet~]
+and [outlet~] objects reblock signals to adjust for differences between
+parent and subpatch \, but only power-of-two adjustments are possible.
+So for "normal" audio computations \, all blocks should also be power-of-two
+in size. HOWEVER \, if you have no [inlet~] or [outlet~] you may specify
+any other block size. This is intended for later use in video processing.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 102 576 pddp/pddplink ../3.audio.examples/J07.oversampling.pd
+-text doc/3.audio.examples/J07.oversampling.pd;
+#X text 469 3 or [switch~];
+#X connect 19 0 28 0;
+#X connect 20 0 28 0;
+#X connect 21 0 28 0;
+#X connect 22 0 28 0;
+#X connect 23 0 28 0;
+#X connect 28 0 12 0;
diff --git a/doc/pddp/bng-help.pd b/doc/pddp/bng-help.pd
index 71e5d17e..4c22ad5f 100644
--- a/doc/pddp/bng-help.pd
+++ b/doc/pddp/bng-help.pd
@@ -1,269 +1,448 @@
-#N canvas 60 138 517 433 10;
-#X obj 1 1 cnv 8 100 60 empty empty bng 20 20 1 18 -262144 -1109 0
-;
-#X text 10 288 (c) musil@iem.kug.ac.at;
-#X text 52 301 IEM KUG;
-#X text 118 61 click properties to;
-#X text 106 72 modify geometry \, colors \, etc.;
-#X obj 64 257 print;
-#N canvas 598 330 290 225 once 0;
-#X msg 38 73 1;
-#X obj 38 47 t b b;
-#X obj 68 124 sel 0;
-#X obj 68 103 f 0;
-#X obj 38 24 inlet;
-#X obj 68 154 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 64 234 pd once;
-#X obj 36 258 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
--1;
-#X obj 3 130 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
--1;
-#X obj 36 173 bng 50 950 50 1 foo5_snd foo5_rcv big-bang 63 2 192 12
--262131 -260818 -143491;
-#X msg 36 53 33;
-#X msg 50 75 -3.14;
-#X msg 73 117 11 22 33.33;
-#X msg 63 95 open xxx;
-#X msg 96 142 funny;
-#X text 101 11 gui-bang:;
-#X obj 202 135 s foo5_rcv;
-#X obj 202 155 r foo5_snd;
-#X obj 202 115 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
--1 -1;
-#X obj 202 175 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
--1 -1;
-#X msg 4 53 0;
-#X text 125 205 UP- \, DOWN- \, LEFT- or RIGHT-key;
-#X text 124 216 for moving selected gui-objects;
-#N canvas 425 170 699 530 edit 0;
-#X obj 39 197 f;
-#X msg 17 176 bang;
-#X floatatom 55 175 3 63 88;
-#X floatatom 90 197 3 0 37;
-#X obj 39 220 pack 0 0;
-#X text 117 197 y-label;
-#X text 83 175 x-label;
-#X floatatom 259 143 3 8 75;
-#X text 286 143 size;
-#X obj 279 236 f;
-#X msg 257 215 bang;
-#X floatatom 295 214 3 -10 10;
-#X floatatom 330 236 3 -10 10;
-#X obj 279 259 pack 0 0;
-#X obj 304 348 f;
-#X msg 282 327 bang;
-#X floatatom 320 326 3 20 90;
-#X floatatom 355 348 3 150 200;
-#X obj 304 371 pack 0 0;
-#X text 323 214 x-delta;
-#X text 357 236 y-delta;
-#X text 348 326 x-position;
-#X text 382 348 y-position;
-#X obj 59 312 f;
-#X msg 37 291 bang;
-#X floatatom 75 290 3 0 2;
-#X floatatom 110 312 3 4 36;
-#X obj 59 335 pack 0 0;
-#X text 103 290 font;
-#X text 139 312 height;
-#X msg 36 399 \; foo5_rcv label blabla;
-#X msg 59 360 \; foo5_rcv label_font \$1 \$2;
-#X msg 39 245 \; foo5_rcv label_pos \$1 \$2;
-#X msg 47 135 \; foo5_rcv color \$1 \$2 \$3;
-#X msg 259 172 \; foo5_rcv size \$1;
-#X msg 279 284 \; foo5_rcv delta \$1 \$2;
-#X msg 304 396 \; foo5_rcv pos \$1 \$2;
-#X msg 483 133 \; foo5_rcv receive foo5a_rcv;
-#X msg 482 171 \; foo5a_rcv receive foo5_rcv;
-#X msg 483 50 \; foo5_rcv send foo5a_snd;
-#X msg 483 88 \; foo5_rcv send foo5_snd;
-#X text 526 349 no init;
-#X msg 505 368 \; foo5_rcv init 0;
-#X msg 512 435 \; foo5_rcv init 1;
-#X obj 493 260 f;
-#X msg 471 239 bang;
-#X floatatom 509 238 4 10 100;
-#X floatatom 544 261 5 100 3000;
-#X obj 493 283 pack 0 0;
-#X msg 493 308 \; foo5_rcv flashtime \$1 \$2;
-#X text 548 237 interrupt-time;
-#X text 585 262 hold-time;
-#X msg 36 435 \; foo5_rcv label big-bang;
-#X text 502 417 init bang on loadbang;
-#X text 519 221 flash-time:;
-#X obj 47 114 pack 0 0 0;
-#X obj 47 86 f;
-#X msg 24 38 bang;
-#X floatatom 63 36 3 0 29;
-#X floatatom 79 56 3 0 29;
-#X floatatom 112 72 3 0 29;
-#X text 91 36 background;
-#X text 106 56 front-color;
-#X text 140 73 label-color;
-#X msg 285 35 back;
-#X msg 285 55 front;
-#X msg 285 75 label;
-#X msg 247 35 bang;
-#N canvas 15 207 606 448 RGB_____________ 0;
-#X obj 97 56 inlet;
-#X obj 262 53 inlet;
-#X obj 339 55 inlet;
-#X obj 405 56 inlet;
-#X obj 97 270 bang;
-#X msg 77 295 0;
-#X msg 104 295 1;
-#X obj 146 268 bang;
-#X msg 132 295 0;
-#X msg 160 295 1;
-#X obj 196 269 bang;
-#X msg 187 295 0;
-#X msg 214 295 1;
-#X obj 265 313 spigot;
-#X obj 312 313 spigot;
-#X obj 359 313 spigot;
-#X obj 249 385 outlet;
-#X text 93 33 select;
-#X text 267 28 red;
-#X text 337 30 green;
-#X text 409 30 blue;
-#X obj 405 102 t b f;
-#X obj 339 160 +;
-#X obj 339 185 t b f;
-#X obj 339 216 +;
-#X obj 296 385 outlet;
-#X obj 343 385 outlet;
-#X obj 28 180 loadbang;
-#X obj 97 135 route back front label bang;
-#X obj 343 362 f;
-#X obj 296 361 f;
-#X obj 249 361 f;
-#X obj 262 79 * -65536;
-#X obj 339 80 * -256;
-#X obj 405 80 * -1;
-#X obj 339 247 - 1;
-#X obj 235 168 t b b b b;
-#X connect 0 0 28 0;
-#X connect 1 0 32 0;
-#X connect 2 0 33 0;
-#X connect 3 0 34 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 14 1;
-#X connect 5 0 15 1;
-#X connect 6 0 13 1;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 13 1;
-#X connect 8 0 15 1;
-#X connect 9 0 14 1;
-#X connect 10 0 11 0;
-#X connect 10 0 12 0;
-#X connect 11 0 13 1;
-#X connect 11 0 14 1;
-#X connect 12 0 15 1;
-#X connect 13 0 31 1;
-#X connect 14 0 30 1;
-#X connect 15 0 29 1;
-#X connect 21 0 22 0;
-#X connect 21 1 22 1;
-#X connect 22 0 23 0;
-#X connect 23 0 24 0;
-#X connect 23 1 24 1;
-#X connect 24 0 35 0;
-#X connect 27 0 6 0;
-#X connect 28 0 4 0;
-#X connect 28 1 7 0;
-#X connect 28 2 10 0;
-#X connect 28 3 36 0;
-#X connect 29 0 26 0;
-#X connect 30 0 25 0;
-#X connect 31 0 16 0;
-#X connect 32 0 24 0;
-#X connect 33 0 22 0;
-#X connect 34 0 21 0;
-#X connect 35 0 15 0;
-#X connect 35 0 14 0;
-#X connect 35 0 13 0;
-#X connect 36 0 31 0;
-#X connect 36 1 30 0;
-#X connect 36 2 29 0;
-#X connect 36 3 35 0;
-#X restore 285 96 pd RGB_____________;
-#X floatatom 327 65 3 0 255;
-#X floatatom 370 65 3 0 255;
-#X floatatom 413 66 3 0 255;
-#X text 34 10 preset-colors;
-#X text 296 7 RGB-colors;
-#X text 327 47 red;
-#X text 363 46 green;
-#X text 411 46 blue;
-#X connect 0 0 4 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
-#X connect 3 0 4 1;
-#X connect 4 0 32 0;
-#X connect 7 0 34 0;
-#X connect 9 0 13 0;
-#X connect 10 0 9 0;
-#X connect 11 0 9 1;
-#X connect 12 0 13 1;
-#X connect 13 0 35 0;
-#X connect 14 0 18 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 1;
-#X connect 17 0 18 1;
-#X connect 18 0 36 0;
-#X connect 23 0 27 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 1;
-#X connect 26 0 27 1;
-#X connect 27 0 31 0;
-#X connect 44 0 48 0;
-#X connect 45 0 44 0;
-#X connect 46 0 44 1;
-#X connect 47 0 48 1;
-#X connect 48 0 49 0;
-#X connect 55 0 33 0;
-#X connect 56 0 55 0;
-#X connect 57 0 56 0;
-#X connect 58 0 56 1;
-#X connect 59 0 55 1;
-#X connect 60 0 55 2;
-#X connect 64 0 68 0;
-#X connect 65 0 68 0;
-#X connect 66 0 68 0;
-#X connect 67 0 68 0;
-#X connect 68 0 55 0;
-#X connect 68 1 55 1;
-#X connect 68 2 55 2;
-#X connect 69 0 68 1;
-#X connect 70 0 68 2;
-#X connect 71 0 68 3;
-#X restore 297 144 pd edit;
-#X obj 248 34 bng 15 250 50 0 aaa aaa empty 20 8 192 8 -262144 -1 -1
-;
-#X text 27 313 graz \, austria 2002;
-#X obj 180 11 x_all_guis aaa bbb ccc ddd eee fff ggg hhh iii;
-#X text 366 35 SEE ALSO:;
-#X obj 429 34 bang;
-#X text 22 341 This document was updated for Pd version 0.35 test 24
-by Dave Sabine as part of a project called pddp proposed to build comprehensive
-documentation for Pd.;
-#X connect 6 0 5 0;
-#X connect 8 0 9 0;
-#X connect 9 0 7 0;
-#X connect 9 0 5 0;
-#X connect 10 0 9 0;
-#X connect 11 0 9 0;
-#X connect 12 0 9 0;
-#X connect 13 0 9 0;
-#X connect 14 0 9 0;
-#X connect 17 0 19 0;
-#X connect 18 0 16 0;
-#X connect 20 0 9 0;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Thomas Musil;
+#X text 12 205 WEBSITE;
+#X text 12 265 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION gui-bang;
+#X text 12 125 INLET_0 anything size flashtime init send receive label
+label_pos label_font color pos delta;
+#X text 12 145 OUTLET_0 bang;
+#X text 12 25 NAME bng;
+#X text 12 45 KEYWORDS control nonlocal GUI bang_op;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/bonk~-help.pd b/doc/pddp/bonk~-help.pd
new file mode 100644
index 00000000..5f30c600
--- /dev/null
+++ b/doc/pddp/bonk~-help.pd
@@ -0,0 +1,289 @@
+#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 bonk~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 235 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 208 227 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal analysis;
+#X text 12 85 DESCRIPTION an attack detector for small percussion instruments
+;
+#X text 12 25 NAME bonk~;
+#X text 12 125 INLET_0 signal thresh minvel mask bang debug print debounce
+learn forget write read;
+#X text 12 145 OUTLET_0 list;
+#X text 12 165 OUTLET_1 list;
+#X text 12 245 RELEASE_DATE 2009;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 300 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 460 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 559 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 244 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 45 491 428 101 Related_objects 0;
+#X obj 21 42 env~;
+#X obj 59 42 threshold~;
+#X obj 135 42 fiddle~;
+#X obj 191 42 sigmund~;
+#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 [bonk~] Related Objects;
+#X restore 100 597 pd Related_objects;
+#X obj 78 308 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 483 3 bonk~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/bonk~ -text
+pdpedia: bonk~;
+#X obj 234 135 spigot;
+#X obj 151 79 bonk~;
+#X obj 151 135 spigot;
+#X obj 200 136 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 283 136 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 234 165 print cooked;
+#X obj 151 165 print raw;
+#X text 47 133 enable printout:;
+#X obj 234 109 s bonk-cooked;
+#N canvas 36 80 458 532 Messenges_to_bonk~ 0;
+#X msg 11 222 bang;
+#X msg 11 355 learn 1;
+#X msg 11 401 learn 0;
+#X msg 11 276 print;
+#X msg 11 378 learn 10;
+#X msg 11 30 thresh 6 50;
+#X msg 11 180 mask 4 0.7;
+#X msg 11 121 minvel 10;
+#X msg 11 252 debug 0;
+#X obj 11 509 outlet;
+#X obj -1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 6 1 Sending Messages to [bonk~];
+#X msg 11 424 forget;
+#X msg 11 457 write templates.txt;
+#X msg 11 484 read templates.txt;
+#X msg 11 330 debounce 0;
+#X obj 0 300 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 6 300 Messages for Managing Templates;
+#X text 94 179 - describes how energy in each frequency band masks
+later energy in the band. Here the masking is total for 4 analysis
+periods and then drops by 0.7 each period.;
+#X text 72 221 - poll the current spectrum via "raw" outlet \, You
+can set a very high threshold if you don't want attacks mixed in.;
+#X text 72 252 - turn debugging on or off.;
+#X text 72 276 - print out all settings and templates.;
+#X text 92 330 - minimum time (msec) between attacks in learn mode
+;
+#X text 92 355 - forget all templates and start learning new ones.
+The argument gives the number of times you will hit each instrument
+(10 recommended.) Turn on the output volume above for audible feedback
+as you train Bonk. "Learn 0" exits learn mode.;
+#X text 92 423 - forget the last template. In Learn mode \, use "forget"
+to erase and record over a template.;
+#X text 136 457 - write templates to a file in text-editable format.
+;
+#X text 136 484 - read templates from a file.;
+#N canvas 49 297 428 101 minvel_units 0;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [bonk~] What units are used for "minvel"?;
+#X text 17 36 "minvel" is in the units of the velocity output \, which
+is the sum of the square roots of the amplitudes of the bands \, normalized
+so that 100 is an attack of amplitude about one.;
+#X restore 97 154 pd minvel_units;
+#N canvas 56 241 428 102 thresh_units 0;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [bonk~] What units are used for "thresh"?;
+#X text 17 36 "thresh" is in "growth" units \, which is the sum of
+the proportional growth in the 11 filter bands. Proportional growth
+is essentially the logarithmic time derivative.;
+#X restore 97 96 pd thresh_units;
+#X text 94 29 - set low and high thresholds. Signal growth must exceed
+the high one and then fall to the low one to make an attack. The unit
+is the sum of the proportional growth in the 11 filter bands. Proportional
+growth is essentially the logarithmic time derivative. (See subpatch
+below for units.);
+#X text 95 121 - minimum "velocity" to output (quieter notes are ignored).
+(See subpatch below for units.);
+#X connect 0 0 9 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 4 0 9 0;
+#X connect 5 0 9 0;
+#X connect 6 0 9 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 0;
+#X connect 12 0 9 0;
+#X connect 13 0 9 0;
+#X connect 14 0 9 0;
+#X connect 15 0 9 0;
+#X restore 151 52 pd Messenges_to_bonk~;
+#N canvas 122 160 428 404 synth 0;
+#X obj 92 44 r bonk-cooked;
+#X obj 92 69 unpack;
+#X obj 92 119 * 12;
+#X obj 92 144 div 7;
+#X obj 92 94 + 1;
+#X obj 92 194 mtof;
+#X obj 92 244 osc~;
+#X obj 92 269 cos~;
+#X obj 92 169 + 47;
+#X obj 189 267 line~;
+#X obj 189 292 *~;
+#X obj 189 317 lop~ 500;
+#X obj 92 294 *~;
+#X obj 83 381 dac~;
+#X obj 233 185 dbtorms;
+#X obj 233 135 * 0.5;
+#X obj 233 160 + 50;
+#X obj 191 209 f;
+#X msg 153 179 bang;
+#X obj 238 103 inlet;
+#X obj 91 327 hip~ 5;
+#X msg 14 44 0 60;
+#X obj 92 219 sig~;
+#X msg 189 242 \$1 \, 0 200;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [bonk~] Demo Synthesizer;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 5 0 18 0;
+#X connect 5 0 22 0;
+#X connect 6 0 7 0;
+#X connect 7 0 12 0;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 1;
+#X connect 12 0 20 0;
+#X connect 14 0 17 1;
+#X connect 15 0 16 0;
+#X connect 16 0 14 0;
+#X connect 17 0 23 0;
+#X connect 18 0 17 0;
+#X connect 19 0 15 0;
+#X connect 20 0 13 1;
+#X connect 20 0 13 0;
+#X connect 21 0 1 0;
+#X connect 22 0 6 0;
+#X connect 23 0 9 0;
+#X restore 359 145 pd synth;
+#X floatatom 359 122 0 0 0 0 - - -;
+#X msg 359 89 0;
+#X msg 390 89 90;
+#X text 392 108 output volume;
+#X text 406 123 (0-100);
+#X obj 78 350 cnv 17 3 100 empty \$0-pddp.cnv.let.0 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 308 list;
+#X text 98 350 list;
+#X text 147 187 In this patch \, after starting DSP \, you can print
+out the raw or cooked output using the two "spigots" or listen to a
+synthesizer output by raising its volume.;
+#X text 11 23 an attack detector for small percussion instruments;
+#X obj 114 52 adc~;
+#N canvas 96 417 428 145 more_info 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 10 33 The [bonk~] object takes an audio signal input and looks
+for "attacks" defined as sharp changes in the spectral envelope of
+the incoming sound. Optionally \, and less reliably \, you can have
+[bonk~] check the attack against a collection of stored templates to
+try to guess which of two or more instruments was hit. [bonk~] is described
+theoretically in the 1998 ICMC proceedings \, reprinted on crca.ucsd.edu/~msp
+.;
+#X text 7 1 [bonk~] More Info;
+#X restore 100 568 pd more_info;
+#X text 80 478 0-7;
+#X text 98 244 signal;
+#X text 168 244 - the incoming signal to analyize.;
+#X text 98 264 For all other messages see the the subpatch titled "Messenges_to_bonk~"
+in the example above.;
+#X text 168 308 - the raw spectrum of the attack \, provided as a list
+of 11 numbers giving the signal "loudness" in the 11 frequency bands
+used.;
+#X text 169 477 By default [bonk~]'s analysis is carried out on a 256-point
+window (6 msec at 44.1 kHz) and the analysis period is 128 samples.
+These and other parameters may be overridden using creation arguments
+as shown in the subpatch below:;
+#N canvas 29 64 507 520 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 15 250 -npts 256;
+#X text 15 270 -hop 128;
+#X text 15 290 -nfilters 11;
+#X text 15 310 -halftones 6;
+#X text 15 430 -overlap 1;
+#X text 18 483 -firstbin 1;
+#X text 15 370 -minbandwidth 1.5;
+#X text 16 135 All frequency parameters are specified in 'bins'. One
+bin is the sample rate divided by the window size. The minimum possible
+bandwidth is 1.5 bins. Higher bandwidths give numerically more robust
+outputs.;
+#X text 17 37 [bonk~] uses a filterbank whose center frequencies are
+spaced equally at low frequencies and proportionally at high ones -
+i.e. \, they increase linearly \, then exponentially. They are determined
+by the filters' bandwidths and overlap. The bandwidths are specified
+proportionally to frequency but bounded below by a specified minimum.
+;
+#X text 7 2 [bonk~] Creation Arguments;
+#X text 16 202 Below are the creation arguments and their default values.
+Notice that all are specified as (flag \, value) pairs which may be
+given in any order:;
+#X text 137 248 - window size in points.;
+#X text 136 268 - analysis period ("hop size") in points.;
+#X text 137 288 - number of filters to use.;
+#X text 136 309 - desired bandwidth of filters in halftones \, effective
+in the exponentially spaced region. (At lower center frequencies the
+bandwidth is supported by the "minbandwidth" parameter below).;
+#X text 136 370 - minimum bandwidth in bins. If the bandwidth specified
+by "halftones" is smaller than this \, this value is used. This must
+be at least 1.5.;
+#X text 135 430 - overlap factor between filters. If 1 \, the filters
+are spaced to line up at their half-power points. Other values specify
+more or fewer filters proportionally.;
+#X text 135 483 - center frequency \, in bins \, of the lowest filter.
+The others are computed from this.;
+#X restore 100 534 pd creation_arguments;
+#X text 168 350 - the "cooked" output which gives an instrument number
+(counting up from zero) \, a "velocity" \, and a "brightness" value
+(the balancing point of the loudness distribution over the filter bank--
+nominally 11 filters). This "velocity" is the sum of the square roots
+of the amplitudes of the bands \, normalized so that 100 is an attack
+of amplitude of about 1 . The instrument number is significant only
+if [bonk~] has a "template set" in memory.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 12 0 17 0;
+#X connect 13 0 14 0;
+#X connect 13 1 12 0;
+#X connect 13 1 20 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 1;
+#X connect 16 0 12 1;
+#X connect 21 0 13 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 0;
+#X connect 33 0 13 0;
diff --git a/doc/pddp/bp~-help.pd b/doc/pddp/bp~-help.pd
new file mode 100644
index 00000000..14593789
--- /dev/null
+++ b/doc/pddp/bp~-help.pd
@@ -0,0 +1,93 @@
+#N canvas 0 0 555 619 10;
+#X obj -1 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj -1 0 cnv 15 552 40 empty \$0-pddp.cnv.header bp~ 3 12 0 18 -204280
+-1 0;
+#X obj -1 364 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 246 494 367 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Updated for Pd version-0.30. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 205 LIBRARY internal;
+#X text 12 85 DESCRIPTION bandpass filter;
+#X text 12 25 NAME bp~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_1 float;
+#X text 12 165 INLET_2 float;
+#X text 12 185 OUTLET_0 signal;
+#X text 12 285 RELEASE_VERSION;
+#X text 12 265 RELEASE_DATE 2009;
+#X restore 500 597 pd META;
+#X obj -1 472 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj -1 509 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj -1 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8
+12 0 13 -228856 -1 0;
+#X obj 78 373 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 73 487 428 102 Related_objects 0;
+#X obj 21 42 vcf~;
+#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 [bp~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 481 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 492 3 bp~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/bp~ -text
+pdpedia: bp~;
+#X obj 137 208 env~;
+#X floatatom 137 228 0 0 0 0 - - -;
+#X floatatom 166 138 0 0 0 0 - - -;
+#X obj 78 208 env~;
+#X floatatom 78 229 0 0 0 0 - - -;
+#X floatatom 78 68 0 0 0 0 - - -;
+#X obj 78 91 osc~ 100;
+#X msg 138 115 clear;
+#X obj 138 186 bp~ 100 10;
+#X text 78 258 Compare the amplitude of the original signal on the
+left with the amplitude of the filtered signal on the right.;
+#X floatatom 195 162 0 0 0 0 - - -;
+#X text 98 372 signal;
+#X obj 78 416 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 392 clear;
+#X text 98 415 float;
+#X obj 78 444 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 445 float;
+#X text 98 481 signal;
+#X text 11 23 bandpass filter;
+#X text 168 392 - reinitialize internal state.;
+#X text 168 415 - center frequency.;
+#X text 168 445 - Q.;
+#X text 170 528 - center frequency.;
+#X text 170 544 - Q.;
+#X text 80 528 1) float;
+#X text 80 544 2) float;
+#X text 185 209 [env~] gives the amplitude of the signal envelop in
+dB.;
+#X text 75 297 [bp~] passes a sinusoid at the center frequency at unit
+gain (approximately). Other frequencies are attenuated.;
+#X text 123 66 <- scroll to change input frequency;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/H07.measure.spectrum.pd
+-text doc/3.audio.examples/H07.measure.spectrum.pd;
+#X connect 12 0 13 0;
+#X connect 14 0 20 1;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 18 0 15 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 0;
+#X connect 20 0 12 0;
+#X connect 22 0 20 2;
diff --git a/doc/pddp/canvas-help.pd b/doc/pddp/canvas-help.pd
new file mode 100644
index 00000000..47efffa9
--- /dev/null
+++ b/doc/pddp/canvas-help.pd
@@ -0,0 +1,89 @@
+#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 (canvas) 3 12 0
+18 -204280 -1 0;
+#X obj 0 293 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 242 494 280 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION Pure Data document window;
+#X text 12 5 GENRE help;
+#X text 12 25 NAME pd table graph;
+#X text 12 185 RELEASE_DATE 2009;
+#X text 12 205 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 508 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 556 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 1 (canvas) Related Objects;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X restore 22 42 pd;
+#X obj 52 42 table;
+#X restore 102 598 pd Related_objects;
+#X obj 78 302 cnv 17 3 85 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 328 3 (This help patch itself is a canvas);
+#X obj 451 20 pddp/pddplink http://wiki.puredata.info/en/canvas -text
+pdpedia: canvas;
+#X obj 101 560 pddp/pddplink all_about_canvas_properties.pd -text all_about_canvas_properties
+;
+#X text 72 56 This help patch is associated with several related objects:
+;
+#X text 73 142 4) root canvas (i.e. \, pd document);
+#X text 93 157 Also known simply as a "patch" \, a canvas is a window
+that contains a list of pd objects. A canvas can either be a root canvas--
+created from the "File" menu by choosing "new"-- or a subcanvas (like
+one of the objects listed above).;
+#X text 98 301 anything;
+#X obj 377 76 pddp/pddplink pd-help.pd -text See pd-help;
+#X text 73 76 1) [pd] - subcanvas \, a.k.a. subpatch or subwindow.
+;
+#X text 73 98 2) [table] - array of numbers.;
+#X obj 257 98 pddp/pddplink table-help.pd -text See table-help;
+#X text 73 120 3) graph (available from the "Put" menu).;
+#X obj 322 120 pddp/pddplink graph-help.pd -text See graph-help;
+#X text 62 122 *;
+#X text 93 224 * If you're new to Pd \, it's easy to get graphs mixed
+up with garrays (i.e. \, "Array" from the "Put" menu). For help on
+garrays \, click below:;
+#X obj 93 265 pddp/pddplink garray-help.pd -text Help patch for garray
+;
+#X obj 170 328 pddp/pddplink inlet-help.pd -text inlet-help;
+#X text 98 347 signal;
+#X obj 170 374 pddp/pddplink inlet~-help.pd -text inlet~-help;
+#X text 168 301 - inlets for messages can be created by using [inlet]
+objects on the canvas. See the links below for more details:;
+#X obj 0 398 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 78 407 cnv 17 3 90 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 406 anything;
+#X obj 170 433 pddp/pddplink outlet-help.pd -text outlet-help;
+#X text 98 453 signal;
+#X obj 170 480 pddp/pddplink outlet~-help.pd -text outlet~-help;
+#X text 168 406 - outlets for messages can be created by using [outlet]
+objects on the canvas. See the links below for more details:;
+#X text 168 453 - outlets for signals can be created by using [outlet~]
+objects on the canvas. See the links below for more details:;
+#X text 168 347 - inlets for signals can be created by using [inlet~]
+objects on the canvas. See the links below for more details:;
+#X text 98 512 (5);
+#X text 168 512 - canvas arguments are 5 floats which are not directly
+accessible: topLeftX topLeftY canvasWidth canvasHeight fontSize.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 101 575 pddp/pddplink ../3.audio.examples/G05.execution.order.pd
+-text doc/3.audio.examples/G05.execution.order.pd;
+#X text 11 23 Pure Data document window;
diff --git a/doc/pddp/catch~-help.pd b/doc/pddp/catch~-help.pd
new file mode 100644
index 00000000..297618c8
--- /dev/null
+++ b/doc/pddp/catch~-help.pd
@@ -0,0 +1,85 @@
+#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 catch~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 423 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal;
+#X text 12 85 DESCRIPTION summing signal bus and nonlocal connection
+;
+#X text 12 25 NAME catch~;
+#X text 12 125 OUTLET_0 signal;
+#X text 12 205 RELEASE_DATE 2009;
+#X text 12 225 RELEASE_VERSION;
+#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 493 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;
+#N canvas 93 479 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 72 43 send~;
+#X obj 119 43 receive~;
+#X obj 181 43 inlet~;
+#X obj 231 43 outlet~;
+#X obj 22 43 throw~;
+#X text 8 2 [catch~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 460 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 224 268 0 0 0 0 - - -;
+#X obj 73 243 sig~ 50;
+#X obj 224 243 snapshot~;
+#X obj 73 149 sig~ 25;
+#X obj 267 193 loadbang;
+#X obj 267 218 metro 200;
+#X floatatom 358 268 0 0 0 0 - - -;
+#X obj 358 243 snapshot~;
+#X msg 89 172 set signal2;
+#X msg 90 196 set signal1;
+#X text 98 459 signal;
+#X text 98 427 (none);
+#X text 11 23 summing signal bus and non-local connection;
+#X text 67 99 Any number of [throw~] objects can add into one [catch~]
+object (but two [catch~] objects cannot share the same name.);
+#X text 71 295 You can redirect [throw~] via a "set" message.;
+#X text 79 510 1) symbol atom;
+#X text 168 459 - the outgoing signal is the sum of all signals coming
+from [throw~] objects that share the same name as this [catch~].;
+#X text 168 510 - [catch~] takes one argument-- a symbol atom-- as
+its name. Other [throw~] objects may have the same name \, but there
+may be no other [catch~] objects that shares this name.;
+#X obj 474 3 catch~;
+#X obj 448 20 pddp/pddplink http://wiki.puredata.info/en/catch~ -text
+pdpedia: catch~;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 224 168 catch~ signal1;
+#X obj 358 168 catch~ signal2;
+#X obj 73 220 throw~ signal1;
+#X obj 73 268 throw~ signal1;
+#X connect 10 0 34 0;
+#X connect 11 0 9 0;
+#X connect 12 0 33 0;
+#X connect 13 0 14 0;
+#X connect 14 0 11 0;
+#X connect 14 0 16 0;
+#X connect 16 0 15 0;
+#X connect 17 0 33 0;
+#X connect 18 0 33 0;
+#X connect 31 0 11 0;
+#X connect 32 0 16 0;
diff --git a/doc/pddp/change-help.pd b/doc/pddp/change-help.pd
index 2a799401..425f85f5 100644
--- a/doc/pddp/change-help.pd
+++ b/doc/pddp/change-help.pd
@@ -1,52 +1,107 @@
-#N canvas 33 5 471 644 10;
-#X floatatom 23 489 0 0 0;
-#X floatatom 23 400 0 0 0;
-#X floatatom 61 416 0 0 0;
-#X obj 66 15 change;
-#X text 114 16 - ELIMINATE REDUNDANCY IN A NUMBER STEAM;
-#X msg 61 438 set \$1;
-#X text 106 438 set the value;
-#X text 60 400 if different from current value \, output and set;
-#X obj 23 510 print;
-#X msg 16 81 1;
-#X msg 44 81 1;
-#X msg 73 81 1;
-#X msg 106 80 0;
-#X text 14 65 Click from left to right...;
-#X obj 16 112 change;
-#X obj 16 133 print;
-#X text 51 133 Watch terminal window.;
-#X text 12 42 The change object outputs its input only when it changes.
-;
-#X text 15 160 [change] will accept a float as a creation argument.
-That creation argument will define the inital value.;
-#X obj 19 225 change 6.5;
-#X obj 19 248 print;
-#X msg 19 196 6.5;
-#X msg 49 196 5.5;
-#X msg 191 285 bang;
-#X text 20 318 It's important to note that when [change] receives a
-number in its inlet \, that number is outputted (if its different than
-the currently stored value) and then stored.;
-#X obj 23 467 change;
-#X text 19 365 The "set" method can be used to store a number in the
-object without outputting that value.;
-#X text 22 585 This document was updated for Pd version 0.35 test 26
-by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X text 17 269 Sending a "bang" message to the inlet will force [change]
-to output its current value.;
-#X connect 0 0 8 0;
-#X connect 1 0 25 0;
-#X connect 2 0 5 0;
-#X connect 5 0 25 0;
-#X connect 9 0 14 0;
-#X connect 10 0 14 0;
-#X connect 11 0 14 0;
-#X connect 12 0 14 0;
-#X connect 14 0 15 0;
-#X connect 19 0 20 0;
-#X connect 21 0 19 0;
-#X connect 22 0 19 0;
-#X connect 23 0 19 0;
-#X connect 25 0 0 0;
+#N canvas 0 0 555 619 10;
+#X obj -1 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj -1 0 cnv 15 552 40 empty \$0-pddp.cnv.header change 3 12 0 18
+-204280 -1 0;
+#X obj -1 337 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This document was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 25 KEYWORDS control filter;
+#X text 12 85 DESCRIPTION eliminate redundancy in a number stream;
+#X text 12 45 NAME change;
+#X text 12 125 INLET_0 float bang set;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj -1 481 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj -1 524 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj -1 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8
+12 0 13 -228856 -1 0;
+#X obj 78 346 cnv 17 3 125 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 74 489 428 104 Related_objects 0;
+#X obj 15 31 spigot;
+#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 [change] Related Objects;
+#X obj 65 31 select;
+#X restore 101 597 pd Related_objects;
+#X obj 78 490 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 483 3 change;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/change -text
+pdpedia: change;
+#X msg 22 108 1;
+#X msg 50 108 1;
+#X msg 79 108 1;
+#X msg 112 107 0;
+#X text 20 90 Click from left to right...;
+#X obj 22 139 change;
+#X obj 22 160 print;
+#X text 61 161 watch the console;
+#X obj 22 218 change 6.5;
+#X obj 22 241 print;
+#X msg 22 189 6.5;
+#X msg 52 189 5.5;
+#X msg 88 190 bang;
+#X text 93 218 creation argument;
+#X text 98 345 bang;
+#X text 98 375 float;
+#X text 98 405 list;
+#X text 98 444 set;
+#X floatatom 210 271 0 0 0 0 - - -;
+#X floatatom 210 182 0 0 0 0 - - -;
+#X floatatom 248 198 0 0 0 0 - - -;
+#X msg 248 220 set \$1;
+#X text 293 220 set the value;
+#X text 247 179 if different from current value \, output and set;
+#X obj 210 292 print;
+#X obj 210 249 change;
+#X text 206 147 The "set" method can be used to store a number in the
+object without outputting that value.;
+#X text 98 490 float;
+#X text 11 23 eliminate redundancy in a number stream;
+#X text 167 543 - (optional) a number to specify the initial value.
+;
+#X text 168 345 - sending a bang message to the inlet will force [change]
+to output its current value.;
+#X text 168 375 - a float will be output only if it differs from the
+previous value of [change].;
+#X text 168 405 - lists will be truncated and the first element will
+be output only if it differs from the previous value of [change].;
+#X text 168 490 - if the incoming float was different than the previous
+value \, it will be sent to the outlet.;
+#X text 80 543 1) float;
+#X text 168 444 "set" followed by a value (e.g. \, "set 12") will set
+the value of [change] without outputting it.;
+#X text 18 59 The change object passes its input to the outlet only
+when it changes.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 12 0 17 0;
+#X connect 13 0 17 0;
+#X connect 14 0 17 0;
+#X connect 15 0 17 0;
+#X connect 17 0 18 0;
+#X connect 20 0 21 0;
+#X connect 22 0 20 0;
+#X connect 23 0 20 0;
+#X connect 24 0 20 0;
+#X connect 30 0 36 0;
+#X connect 31 0 37 0;
+#X connect 32 0 33 0;
+#X connect 33 0 37 0;
+#X connect 37 0 30 0;
diff --git a/doc/pddp/choice-help.pd b/doc/pddp/choice-help.pd
new file mode 100644
index 00000000..3665ecfa
--- /dev/null
+++ b/doc/pddp/choice-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 choice 3 12 0 18
+-204280 -1 0;
+#X obj 0 288 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 247 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version-0.30. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION search for a best match to an incoming list
+;
+#X text 12 25 NAME choice;
+#X text 12 125 INLET_0 list add clear print;
+#X text 12 145 OUTLET_0 float;
+#X text 12 45 KEYWORDS control storage analysis list_op;
+#X text 12 225 RELEASE_DATE 2009;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 383 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 448 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 512 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 297 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 103 479 428 110 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 [choice] Related Objects;
+#X obj 21 41 list;
+#X restore 101 597 pd Related_objects;
+#X obj 78 391 cnv 17 3 50 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 391 float;
+#X obj 484 3 choice;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/choice -text
+pdpedia: choice;
+#X obj 98 210 choice;
+#X msg 136 101 print;
+#X msg 124 78 clear;
+#X msg 98 54 add 1 0 0 \, add 0 1 0 \, add 0 0 1 \, add 1 1 1 \, add
+1 1 0;
+#X obj 174 186 pack 0 0 0;
+#X floatatom 279 140 0 0 0 0 - - -;
+#X floatatom 245 140 0 0 0 0 - - -;
+#X floatatom 212 140 0 0 0 0 - - -;
+#X obj 174 162 f;
+#X msg 174 140 bang;
+#X floatatom 98 231 0 0 0 0 - - -;
+#X obj 174 211 choice 1;
+#X floatatom 174 232 0 0 0 0 - - -;
+#X text 166 119 tweak the numbers and hit "bang" to input a list;
+#X text 98 296 list;
+#X text 98 323 add;
+#X text 98 340 clear;
+#X text 98 357 print;
+#X text 168 391 - [choice] outputs the index of the best match \, counting
+from zero. The quality of the match is the dot product of the two vectors
+after normalizing them \, i.e. \, the vector whose direction is closest
+to that of the input wins.;
+#X text 98 516 You can use numbers other than 0 and 1 to indicate relative
+strengths of the attributes \, or even use negative numbers to indicate
+opposites \, either in the incoming lists or in the stored ones.;
+#N canvas 92 415 428 146 More_about_choice 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [choice] More Info;
+#X text 19 36 You can use [choice] to choose interactively between
+a number of behaviors depending on their attributes. For example \,
+you might have stored a number of melodies \, of which some are syncopated
+\, some chromatic \, some are more than 100 years old \, some are bugle
+calls \, and some are Christmas carols. You could then ask to find
+a syncopated bugle call (1 \, 0 \, 0 \, 1 \, 0) and you'll get the
+thing most closely matching the request.;
+#X restore 101 571 pd More_about_choice;
+#X text 11 23 search for a best match to an incoming list;
+#X text 168 296 - when sent a list of numbers \, [choice] will output
+the index of the known vector that matches most closely.;
+#X text 168 323 - add vectors.;
+#X text 168 340 - delete all stored vectors.;
+#X text 168 357 - debugging printout.;
+#X text 80 467 1) float;
+#X text 97 255 The [choice] object holds a list of vectors \, each
+having up to ten elements.;
+#X text 168 467 - (optional) if given a nonzero creation argument \,
+[choice] tries to avoid repetitious outputs by weighting less recently
+output vectors preferentially.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 13 0 23 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
+#X connect 15 0 24 0;
+#X connect 16 0 13 0;
+#X connect 16 0 24 0;
+#X connect 17 0 13 0;
+#X connect 17 0 24 0;
+#X connect 18 0 17 2;
+#X connect 19 0 17 1;
+#X connect 20 0 21 1;
+#X connect 21 0 17 0;
+#X connect 22 0 21 0;
+#X connect 24 0 25 0;
diff --git a/doc/pddp/clip-help.pd b/doc/pddp/clip-help.pd
index f1df628f..ea550110 100644
--- a/doc/pddp/clip-help.pd
+++ b/doc/pddp/clip-help.pd
@@ -1,106 +1,146 @@
-#N canvas 3 22 569 590 10;
-#X obj 114 540 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 38 36 INLETS:;
-#X text 38 51 - LEFT:;
-#X text 32 230 - RIGHT:;
-#X text 29 346 OUTLETS:;
-#X text 13 281 ARGUMENTS:;
-#X text 20 392 EXAMPLES:;
-#X text 20 488 SEE ALSO:;
-#N canvas 58 22 423 272 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 23 92 Externals and other object libraries;
-#X obj 45 54 int;
-#X obj 85 53 f;
-#X obj 123 53 min;
-#X obj 166 53 max;
-#X obj 206 53 clip~;
-#X obj 260 53 min~;
-#X obj 308 53 max~;
-#X text 44 125 - none that I am aware of;
-#X restore 114 488 pd Related_Objects;
-#N canvas 57 22 651 632 More_Info 0;
-#X text 40 187 LOW AND HIGH VALUES;
-#X text 304 34 Consider the following:;
-#X floatatom 101 66 5 0 0 0 - - -;
-#X floatatom 83 147 5 0 0 0 - - -;
-#X obj 83 121 min 50;
-#X obj 83 95 max -50;
-#X text 170 106 same as;
-#X obj 271 104 clip -50 50;
-#X floatatom 271 133 5 0 0 0 - - -;
-#X text 43 18 [clip] is a tool which combines the functionality of
+#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 297 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 243 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Dave Sabine \, April 25 \, 2003 Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control filter;
+#X text 12 85 DESCRIPTION force a number to lie between two limits
+;
+#X text 12 25 NAME clip;
+#X text 12 125 INLET_0 float list;
+#X text 12 185 OUTLET_0 float;
+#X text 12 145 INLET_1 float;
+#X text 12 165 INLET_2 float;
+#X text 12 265 RELEASE_DATE 2009;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 415 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 458 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 533 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 306 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 46 488 428 102 Related_objects 0;
+#X obj 234 43 int;
+#X obj 274 42 f;
+#X obj 22 42 min;
+#X obj 65 42 max;
+#X obj 105 42 clip~;
+#X obj 149 42 min~;
+#X obj 191 42 max~;
+#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 obj 78 424 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 362 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 361 float;
+#X obj 78 387 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 386 float;
+#X obj 487 3 clip;
+#X obj 460 20 pddp/pddplink http://wiki.puredata.info/en/clip -text
+pdpedia: clip;
+#X obj 306 179 clip -50 50;
+#X floatatom 306 205 5 0 0 0 - - -;
+#X floatatom 306 141 5 0 0 0 - - -;
+#X text 383 177 creation arguments;
+#X obj 128 179 clip;
+#X floatatom 138 140 5 0 0 0 - - -;
+#X floatatom 181 140 5 0 0 0 - - -;
+#X floatatom 224 140 5 0 0 0 - - -;
+#X floatatom 128 205 5 0 0 0 - - -;
+#X text 171 179 no arguments;
+#X text 205 108 list;
+#X msg 128 108 42 100 500;
+#X text 98 305 float;
+#X text 168 305 - a float at the left inlet will be clipped to the
+low and high values stored in the object.;
+#X text 98 424 float;
+#N canvas 102 355 428 206 clip_vs_min_and_max 0;
+#X text 10 70 Consider the following:;
+#X floatatom 50 96 5 0 0 0 - - -;
+#X floatatom 50 177 5 0 0 0 - - -;
+#X obj 50 151 min 50;
+#X obj 50 125 max -50;
+#X text 137 136 same as;
+#X obj 257 148 clip -50 50;
+#X floatatom 257 177 5 0 0 0 - - -;
+#X text 10 37 [clip] is a tool which combines the functionality of
[min] and [max] into a single object.;
-#X text 56 208 [clip] always assumes that the first argument (second
+#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] Relationship between [clip] and [min] \, [max];
+#X connect 1 0 4 0;
+#X connect 1 0 6 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 6 0 7 0;
+#X restore 101 567 pd clip_vs_min_and_max;
+#N canvas 99 243 428 294 low_and_high_values 0;
+#X text 35 32 [clip] always assumes that the first argument (second
inlet) is the low extreme of the range and the second argument (third
inlet) is the high extreme. However \, strange behaviour should be
expected if you mix these arguments up.;
-#X obj 64 331 clip -50 50;
-#X obj 190 325 clip 72 -104;
-#X floatatom 64 298 5 0 0 0 - - -;
-#X floatatom 64 360 5 0 0 0 - - -;
-#X floatatom 190 357 5 0 0 0 - - -;
-#X text 195 284 Numbers below 72 are clipped to 72;
-#X text 195 304 Numbers above -104 are clipped to -104;
-#X text 72 405 This could be used effectively to toggle between two
-numbers.;
-#X floatatom 401 383 5 0 0 0 - - -;
-#X obj 370 360 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 43 155 clip -50 50;
+#X obj 169 149 clip 72 -104;
+#X floatatom 43 122 5 0 0 0 - - -;
+#X floatatom 43 184 5 0 0 0 - - -;
+#X floatatom 169 181 5 0 0 0 - - -;
+#X text 174 104 Numbers below 72 are clipped to 72;
+#X text 174 124 Numbers above -104 are clipped to -104;
+#X floatatom 311 258 5 0 0 0 - - -;
+#X obj 311 214 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
-#X obj 402 352 clip 1 -1024;
+#X obj 311 236 clip 1 -1024;
+#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] Low and High Values;
+#X text 114 238 This could be used effectively;
+#X text 114 253 to toggle between two numbers.;
+#X connect 1 0 4 0;
#X connect 2 0 5 0;
-#X connect 2 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 7 0 8 0;
-#X connect 11 0 14 0;
-#X connect 12 0 15 0;
-#X connect 13 0 11 0;
-#X connect 13 0 12 0;
-#X connect 20 0 21 0;
-#X connect 21 0 19 0;
-#X restore 114 514 pd More_Info;
-#X obj 57 11 clip;
-#X text 105 51 Float - A float at the left inlet will be clipped to
-the low and high values stored in the object.;
-#X text 105 82 List - A list at the left inlet will be truncated to
-include only the first three elements. The first element in the list
-is the number which will be clipped. The second element will update
-the value stored at the second inlet. The third element will update
-the value stored at the third inlet.;
-#X text 25 180 - CENTER:;
-#X text 105 180 Float - A float at the second inlet is stored for later
-use. It will be used as either the low or high value at which to clip
-incoming floats at that left inlet.;
-#X text 105 231 Float - A float at the third inlet is stored for later
-use. It will be used as either the low or high value at which to clip
-incoming floats at that left inlet.;
-#X text 104 281 Two - [float] accepts two floats as creation arguments
-which initializes the first values to be stored in the object and duplicate
-the functions of the second and third inlet.;
-#X text 108 12 - FORCE A NUMBER INTO A RANGE;
-#X obj 122 428 clip -50 50;
-#X floatatom 122 455 5 0 0 0 - - -;
-#X floatatom 122 404 5 0 0 0 - - -;
-#X text 181 405 creation arguments;
-#X obj 411 466 clip;
-#X floatatom 410 437 5 0 0 0 - - -;
-#X floatatom 460 437 5 0 0 0 - - -;
-#X floatatom 510 437 5 0 0 0 - - -;
-#X floatatom 411 492 5 0 0 0 - - -;
-#X text 464 468 no arguments;
-#X text 450 405 list;
-#X text 158 541 - Dave Sabine \, April 25 \, 2003;
-#X msg 373 405 42 100 500;
-#X text 344 565 updated for Pd version 0.38-2;
-#X text 102 346 One - outputs a float which is limited to a range within
-the high and low values of the second and third inlet.;
-#X connect 19 0 20 0;
-#X connect 21 0 19 0;
-#X connect 23 0 27 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 1;
-#X connect 26 0 23 2;
-#X connect 31 0 23 0;
+#X connect 3 0 1 0;
+#X connect 3 0 2 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X restore 101 542 pd low_and_high_values;
+#X text 11 23 force a number to lie between two limits;
+#X text 168 424 - outputs a float which is limited to a range within
+the high and low values of the middle and last inlet.;
+#X text 167 477 - (optional) initial minimum value beyond which to
+clip the signal.;
+#X text 167 502 - (optional) initial maximum value beyond which to
+clip the signal.;
+#X text 80 477 1) float;
+#X text 80 502 2) float;
+#X text 168 386 - maximum value beyond which the incoming signal is
+clipped.;
+#X text 168 361 - minimum value beyond which the incoming signal is
+clipped.;
+#X text 98 335 list;
+#X text 168 335 - a list is distributed to the inlets of [clip].;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 17 0;
+#X connect 18 0 16 0;
+#X connect 20 0 24 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 1;
+#X connect 23 0 20 2;
+#X connect 27 0 20 0;
diff --git a/doc/pddp/clip~-help.pd b/doc/pddp/clip~-help.pd
new file mode 100644
index 00000000..75d19e38
--- /dev/null
+++ b/doc/pddp/clip~-help.pd
@@ -0,0 +1,95 @@
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 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 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION restrict a signal to lie between two limits
+;
+#X text 12 25 NAME clip~;
+#X text 12 185 OUTLET_0 signal;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_1 float;
+#X text 12 165 INLET_2 float;
+#X text 12 265 RELEASE_DATE 2009;
+#X text 12 285 RELEASE_VERSION;
+#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/doc/pddp/closebang-abs.pd b/doc/pddp/closebang-abs.pd
new file mode 100644
index 00000000..3f3aec1b
--- /dev/null
+++ b/doc/pddp/closebang-abs.pd
@@ -0,0 +1,9 @@
+#N canvas 73 329 428 119 10;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheader empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [closebang-abs] Abstraction used in [closebang] help patch
+;
+#X text 19 37 This abstraction gets used in closebang-help.pd.;
+#X obj 22 62 closebang;
+#X obj 22 89 s from-closebang-abs;
+#X connect 3 0 4 0;
diff --git a/doc/pddp/closebang-help.pd b/doc/pddp/closebang-help.pd
index db116f8e..e1dac9a3 100644
--- a/doc/pddp/closebang-help.pd
+++ b/doc/pddp/closebang-help.pd
@@ -1,18 +1,63 @@
-#N canvas 81 22 549 570 10;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 104 464 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm
+#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 closebang 3 12 0
+18 -204280 -1 0;
+#X obj 0 456 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 245 494 344 META 0;
+#X text 12 85 TEMPLATE template-help.pd v0.1;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR IOhannes m zmölnig;
+#X text 12 185 WEBSITE;
+#X text 12 245 HELP_PATCH_AUTHORS IOhannes m zmölnig. Jonathan Wilkes
+revised the patch to conform to the PDDP template for Pd version 0.42.
;
-#X text 104 61 This object does not accept arguments of any type.;
-#X text 14 62 ARGUMENTS:;
-#X text 29 82 OUTLETS:;
-#X text 20 121 EXAMPLES:;
-#X text 21 463 SEE ALSO:;
-#X obj 21 18 initbang;
-#X text 38 43 INLETS:;
-#X text 104 43 (none);
-#X text 108 18 - SEND "bang" AUTOMATICALLY WHEN ABSTRACTION IS CLOSED
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 125 OUTLET_0 bang;
+#X text 12 25 NAME closebang;
+#X text 12 205 RELEASE_DATE 2006;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 484 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 538 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;
+#N canvas 76 487 428 102 Related_objects 0;
+#X obj 25 42 initbang;
+#X obj 86 42 loadbang;
+#X obj 150 42 bang;
+#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 [closebang] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 493 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 460 3 closebang;
+#X text 99 460 (none);
+#X text 98 493 bang;
+#X text 100 570 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm
;
-#X text 104 82 A "bang" message is sent automatically when the containing
-patch is closed. It is only trigger when the patch is an embedded object
-in another patch.;
+#X obj 430 20 pddp/pddplink http://wiki.puredata.info/en/closebang
+-text pdpedia: closebang;
+#X text 99 542 (none);
+#X text 11 23 send a bang when abstraction is closed;
+#X obj 112 236 r from-closebang-abs;
+#X obj 112 262 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 167 493 - a "bang" message is sent automatically when the containing
+patch is closed. It is only triggered when the patch is an embedded
+object in another patch.;
+#X obj 112 133 closebang-abs;
+#X text 109 158 Above is an abstraction that contains a [closebang]
+object connected to [send from-closebang-abs]. If you select the subpatch
+above in editmode and delete it \, the [closebang] object contained
+within will send a bang to the [receive] object below:;
+#X text 207 133 <- delete me;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 17 0;
diff --git a/doc/pddp/complex-mod~-help.pd b/doc/pddp/complex-mod~-help.pd
new file mode 100644
index 00000000..51b02a47
--- /dev/null
+++ b/doc/pddp/complex-mod~-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 complex-mod~ 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 46 242 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 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 GENRE help;
+#X text 12 45 KEYWORDS signal abstraction needs_work;
+#X text 12 85 DESCRIPTION complex modulator;
+#X text 12 25 NAME complex-mod~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_1 signal;
+#X text 12 165 INLET_2 float signal;
+#X text 12 185 OUTLET_0 signal;
+#X text 12 265 RELEASE_DATE 2009;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 480 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 538 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 text 98 542 (none);
+#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 obj 22 43 hilbert~;
+#X text 8 2 [complex_mod~] Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 79 385 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 79 489 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 79 409 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 408 float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 453 3 complex-mod~;
+#X text 11 23 complex modulator;
+#X floatatom 78 64 0 0 0 0 - - -;
+#X obj 78 194 complex-mod~;
+#X obj 78 92 phasor~ 440;
+#X obj 78 123 cos~;
+#X obj 113 146 cos~;
+#X obj 113 122 -~ 0.25;
+#X floatatom 147 169 0 0 0 0 - - -;
+#X text 140 212 right outlet;
+#X text 142 228 gives the other;
+#X text 140 244 sideband;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-mod-output 882 float 0;
+#X coords 0 1 882 -1 300 170 1 0 0;
+#X restore 244 127 graph;
+#X text 98 384 signal;
+#X obj 79 434 cnv 17 3 35 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 433 float;
+#X obj 79 511 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 168 384 - real part of a complex valued signal.;
+#X text 167 408 - imaginary part of a complex valued signal.;
+#X text 167 433 - ???;
+#X text 167 453 - ???;
+#X text 98 453 signal;
+#X text 98 308 The complex modulator takes two signals in which it
+considers to be the real and imaginary part of a complex-valued signal.
+It then does a complex multiplication by a sinusoud to shift all frequencies
+up or down by any frequency shift in Hz.;
+#X text 98 488 signal;
+#X text 168 488 - ???;
+#X text 98 510 signal;
+#X text 168 510 - ???;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 416 20 pddp/pddplink http://wiki.puredata.info/en/complex-mod~
+-text pdpedia: complex-mod~;
+#X obj 79 269 tabwrite~ \$0-mod-output;
+#X obj 39 222 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X connect 16 0 18 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 0;
+#X connect 19 0 17 0;
+#X connect 20 0 17 1;
+#X connect 21 0 20 0;
+#X connect 22 0 17 2;
+#X connect 44 0 43 0;
diff --git a/doc/pddp/cos-help.pd b/doc/pddp/cos-help.pd
new file mode 100644
index 00000000..4765ae98
--- /dev/null
+++ b/doc/pddp/cos-help.pd
@@ -0,0 +1,97 @@
+#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 cos 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 39 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS 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. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control trigonometry;
+#X text 12 85 DESCRIPTION cosine function;
+#X text 12 25 NAME cos;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 46 479 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 48 42 tan;
+#X obj 75 42 atan;
+#X obj 108 42 atan2;
+#X obj 148 42 exp;
+#X obj 176 42 log;
+#X obj 203 42 abs;
+#X obj 231 42 sqrt;
+#X obj 266 42 pow;
+#X obj 56 75 cos~;
+#X obj 88 75 osc~;
+#X obj 22 75 expr;
+#X obj 22 42 sin;
+#X text 7 1 [cos] Related Objects;
+#X restore 102 598 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 text 98 445 float;
+#X text 98 465 list;
+#X text 98 510 float;
+#X obj 78 511 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 396 190 0 0 0 0 - - -;
+#X floatatom 303 191 0 0 0 0 - - -;
+#X obj 210 156 sin;
+#X floatatom 87 111 0 0 0 0 - - -;
+#X floatatom 210 190 0 0 0 0 - - -;
+#X obj 87 151 * 6.28319;
+#X obj 87 131 / 360;
+#X obj 303 157 cos;
+#X obj 396 156 tan;
+#X text 150 151 2 x Pi;
+#X floatatom 87 171 0 0 0 0 - - -;
+#X text 150 171 Radian;
+#X obj 87 191 s radians;
+#X obj 210 130 r radians;
+#X text 84 228 Trigonometry functions take input in Radians. To find
+a radian \, simply divide a number by 360 (to make it a fraction of
+a circle) and multiply it by 2(Pi) where Pi is equal to approximately
+3.14159265.;
+#X text 83 333 [tan] will produce a number which represents the tangent
+of an angle.;
+#X text 83 289 [sin] and [cos] will return numbers between -1 and 1:
+the sine and cosine of a number repectively.;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/cos -text
+pdpedia: cos;
+#X obj 492 3 cos;
+#X text 11 23 cosine function;
+#X text 168 467 - a list will be truncated \, and the first element
+will be used as input.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 18 0;
+#X connect 17 0 20 0;
+#X connect 19 0 24 0;
+#X connect 20 0 19 0;
+#X connect 21 0 15 0;
+#X connect 22 0 14 0;
+#X connect 24 0 26 0;
+#X connect 27 0 16 0;
+#X connect 27 0 21 0;
+#X connect 27 0 22 0;
diff --git a/doc/pddp/cos~-help.pd b/doc/pddp/cos~-help.pd
new file mode 100644
index 00000000..a9b2ca3d
--- /dev/null
+++ b/doc/pddp/cos~-help.pd
@@ -0,0 +1,146 @@
+#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 cos~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 440 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 247 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.41. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal trigonometry;
+#X text 12 85 DESCRIPTION cosine waveshaper;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 25 NAME cos~;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 598 pd META;
+#X obj 0 477 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 532 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 560 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 105 486 428 103 Related_objects 0;
+#X obj 19 33 osc~;
+#X obj 68 33 tabread4~;
+#X obj 138 33 phasor~;
+#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 [cos~] Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 78 486 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 449 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 449 signal;
+#X text 98 486 signal;
+#X text 158 486 - [cos~] outputs the cosine of two pi times its signal
+input. So -1 \, 0 \, 1 and 2 give 1 out \, 0.5 gives -1 \, and so on.
+;
+#X text 98 536 (none);
+#X obj 486 3 cos~;
+#X obj 460 20 pddp/pddplink http://wiki.puredata.info/en/cos~ -text
+pdpedia: cos~;
+#X obj 131 240 cos~;
+#X obj 131 289 snapshot~;
+#X obj 131 192 sig~;
+#X floatatom 131 315 7 0 0 0 - - -;
+#X obj 131 165 * 0.01;
+#X floatatom 131 138 0 0 0 0 - - -;
+#X obj 198 255 metro 500;
+#X obj 198 229 r metro;
+#X text 194 165 Divide by 100;
+#X text 179 193 convert to audio;
+#X text 186 140 <-- Scroll to set input value;
+#X text 205 315 <-- output of the cos~ object;
+#X obj 459 127 loadbang;
+#X obj 459 151 s metro;
+#N canvas 107 147 428 410 cos~_vs_osc~ 0;
+#X obj 63 164 cos~;
+#X obj 63 136 phasor~;
+#X text 16 146 this:;
+#X text 165 139 is the same;
+#X text 166 158 as this:;
+#X obj 251 140 osc~;
+#X text 18 28 ( from audio tutorial E08.phase.mod.pd );
+#X obj 111 206 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 136 206 click to visualize;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array cos~-array1 100 float 3;
+#A 0 -0.753024 -0.792766 -0.829394 -0.862767 -0.892751 -0.919226 -0.94208
+-0.961235 -0.976614 -0.988159 -0.995823 -0.999576 -0.999404 -0.995308
+-0.987303 -0.975405 -0.959676 -0.94018 -0.916991 -0.890202 -0.859916
+-0.826254 -0.789346 -0.749339 -0.70638 -0.660644 -0.612314 -0.561581
+-0.508642 -0.453706 -0.396988 -0.33871 -0.279102 -0.218395 -0.156829
+-0.0946478 -0.0320953 0.0305825 0.0931407 0.155333 0.216916 0.277648
+0.337288 0.3956 0.452358 0.507339 0.560328 0.611116 0.659504 0.705303
+0.748333 0.788423 0.825405 0.859146 0.889513 0.916386 0.939661 0.959246
+0.975064 0.987053 0.995167 0.999358 0.999623 0.995963 0.988392 0.97694
+0.961651 0.942586 0.91982 0.893441 0.863544 0.830252 0.793699 0.75403
+0.7114 0.665977 0.617938 0.567472 0.514777 0.460057 0.403526 0.345411
+0.28594 0.225346 0.163868 0.101745 0.0392234 -0.0234532 -0.0860385
+-0.148284 -0.209948 -0.270786 -0.33056 -0.389036 -0.445985 -0.501182
+-0.554412 -0.605466 -0.654132 -0.700229;
+#X coords 0 1 99 -1 100 60 1;
+#X restore 64 328 graph;
+#X obj 64 278 tabwrite~ cos~-array1;
+#X msg 63 70 440;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array osc~-array1 100 float 3;
+#A 0 0.779374 0.738588 0.694902 0.648488 0.599526 0.548211 0.494742
+0.43933 0.382189 0.323544 0.263629 0.202679 0.140933 0.0786344 0.0160266
+-0.0466445 -0.109133 -0.171193 -0.232579 -0.293051 -0.352371 -0.410307
+-0.466632 -0.521125 -0.573571 -0.623766 -0.671511 -0.71661 -0.758893
+-0.798196 -0.834364 -0.867255 -0.896741 -0.922705 -0.945047 -0.963677
+-0.978512 -0.9895 -0.996602 -0.99979 -0.999052 -0.994391 -0.985825
+-0.973388 -0.957129 -0.937102 -0.913388 -0.886088 -0.855309 -0.82117
+-0.783807 -0.743366 -0.700006 -0.653896 -0.605216 -0.554151 -0.500911
+-0.445704 -0.388748 -0.330265 -0.270485 -0.209642 -0.147975 -0.085727
+-0.0231406 0.0395359 0.102057 0.164176 0.225651 0.28624 0.345705 0.403812
+0.460335 0.515044 0.567729 0.618184 0.66621 0.711621 0.754237 0.793891
+0.830428 0.863704 0.893581 0.919942 0.942691 0.961737 0.977007 0.98844
+0.995992 0.999633 0.999348 0.995134 0.987001 0.974993 0.959156 0.939553
+0.91626 0.889369 0.858986 0.825229;
+#X coords 0 1 99 -1 100 60 1;
+#X restore 250 328 graph;
+#X floatatom 63 101 5 0 0 0 - - -;
+#X obj 250 278 tabwrite~ osc~-array1;
+#X obj 111 236 metro 250;
+#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 [cos~] What's the difference between [cos~] and [osc~]?
+;
+#X text 18 48 [phasor~] and [cos~] together are equivalent to [osc~]
+;
+#X connect 0 0 10 0;
+#X connect 1 0 0 0;
+#X connect 5 0 14 0;
+#X connect 7 0 15 0;
+#X connect 11 0 13 0;
+#X connect 13 0 1 0;
+#X connect 13 0 5 0;
+#X connect 15 0 10 0;
+#X connect 15 0 14 0;
+#X restore 102 568 pd cos~_vs_osc~;
+#X text 11 23 cosine waveshaper;
+#X obj 4 598 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 16 0 17 0;
+#X connect 17 0 19 0;
+#X connect 17 0 19 0;
+#X connect 18 0 16 0;
+#X connect 20 0 18 0;
+#X connect 21 0 20 0;
+#X connect 22 0 17 0;
+#X connect 23 0 22 0;
+#X connect 28 0 29 0;
diff --git a/doc/pddp/cpole~-help.pd b/doc/pddp/cpole~-help.pd
new file mode 100644
index 00000000..22273ec2
--- /dev/null
+++ b/doc/pddp/cpole~-help.pd
@@ -0,0 +1,193 @@
+#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 cpole~ 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 39 245 494 405 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 245 LIBRARY internal;
+#X text 12 285 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 265 AUTHOR Miller Puckette;
+#X text 12 345 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION complex one-pole (recursive) filter \, raw
+;
+#X text 12 25 NAME cpole~;
+#X text 12 125 INLET_0 signal;
+#X text 12 205 OUTLET_0 signal;
+#X text 12 145 INLET_1 signal;
+#X text 12 165 INLET_2 signal;
+#X text 12 185 INLET_3 signal;
+#X text 12 225 OUTLET_1 signal;
+#X text 12 305 RELEASE_DATE 1997;
+#X text 12 325 RELEASE_VERSION;
+#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 486 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 543 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 27 280 428 309 Related_objects 0;
+#X obj 74 60 rzero~;
+#X obj 25 80 cpole~;
+#X obj 25 60 rpole~;
+#X obj 123 60 rzero_rev~;
+#X obj 74 80 czero~;
+#X obj 123 80 czero_rev~;
+#X text 201 60 real;
+#X text 200 81 complex;
+#X text 22 44 1-pole;
+#X text 71 44 1-zero;
+#X text 121 44 1-zero \, reversed;
+#X text 47 29 summary of raw filters:;
+#X text 18 184 User-friendly Filters;
+#X obj 21 213 lop~;
+#X obj 72 212 hip~;
+#X obj 124 213 bp~;
+#X obj 169 214 vcf~;
+#X obj 22 274 biquad~;
+#X text 18 250 Other Objects;
+#X text 18 113 Pd also provides a suite of user-friendly filters. This
+and other raw filters are provided for situations which the user-friendly
+ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
+for an introduction to the necessary theory.;
+#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 [cpole~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 433 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 296 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 296 signal;
+#X text 98 433 signal;
+#X obj 478 3 cpole~;
+#X obj 450 20 pddp/pddplink http://wiki.puredata.info/en/cpole~ -text
+pdpedia: cpole~;
+#X obj 57 132 osc~ 100;
+#X msg 65 155 clear;
+#X text 208 160 y[n] = y[n-1] + a[n] * x[n];
+#X obj 84 199 sig~;
+#X obj 121 200 sig~;
+#X obj 158 200 sig~;
+#X obj 56 230 cpole~ 0.9 0.4;
+#X msg 67 177 set 0.6 0.8;
+#X text 203 181 where y[n] is the output \, x[n] the input \, and a[n]
+the filter coefficient (all complex numbers). The filter is unstable
+if/when |a[n]|>1.;
+#X text 203 223 The transfer function is H(Z) = 1/(1 - aZ^-1).;
+#N canvas 45 205 428 355 test 0;
+#X obj 66 88 osc~;
+#X floatatom 66 65 5 0 0 0 - - -;
+#X obj 8 297 env~ 16384;
+#X floatatom 8 321 5 0 0 0 - - -;
+#X obj 94 117 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 66 115 *~;
+#X msg 75 142 set 1;
+#X floatatom 340 122 4 -1000 1000 0 - - -;
+#X obj 205 325 dac~;
+#X obj 205 289 *~;
+#X text 70 28 Stuff to test it:;
+#X obj 231 116 cos~;
+#X obj 67 237 cpole~;
+#X obj 251 75 phasor~;
+#X floatatom 251 54 5 0 0 0 - - -;
+#X floatatom 122 65 5 0 0 0 - - -;
+#X obj 150 117 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 122 115 *~;
+#X obj 122 88 phasor~;
+#X floatatom 314 52 5 0 0 0 - - -;
+#X obj 314 75 / 1000;
+#X obj 264 117 -~ 0.25;
+#X obj 264 139 cos~;
+#X obj 340 141 / 1000;
+#X obj 230 167 *~;
+#X obj 264 167 *~;
+#X obj 84 297 env~ 16384;
+#X floatatom 84 321 5 0 0 0 - - -;
+#X obj 237 285 dbtorms;
+#X floatatom 238 265 5 0 0 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 [cpole~] Test;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 1;
+#X connect 5 0 12 0;
+#X connect 6 0 12 0;
+#X connect 7 0 23 0;
+#X connect 9 0 8 0;
+#X connect 9 0 8 1;
+#X connect 11 0 24 0;
+#X connect 12 0 2 0;
+#X connect 12 0 9 0;
+#X connect 12 1 26 0;
+#X connect 13 0 21 0;
+#X connect 13 0 11 0;
+#X connect 14 0 13 0;
+#X connect 15 0 18 0;
+#X connect 16 0 17 1;
+#X connect 17 0 12 0;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 13 1;
+#X connect 21 0 22 0;
+#X connect 22 0 25 0;
+#X connect 23 0 25 1;
+#X connect 23 0 24 1;
+#X connect 24 0 12 2;
+#X connect 25 0 12 3;
+#X connect 26 0 27 0;
+#X connect 28 0 9 1;
+#X connect 29 0 28 0;
+#X restore 102 552 pd test;
+#X text 98 311 clear;
+#X text 98 326 set;
+#X obj 78 346 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 346 signal;
+#X obj 78 371 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 371 signal;
+#X obj 78 396 cnv 17 3 17 empty \$0-pddp.cnv.let.3 3 5 9 0 16 -228856
+-162280 0;
+#X obj 78 458 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 458 signal;
+#X text 11 23 complex one-pole (recursive) filter \, raw;
+#X text 98 396 signal;
+#X text 168 296 - signal to filter (real part).;
+#X text 168 311 - clear internal state to zero.;
+#X text 168 326 - set internal state (real & imaginary parts).;
+#X text 168 346 - signal to filter ( imaginary part ).;
+#X text 168 371 - filter coefficient ( real part ).;
+#X text 168 396 - filter coefficient ( imaginary part ).;
+#X text 169 504 - (optional) coefficient (real).;
+#X text 169 519 - (optional) coefficient (imaginary).;
+#X text 80 504 1) float;
+#X text 80 519 2) float;
+#X text 202 134 The action of [cpole~] is:;
+#X text 85 68 [cpole~] filters a complex audio signal (first two inlets)
+via a one-pole filter \, whose coefficients are controlled by creation
+arguments or by another complex audio signal (remaining two inlets).
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 102 572 pddp/pddplink ../3.audio.examples/H12.peaking.pd -text
+doc/3.audio.examples/H12.peaking.pd;
+#X connect 14 0 20 0;
+#X connect 15 0 20 0;
+#X connect 17 0 20 1;
+#X connect 18 0 20 2;
+#X connect 19 0 20 3;
+#X connect 21 0 20 0;
diff --git a/doc/pddp/cputime-help.pd b/doc/pddp/cputime-help.pd
index 17bce30b..6b372be8 100644
--- a/doc/pddp/cputime-help.pd
+++ b/doc/pddp/cputime-help.pd
@@ -1,112 +1,171 @@
-#N canvas 11 8 939 645 10;
-#X msg 43 113 bang;
-#X msg 18 91 bang;
-#X floatatom 18 157 0 0 0;
-#X text 90 159 Output is in milliseconds;
-#X text 53 91 Click here to start or reset;
-#X obj 52 545 time_measurements;
-#X obj 52 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 17 572 0 0 0;
-#X floatatom 108 585 0 0 0;
-#X floatatom 175 573 0 0 0;
-#X text 11 358 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 15 587 Logical Time;
-#X text 173 587 Real Time;
-#X text 107 601 CPU Time;
-#X obj 67 477 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 72 435 1 Measures elapsed time between two "bangs" from a [trigger]
-object.;
-#X text 87 469 2 Measures the amount of time Pd requires to turn on
-DSP and start an oscillator.;
-#X obj 445 484 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 445 17 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 472 36 WHY THE DISCREPANCIES BETWEEN CLOCKS?;
-#X text 475 59 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 obj 111 509 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 476 144 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 477 203 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 478 368 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.;
-#N canvas 0 0 456 306 related_objects_from_other_libraries 0;
-#X text 27 63 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 26 112 The best places to find information about Pd's libraries
-is:;
-#X text 23 134 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 25 149 or;
-#X text 25 164 iem.kug.ac.at/pdb/;
-#X obj 44 24 t3_timer;
-#X text 469 589 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X restore 482 539 pd related_objects_from_other_libraries;
-#X text 309 580 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 obj 602 508 metro;
-#X text 481 485 RELATED OBJECTS;
-#X obj 539 508 realtime;
-#X text 132 501 3 Measures the amount of time Pd requires count to
-three...please wait for approximately 3 seconds.;
-#X obj 25 15 cputime;
-#X text 80 14 -- measure CPU time;
-#X text 13 44 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 18 135 cputime;
-#X text 81 114 Click here to get elapsed CPU time. Click again...and
-again...to see periodic measurements from the start or reset time.
-Be patient.;
-#X text 11 185 [cputime] works like essentially like a stop-watch.
-Once it starts \, you can continue to "poll" [cputime] to view the
-elapsed time.;
-#X text 11 232 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 10 282 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 481 509 timer;
-#X text 472 419 MORE INFORMATION;
-#X text 477 438 More information about [cputime] can be found in the
-Pure Documentation reference folder 7.stuff/load-meter.pd;
-#X connect 0 0 34 1;
-#X connect 1 0 34 0;
-#X connect 5 0 7 0;
-#X connect 5 1 8 0;
-#X connect 5 2 9 0;
-#X connect 6 0 5 0;
-#X connect 14 0 5 1;
-#X connect 18 0 17 0;
-#X connect 21 0 5 2;
-#X connect 34 0 2 0;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control time;
+#X text 12 85 DESCRIPTION measure CPU time;
+#X text 12 125 INLET_0 bang;
+#X text 12 145 INLET_1 bang;
+#X text 12 165 OUTLET_0 float;
+#X text 12 25 NAME cputime;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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/doc/pddp/ctlin-help.pd b/doc/pddp/ctlin-help.pd
index bd4ecd33..c04bf13d 100644
--- a/doc/pddp/ctlin-help.pd
+++ b/doc/pddp/ctlin-help.pd
@@ -1,86 +1,127 @@
-#N canvas 261 0 448 656 10;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 55 31 ctlin;
-#X obj 97 31 pgmin;
-#X obj 140 30 bendin;
-#X obj 191 29 touchin;
-#X obj 252 29 polytouchin;
-#X obj 337 29 midiin;
-#X obj 388 28 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 161 85 touchout;
-#X obj 225 84 polytouchout;
-#X obj 314 84 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X obj 8 31 midiin;
-#X restore 88 534 pd other_midi_objects;
-#X obj 280 562 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 18 562 for an explanation of MIDI usage in Pd see:;
-#X obj 28 18 ctlin;
-#X obj 19 226 ctlin;
-#X floatatom 19 252 5 0 0;
-#X floatatom 33 272 5 0 0;
-#X floatatom 49 290 5 0 0;
-#X text 17 127 Arguments (optional): 1st argument (or only argument)
-indicates the controller number to process. The second argument \,
-if present \, indicates the channel number on which the controller
-is to be processed. If the second argument is absent [ctlin] reads
-all channels. If no arguments are preent [ctlin] reads all controller
-data on all channels.;
-#X text 66 221 Inlets: none. Reads data directly from the MIDI port
-;
-#X text 66 235 Outlets:;
-#X text 116 249 1st (leftmost): Controller value;
-#X text 118 265 Middle: controller number;
-#X text 118 285 rightmost: Channel number;
-#X text 17 317 If one comment is given (ctl. number) [ctlin] provides
-the user with only 2 outlets: ctl. value and channel no. If 2 arguments
-are given (ctl. no. & chan. no.) only one outlet (ctl. value) is given:
-;
-#X obj 24 383 ctlin 64;
-#X floatatom 24 417 5 0 0;
-#X floatatom 74 407 5 0 0;
-#X text 97 382 Process only controller no. 64 on all channels;
-#X text 7 430 ctl. value;
-#X text 83 420 Chan. no.;
-#X obj 25 455 ctlin 64 1;
-#X text 102 456 Process only controller 64 on channel 1;
-#X floatatom 25 481 5 0 0;
-#X text 22 496 ctl. value;
-#X obj 21 534 ctlout;
-#X text 18 515 See also:;
-#X text 13 51 The [ctlin] object reads control change messages directly
-from the MIDI port. See a MIDI-specification chart near you for control
-change message numbers and their meannings (MIDI implementation documents
-are freely available on the internet in c=various forms).;
-#X text 69 18 - read incoming Control Change messages;
-#X text 19 586 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 4 0 5 0;
-#X connect 4 1 6 0;
-#X connect 4 2 7 0;
-#X connect 15 0 16 0;
-#X connect 15 1 17 0;
-#X connect 21 0 23 0;
+#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 ctlin 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 51 245 494 358 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION read incoming Control Change messages;
+#X text 12 25 NAME ctlin;
+#X text 12 145 OUTLET_1 float;
+#X text 12 125 OUTLET_0 float;
+#X text 12 165 OUTLET_n float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 334 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 467 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 text 98 342 float;
+#N canvas 50 160 441 439 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 [ctlin] Related Objects;
+#X obj 75 79 ctlin;
+#X obj 25 106 pgmin;
+#X obj 25 79 bendin;
+#X obj 205 106 touchin;
+#X obj 69 106 polytouchin;
+#X obj 119 79 midiin;
+#X obj 149 106 sysexin;
+#X obj 183 166 noteout;
+#X obj 25 166 bendout;
+#X obj 161 193 touchout;
+#X obj 75 193 polytouchout;
+#X obj 127 166 midiout;
+#X obj 25 193 pgmout;
+#X obj 25 248 makenote;
+#X text 22 225 MIDI note construction:;
+#X text 22 139 MIDI output:;
+#X text 22 56 MIDI input:;
+#X obj 185 248 stripnote;
+#X obj 169 79 notein;
+#X text 182 225 MIDI note deconstruction:;
+#X obj 25 32 ctlout;
+#X text 22 290 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 21 369 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 22 271 Externals;
+#X obj 22 320 pddp/helplink maxlib/pitch;
+#X obj 22 335 pddp/helplink maxlib/score;
+#X obj 22 350 pddp/helplink maxlib/chord;
+#X obj 22 385 pddp/helplink cyclone/midiformat;
+#X obj 22 400 pddp/helplink cyclone/midiparse;
+#X obj 22 415 pddp/helplink cyclone/midiflush;
+#X restore 101 597 pd Related_objects;
+#X obj 483 3 ctlin;
+#X text 109 66 The [ctlin] object reads control change messages directly
+from the MIDI port. See a MIDI-specification chart near you for control
+change message numbers and their meannings (MIDI implementation documents
+are freely available on the internet in c=various forms).;
+#X text 98 310 (none);
+#X obj 78 343 cnv 17 3 17 empty \$0-pddp.cnv.let.1 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 367 float;
+#X obj 78 368 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 392 float;
+#X obj 78 393 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X obj 24 69 ctlin;
+#X floatatom 24 133 5 0 0 0 - - -;
+#X floatatom 37 112 5 0 0 0 - - -;
+#X floatatom 51 91 5 0 0 0 - - -;
+#X text 168 310 - [ctlin] reads data directly from the MIDI port;
+#X obj 120 136 ctlin 64;
+#X floatatom 120 177 5 0 0 0 - - -;
+#X floatatom 165 161 5 0 0 0 - - -;
+#X text 187 134 Process only controller no. 64 on all channels;
+#X text 103 193 ctl. value;
+#X text 172 176 Chan. no.;
+#X obj 116 223 ctlin 64 1;
+#X text 193 224 Process only controller 64 on channel 1;
+#X floatatom 116 249 5 0 0 0 - - -;
+#X text 113 264 ctl. value;
+#X obj 362 570 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 100 570 for an explanation of MIDI usage in Pd see:;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/ctlin -text
+pdpedia: ctlin;
+#X text 11 23 read incoming Control Change messages;
+#X text 168 486 - (optional) controller number to process. If no arguments
+are present [ctlin] reads all controller data on all channels.;
+#X text 168 521 - (optional) channel number on which the controller
+is to be processed. If the second argument is absent [ctlin] reads
+all channels.;
+#X text 168 411 If only one argument is given \, [ctlin] provides the
+user with only 2 outlets: ctl. value and channel no. If 2 arguments
+are given (ctl. no. & chan. no.) only one outlet (ctl. value) is given.
+;
+#X text 168 342 - controller value.;
+#X text 168 367 - controller number.;
+#X text 168 392 - channel number.;
+#X text 80 486 1) float;
+#X text 80 521 2) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 18 0;
+#X connect 17 1 19 0;
+#X connect 17 2 20 0;
+#X connect 22 0 23 0;
+#X connect 22 1 24 0;
+#X connect 28 0 30 0;
diff --git a/doc/pddp/ctlout-help.pd b/doc/pddp/ctlout-help.pd
index 506fecce..f0ed7408 100644
--- a/doc/pddp/ctlout-help.pd
+++ b/doc/pddp/ctlout-help.pd
@@ -1,90 +1,131 @@
-#N canvas 251 9 495 634 10;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 55 31 ctlin;
-#X obj 97 31 pgmin;
-#X obj 140 30 bendin;
-#X obj 191 29 touchin;
-#X obj 252 29 polytouchin;
-#X obj 337 29 midiin;
-#X obj 388 28 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 161 85 touchout;
-#X obj 225 84 polytouchout;
-#X obj 314 84 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X obj 8 31 midiin;
-#X restore 89 430 pd other_midi_objects;
-#X obj 285 469 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 21 469 for an explanation of MIDI usage in Pd see:;
-#X obj 18 16 ctlout;
-#X text 14 43 The [ctlout] objects sends control messages to the MIDI
-port. See a MIDI specification chart for various controller numbers/values
-descriptions.;
-#X text 15 89 Arguments (optional):;
-#X text 24 105 1st (or only one) argument represents the controller
-number to transmit to.;
-#X text 24 137 2nd argument designates the channel number to transmit
-on. If no channel is specified it transmits on channel 1;
-#X floatatom 21 181 5 0 0;
-#X obj 21 231 ctlout;
-#X floatatom 39 197 5 0 0;
-#X floatatom 57 213 5 0 0;
-#X text 108 175 Inlets:;
-#X text 107 240 Outlets: none. Transmits directly to the MIDI port.
-;
-#X text 120 192 Left: (int) control value (0-127).;
-#X text 120 207 Middle: (int) controller number.;
-#X text 120 223 Right: (int) channel number.;
-#X text 21 264 NOTE: the left inlet accepts also a list of (2 or 3)
-integers where the first item is controller value \, second controller
-number and third the channel number.;
-#X obj 24 356 ctlout;
-#X obj 116 356 ctlout 64;
-#X obj 218 356 ctlout 64 2;
-#X obj 320 355 ctlout;
-#X msg 43 337 64;
-#X msg 73 337 2;
-#X msg 317 320 67 64 2;
-#X floatatom 218 318 5 0 0;
-#X floatatom 116 316 5 0 0;
-#X floatatom 24 316 5 0 0;
-#X msg 173 333 2;
-#X text 23 379 All these examples will transmit control no 64 on channel
-2 (remember to click the message boxes to initialize).;
-#X text 22 411 See also:;
-#X obj 25 430 ctlin;
-#X text 66 17 - send MIDI control messages to the MIDI port;
-#X text 19 515 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 8 0 9 0;
-#X connect 10 0 9 1;
-#X connect 11 0 9 2;
-#X connect 22 0 18 1;
-#X connect 23 0 18 2;
-#X connect 24 0 21 0;
-#X connect 25 0 20 0;
-#X connect 26 0 19 0;
-#X connect 27 0 18 0;
-#X connect 28 0 19 2;
+#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 ctlout 3 12 0 18
+-204280 -1 0;
+#X obj 0 353 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 29 246 494 362 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION send MIDI control messages to the MIDI port
+;
+#X text 12 25 NAME ctlout;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 OUTLET_0 float;
+#X text 12 165 OUTLET_1 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 471 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 499 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 361 float;
+#N canvas 43 183 441 412 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 [ctlout] Related Objects;
+#X obj 23 32 ctlin;
+#X obj 216 79 pgmin;
+#X obj 23 79 bendin;
+#X obj 78 106 touchin;
+#X obj 260 79 polytouchin;
+#X obj 117 79 midiin;
+#X obj 22 106 sysexin;
+#X obj 178 166 noteout;
+#X obj 75 166 ctlout;
+#X obj 23 166 bendout;
+#X obj 365 166 touchout;
+#X obj 279 166 polytouchout;
+#X obj 122 166 midiout;
+#X obj 230 166 pgmout;
+#X obj 23 220 makenote;
+#X text 20 197 MIDI note construction:;
+#X text 20 139 MIDI output:;
+#X text 20 56 MIDI input:;
+#X obj 183 220 stripnote;
+#X obj 167 79 notein;
+#X text 180 197 MIDI note deconstruction:;
+#X text 19 263 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 18 342 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 19 244 Externals;
+#X obj 19 293 pddp/helplink maxlib/pitch;
+#X obj 19 308 pddp/helplink maxlib/score;
+#X obj 19 323 pddp/helplink maxlib/chord;
+#X obj 19 358 pddp/helplink cyclone/midiformat;
+#X obj 19 373 pddp/helplink cyclone/midiparse;
+#X obj 19 388 pddp/helplink cyclone/midiflush;
+#X restore 101 597 pd Related_objects;
+#X text 98 475 (none);
+#X obj 78 362 cnv 17 3 45 empty \$0-pddp.cnv.let.1 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 417 float;
+#X obj 78 418 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 442 float;
+#X obj 78 443 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X obj 362 571 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 100 571 for an explanation of MIDI usage in Pd see:;
+#X obj 483 3 ctlout;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/ctlout -text
+pdpedia: ctlout;
+#X floatatom 42 114 5 0 0 0 - - -;
+#X obj 42 180 ctlout;
+#X floatatom 58 135 5 0 0 0 - - -;
+#X floatatom 75 156 5 0 0 0 - - -;
+#X text 131 110 The [ctlout] objects sends control messages to the
+MIDI port. See a MIDI specification chart for various controller numbers/values
+descriptions.;
+#X text 98 381 list;
+#X obj 129 236 ctlout;
+#X obj 221 236 ctlout 64;
+#X obj 323 236 ctlout 64 2;
+#X obj 422 225 ctlout;
+#X msg 145 212 64;
+#X msg 176 213 2;
+#X msg 422 203 67 64 2;
+#X floatatom 323 192 5 0 0 0 - - -;
+#X floatatom 221 191 5 0 0 0 - - -;
+#X floatatom 129 191 5 0 0 0 - - -;
+#X msg 272 213 2;
+#X text 128 259 All these examples will transmit control no 64 on channel
+2 (remember to click the message boxes to initialize).;
+#X text 11 23 send MIDI control messages to the MIDI port;
+#X text 168 533 - (optional) channel number to transmit on. If the
+second argument is left off \, [ctlout] transmits on channel 1 .;
+#X text 168 361 - (int) control value (0-127).;
+#X text 168 417 - (int) controller number.;
+#X text 168 442 - (int) channel number.;
+#X text 168 475 - [ctlin] transmits directly to the MIDI port.;
+#X text 168 518 - (optional) controller number to transmit to.;
+#X text 80 518 1) float;
+#X text 80 533 2) float;
+#X text 168 381 - a list to the left inlet is distributed among the
+inlets of [ctlout].;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 19 0 20 0;
+#X connect 21 0 20 1;
+#X connect 22 0 20 2;
+#X connect 29 0 25 1;
+#X connect 30 0 25 2;
+#X connect 31 0 28 0;
+#X connect 32 0 27 0;
+#X connect 33 0 26 0;
+#X connect 34 0 25 0;
+#X connect 35 0 26 2;
diff --git a/doc/pddp/czero_rev~-help.pd b/doc/pddp/czero_rev~-help.pd
new file mode 100644
index 00000000..cbc1dbe2
--- /dev/null
+++ b/doc/pddp/czero_rev~-help.pd
@@ -0,0 +1,211 @@
+#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 czero_rev~ 3 12
+0 18 -204280 -1 0;
+#X obj 0 303 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 47 228 494 384 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 245 LIBRARY internal;
+#X text 12 285 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 265 AUTHOR Miller Puckette;
+#X text 12 345 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION complex one-zero (non-recursive) "reverse"
+filter \, raw;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 25 NAME czero_rev~;
+#X text 12 125 INLET_0 signal set clear;
+#X text 12 145 INLET_1 signal;
+#X text 12 165 INLET_2 signal;
+#X text 12 185 INLET_3 signal;
+#X text 12 205 OUTLET_0 signal;
+#X text 12 225 OUTLET_1 signal;
+#X text 12 305 RELEASE_DATE 1997;
+#X text 12 325 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 440 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 559 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 41 281 428 309 Related_objects 0;
+#X obj 74 60 rzero~;
+#X obj 25 80 cpole~;
+#X obj 25 60 rpole~;
+#X obj 123 60 rzero_rev~;
+#X obj 74 80 czero~;
+#X obj 123 80 czero_rev~;
+#X text 201 60 real;
+#X text 200 81 complex;
+#X text 22 44 1-pole;
+#X text 71 44 1-zero;
+#X text 121 44 1-zero \, reversed;
+#X text 47 29 summary of raw filters:;
+#X text 19 184 User-friendly Filters;
+#X obj 22 213 lop~;
+#X obj 73 212 hip~;
+#X obj 125 213 bp~;
+#X obj 170 214 vcf~;
+#X obj 23 274 biquad~;
+#X text 19 250 Other Objects;
+#X text 19 113 Pd also provides a suite of user-friendly filters. This
+and other raw filters are provided for situations which the user-friendly
+ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
+for an introduction to the necessary theory.;
+#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 [czero_rev~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 449 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 312 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 312 signal;
+#X text 98 449 signal;
+#N canvas 3 174 550 380 test 0;
+#X obj 152 296 env~ 16384;
+#X floatatom 152 320 5 0 0 0 - - -;
+#X floatatom 499 76 4 -1000 1000 0 - - -;
+#X obj 349 324 dac~;
+#X obj 349 288 *~;
+#X obj 390 70 cos~;
+#X floatatom 298 8 5 0 0 0 - - -;
+#X obj 298 31 phasor~;
+#X floatatom 398 14 5 0 0 0 - - -;
+#X obj 397 39 / 1000;
+#X obj 423 71 -~ 0.25;
+#X obj 423 93 cos~;
+#X obj 499 95 / 1000;
+#X obj 389 121 *~;
+#X obj 423 121 *~;
+#X obj 228 296 env~ 16384;
+#X floatatom 228 320 5 0 0 0 - - -;
+#X obj 381 284 dbtorms;
+#X floatatom 382 264 5 0 0 0 - - -;
+#X obj 117 89 phasor~;
+#X floatatom 115 60 5 0 0 0 - - -;
+#X text 77 13 Stuff to test it:;
+#X obj 131 149 cpole~;
+#X obj 241 262 *~ -1;
+#X obj 21 261 env~ 16384;
+#X floatatom 21 285 5 0 0 0 - - -;
+#X obj 50 312 env~ 16384;
+#X floatatom 50 336 5 0 0 0 - - -;
+#X obj 138 181 cpole~;
+#X obj 146 216 czero_rev~;
+#X obj 154 264 czero_rev~;
+#X msg 204 103 clear;
+#X obj 262 50 cos~;
+#X obj 261 83 *~ 0.02;
+#X obj 193 50 sig~ 1.1;
+#X obj 448 296 *~;
+#X connect 0 0 1 0;
+#X connect 2 0 12 0;
+#X connect 4 0 3 0;
+#X connect 5 0 13 0;
+#X connect 6 0 7 0;
+#X connect 7 0 32 0;
+#X connect 8 0 9 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 0;
+#X connect 11 0 14 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 22 2;
+#X connect 13 0 28 2;
+#X connect 13 0 29 2;
+#X connect 13 0 30 2;
+#X connect 14 0 22 3;
+#X connect 14 0 23 0;
+#X connect 14 0 29 3;
+#X connect 15 0 16 0;
+#X connect 17 0 4 1;
+#X connect 17 0 35 1;
+#X connect 18 0 17 0;
+#X connect 19 0 22 0;
+#X connect 19 0 24 0;
+#X connect 19 0 35 0;
+#X connect 20 0 19 0;
+#X connect 22 0 28 0;
+#X connect 22 1 28 1;
+#X connect 23 0 28 3;
+#X connect 23 0 30 3;
+#X connect 24 0 25 0;
+#X connect 26 0 27 0;
+#X connect 28 0 26 0;
+#X connect 28 0 29 0;
+#X connect 28 1 29 1;
+#X connect 29 0 30 0;
+#X connect 29 1 30 1;
+#X connect 30 0 0 0;
+#X connect 30 0 4 0;
+#X connect 30 1 15 0;
+#X connect 31 0 22 0;
+#X connect 31 0 28 0;
+#X connect 32 0 33 0;
+#X connect 33 0 5 0;
+#X connect 33 0 10 0;
+#X connect 34 0 33 0;
+#X connect 35 0 3 1;
+#X restore 101 568 pd test;
+#X text 98 327 clear;
+#X text 98 342 set;
+#X obj 78 362 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 362 signal;
+#X obj 78 387 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 387 signal;
+#X obj 78 412 cnv 17 3 17 empty \$0-pddp.cnv.let.3 3 5 9 0 16 -228856
+-162280 0;
+#X text 98 412 signal;
+#X obj 78 474 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 474 signal;
+#X obj 460 3 czero_rev~;
+#X obj 430 20 pddp/pddplink http://wiki.puredata.info/en/czero_rev~
+-text pdpedia: czero_rev~;
+#X text 198 196 where y[n] is the output \, x[n] the input \, and a[n]
+the filter coefficient (all complex numbers). The filter is always
+stable.;
+#X text 261 176 y[n] = - a[n] * x[n] + x[n-1];
+#X text 199 245 The transfer function is H(Z) = -a + Z^-1.;
+#X obj 52 127 osc~ 100;
+#X msg 60 152 clear;
+#X obj 86 203 sig~;
+#X obj 120 225 sig~;
+#X obj 156 245 sig~;
+#X msg 67 178 set 0.6 0.8;
+#X obj 51 268 czero_rev~ 0.9 0.4;
+#X text 11 23 complex one-zero (non-recursive) "reverse" filter \,
+raw;
+#X text 158 312 - signal to filter (real part).;
+#X text 158 327 - clear internal state to zero.;
+#X text 158 342 - set internal state (real & imaginary parts).;
+#X text 158 362 - signal to filter ( imaginary part ).;
+#X text 158 387 - filter coefficient ( real part ).;
+#X text 158 412 - filter coefficient ( imaginary part ).;
+#X text 157 521 - (optional) filter coefficient (real part).;
+#X text 157 536 - (optional) filter coefficient (imaginary part).;
+#X text 80 521 1) float;
+#X text 80 536 2) float;
+#X text 93 57 [czero_rev~] filters a complex audio signal (first two
+inlets) via a one-zero filter \, whose coefficients are controlled
+by creation arguments or by another complex audio signal (remaining
+two inlets). The impulse response is that of "rzero" reversed in time.
+;
+#X text 201 155 The action of [czero_rev~] is:;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 28 0 34 0;
+#X connect 29 0 34 0;
+#X connect 30 0 34 1;
+#X connect 31 0 34 2;
+#X connect 32 0 34 3;
+#X connect 33 0 34 0;
diff --git a/doc/pddp/czero~-help.pd b/doc/pddp/czero~-help.pd
new file mode 100644
index 00000000..193a4bf4
--- /dev/null
+++ b/doc/pddp/czero~-help.pd
@@ -0,0 +1,195 @@
+#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 czero~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 288 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 206 491 389 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 245 LIBRARY internal;
+#X text 12 285 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 265 AUTHOR Miller Puckette;
+#X text 12 345 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION complex one-zero (non-recursive) filter \,
+raw;
+#X text 12 25 NAME czero~;
+#X text 12 125 INLET_0 signal clear set;
+#X text 12 145 INLET_1 signal;
+#X text 12 165 INLET_2 signal;
+#X text 12 185 INLET_3 signal;
+#X text 12 205 OUTLET_0 signal;
+#X text 12 225 OUTLET_1 signal;
+#X text 12 305 RELEASE_DATE 1997;
+#X text 12 325 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 425 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 543 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 63 281 428 309 Related_objects 0;
+#X obj 75 61 rzero~;
+#X obj 26 81 cpole~;
+#X obj 26 61 rpole~;
+#X obj 124 61 rzero_rev~;
+#X obj 75 81 czero~;
+#X obj 124 81 czero_rev~;
+#X text 202 61 real;
+#X text 201 82 complex;
+#X text 23 45 1-pole;
+#X text 72 45 1-zero;
+#X text 122 45 1-zero \, reversed;
+#X text 48 30 summary of raw filters:;
+#X text 22 185 User-friendly Filters;
+#X obj 25 214 lop~;
+#X obj 76 213 hip~;
+#X obj 128 214 bp~;
+#X obj 173 215 vcf~;
+#X obj 26 275 biquad~;
+#X text 22 251 Other Objects;
+#X text 22 114 Pd also provides a suite of user-friendly filters. This
+and other raw filters are provided for situations which the user-friendly
+ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
+for an introduction to the necessary theory.;
+#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 [czero~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 434 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 297 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 297 signal;
+#X text 98 434 signal;
+#N canvas 21 185 498 375 test 0;
+#X obj 88 282 env~ 16384;
+#X floatatom 88 306 5 0 0 0 - - -;
+#X floatatom 420 107 4 -1000 1000 0 - - -;
+#X obj 285 310 dac~;
+#X obj 285 274 *~;
+#X obj 311 101 cos~;
+#X floatatom 237 46 5 0 0 0 - - -;
+#X obj 265 98 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 237 96 *~;
+#X obj 237 69 phasor~;
+#X floatatom 318 52 5 0 0 0 - - -;
+#X obj 318 75 / 1000;
+#X obj 344 102 -~ 0.25;
+#X obj 344 124 cos~;
+#X obj 420 126 / 1000;
+#X obj 310 152 *~;
+#X obj 344 152 *~;
+#X obj 164 282 env~ 16384;
+#X floatatom 164 306 5 0 0 0 - - -;
+#X obj 317 270 dbtorms;
+#X floatatom 318 250 5 0 0 0 - - -;
+#X obj 181 206 czero~;
+#X floatatom 137 118 4 -1000 1000 0 - - -;
+#X obj 28 112 cos~;
+#X obj 48 71 phasor~;
+#X floatatom 51 46 5 0 0 0 - - -;
+#X obj 61 113 -~ 0.25;
+#X obj 61 135 cos~;
+#X obj 137 137 / 1000;
+#X obj 27 163 *~;
+#X obj 61 163 *~;
+#X text 150 13 Stuff to test it:;
+#X connect 0 0 1 0;
+#X connect 2 0 14 0;
+#X connect 4 0 3 0;
+#X connect 4 0 3 1;
+#X connect 5 0 15 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 1;
+#X connect 8 0 21 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
+#X connect 11 0 5 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 16 0;
+#X connect 14 0 16 1;
+#X connect 14 0 15 1;
+#X connect 15 0 21 2;
+#X connect 16 0 21 3;
+#X connect 17 0 18 0;
+#X connect 19 0 4 1;
+#X connect 20 0 19 0;
+#X connect 21 0 0 0;
+#X connect 21 0 4 0;
+#X connect 21 1 17 0;
+#X connect 22 0 28 0;
+#X connect 23 0 29 0;
+#X connect 24 0 26 0;
+#X connect 24 0 23 0;
+#X connect 25 0 24 0;
+#X connect 26 0 27 0;
+#X connect 27 0 30 0;
+#X connect 28 0 30 1;
+#X connect 28 0 29 1;
+#X connect 29 0 21 0;
+#X connect 30 0 21 1;
+#X restore 102 552 pd test;
+#X text 98 312 clear;
+#X text 98 327 set;
+#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 347 signal;
+#X obj 78 372 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 372 signal;
+#X obj 78 397 cnv 17 3 17 empty \$0-pddp.cnv.let.3 3 5 9 0 16 -228856
+-162280 0;
+#X text 98 397 signal;
+#X obj 78 459 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 459 signal;
+#X obj 42 111 osc~ 100;
+#X msg 50 136 clear;
+#X obj 69 187 sig~;
+#X obj 96 209 sig~;
+#X obj 126 229 sig~;
+#X msg 57 162 set 0.6 0.8;
+#X obj 41 252 czero~ 0.9 0.4;
+#X obj 477 3 czero~;
+#X obj 450 20 pddp/pddplink http://wiki.puredata.info/en/czero~ -text
+pdpedia: czero~;
+#X text 179 152 The action of czero~ is:;
+#X text 238 173 y[n] = x[n] - a[n] * x[n-1];
+#X text 176 193 where y[n] is the output \, x[n] the input \, and a[n]
+the filter coefficient (all complex numbers). The filter is always
+stable.;
+#X text 175 248 The transfer function is H(Z) = 1 - aZ^-1.;
+#X text 11 23 complex one-zero (non-recursive) filter \, raw;
+#X text 168 297 - signal to filter (real part).;
+#X text 168 312 - clear internal state to zero.;
+#X text 168 327 - set internal state (real & imaginary parts).;
+#X text 168 347 - signal to filter ( imaginary part ).;
+#X text 168 372 - filter coefficient ( real part ).;
+#X text 168 397 - filter coefficient ( imaginary part ).;
+#X text 167 506 - (optional) filter coefficient (real part).;
+#X text 167 521 - (optional) filter coefficient (imaginary part).;
+#X text 80 506 1) float;
+#X text 80 521 2) float;
+#X text 84 53 [czero~] filters a complex audio signal (first two inlets)
+via a one-zero filter \, whose coefficients are controlled by creation
+arguments or by another complex audio signal (remaining two inlets).
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 100 572 pddp/pddplink ../3.audio.examples/H12.peaking.pd -text
+doc/3.audio.examples/H12.peaking.pd;
+#X connect 23 0 29 0;
+#X connect 24 0 29 0;
+#X connect 25 0 29 1;
+#X connect 26 0 29 2;
+#X connect 27 0 29 3;
+#X connect 28 0 29 0;
diff --git a/doc/pddp/dac~-help.pd b/doc/pddp/dac~-help.pd
index fd007ae4..d1ad4638 100644
--- a/doc/pddp/dac~-help.pd
+++ b/doc/pddp/dac~-help.pd
@@ -1,68 +1,151 @@
-#N canvas 2 1 613 608 12;
-#X obj 104 540 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#N canvas 85 2 595 611 More_Info 0;
-#X text 16 13 MULTI-CHANNEL AUDIO;
-#X text 32 40 All sound cards are capable of at least two channels
-of audio. Pd supports these two channels by default and uses your system's
-generic audio drivers to communicate with your hardware. However \,
-for faster input/output and for more than two channels of audio \,
-PD incorporates the use of "PortAudio" which uses ASIO drivers to communicate
-with your hardware. So \, to instruct Pd to use more than two channels
-of audio \, your command line should read like below:;
-#X text 93 182 c:/pd/bin/pd.exe -pa -inchannels 8 -outchannels 8;
-#X text 32 211 The "-pa" switch means "PortAudio". This switch is new
-as of Pd version 0.37 TEST 4 and replaces the old "-asio" switch.;
-#X text 32 271 The "-inchannels" and "-outchannels" switches can be
-summarized by using "-channels 8" because currently PortAudio requires
-that the number of incoming and outgoing channels must be equal. This
-may change in the Pd's future...;
-#X text 32 361 To further optimize Pd's usage of your audio hardware
-\, you can explore the following:;
-#X text 42 402 - audiobuf;
-#X text 43 420 - blocksize;
-#X text 42 436 - audioindev;
-#X text 42 454 - audiooutdev;
-#X text 38 480 With the right hardware \, Pd can manage audio input
-and output with lower than 10 milliseconds of latency.;
-#X restore 104 514 pd More_Info;
-#N canvas 85 2 397 246 Related_Objects 0;
-#X text 25 8 Native Pd Objects;
-#X text 25 92 Externals and other object libraries;
-#X obj 98 46 switch~;
-#X obj 171 46 block~;
-#X obj 45 46 adc~;
-#X restore 104 488 pd Related_Objects;
-#X text 16 107 ARGUMENTS:;
-#X text 23 344 EXAMPLES:;
-#X text 20 487 SEE ALSO:;
-#X text 30 53 PURPOSE:;
-#X text 152 541 - Dave Sabine \, May 6 \, 2003;
-#X text 153 346 default stereo signals: same as;
-#X text 280 435 all channels on an 8-channel device;
-#X obj 33 20 dac~;
-#X text 108 18 - AUDIO OUTPUT: DIGITAL/ANALOG CONVERTER SIGNAL;
-#X text 104 53 [dac~] is an acronym meaning "Digital/Analog Converter
-Signal" and is Pd's interface to send audio information to the audio
-channels of your soundcard(s).;
-#X text 106 106 The object defaults to 2 outgoing audio channels (usually
-a left and right stereo pair). Any number of arguments (integers) can
-be used to define multiple output channels - each integer corresponds
-to an output channel on your audio hardware.;
-#X text 36 188 INLETS:;
-#X text 108 188 Signal: the number of inlets correspond with the number
-of arguments - each inlet represents an output channel on your audio
-hardware which corresponds to the argument you provide. If no arguments
-are provided \, then there are two inlets which represent audio channels
-1 and 2 on your computer's sound card.;
-#X text 107 290 The information at each inlet should be an audio signal
-(i.e. the object operates at 'audio-rate') and therefore must be connected
-to an audio outlet on a related object.;
-#X obj 109 346 dac~;
-#X obj 411 348 dac~ 1 2;
-#X obj 109 373 dac~ 5;
-#X text 167 374 a mono signal to channel 5;
-#X obj 109 404 dac~ 1 3 8 6 11 15 19 22 23 24 36;
-#X text 383 405 11 channels of output;
-#X obj 109 434 dac~ 1 2 3 4 5 6 7 8;
+#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 dac~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 259 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION audio output;
+#X text 12 25 NAME dac~;
+#X text 12 125 INLET_n signal;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 355 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 383 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 471 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 268 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#N canvas 41 417 428 171 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 [dac~] Related Objects;
+#X obj 63 42 switch~;
+#X text 115 42 [block~];
+#X text 20 65 (Note: having a [block~] and a [switch~] in the same
+window causes an error \, which is why [block~] is shown above as a
+comment.);
+#X text 20 117 Externals;
+#X text 19 142 [shoutcast~];
+#X text 106 142 [oggcast~];
+#X text 181 142 [mp3cast~];
+#X obj 174 42 throw~;
+#X obj 226 42 catch~;
+#X obj 278 42 send~;
+#X obj 322 42 receive~;
+#X obj 23 42 adc~;
+#X restore 101 597 pd Related_objects;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/dac~ -text
+pdpedia: dac~;
+#X obj 492 3 dac~;
+#X text 109 133 default stereo signals: same as;
+#X text 198 221 all channels on an 8-channel device;
+#X obj 65 133 dac~;
+#X obj 367 135 dac~ 1 2;
+#X obj 65 160 dac~ 5;
+#X text 123 159 a mono signal to channel 5;
+#X obj 65 191 dac~ 1 3 8 6 11 15 19 22 23 24 36;
+#X text 280 191 11 channels of output;
+#X obj 65 221 dac~ 1 2 3 4 5 6 7 8;
+#X text 98 359 (none);
+#X text 98 267 signal;
+#X text 168 401 - the object defaults to 2 outgoing audio channels
+(usually a left and right stereo pair). Any number of arguments (integers)
+can be used to define multiple output channels - each integer corresponds
+to an output channel on your audio hardware.;
+#X text 168 267 - the number of inlets correspond with the number of
+arguments - each inlet represents an output channel on your audio hardware
+which corresponds to the argument you provide. If no arguments are
+provided \, then there are two inlets which represent audio channels
+1 and 2 on your computer's sound card.;
+#X text 98 475 [dac~] is an acronym meaning "Digital/Analog Converter
+Signal" and is Pd's interface to send audio information to the audio
+channels of your soundcard(s).;
+#N canvas 37 90 428 471 Multi-channel_audio 0;
+#X text 19 38 All sound cards are capable of at least two channels
+of audio. Pd supports these two channels by default and uses your system's
+generic audio drivers to communicate with your hardware. However \,
+for faster input/output and for more than two channels of audio \,
+PD incorporates the use of "PortAudio" which uses ASIO drivers to communicate
+with your hardware. So \, to instruct Pd to use more than two channels
+of audio \, your command line should read like below:;
+#X text 80 145 c:/pd/bin/pd.exe -pa -inchannels 8 -outchannels 8;
+#X text 19 174 The "-pa" switch means "PortAudio". This switch is new
+as of Pd version 0.37 TEST 4 and replaces the old "-asio" switch.;
+#X text 19 234 The "-inchannels" and "-outchannels" switches can be
+summarized by using "-channels 8" because currently PortAudio requires
+that the number of incoming and outgoing channels must be equal. This
+may change in the Pd's future...;
+#X text 19 314 To further optimize Pd's usage of your audio hardware
+\, you can explore the following:;
+#X text 29 355 - audiobuf;
+#X text 30 373 - blocksize;
+#X text 29 389 - audioindev;
+#X text 29 407 - audiooutdev;
+#X text 25 433 With the right hardware \, Pd can manage audio input
+and output with lower than 10 milliseconds of latency.;
+#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 [dac~] Multi-channel Audio;
+#X restore 101 545 pd Multi-channel_audio;
+#X text 80 401 n) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 66 51 osc~ 880;
+#X obj 66 80 *~;
+#X obj 66 106 *~ 0.1;
+#X obj 96 80 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
+;
+#X obj 455 51 pddp/dsp-reminder;
+#N canvas 84 189 428 347 sample_rate 0;
+#X text 19 37 [adc~] and [dac~] always operate at the sample rate that
+is specified in Pd's command line. By default \, the sample rate is
+44100 hz. But Pd operates any sample rate supported by standard audio
+hardware. Sample rates cannot be changed at run-time in Pd \, but must
+be stated in the command line when Pd is instantiated. As well \, two
+or more instances of Pd running simoultaneously can each be using different
+sample rates! Having said that \, Pd can easily upsample or downsample
+by using the [block~] object. Here are some example of the common sample
+rates:;
+#X text 19 191 c:/pd/bin/pd.exe -r 11025;
+#X text 19 221 c:/pd/bin/pd.exe -r 22050;
+#X text 19 281 c:/pd/bin/pd.exe -r 88200;
+#X text 19 176 c:/pd/bin/pd.exe -r 8000;
+#X text 19 206 c:/pd/bin/pd.exe -r 16000;
+#X text 19 236 c:/pd/bin/pd.exe -r 32000;
+#X text 19 251 c:/pd/bin/pd.exe -r 44100 CD Quality;
+#X text 19 266 c:/pd/bin/pd.exe -r 48000 DAT Quality;
+#X text 19 311 c:/pd/bin/pd.exe -r 192000 DVD-Audio Quality;
+#X text 19 296 c:/pd/bin/pd.exe -r 96000 DVD-Video/Audio Quality;
+#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 [dac~] Sample Rate;
+#X restore 101 520 pd sample_rate;
+#N canvas 99 375 428 211 defeating_audio_computation 0;
+#X text 19 37 There may be cases when you do not want Pd to send or
+receive audio signal with your soundcard. You can manually disable
+the [dac~] and [adc~] objects separately using the "-nodac" and "-noadc"
+switch \, or disable both using the "-nosound" switch.;
+#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 [dac~] -nodac and -noadc;
+#X restore 101 570 pd defeating_audio_computation;
+#X text 117 79 <- Click to test;
+#X text 11 23 audio output;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 13 0;
+#X connect 31 0 29 1;
diff --git a/doc/pddp/dbtopow-help.pd b/doc/pddp/dbtopow-help.pd
new file mode 100644
index 00000000..c0e9c255
--- /dev/null
+++ b/doc/pddp/dbtopow-help.pd
@@ -0,0 +1,72 @@
+#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 437 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control conversion;
+#X text 12 85 DESCRIPTION convert dB to power units;
+#X text 12 25 NAME dbtopow;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 argument 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 obj 78 446 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 543 (none);
+#N canvas 16 424 428 167 Related_objects 0;
+#X text 19 37 Control objects for conversion:;
+#X obj 232 62 powtodb;
+#X obj 22 121 mtof~;
+#X obj 67 121 ftom~;
+#X obj 110 121 dbtorms~;
+#X obj 175 121 rmstodb~;
+#X obj 241 121 dbtopow~;
+#X obj 303 121 powtodb~;
+#X text 19 98 Signal objects for conversion:;
+#X obj 22 62 mtof;
+#X obj 69 62 ftom;
+#X obj 107 62 dbtorms;
+#X obj 166 62 rmstodb;
+#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 [dbtopow] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X floatatom 239 206 0 0 0 0 - - -;
+#X floatatom 239 150 0 0 0 0 - - -;
+#X obj 78 511 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 445 float;
+#X text 98 511 float;
+#X obj 470 3 dbtopow;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/dbtopow -text
+pdpedia: dbtopow;
+#X obj 239 179 dbtopow;
+#X text 11 23 convert dB to power units;
+#X text 168 468 - lists will be truncated \, and the first element
+will be used as input.;
+#X text 109 242 The [dbtopow] object converts decibels to power units
+\, equal to the square of the "RMS" amplitude.;
+#X text 98 468 list;
+#X obj 99 570 pddp/pddplink all_about_acoustic_conversions.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 11 0 17 0;
+#X connect 17 0 10 0;
diff --git a/doc/pddp/dbtopow~-help.pd b/doc/pddp/dbtopow~-help.pd
new file mode 100644
index 00000000..a466b5ea
--- /dev/null
+++ b/doc/pddp/dbtopow~-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 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION convert dB to power units for audio signals
+;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 25 NAME dbtopow~;
+#X text 12 125 INLET_0 signal float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/dbtorms-help.pd b/doc/pddp/dbtorms-help.pd
new file mode 100644
index 00000000..5e93f476
--- /dev/null
+++ b/doc/pddp/dbtorms-help.pd
@@ -0,0 +1,77 @@
+#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 425 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control conversion;
+#X text 12 85 DESCRIPTION convert dB to linear amplitude;
+#X text 12 25 NAME dbtorms;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 491 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 527 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 553 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 434 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 530 (none);
+#N canvas 41 419 428 170 Related_objects 0;
+#X text 19 36 Control objects for conversion:;
+#X obj 107 60 rmstodb;
+#X obj 176 60 dbtopow;
+#X obj 242 60 powtodb;
+#X obj 22 119 mtof~;
+#X obj 67 119 ftom~;
+#X obj 110 119 dbtorms~;
+#X obj 175 119 rmstodb~;
+#X obj 241 119 dbtopow~;
+#X obj 303 119 powtodb~;
+#X text 19 96 Signal objects for conversion:;
+#X obj 22 60 mtof;
+#X obj 69 60 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 floatatom 239 196 0 0 0 0 - - -;
+#X floatatom 239 140 0 0 0 0 - - -;
+#X obj 78 499 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 433 float;
+#X text 98 499 float;
+#X obj 472 3 dbtorms;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/dbtorms -text
+pdpedia: dbtorms;
+#X obj 239 169 dbtorms;
+#X text 11 23 convert dB to linear amplitude;
+#X text 168 456 - lists will be truncated \, and the first element
+will be used as input.;
+#X text 109 231 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 98 456 list;
+#X text 168 433 - the incoming value.;
+#X obj 98 556 pddp/pddplink all_about_acoustic_conversions.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 571 pddp/pddplink ../3.audio.examples/A02.amplitude.pd -text
+doc/3.audio.examples/A02.amplitude.pd;
+#X connect 11 0 17 0;
+#X connect 17 0 10 0;
diff --git a/doc/pddp/dbtorms~-help.pd b/doc/pddp/dbtorms~-help.pd
new file mode 100644
index 00000000..daab7f63
--- /dev/null
+++ b/doc/pddp/dbtorms~-help.pd
@@ -0,0 +1,84 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION dB to linear amplitude for audio signals
+;
+#X text 12 25 NAME dbtorms~;
+#X text 12 125 INLET_0 signal float;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/declare-help.pd b/doc/pddp/declare-help.pd
new file mode 100644
index 00000000..afbb528d
--- /dev/null
+++ b/doc/pddp/declare-help.pd
@@ -0,0 +1,73 @@
+#N canvas 0 0 555 619 10;
+#X declare;
+#X declare;
+#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 declare 3 12 0 18
+-204280 -1 0;
+#X obj 0 105 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS Updated for Pd version 0.41. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control needs_work;
+#X text 12 85 DESCRIPTION set environment for loading patch;
+#X text 12 25 NAME declare;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 134 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 164 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 386 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 90 486 428 103 Related_objects 0;
+#X obj 15 34 import;
+#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 [declare] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/declare -text
+pdpedia: declare;
+#X obj 470 3 declare;
+#X text 98 109 (none);
+#X text 98 139 (none);
+#X text 164 291 -lib;
+#X text 164 307 -stdlib;
+#X text 164 255 -path;
+#X text 164 271 -stdpath;
+#X text 262 255 add to search path \, relative to the patch;
+#X text 262 291 load a library \, relative to the patch;
+#X text 262 308 load a library \, relative to Pd;
+#X text 161 333 (for any of these you may use a full pathname such
+as "/tmp/dir" or \, in Windows \, "C:/garbage" instead of a relative
+path).;
+#X text 262 272 add to search path \, relative to Pd;
+#X text 98 482 WARNING: you might want to avoid putting "declare" statements
+inside abstractions \, as their effects will extend to the calling
+patch. As of version 0.41 \, "declare path" is ignored inside abstractions
+\, although \, probably unwisely \, "-stdpath" takes effect (on the
+calling patch as well as the abstraction.);
+#X text 98 561 BUG: The name "-stdpath" is confusing \, as it has a
+quite different effect from "-stdpath" on the pd command line.;
+#X text 11 23 set environment for loading patch;
+#X text 139 69 NEEDS AN EXAMPLE;
+#X text 165 185 - the [declare] object adds one or more directories
+to the search path \, and/or pre-loads one or more libraries ("extensions")
+to Pd in preparation for opening the patch from a file. Usage is "declare
+[-flag value] [-flag value] ..." where the flag can be:;
+#X text 97 400 If you put abstractions and/or other supporting files
+in a subdirectory "more" \, you can put an object \, "declare -path
+more" to make sure Pd sees them when the patch is loaded. Or \, if
+you have zexy installed in the directory extra/zexy (in the Pd installation")
+you can get it using "declare -stdpath extra/zexy".;
+#X text 80 185 n) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
diff --git a/doc/pddp/delay-help.pd b/doc/pddp/delay-help.pd
index a486eab9..6cf64c59 100644
--- a/doc/pddp/delay-help.pd
+++ b/doc/pddp/delay-help.pd
@@ -1,139 +1,190 @@
-#N canvas 9 3 918 652 10;
-#X obj 22 14 delay;
-#X msg 10 418 bang;
-#X floatatom 75 486 0 0 0;
-#X text 98 511 <-- creation argument initializes delay time;
-#X obj 20 511 delay 1000;
-#X text 56 440 Click here to CANCEL delay's action;
-#X msg 20 440 stop;
-#X msg 31 462 2000;
-#X text 67 462 Number in right inlet sets time and schedules the action.
-;
-#X text 104 486 <-- scroll to change delay time in milliseconds;
-#X text 60 14 - BANG AFTER TIME DELAY;
-#X obj 20 90 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 20 110 delay 2000;
-#X obj 20 133 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 12 42 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 15 157 [delay]'s left inlet accepts a number \, or one of two
-messages: "bang" or "stop".;
-#X text 14 238 The "bang" method will inform [delay] to send a "bang"
-to its outlet after the prescribed time (which is set either at its
-right inlet \, or in the creation argument). In the above example \,
-you should notice a delay of 2 seconds \, then a "bang" at the outlet.
-;
-#X text 13 314 [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 15 379 The "stop" method will inform [delay] to cancel its
-scheduled output.;
-#X text 14 191 If a number is sent to its inlet \, [delay] will set
-the delay time equal to that number and schedule the outgoing "bang".
-;
-#X obj 20 536 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 43 419 "bang" to schedule the action;
-#X obj 414 9 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 414 613 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 445 15 A MAKESHIFT [METRO];
-#X text 433 35 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 433 84 [delay] could be used to create a metronome as follows.
-;
-#X obj 463 175 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 463 155 delay 1000;
-#X msg 427 115 bang;
-#X msg 463 115 stop;
-#X obj 671 154 metro 1000;
-#X obj 671 175 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 671 135 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X floatatom 726 135 5 0 0;
-#X floatatom 518 137 5 0 0;
-#X text 557 155 is the same as;
-#X text 448 206 A RANDOM IMPULSE GENERATOR;
-#X text 433 223 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 432 331 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 434 484 delay;
-#X obj 434 506 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 434 423 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X text 432 376 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 434 463 random 500;
-#X obj 434 442 metro 500;
-#X text 13 563 It is important to realize that [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;
-#X obj 63 605 pipe;
-#X text 431 528 RELATED OBJECTS;
-#X obj 466 548 timer;
-#X obj 432 548 pipe;
-#X obj 504 548 metro;
-#N canvas 0 0 452 302 related_objects_from_other_libraries 0;
-#X obj 27 25 nop~;
-#X obj 63 25 z~;
-#X obj 93 25 t3_delay;
-#X obj 153 25 idelay~;
-#X text 18 59 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 17 108 The best places to find information about Pd's libraries
-is:;
-#X text 14 130 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 16 160 iem.kug.ac.at/pdb/;
-#X restore 432 569 pd related_objects_from_other_libraries;
-#X obj 543 548 makenote;
-#X obj 603 548 delwrite~;
-#X text 445 594 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 floatatom 504 428 5 0 0;
-#X text 546 421 low numbers will produce a very "dusty" output.;
-#X text 546 433 high numbers will produce a slightly "dusty" output.
-;
-#X text 546 448 Also note that this example merely approximates the
-output of SC's "Dust" object.;
-#X connect 1 0 4 0;
-#X connect 2 0 4 1;
-#X connect 4 0 20 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 22 0 23 0;
-#X connect 27 0 29 0;
-#X connect 28 0 27 0;
-#X connect 29 0 28 0;
-#X connect 30 0 28 0;
-#X connect 31 0 32 0;
-#X connect 33 0 31 0;
-#X connect 34 0 31 1;
-#X connect 35 0 28 1;
-#X connect 40 0 41 0;
-#X connect 42 0 45 0;
-#X connect 44 0 40 0;
-#X connect 45 0 44 0;
-#X connect 56 0 45 1;
-#X connect 56 0 44 1;
+#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 125 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 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 GENRE help;
+#X text 12 105 DESCRIPTION bang after time delay;
+#X text 12 25 NAME delay;
+#X text 12 45 ALIAS del;
+#X text 12 145 INLET_0 float bang stop;
+#X text 12 165 INLET_1 float;
+#X text 12 185 OUTLET_0 bang;
+#X text 12 65 KEYWORDS control time bang_op;
+#X text 12 285 RELEASE_VERSION;
+#X text 12 265 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/doc/pddp/delread~-help.pd b/doc/pddp/delread~-help.pd
new file mode 100644
index 00000000..42c6e1ee
--- /dev/null
+++ b/doc/pddp/delread~-help.pd
@@ -0,0 +1,92 @@
+#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 delread~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 292 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 225 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal time;
+#X text 12 85 DESCRIPTION read a signal from a delay line;
+#X text 12 25 NAME delread~;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 125 INLET_0 float;
+#X restore 500 597 pd META;
+#X obj 0 384 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 421 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 479 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 301 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 93 450 428 139 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 19 78 Control objects for delays:;
+#X obj 22 105 delay;
+#X obj 67 105 pipe;
+#X obj 22 42 delwrite~ help;
+#X obj 127 42 vd~ help;
+#X text 7 1 [delread~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 393 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 393 signal;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/delread~ -text
+pdpedia: delread~;
+#X floatatom 299 169 0 0 0 0 - - -;
+#X text 340 168 input to delay line;
+#X obj 299 193 sig~;
+#X floatatom 112 122 0 0 0 0 - - -;
+#X text 139 122 float input (delay time in ms);
+#X obj 112 217 snapshot~;
+#X floatatom 112 241 0 0 0 0 - - -;
+#X obj 123 173 loadbang;
+#X obj 123 195 metro 200;
+#X text 98 300 float;
+#X text 98 320 list;
+#X text 98 339 Note: If the specified delay time is longer than the
+size of the delay line or less than zero it is clipped to the length
+of the delay line.;
+#X text 98 483 You can use more than one [delread~] object for the
+same delay line.;
+#X obj 466 3 delread~;
+#X obj 299 218 delwrite~ delread_ex 1000;
+#X obj 112 148 delread~ delread_ex 1000;
+#X text 11 23 read a signal from a delay line;
+#X text 168 300 - a float sets the delay time (in milliseconds).;
+#X text 168 320 - lists are truncated to the first element.;
+#X text 168 393 - the delayed signal.;
+#X text 168 440 - name of delay line.;
+#X text 168 455 - (optional) initial delay time (ms).;
+#X text 80 455 2) float;
+#X text 98 511 Note: if the [delwrite~] runs after the [delread~] the
+minimum delay is actually one DSP period \, not zero.;
+#X text 80 440 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 542 pddp/pddplink ../3.audio.examples/G01.delay.pd -text
+doc/3.audio.examples/G01.delay.pd;
+#X obj 98 557 pddp/pddplink ../3.audio.examples/G02.delay.loop.pd -text
+doc/3.audio.examples/G02.delay.loop.pd;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/G05.execution.order.pd
+-text doc/3.audio.examples/G05.execution.order.pd;
+#X connect 12 0 14 0;
+#X connect 14 0 26 0;
+#X connect 15 0 27 0;
+#X connect 17 0 18 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 27 0 17 0;
diff --git a/doc/pddp/delwrite~-help.pd b/doc/pddp/delwrite~-help.pd
new file mode 100644
index 00000000..68de2364
--- /dev/null
+++ b/doc/pddp/delwrite~-help.pd
@@ -0,0 +1,100 @@
+#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 delwrite~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 293 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 47 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 225 RELEASE_VERSION 0.41.4;
+#X text 12 205 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal;
+#X text 12 85 DESCRIPTION write a signal in a delay line;
+#X text 12 25 NAME delwrite~;
+#X text 12 125 INLET_0 signal;
+#X restore 500 597 pd META;
+#X obj 0 346 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 375 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 454 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 302 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 73 450 428 139 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 19 79 Control objects for delays:;
+#X obj 22 106 delay;
+#X obj 67 106 pipe;
+#X obj 22 43 delread~ delwrite_ex;
+#X obj 157 43 vd~ delwrite_ex;
+#X text 7 2 [delwrite~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/delread~ -text
+pdpedia: delread~;
+#X floatatom 90 122 0 0 0 0 - - -;
+#X text 119 121 input to delay line;
+#X obj 90 146 sig~;
+#X floatatom 282 88 0 0 0 0 - - -;
+#X obj 282 193 snapshot~;
+#X floatatom 282 217 0 0 0 0 - - -;
+#X obj 293 137 loadbang;
+#X obj 293 159 metro 200;
+#X obj 462 3 delwrite~;
+#X obj 90 171 delwrite~ delwrite_ex 1000;
+#X obj 282 111 delread~ delwrite_ex 1000;
+#X floatatom 356 135 0 0 0 0 - - -;
+#X obj 357 193 snapshot~;
+#X floatatom 357 217 0 0 0 0 - - -;
+#X obj 356 158 delread~ delwrite_ex 500;
+#X text 98 351 (none);
+#X text 98 301 signal;
+#X text 168 301 - the signal is read by all [delread~] and [vd~] objects
+with the same delay line name (delwrite_ex in the above example).;
+#X text 169 409 - length of the delay line in milliseconds \, which
+is the maximum delay time any receiving [delread~] or [vd~] object
+may have.;
+#X text 98 249 [delwrite~] allocates memory for a delay line and writes
+an audio signal into it. [delread~] objects by the same name read from
+the delay line.;
+#X text 169 394 - name of the delay line.;
+#X text 99 458 You can use more than one [delread~] object for the
+same delay line. (See example above).;
+#X text 80 409 2) float;
+#X text 99 486 Note: if the [delwrite~] runs after the [delread~] the
+minimum delay is actually one DSP period \, not zero.;
+#X text 80 394 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 99 512 pddp/pddplink ../3.audio.examples/G01.delay.pd -text
+doc/3.audio.examples/G01.delay.pd;
+#X obj 99 527 pddp/pddplink ../3.audio.examples/G02.delay.loop.pd -text
+doc/3.audio.examples/G02.delay.loop.pd;
+#X obj 99 542 pddp/pddplink ../3.audio.examples/G03.delay.variable.pd
+-text doc/3.audio.examples/G03.delay.variable.pd;
+#X obj 99 557 pddp/pddplink ../3.audio.examples/G04.control.blocksize.pd
+-text doc/3.audio.examples/G04.control.blocksize.pd;
+#X obj 99 572 pddp/pddplink ../3.audio.examples/G05.execution.order.pd
+-text doc/3.audio.examples/G05.execution.order.pd;
+#X text 11 23 write a signal in a delay line;
+#X connect 10 0 12 0;
+#X connect 12 0 19 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 16 0 17 0;
+#X connect 17 0 14 0;
+#X connect 17 0 22 0;
+#X connect 20 0 14 0;
+#X connect 21 0 24 0;
+#X connect 22 0 23 0;
+#X connect 24 0 22 0;
diff --git a/doc/pddp/drawnumber-help.pd b/doc/pddp/drawnumber-help.pd
new file mode 100644
index 00000000..79c1ebf0
--- /dev/null
+++ b/doc/pddp/drawnumber-help.pd
@@ -0,0 +1,166 @@
+#N struct drawnumber-help-template float x float y float cat float
+dog float dog-vis;
+#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 drawnumber 3 12
+0 18 -204280 -1 0;
+#X obj 0 119 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 225 RELEASE_DATE 2009-06-12;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control data_structure;
+#X text 12 105 DESCRIPTION display a numberic field of a template;
+#X text 12 25 NAME drawnumber;
+#X text 12 45 ALIAS drawsymbol;
+#X text 12 145 INLET_0 float;
+#X restore 500 597 pd META;
+#X obj 0 204 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 232 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 460 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 98 419 428 169 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 92 42 struct;
+#X obj 142 42 drawpolygon;
+#X obj 223 42 plot;
+#X obj 17 42 drawsymbol;
+#X obj 262 42 drawcurve;
+#X text 7 78 Other Data Structure Objects;
+#X obj 245 112 element;
+#X obj 76 112 get;
+#X obj 107 112 set;
+#X obj 136 112 getsize;
+#X obj 190 112 setsize;
+#X obj 22 112 pointer;
+#X text 7 1 [drawnumber] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 128 cnv 17 3 65 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 127 float;
+#X text 98 177 list;
+#X text 168 127 - [drawnumber] has a single inlet to toggle visibility
+of the number. A zero makes it invisible. Any nonzero value makes it
+visible.;
+#X text 98 208 (none);
+#N canvas 7 169 428 164 drawnumber-help-data 0;
+#X scalar drawnumber-help-template 24 61 49 17 1 \;;
+#X scalar drawnumber-help-template 174 61 41 18 1 \;;
+#X obj 1 1 cnv 15 425 20 empty empty empty 20 12 2 14 -204280 -195568
+0;
+#X text 6 1 [drawnumber] Window to Display Data Structure Instances
+;
+#X text 21 91 Each dog/cat pair is a scalar. (You can click each in
+editmode to get a bounding blue box and move them around.) When not
+in editmode you may click and scroll the values up and down for each
+field.;
+#X restore 28 61 pd drawnumber-help-data;
+#N canvas 115 43 428 526 drawnumber-help-template 0;
+#X obj 23 121 drawnumber cat 0 0 0 cat=;
+#X obj 23 92 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 22 454 struct drawnumber-help-template float x float y float
+cat float dog float dog-vis;
+#X obj 22 314 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 22 353 set drawnumber-help-template dog-vis;
+#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 [drawnumber] subpatch for data structure template;
+#N canvas 115 239 426 147 init 0;
+#X obj 14 57 pointer;
+#X msg 14 35 traverse pd-drawnumber-help-data \, next;
+#X obj 14 12 loadbang;
+#X obj 14 80 outlet;
+#X text 67 58 This just sends a pointer to the right inlet of the [set]
+object;
+#X text 257 39 the list);
+#X text 255 27 (select the first scalar in;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 235 331 pd init;
+#X text 42 91 "0" makes both "cat" fields invisible;
+#X text 40 311 "0" makes a single instance of a "dog" field invisible
+;
+#X obj 23 210 drawnumber -v dog-vis dog 0 -15 900 dog=;
+#X text 20 29 [drawnumber] is used below to display the values of two
+fields- "dog" and "cat". These two fields are defined in the template
+"drawnumber-help-template" located at the bottom of this subpatch.
+;
+#X text 20 139 For the [drawnumber] object associated with "cat" above
+\, a [toggle] is connected to the inlet. This toggles visibility globally
+(i.e. \, for all existing scalars defined by the template "drawnumber-help-template").
+;
+#X text 21 229 The [drawnumber] object for "dog" above uses the -v
+flag \, which can be used to set visibility for each scalar individually.
+The (flag \, value) pair "-v dog-vis" means that the field "dog-vis"
+determines whether "dog" will be visible in a given scalar. (If you
+use the -v flag you can no longer use the inlet of this [drawsymbol]
+object.);
+#X text 19 372 With the [set] object \, we can change the value of
+"dog-vis" in order to set visibility for the "dog" field. Notice when
+you click the [toggle] \, it only affects one scalar-- the one which
+the [set] object is currently pointing to (see the "init" subpatch).
+;
+#X text 19 487 This object defines the fields for this template. (Their
+values were initialized when this help patch was created.);
+#X connect 1 0 0 0;
+#X connect 3 0 4 0;
+#X connect 7 0 4 1;
+#X restore 28 89 pd drawnumber-help-template;
+#X obj 461 3 drawnumber;
+#X obj 430 20 pddp/pddplink http://wiki.puredata.info/en/drawnumber
+-text pdpedia: drawnumber;
+#X text 99 464 When not in "edit" mode \, you can click and drag vertically
+on the numbers to change their values. (In edit mode you can move \,
+cut \, copy \, and paste the objects.);
+#X text 201 89 <- click this subpatch to see how [drawnumber] is used.
+;
+#X text 179 59 <- subpatch to display the data structures;
+#X text 11 23 display a numeric field of a template;
+#X text 98 437 Note: you cannot use both the -n and -v flag.;
+#X text 168 177 - a list will be truncated to the first element.;
+#X text 80 253 0-2 flags;
+#X text 168 304 - the field name of the number to draw.;
+#X text 168 353 - RGB color (0=black \, 999=white \, 900=red \, 90=green
+\, 9=blue \, 555=grey \, etc.).;
+#X text 168 381 - (optional) label ("cat=" for instance).;
+#X text 168 253 - "-n" flag to make the number invisible initially.
+;
+#X text 168 270 - a "-v [variable]" flag to assign a variable to make
+the number visible/invisible.;
+#X text 168 321 - relative x coordinate.;
+#X text 168 337 - relative y coordinate.;
+#X text 80 321 2) *;
+#X text 80 337 3) *;
+#X text 80 353 4) *;
+#X text 80 304 1) *;
+#X text 98 504 Keyboard entry is supported for [drawnumber] (but not
+for [drawsymbol]) when not in editmode. Click a number to enter values
+\, the click the enter key when you are finished.;
+#X text 80 270 (symbol atoms);
+#X text 80 381 5) symbol atom;
+#X text 98 405 * Any of these can be numbers (float) or field names
+(symbol atom).;
+#X obj 98 542 pddp/pddplink drawsymbol-help.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 318 542 pddp/pddplink ../4.data.structures/09.scaling.pd -text
+doc/4.data.structure/09.scaling.pd;
+#X obj 318 557 pddp/pddplink ../4.data.structures/10.onoff.pd -text
+doc/4.data.structures/10.onoff.pd;
+#X obj 98 572 pddp/pddplink all_about_z_order.pd;
+#X obj 98 557 pddp/pddplink scalar-help.pd;
diff --git a/doc/pddp/drawpolygon-help.pd b/doc/pddp/drawpolygon-help.pd
new file mode 100644
index 00000000..f94c7de0
--- /dev/null
+++ b/doc/pddp/drawpolygon-help.pd
@@ -0,0 +1,173 @@
+#N struct drawpolygon-help-template float x float y float weasel float
+dog float cat float vis;
+#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 drawpolygon 3 12
+0 18 -204280 -1 0;
+#X obj 0 152 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 225 RELEASE_VERSION 0.41.4;
+#X text 12 205 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS control data_structure;
+#X text 12 85 DESCRIPTION display a polygon in a data structure instance
+;
+#X text 12 25 NAME drawpolygon;
+#X text 12 125 INLET_0 float;
+#X restore 500 597 pd META;
+#X obj 0 227 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 255 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;
+#N canvas 102 422 428 169 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 92 42 struct;
+#X obj 142 42 drawpolygon;
+#X obj 223 42 plot;
+#X obj 17 42 drawsymbol;
+#X obj 262 42 drawcurve;
+#X text 7 78 Other Data Structure Objects;
+#X obj 245 112 element;
+#X obj 76 112 get;
+#X obj 107 112 set;
+#X obj 136 112 getsize;
+#X obj 190 112 setsize;
+#X obj 22 112 pointer;
+#X text 7 1 [drawpolygon] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 161 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 99 162 float;
+#X text 168 159 - [drawnumber] has a single inlet to toggle visibility
+of the number. A zero makes it invisible. Any nonzero value makes it
+visible.;
+#X text 98 231 (none);
+#X text 179 80 <- subpatch to display the data structures;
+#X obj 449 3 drawpolygon;
+#X obj 420 20 pddp/pddplink http://wiki.puredata.info/en/drawpolygon
+-text pdpedia: drawpolygon;
+#N canvas 31 185 428 280 drawpolygon-help-data 0;
+#X scalar drawpolygon-help-template 101 41 0 60 100 1 \;;
+#X scalar drawpolygon-help-template 301 44 1 80 100 1 \;;
+#X obj 1 1 cnv 15 425 20 empty empty empty 20 12 2 14 -204280 -195568
+0;
+#X text 21 156 Three field values are used to draw these polygons.
+The field "weasel" is used for the y-value of the top of the triangle
+and the y-value of the top two points of the red "v". Fields "dog"
+and "cat" are the top left and right x-values for the red "v".;
+#X text 6 1 Window to Display Data Structures;
+#X text 21 111 Each scalar consists of a set of numbers \, one triangle
+\, and one red "v". In editmode you can click on a polygon to get a
+blue bounding box around the scalar.;
+#X text 21 216 In runmode you can click on each of these regions of
+the polygons to alter their appearance. You may also scroll the displayed
+values with the mouse to change them.;
+#X restore 28 82 pd drawpolygon-help-data;
+#N canvas 116 47 428 563 drawpolygon-help-template 0;
+#X obj 23 66 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#N canvas 478 354 428 162 init 0;
+#X obj 20 99 pointer;
+#X obj 20 126 outlet;
+#X obj 20 30 loadbang;
+#X obj 20 51 t b b;
+#X msg 20 77 traverse pd-drawpolygon-help-data \, next;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [drawpolygon] Initialization subpatch;
+#X connect 0 0 1 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X restore 217 244 pd init;
+#X obj 22 224 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 19 400 This object defines the fields for this template. Their
+values are initialized in the "init" subwindow. You can see them by
+right-clicking on the object in the "data" window and selecting "properties."
+;
+#X text 7 1 [drawpolygon] subpatch;
+#X obj 23 95 drawpolygon 0 4 0 40 40 40 20 weasel 0 40;
+#X obj 22 367 struct drawpolygon-help-template float x float y float
+weasel float dog float cat float vis;
+#X text 42 65 "0" in inlet makes all instances of this polygon invisible
+;
+#X text 40 221 "0" in inlet makes a single instance of this polygon
+invisible;
+#X obj 22 268 set drawpolygon-help-template vis;
+#X text 20 33 [drawpolygon] is used below to display a black triangle
+and a red "v".;
+#X obj 23 497 drawnumber weasel -60 0 0 weasel=;
+#X obj 23 517 drawnumber dog -60 15 0 dog=;
+#X obj 23 538 drawnumber cat -60 30 0 cat=;
+#X obj 23 135 drawpolygon -v vis 900 3 dog weasel 80 40 cat weasel
+;
+#X text 19 453 For convenience \, the following [drawnumber] objects
+display the values of each field used in the drawing instructions above:
+;
+#X text 19 154 The next [drawpolygon] object uses the -v flag. This
+flag controls visilibility of the polygon for only one instance of
+a data structure. "-v vis" means that the value of field "vis" determines
+whether the red "v" polygon is visible or not.;
+#X text 19 287 Using the [set] object \, we can turn visibility on
+and off for an instance of this polygon by changing the value of the
+field "vis". Notice when you click the toggle above \, visibility only
+changes for the red "v" furthest to the right. Once you use the -v
+flag \, however \, you can no longer use the inlet to [drawpolygon]
+to set visibility globally.;
+#X connect 0 0 6 0;
+#X connect 1 0 10 1;
+#X connect 2 0 10 0;
+#X restore 28 109 pd drawpolygon-help-template;
+#X text 98 471 Note: you cannot use the -n and -v flag together. When
+using the -v flag \, the polygon is initially invisible by default.
+;
+#X text 99 519 When not in "edit" mode \, you can click on regions
+of the polygon defined by template fields to stretch or alter the polygon's
+shape.;
+#X text 201 109 <- click this subpatch to see how [drawpolygon] is
+used.;
+#X text 11 23 display a polygon in a data structure instance;
+#X text 168 200 - a list will be truncated to the first element.;
+#X text 168 363 - RGB color (0=black \, 999=white \, 900=red \, 90=green
+\, 9=blue \, 555=grey \, etc.);
+#X text 168 390 - line width.;
+#X text 168 414 - two or more (x \, y) pairs giving coordinates.;
+#X text 80 275 0-3 flags;
+#X text 168 275 - "-n" flag to make the polygon initially invisible.
+;
+#X text 168 294 - a "-v [variable]" flag to assign a variable to make
+the polygon visible/invisible.;
+#X text 168 323 - "-x" flag to inhibit selecting the object when the
+shape is clicked on in "edit" mode.;
+#X text 80 390 2) *;
+#X text 80 364 1) *;
+#X text 80 414 n) *;
+#X text 98 442 * Any of these can be numbers (float) or field names
+(symbol atom).;
+#X text 98 200 list;
+#X text 80 294 (symbol atoms);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 316 557 pddp/pddplink ../4.data.structures/09.scaling.pd -text
+doc/4.data.structure/09.scaling.pd;
+#X obj 316 572 pddp/pddplink ../4.data.structures/10.onoff.pd -text
+doc/4.data.structures/10.onoff.pd;
+#X obj 99 572 pddp/pddplink all_about_z_order.pd;
+#X obj 99 557 pddp/pddplink scalar-help.pd;
diff --git a/doc/pddp/drawsymbol-help.pd b/doc/pddp/drawsymbol-help.pd
new file mode 100644
index 00000000..556455b4
--- /dev/null
+++ b/doc/pddp/drawsymbol-help.pd
@@ -0,0 +1,163 @@
+#N struct drawsymbol-help-template float x float y symbol cat symbol
+dog float dog-vis;
+#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 drawsymbol 3 12
+0 18 -204280 -1 0;
+#X obj 0 113 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 225 RELEASE_DATE 2009-06-12;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 25 NAME drawnumber;
+#X text 12 45 ALIAS drawsymbol;
+#X text 12 145 INLET_0 float;
+#X text 12 105 DESCRIPTION display a symbolic field of a template;
+#X text 12 65 KEYWORDS control data_structure symbol_op;
+#X restore 500 597 pd META;
+#X obj 0 188 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 216 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 445 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 55 423 428 169 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 192 42 drawpolygon;
+#X obj 273 42 plot;
+#X obj 312 42 drawcurve;
+#X text 7 78 Other Data Structure Objects;
+#X obj 245 112 element;
+#X obj 76 112 get;
+#X obj 107 112 set;
+#X obj 136 112 getsize;
+#X obj 190 112 setsize;
+#X obj 22 112 pointer;
+#X obj 17 42 drawnumber;
+#X obj 92 42 struct example;
+#X text 7 1 [drawsymbol] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 122 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 121 float;
+#X text 98 161 list;
+#X text 98 192 (none);
+#X text 179 60 <- subpatch to display the data structures;
+#X obj 458 3 drawsymbol;
+#X obj 430 20 pddp/pddplink http://wiki.puredata.info/en/drawsymbol
+-text pdpedia: drawsymbol;
+#X text 98 449 Keyboard entry is not yet supported for drawsymbol.
+;
+#N canvas 31 151 428 164 drawsymbol-help-data 0;
+#X scalar drawsymbol-help-template 101 61 whiskers rex 1 \;;
+#X scalar drawsymbol-help-template 251 61 converse tinker 1 \;;
+#X obj 1 1 cnv 15 425 20 empty empty empty 20 12 2 14 -204280 -195568
+0;
+#X text 21 91 Each dog/cat pair is one scalar. You can click each in
+editmode to get a bounding blue box and move them around. You can also
+right-click on the scalar and choose "Properties" to change its field
+values (remember to click "Ok" when you are finished).;
+#X text 6 1 Window to Display Data Structures;
+#X restore 28 62 pd drawsymbol-help-data;
+#N canvas 121 44 428 509 drawsymbol-help-template 0;
+#X obj 23 101 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#N canvas 441 67 465 142 init 0;
+#X obj 24 96 outlet;
+#X obj 24 30 loadbang;
+#X msg 24 52 traverse pd-drawsymbol-help-data \, next;
+#X obj 24 74 pointer;
+#X text 88 75 This just sends a pointer to the [set] object in the
+parent patch.;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 235 324 pd init;
+#X obj 22 307 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 348 set drawsymbol-help-template dog-vis;
+#X obj 22 435 struct drawsymbol-help-template float x float y symbol
+cat symbol dog float dog-vis;
+#X obj 23 200 drawsymbol -v dog-vis dog 0 -15 900 dog=;
+#X text 20 38 [drawsymbol] is used below to display the values of two
+fields- dog and cat. These two fields are defined in the template "drawnumber-help-template"
+located at the bottom of this subpatch.;
+#X text 42 100 "0" makes both "cat" fields invisible;
+#X text 20 148 This [drawsymbol] object displays the field "cat". A
+toggle is connected to the inlet- this toggles visibility globally
+(i.e. \, for all instances of the data structure).;
+#X text 40 304 "0" makes a single instance of a "dog" field invisible
+;
+#X text 19 468 This object defines the fields for this template. Their
+values were initialized when the help patch was created.;
+#X text 19 219 The [drawsymbol] object for "dog" instead uses the -v
+flag. This controls visilibility of the "dog" field for only one instance
+of the data structure. "-v dog-vis" means the value of the field "dog-vis"
+determines whether "dog" will be visible. If you use the -v flag you
+can no longer use the inlet of this [drawsymbol] object to control
+visibility globally.;
+#X text 19 367 Using the [set] object \, we can turn visibility on
+and off for an instance of the data structure by changing the value
+of "dog-vis". Notice when you click the toggle \, visibility only changes
+for one "dog"- the one which the [set] object is currently pointing
+to.;
+#X text 7 1 [drawsymbol] subpatch for data structure template;
+#X obj 23 130 drawsymbol cat 0 0 0 cat=;
+#X connect 0 0 15 0;
+#X connect 1 0 4 1;
+#X connect 2 0 4 0;
+#X restore 28 84 pd drawsymbol-help-template;
+#X text 201 84 <- click this subpatch to see how [drawsymbol] is used.
+;
+#X text 11 23 display a symbolic field of a template;
+#X text 98 465 Note: Attempting to scroll a symbol like a number will
+output the following message to the console (for each pixel scrolled!):
+drawnumber_motion: symbol;
+#X text 98 503 Unfortunately \, [append] does not accept symbols. Currently
+\, you must use [set] with the "-symbol" flag to set symbolic fields
+like those shown in the "drawsymbol-help-template" subpatch above.
+;
+#X text 168 161 - a list will be truncated to the first element.;
+#X text 98 425 Note: you cannot use both the -n and -v flag.;
+#X text 80 236 0-2 flags;
+#X text 168 341 - RGB color (0=black \, 999=white \, 900=red \, 90=green
+\, 9=blue \, 555=grey \, etc.).;
+#X text 168 369 - (optional) label ("cat=" for instance).;
+#X text 168 309 - relative x coordinate.;
+#X text 168 325 - relative y coordinate.;
+#X text 80 309 2) *;
+#X text 80 325 3) *;
+#X text 80 341 4) *;
+#X text 168 292 - the field name of the symbol to draw.;
+#X text 168 236 - "-n" flag to make the symbol invisible initially.
+;
+#X text 168 253 - a "-v [variable]" flag to assign a variable to make
+the symbol visible/invisible.;
+#X text 168 121 - [drawsymbol] has a single inlet to toggle visibility
+of the number. A zero makes it invisible. Any nonzero value makes it
+visible.;
+#X text 79 253 (symbol atoms);
+#X text 80 292 1) symbol atom;
+#X text 80 369 5) symbol atom;
+#X text 98 393 * Any of these can be numbers (float) or field names
+(symbol atom).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 326 556 pddp/pddplink ../4.data.structures/09.scaling.pd -text
+doc/4.data.structure/09.scaling.pd;
+#X obj 326 571 pddp/pddplink ../4.data.structures/10.onoff.pd -text
+doc/4.data.structures/10.onoff.pd;
+#X obj 98 571 pddp/pddplink all_about_z_order.pd;
+#X obj 98 556 pddp/pddplink scalar-help.pd;
diff --git a/doc/pddp/dynamic_sends.pd b/doc/pddp/dynamic_sends.pd
index 847ec412..b215d6a9 100644
--- a/doc/pddp/dynamic_sends.pd
+++ b/doc/pddp/dynamic_sends.pd
@@ -1,27 +1,534 @@
-#N canvas 499 325 522 457 10;
-#X obj 310 194 f \$0;
-#X symbolatom 318 235 0 0 0 0 - - -;
-#X obj 310 213 makesymbol pd-%s-controlled;
-#N canvas 0 22 482 332 1024-controlled 0;
-#X restore 319 61 pd \$0-controlled;
-#N canvas 0 22 478 328 controlled 0;
-#X restore 68 61 pd controlled;
-#X msg 46 167 \; pd-controlled vis \$1;
-#X obj 46 123 tgl 40 0 empty empty open_close 0 -6 1 12 -217060 -1
--1 1 1;
-#X msg 310 285 \; \$1 vis \$2;
-#X obj 310 256 pack symbol float;
-#X obj 310 170 t b f;
-#X obj 310 125 tgl 40 0 empty empty open_close 0 -6 1 12 -217060 -1
+#N canvas 0 26 599 578 10;
+#N canvas 249 339 391 135 \$0-controlled 0;
+#X text 150 50 3I6OO9 3I6OO;
+#X restore 319 11 pd \$0-controlled;
+#N canvas 0 214 261 115 controlled 0;
+#X text 96 41 You rang?;
+#X restore 68 11 pd controlled;
+#X msg 46 99 \; pd-controlled vis \$1;
+#X obj 46 55 tgl 40 0 empty empty open_close 0 -12 1 12 -217060 -1
-1 0 1;
-#X text 112 333 Since \$0 is only expanded if it starts the name \,
-it is necessary to use [makesymbol] in order to put the \$0 expansion
-into the middle of the name.;
-#X connect 0 0 2 0;
-#X connect 2 0 1 0;
-#X connect 2 0 8 0;
+#X msg 310 107 vis \$1;
+#X obj 310 134 s pd-\$0-controlled;
+#N canvas 11 26 915 645 (subpatch) 0;
+#X obj 28 5 r pd-\$0-controlled;
+#X obj 28 27 route vis;
+#X obj 28 49 sel 1;
+#X obj 28 172 f;
+#X obj 65 172 + 1;
+#X obj 28 96 timer;
+#X obj 28 74 t b b;
+#X obj 28 150 b;
+#X msg 108 163 clear \, text 20 20 I'm not going any further if you
+refuse to take the time to read what I'm writing.;
+#X obj 28 226 route 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
+19 20;
+#X obj 209 513 s \$0-m;
+#X obj 28 558 s pd-\$0-controlled;
+#X msg 55 533 clear;
+#X obj 28 484 list trim;
+#X obj 28 508 t a b;
+#X obj 543 298 f;
+#X obj 579 298 + 1;
+#X obj 558 271 0;
+#X obj 543 325 + 1;
+#X obj 510 419 list split;
+#X obj 543 352 t b a;
+#X obj 510 391 list;
+#X obj 512 244 t b a b;
+#X obj 510 444 list prepend text 20 20;
+#X msg 549 524 clear;
+#X obj 510 498 t b a b;
+#X obj 510 471 list trim;
+#X obj 665 479 f;
+#X obj 677 273 500;
+#X obj 665 506 t a a;
+#X obj 692 532 * 0.05;
+#X obj 665 556 -;
+#X obj 649 613 t b a;
+#X obj 614 402 del;
+#X obj 194 451 del 750;
+#X floatatom 710 435 5 0 0 0 - - -;
+#X obj 28 118 moses 2500;
+#X obj 487 588 list;
+#X obj 490 554 del 1000;
+#X obj 487 611 list append LOL;
+#X obj 299 576 list prepend text 20 20;
+#X obj 301 590 list trim;
+#X obj 589 473 b;
+#X obj 488 631 list;
+#X obj 473 665 list append (call me);
+#X obj 570 563 del 1700;
+#X obj 512 154 list append Just quit looking in this window and we
+can both go back to do - ing what we were do - ing before YOU STARTED
+THIS LOOKING IN - SIDE - AH MY WIN - A - DOW P - A - N - E ! ! ! !
+! ! ! ! ! ! l ! ! 1 ! ! I ! !! !! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / --
+! ! ! ! ! ! ! ! ! @ ! ! ! ! ! ! ! ! ! ! ! ! ! !;
+#X msg 193 478 bng 0;
+#X obj 267 444 del 1800;
+#X obj 76 596 list trim;
+#X obj 274 488 b;
+#X obj 57 656 s pd-controlled;
+#X obj 212 615 b;
+#X obj 238 668 b;
+#X msg 161 688 vis 1 \, bng 0;
+#X obj 306 495 del 1500;
+#X obj 179 557 del 3000;
+#X obj 182 668 del 1000;
+#X obj 244 622 del 1400;
+#X obj 614 663 b;
+#X obj 726 653 b;
+#X obj 754 584 s \$0-frame-magick;
+#X obj 65 199 mod 6;
+#N canvas 0 0 450 300 many_bngs 0;
+#X obj 128 31 inlet;
+#X obj 128 97 f;
+#X obj 167 97 + 1;
+#X msg 131 166 bng 0;
+#X obj 130 215 outlet;
+#X obj 131 190 t b a;
+#X obj 69 128 del 50;
+#X obj 132 62 t a b;
+#X msg 189 62 0;
+#X obj 128 123 moses 100;
+#X connect 0 0 7 0;
+#X connect 1 0 2 0;
+#X connect 1 0 9 0;
+#X connect 2 0 1 1;
+#X connect 3 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 1 4 0;
+#X connect 6 0 1 0;
+#X connect 7 0 1 0;
+#X connect 7 1 8 0;
+#X connect 8 0 1 1;
+#X connect 9 0 3 0;
+#X restore 372 499 pd many_bngs;
+#X msg 307 520 bng 0;
+#X obj 320 619 del 800;
+#X obj 643 667 del 1400;
+#X obj 28 253 list append text 20 20 You better close this window right
+now and never open it again. I'm warning you... Yeah \, that's right.
+Just walk away \, you nosy person \, you...;
+#X obj 63 422 list append text 20 20 You know I'm a wizard \, right?
+I mean you know you just opened the window to a wizard's house \, and
+your about to get a spell put on you?;
+#X obj 86 395 list append text 20 20 Check yourself. Why \, there's
+a [bng] hanging from your little mouse pointer!;
+#X obj 268 468 list append text 20 60 Now mouse over my window \, nosy...
+;
+#X obj 309 674 del 2000;
+#N canvas 340 34 624 597 nbx 0;
+#X obj 92 26 inlet;
+#X obj 89 65 f \$0;
+#X obj 68 149 outlet;
+#X obj 177 155 del 50;
+#X obj 175 35 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 171 184 metro 1000;
+#X obj 242 147 0;
+#X obj 179 210 f;
+#X obj 211 211 + 1;
+#X obj 113 267 list prepend;
+#X obj 137 405 random 337;
+#X obj 140 432 + 1000;
+#X obj 158 363 random 37;
+#X obj 160 384 + 1300;
+#X obj 183 322 random 7;
+#X obj 184 343 + 1330;
+#X obj 121 296 route 0 1 2 3 4;
+#X msg 231 344 1337;
+#X msg 49 214 0;
+#X msg 294 71 0;
+#X obj 293 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 327 198 print;
+#X obj 247 239 moses 4;
+#X msg 285 269 0;
+#X obj 119 465 random 8999;
+#X obj 54 490 + 1000;
+#X obj 114 515 t a;
+#X obj 113 577 s \$0-nbx;
+#X obj 190 535 s \$0-nbx2;
+#X obj 271 535 s \$0-nbx3;
+#X obj 340 535 s \$0-nbx4;
+#X obj 410 535 s \$0-nbx5;
+#X msg 184 510 set \$1;
+#X msg 264 510 set \$1;
+#X msg 334 510 set \$1;
+#X msg 404 510 set \$1;
+#X obj 262 297 r \$0-nbxs;
+#X obj 330 295 r \$0-nbx2s;
+#X obj 401 295 r \$0-nbx3s;
+#X obj 470 295 r \$0-nbx4s;
+#X obj 540 295 r \$0-nbx5s;
+#X obj 277 385 f;
+#X obj 337 385 f;
+#X obj 407 385 f;
+#X obj 477 385 f;
+#X obj 547 385 f;
+#X obj 292 322 b;
+#X obj 306 343 del 4000;
+#X obj 362 322 b;
+#X obj 376 343 del 4000;
+#X obj 422 322 b;
+#X obj 436 343 del 4000;
+#X obj 482 322 b;
+#X obj 496 343 del 4000;
+#X obj 552 322 b;
+#X obj 566 343 del 4000;
+#X obj 254 447 line;
+#X msg 254 421 \$1 \, 1337 3.6e+06;
+#X msg 111 543 set \$1;
+#X obj 354 447 line;
+#X msg 354 421 \$1 \, 1337 3.6e+06;
+#X obj 464 447 line;
+#X msg 464 421 \$1 \, 1337 3.6e+06;
+#X obj 574 447 line;
+#X msg 574 421 \$1 \, 1337 3.6e+06;
+#X obj 584 497 line;
+#X msg 584 471 \$1 \, 1337 3.6e+06;
+#X obj 185 485 pipe 600;
+#X obj 265 485 pipe 900;
+#X obj 335 485 pipe 1500;
+#X obj 405 485 pipe 1900;
+#X msg 61 93 obj 350 160 nbx 10 35 0 1e+37 0 1 \$1-nbxs \$1-nbx empty
+15 -8 0 25 14 12 23 63 256 \, obj 350 200 nbx 10 35 0 1e+37 0 1 \$1-nbx2s
+\$1-nbx2 empty 15 -8 0 25 14 12 23 63 256 \, obj 436 120 nbx 10 35
+0 1e+37 0 1 \$1-nbx3s \$1-nbx3 empty 15 -8 0 15 14 12 23 63 256 \,
+obj 436 80 nbx 10 35 0 1e+37 0 1 \$1-nbx4s \$1-nbx4 empty 15 -8 0 15
+14 12 23 63 256 \, obj 436 40 nbx 10 35 0 1e+37 0 1 \$1-nbx5s \$1-nbx5
+empty 15 -8 0 15 14 12 23 63 256;
+#X obj 103 240 metro 60;
+#X connect 0 0 1 0;
+#X connect 0 0 6 0;
+#X connect 0 0 3 0;
+#X connect 1 0 71 0;
+#X connect 3 0 5 0;
+#X connect 3 0 72 0;
+#X connect 4 0 1 0;
+#X connect 4 0 6 0;
+#X connect 4 0 3 0;
+#X connect 5 0 7 0;
+#X connect 5 0 21 0;
+#X connect 6 0 7 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 1;
+#X connect 7 0 22 0;
+#X connect 8 0 7 1;
+#X connect 9 0 16 0;
+#X connect 10 0 11 0;
+#X connect 11 0 26 0;
+#X connect 12 0 13 0;
+#X connect 13 0 26 0;
+#X connect 14 0 15 0;
+#X connect 15 0 26 0;
+#X connect 16 0 24 0;
+#X connect 16 1 10 0;
+#X connect 16 2 12 0;
+#X connect 16 3 14 0;
+#X connect 16 4 17 0;
+#X connect 17 0 26 0;
+#X connect 18 0 72 0;
+#X connect 19 0 6 0;
+#X connect 20 0 5 0;
+#X connect 22 1 23 0;
+#X connect 23 0 5 0;
+#X connect 23 0 17 0;
+#X connect 23 0 72 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 58 0;
+#X connect 26 0 67 0;
+#X connect 26 0 68 0;
+#X connect 26 0 69 0;
+#X connect 26 0 70 0;
+#X connect 32 0 28 0;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 31 0;
+#X connect 36 0 46 0;
+#X connect 36 0 41 1;
+#X connect 37 0 42 1;
+#X connect 37 0 48 0;
+#X connect 38 0 43 1;
+#X connect 38 0 50 0;
+#X connect 39 0 44 1;
+#X connect 39 0 52 0;
+#X connect 40 0 45 1;
+#X connect 40 0 54 0;
+#X connect 41 0 57 0;
+#X connect 42 0 60 0;
+#X connect 43 0 62 0;
+#X connect 44 0 64 0;
+#X connect 45 0 66 0;
+#X connect 46 0 47 0;
+#X connect 47 0 41 0;
+#X connect 48 0 49 0;
+#X connect 49 0 42 0;
+#X connect 50 0 51 0;
+#X connect 51 0 43 0;
+#X connect 52 0 53 0;
+#X connect 53 0 44 0;
+#X connect 54 0 55 0;
+#X connect 55 0 45 0;
+#X connect 56 0 58 0;
+#X connect 57 0 56 0;
+#X connect 58 0 27 0;
+#X connect 59 0 32 0;
+#X connect 60 0 59 0;
+#X connect 61 0 33 0;
+#X connect 62 0 61 0;
+#X connect 63 0 34 0;
+#X connect 64 0 63 0;
+#X connect 65 0 35 0;
+#X connect 66 0 65 0;
+#X connect 67 0 32 0;
+#X connect 68 0 33 0;
+#X connect 69 0 34 0;
+#X connect 70 0 35 0;
+#X connect 71 0 2 0;
+#X connect 72 0 9 0;
+#X restore 380 677 pd nbx;
+#X obj 242 643 list append text 20 100 I CAN BE EVERYWHERE AT ONCE...
+;
+#X obj 741 489 del 800;
+#X msg 771 528 vis 0;
+#X obj 661 581 max 20;
+#X obj 753 560 del 300;
+#X obj 230 354 list append text 20 20 You don't believe me \, do you?
+Ah \, they never do... How dreadful it must be to while away the hours
+as a hapless mortal...;
+#X obj 163 546 list append text 20 80 A wretch like you could never
+dream of doing this--;
+#X obj 712 626 list append text 150 50 3I6OO9 3I6OO;
+#N canvas 412 219 602 465 magic 0;
+#X obj 41 351 s \$0-m;
+#X obj 41 39 inlet;
+#X msg 41 165 vis 1 \, editmode 1 \, editmode 0 \, mouse 320 60 0 0
+0 \, mouseup 320 60 0 0 0;
+#X obj 296 9 inlet;
+#X msg 295 98 vis 0;
+#X obj 294 134 s pd-\$0-controlled;
+#X obj 297 70 spigot;
+#X obj 183 25 1;
+#X obj 299 41 del 0;
+#X connect 1 0 2 0;
+#X connect 1 0 7 0;
+#X connect 2 0 0 0;
+#X connect 3 0 8 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 1;
+#X connect 8 0 6 0;
+#X restore 855 561 pd magic;
+#X obj 832 533 del 2000;
+#X obj 45 303 list append text 20 20 I should have guessed that a stranger
+blithely staring into my window would be less than polite. Lacking
+physical form has its upside: I'm in no physical danger from your rudeness.
+So I'll bite-- what the heck is your problem?;
+#X text 233 86 What? Wizards are messy!;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 6 0;
+#X connect 2 0 81 1;
+#X connect 3 0 4 0;
+#X connect 3 0 9 0;
+#X connect 4 0 62 0;
+#X connect 5 0 36 0;
#X connect 6 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 0 0;
-#X connect 9 1 8 1;
-#X connect 10 0 9 0;
+#X connect 6 1 5 1;
+#X connect 7 0 3 0;
+#X connect 8 0 13 0;
+#X connect 9 0 67 0;
+#X connect 9 1 83 0;
+#X connect 9 2 68 0;
+#X connect 9 3 78 0;
+#X connect 9 4 34 0;
+#X connect 9 4 69 0;
+#X connect 9 5 46 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 11 0;
+#X connect 14 1 12 0;
+#X connect 15 0 16 0;
+#X connect 15 0 18 0;
+#X connect 16 0 15 1;
+#X connect 17 0 15 1;
+#X connect 18 0 20 0;
+#X connect 19 0 23 0;
+#X connect 19 2 42 0;
+#X connect 20 0 21 0;
+#X connect 20 1 19 1;
+#X connect 21 0 19 0;
+#X connect 22 0 15 0;
+#X connect 22 1 21 1;
+#X connect 22 1 37 1;
+#X connect 22 2 17 0;
+#X connect 22 2 28 0;
+#X connect 23 0 26 0;
+#X connect 24 0 11 0;
+#X connect 25 0 27 0;
+#X connect 25 1 11 0;
+#X connect 25 2 24 0;
+#X connect 26 0 25 0;
+#X connect 27 0 29 0;
+#X connect 27 0 35 0;
+#X connect 28 0 27 1;
+#X connect 29 0 31 0;
+#X connect 29 1 30 0;
+#X connect 29 1 33 1;
+#X connect 30 0 31 1;
+#X connect 31 0 76 0;
+#X connect 32 0 33 0;
+#X connect 32 1 27 1;
+#X connect 33 0 15 0;
+#X connect 34 0 47 0;
+#X connect 34 0 48 0;
+#X connect 36 0 8 0;
+#X connect 36 1 7 0;
+#X connect 37 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 45 0;
+#X connect 39 0 40 0;
+#X connect 39 0 43 1;
+#X connect 40 0 41 0;
+#X connect 41 0 14 0;
+#X connect 42 0 38 0;
+#X connect 43 0 44 0;
+#X connect 44 0 40 0;
+#X connect 44 0 59 0;
+#X connect 45 0 43 0;
+#X connect 46 0 22 0;
+#X connect 47 0 10 0;
+#X connect 48 0 70 0;
+#X connect 49 0 11 0;
+#X connect 50 0 55 0;
+#X connect 52 0 58 0;
+#X connect 52 0 65 0;
+#X connect 53 0 57 0;
+#X connect 54 0 51 0;
+#X connect 55 0 56 0;
+#X connect 55 0 64 0;
+#X connect 56 0 79 0;
+#X connect 57 0 54 0;
+#X connect 58 0 73 0;
+#X connect 59 0 66 0;
+#X connect 60 0 74 0;
+#X connect 62 0 3 1;
+#X connect 63 0 11 0;
+#X connect 64 0 11 0;
+#X connect 65 0 63 0;
+#X connect 65 0 71 0;
+#X connect 66 0 80 0;
+#X connect 67 0 13 0;
+#X connect 68 0 13 0;
+#X connect 69 0 13 0;
+#X connect 70 0 49 0;
+#X connect 70 0 50 0;
+#X connect 71 0 72 0;
+#X connect 72 0 10 0;
+#X connect 73 0 49 0;
+#X connect 73 0 53 0;
+#X connect 74 0 75 0;
+#X connect 74 0 77 0;
+#X connect 75 0 11 0;
+#X connect 76 0 32 0;
+#X connect 77 0 61 0;
+#X connect 77 0 82 0;
+#X connect 78 0 13 0;
+#X connect 79 0 49 0;
+#X connect 79 0 52 0;
+#X connect 80 0 60 0;
+#X connect 80 0 13 0;
+#X connect 82 0 81 0;
+#X connect 83 0 13 0;
+#X restore 518 534 pd;
+#X obj 403 534 namecanvas \$0-m;
+#X obj 147 301 bng 15 250 50 0 empty \$0-frame-magick empty 17 7 0
+10 -262144 -1 -1;
+#N canvas 0 0 450 373 \$0-hhhhaaaannnnggggeeeerrrr 0;
+#X obj 117 66 inlet;
+#X obj 219 60 inlet;
+#X obj 219 133 del 400;
+#X obj 117 275 pack 0 \$0;
+#X msg 117 297 \; \$2-frame delta 0 \$1;
+#X obj 117 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 117 172 - 0.5;
+#X obj 117 194 * 16;
+#X msg 117 221 0 \, \$1 200;
+#X obj 117 248 line;
+#X msg 240 200 1;
+#X obj 117 93 spigot 1;
+#X obj 117 120 t b b;
+#X msg 181 94 0;
+#X obj 240 175 del 250;
+#X obj 219 108 t b b;
+#X obj 219 84 spigot 1;
+#X msg 284 96 0;
+#X msg 62 134 set 0;
+#X connect 0 0 11 0;
+#X connect 1 0 16 0;
+#X connect 2 0 5 0;
+#X connect 2 0 14 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X connect 10 0 11 1;
+#X connect 10 0 16 1;
+#X connect 11 0 12 0;
+#X connect 12 0 5 0;
+#X connect 12 1 13 0;
+#X connect 13 0 11 1;
+#X connect 14 0 10 0;
+#X connect 15 0 2 0;
+#X connect 15 1 17 0;
+#X connect 16 0 15 0;
+#X connect 17 0 16 1;
+#X connect 18 0 5 0;
+#X restore 68 342 pd \$0-hhhhaaaannnnggggeeeerrrr;
+#X obj 61 336 cnv 15 200 200 empty \$0-frame empty 20 12 0 14 -66577
+-66577 0;
+#X obj 66 341 cnv 15 190 190 empty \$0-frame empty 20 12 0 14 -198977
+-66577 0;
+#X obj 71 346 cnv 15 180 180 empty \$0-frame empty 20 12 0 14 -66577
+-66577 0;
+#X obj 76 351 cnv 15 170 170 empty \$0-frame empty 20 12 0 14 -232882
+-66577 0;
+#X obj 79 394 f \$0;
+#X symbolatom 87 435 0 0 0 0 - - -;
+#X obj 79 413 makesymbol pd-%s-controlled;
+#X msg 79 485 \; \$1 vis \$2;
+#X obj 79 456 pack symbol float;
+#X obj 79 370 t b f;
+#X text 9 193 In the old days \, \$0 was only expanded if it started
+the name \, so it was necessary to use [makesymbol] in order to put
+the value of \$0 into the middle of the name (as in the patch below).
+Additionally \, the entire patch had to be drawn by hand on a punchcard
+(taking care to avoid punching any holes whatsoever) and then given
+directly to Miller \, who would file it away in a drawer for safekeeping
+through the harsh Winter months.;
+#X text 277 391 Vintage Pd Patch;
+#X text 277 411 Medium: Pixels on Canvas;
+#X text 277 431 Artist: Petey Deepea;
+#X text 277 451 Price: Less than 1k;
+#X text 9 152 Since dollarsign variables will now expand in the middle
+of a symbol \, this help patch is deprecated. Dynamic sends using the
+message box can still be handy \, however.;
+#X obj 310 57 tgl 40 0 empty empty open_close 0 -12 1 12 -217060 -1
+-1 0 1;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 8 0 9 0;
+#X connect 8 0 9 1;
+#X connect 14 0 16 0;
+#X connect 16 0 15 0;
+#X connect 16 0 18 0;
+#X connect 18 0 17 0;
+#X connect 19 0 14 0;
+#X connect 19 1 18 1;
+#X connect 26 0 4 0;
diff --git a/doc/pddp/element-help.pd b/doc/pddp/element-help.pd
new file mode 100644
index 00000000..06646f1e
--- /dev/null
+++ b/doc/pddp/element-help.pd
@@ -0,0 +1,139 @@
+#N struct element-help-template float x float y array array1 array1-element-help-template
+;
+#N struct array1-element-help-template float y;
+#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 element 3 12 0 18
+-204280 -1 0;
+#X obj 0 333 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 55 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version 0.4. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure array;
+#X text 12 25 NAME element;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 pointer;
+#X text 12 165 INLET_2 pointer;
+#X text 12 85 DESCRIPTION get pointer to an element of an array;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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 493 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 553 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 82 455 428 134 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 92 72 struct;
+#X obj 142 72 drawpolygon;
+#X obj 223 72 plot;
+#X obj 17 72 drawsymbol;
+#X obj 262 72 drawcurve;
+#X obj 71 37 get;
+#X obj 102 37 set;
+#X obj 131 37 getsize;
+#X obj 185 37 setsize;
+#X obj 17 37 pointer;
+#X obj 240 37 drawnumber;
+#X text 7 1 [element] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 342 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 99 343 float;
+#X text 98 398 list;
+#X text 228 255 <- subpatch to display the data structures;
+#X obj 475 3 element;
+#X obj 450 20 pddp/pddplink http://wiki.puredata.info/en/element -text
+pdpedia: element;
+#N canvas 80 372 428 228 element-help-data 0;
+#X scalar element-help-template 40 40 \; 19 \; 0 \; 11 \; 9 \; 41 \;
+14 \; 31 \; 38 \; 33 \; \;;
+#X obj 0 0 cnv 15 425 20 empty empty empty 20 12 2 14 -204280 -195568
+0;
+#X text 5 0 Window to Display Data Structure Instances;
+#X text 20 155 You can also click and drag each element vertically
+to change its value. When there is no "x" field specified (as in the
+template array1-element-help-template) you can click and drag horizontally
+to change multiple elements in one mouse swoop.;
+#X text 20 110 Each purple square above represents one element of the
+array. Using the [element] object in the parent window you can get
+the y-value of each element.;
+#X restore 77 257 pd element-help-data;
+#N canvas 73 89 428 189 element-help-template 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [element] subpatch;
+#X obj 21 76 struct element-help-template float x float y array array1
+array1-element-help-template;
+#X obj 21 158 filledpolygon 777 666 1 -10 -10 210 -10 210 65 -10 65
+;
+#X obj 21 120 plot -y y(0:41)(41:0) array1 500 1 0 15 25;
+#X text 18 37 This [struct] contains an array "array1." The elements
+of this array are defined by array1-element-help-template;
+#X restore 77 279 pd element-help-template;
+#N canvas 80 82 428 218 array1-element-help-template 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 1 [element] subpatch;
+#X obj 21 73 struct array1-element-help-template float y;
+#X obj 21 131 drawnumber y -5 -20 0;
+#X obj 21 102 filledpolygon 509 0 1 -5 0 0 5 5 0 0 -5;
+#X text 19 37 This [struct] is used in element-help-template to define
+the elements of the array "array1.";
+#X text 20 158 When "array1" is plotted \, each element will be represented
+by a purple box and a number \, as specified here by the [filledpolygon]
+and [drawnumber] objects.;
+#X restore 77 301 pd array1-element-help-template;
+#X obj 78 421 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 420 pointer;
+#X text 169 343 - [element] takes a float to its left inlet \, which
+specifies the element of an array. Indices range from zero to the number
+of elements minus one. Indices out of range are quietly replaced by
+the nearest endpoint.;
+#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 459 pointer;
+#X text 168 459 - when [element] receives a float to its left inlet
+\, it outputs a pointer to the specified element of the array.;
+#X obj 297 107 pointer;
+#X floatatom 125 209 5 0 0 0 - - -;
+#X text 130 156 outlet is pointer to single element;
+#X text 176 207 here we just get the value of y.;
+#X msg 297 83 traverse pd-element-help-data \, next;
+#X obj 125 135 element element-help-template array1;
+#X obj 125 182 get array1-element-help-template y;
+#X obj 125 112 hradio 15 1 0 9 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 155 93 index (0-8);
+#X floatatom 81 135 5 0 0 0 - - -;
+#X text 299 63 Click here first;
+#X text 11 23 get pointer to an element of an array;
+#X text 168 527 - field name. The field name must be an array.;
+#X text 168 398 - a list will be truncated to the first element.;
+#X text 168 512 - name of the template.;
+#X text 168 420 - the right inlet of [element] takes a pointer to a
+scalar.;
+#X text 80 512 1) symbol atom;
+#X text 80 527 2) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 557 pddp/pddplink all_about_arrays.pd;
+#X obj 98 572 pddp/pddplink scalar-help.pd;
+#X connect 23 0 28 1;
+#X connect 27 0 23 0;
+#X connect 28 0 29 0;
+#X connect 29 0 24 0;
+#X connect 30 0 28 0;
+#X connect 30 0 32 0;
diff --git a/doc/pddp/env~-help.pd b/doc/pddp/env~-help.pd
new file mode 100644
index 00000000..7a053196
--- /dev/null
+++ b/doc/pddp/env~-help.pd
@@ -0,0 +1,81 @@
+#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 env~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 343 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 47 243 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 25 NAME env~;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_1 float;
+#X text 12 85 DESCRIPTION envelope follower;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 380 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 434 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;
+#X obj 78 352 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 389 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 351 signal;
+#X obj 493 3 env~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/env~ -text
+pdpedia: env~;
+#X text 98 539 The analysis is "Hanning" (raised cosine) windowed.
+;
+#X text 98 389 float;
+#X floatatom 74 263 0 0 0 0 - - -;
+#X obj 74 140 osc~ 400;
+#X obj 74 167 *~;
+#X floatatom 166 116 3 -99 300 0 - - -;
+#X obj 166 140 dbtorms;
+#X text 194 114 <- set peak-to-peak amplitude here in dB.;
+#X text 110 264 <- the output is RMS amplitude which (for a sinusoid)
+is about 3 dB below peak-to-peak amplitude.;
+#X obj 74 200 env~ 16384 8192;
+#N canvas 97 488 428 101 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 9 38 threshold~;
+#X text 7 1 [env~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 11 23 envelope follower;
+#X text 168 452 - (optional) the analysis window size in samples (the
+default is 1024).;
+#X text 80 452 1) float;
+#X text 80 479 2) float;
+#X text 168 479 - (optional) the period (the number of samples per
+analysis-- window/2 by default). This should normally be a multiple
+of the DSP block size \, although this isn't enforced.;
+#X text 168 389 - the [env~] object takes a signal and outputs its
+RMS amplitude in dB (with 1 normalized to 100 dB.) Output is bounded
+below by zero.;
+#X text 168 351 - the incoming signal;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 557 pddp/pddplink ../3.audio.examples/C07.envelope.follower.pd
+-text doc.3.audio.examples/C07.envelope.follower.pd;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/H06.envelope.follower.pd
+-text doc.3.audio.examples/H06.envelope.follower.pd;
+#X connect 15 0 16 0;
+#X connect 16 0 21 0;
+#X connect 17 0 18 0;
+#X connect 18 0 16 1;
+#X connect 21 0 14 0;
+#X connect 21 0 14 0;
diff --git a/doc/pddp/exp-help.pd b/doc/pddp/exp-help.pd
new file mode 100644
index 00000000..f44c7e51
--- /dev/null
+++ b/doc/pddp/exp-help.pd
@@ -0,0 +1,74 @@
+#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 exp 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 53 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS 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. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 25 NAME exp;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 85 DESCRIPTION raise e to the nth power;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 566 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 104 478 428 108 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 181 42 log;
+#X obj 208 42 abs;
+#X obj 236 42 sqrt;
+#X obj 271 42 pow;
+#X obj 56 75 cos~;
+#X obj 88 75 osc~;
+#X obj 22 75 expr;
+#X obj 22 42 sin;
+#X obj 48 42 cos;
+#X obj 75 42 tan;
+#X obj 108 42 atan;
+#X text 7 1 [exp] Related Objects;
+#X obj 143 42 atan2;
+#X restore 101 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 text 98 445 float;
+#X text 98 510 float;
+#X obj 78 511 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 491 3 exp;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/exp -text
+pdpedia: exp;
+#X floatatom 239 187 0 0 0 0 - - -;
+#X floatatom 239 130 0 0 0 0 - - -;
+#X obj 239 158 exp;
+#X text 296 234 n;
+#X text 103 237 [exp] will output the value of E;
+#X text 104 252 where E is Euler's constant and n is the value of the
+inlet.;
+#X text 11 23 raise e to the nth power;
+#X text 168 465 - a list will be truncated \, and the first element
+will be used as input.;
+#X text 98 465 list;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
diff --git a/doc/pddp/expr-help.pd b/doc/pddp/expr-help.pd
new file mode 100644
index 00000000..c9efbf50
--- /dev/null
+++ b/doc/pddp/expr-help.pd
@@ -0,0 +1,296 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header expr 3 12 0 18 -204280
+-1 0;
+#X obj 0 118 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 0 418 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 449 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 obj 78 127 cnv 17 3 153 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 126 float;
+#X text 98 426 float;
+#X obj 78 426 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 286 cnv 17 3 123 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 285 float;
+#X obj 489 4 expr;
+#X obj 465 21 pddp/pddplink http://wiki.puredata.info/en/expr -text
+pdpedia: expr;
+#X floatatom 87 50 0 0 0 0 - - -;
+#X floatatom 21 96 0 0 0 0 - - -;
+#X msg 21 50 bang;
+#X floatatom 87 96 0 0 0 0 - - -;
+#X floatatom 432 48 0 0 0 0 - - -;
+#X floatatom 432 95 0 0 0 0 - - -;
+#X obj 432 73 expr $f1 * $f2;
+#X floatatom 513 48 0 0 0 0 - - -;
+#X floatatom 185 49 0 0 0 0 - - -;
+#X floatatom 185 96 0 0 0 0 - - -;
+#X obj 185 74 expr sin(2 * 3.14159 * $f1 / 360);
+#X text 98 205 symbol;
+#X text 98 398 symbol;
+#X text 98 242 bang;
+#X obj 87 74 expr 2 + $f1;
+#N canvas 96 45 428 436 expr_and_symbols 0;
+#X floatatom 24 177 0 0 0 0 - - -;
+#X floatatom 24 232 0 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-expr-array 515 float 3;
+#A 0 -0.0122715 0 0.0122715 0.0245412 0.0368072 0.0490676 0.0613207
+0.0735645 0.0857972 0.0980171 0.110222 0.122411 0.134581 0.14673 0.158858
+0.170962 0.18304 0.19509 0.207111 0.219101 0.231058 0.24298 0.254865
+0.266713 0.278519 0.290284 0.302006 0.313681 0.32531 0.33689 0.348418
+0.359895 0.371317 0.382683 0.393992 0.405241 0.416429 0.427555 0.438616
+0.449611 0.460538 0.471396 0.482183 0.492898 0.503538 0.514102 0.524589
+0.534997 0.545325 0.55557 0.565731 0.575808 0.585797 0.595699 0.605511
+0.615231 0.624859 0.634393 0.643831 0.653172 0.662415 0.671558 0.680601
+0.68954 0.698376 0.707106 0.71573 0.724247 0.732654 0.740951 0.749136
+0.757208 0.765167 0.77301 0.780737 0.788346 0.795836 0.803207 0.810457
+0.817584 0.824589 0.831469 0.838224 0.844853 0.851355 0.857728 0.863972
+0.870087 0.87607 0.881921 0.887639 0.893224 0.898674 0.903989 0.909168
+0.914209 0.919113 0.923879 0.928506 0.932992 0.937339 0.941544 0.945607
+0.949528 0.953306 0.95694 0.96043 0.963776 0.966976 0.970031 0.97294
+0.975702 0.978317 0.980785 0.983105 0.985277 0.987301 0.989176 0.990902
+0.992479 0.993907 0.995185 0.996312 0.99729 0.998118 0.998795 0.999322
+0.999699 0.999925 1 0.999925 0.999699 0.999322 0.998796 0.998118 0.997291
+0.996313 0.995185 0.993907 0.99248 0.990903 0.989177 0.987302 0.985278
+0.983106 0.980786 0.978318 0.975702 0.97294 0.970032 0.966977 0.963776
+0.960431 0.956941 0.953306 0.949529 0.945608 0.941545 0.93734 0.932993
+0.928507 0.92388 0.919115 0.91421 0.909169 0.90399 0.898675 0.893225
+0.88764 0.881922 0.876071 0.870088 0.863974 0.85773 0.851356 0.844855
+0.838226 0.831471 0.82459 0.817586 0.810458 0.803209 0.795838 0.788348
+0.780738 0.773012 0.765168 0.75721 0.749138 0.740952 0.732656 0.724248
+0.715732 0.707108 0.698378 0.689542 0.680602 0.67156 0.662417 0.653174
+0.643833 0.634395 0.624861 0.615233 0.605513 0.595701 0.5858 0.57581
+0.565734 0.555572 0.545327 0.534999 0.524592 0.514105 0.50354 0.4929
+0.482186 0.471399 0.460541 0.449613 0.438618 0.427557 0.416432 0.405243
+0.393994 0.382686 0.371319 0.359897 0.348421 0.336892 0.325313 0.313684
+0.302008 0.290287 0.278522 0.266715 0.254868 0.242983 0.231061 0.219104
+0.207114 0.195093 0.183042 0.170964 0.158861 0.146733 0.134583 0.122413
+0.110225 0.0980197 0.0857999 0.0735671 0.0613233 0.0490703 0.0368098
+0.0245439 0.0122742 2.65359e-06 -0.0122689 -0.0245386 -0.0368045 -0.049065
+-0.061318 -0.0735619 -0.0857946 -0.0980144 -0.110219 -0.122408 -0.134578
+-0.146728 -0.158855 -0.170959 -0.183037 -0.195088 -0.207109 -0.219098
+-0.231055 -0.242977 -0.254863 -0.26671 -0.278517 -0.290282 -0.302003
+-0.313679 -0.325308 -0.336887 -0.348416 -0.359892 -0.371314 -0.382681
+-0.393989 -0.405239 -0.416427 -0.427552 -0.438614 -0.449609 -0.460536
+-0.471394 -0.482181 -0.492896 -0.503536 -0.5141 -0.524587 -0.534995
+-0.545322 -0.555568 -0.565729 -0.575806 -0.585795 -0.595697 -0.605509
+-0.615229 -0.624857 -0.634391 -0.643829 -0.65317 -0.662413 -0.671557
+-0.680599 -0.689538 -0.698374 -0.707104 -0.715729 -0.724245 -0.732652
+-0.740949 -0.749134 -0.757207 -0.765165 -0.773008 -0.780735 -0.788344
+-0.795835 -0.803205 -0.810455 -0.817583 -0.824587 -0.831468 -0.838223
+-0.844852 -0.851353 -0.857727 -0.863971 -0.870085 -0.876068 -0.88192
+-0.887638 -0.893223 -0.898673 -0.903988 -0.909166 -0.914208 -0.919112
+-0.923878 -0.928505 -0.932992 -0.937338 -0.941543 -0.945606 -0.949527
+-0.953305 -0.956939 -0.960429 -0.963775 -0.966976 -0.97003 -0.972939
+-0.975701 -0.978317 -0.980785 -0.983105 -0.985277 -0.987301 -0.989176
+-0.990902 -0.992479 -0.993907 -0.995184 -0.996312 -0.99729 -0.998118
+-0.998795 -0.999322 -0.999699 -0.999925 -1 -0.999925 -0.999699 -0.999323
+-0.998796 -0.998118 -0.997291 -0.996313 -0.995185 -0.993907 -0.99248
+-0.990903 -0.989177 -0.987302 -0.985278 -0.983106 -0.980786 -0.978318
+-0.975703 -0.972941 -0.970032 -0.966978 -0.963777 -0.960432 -0.956942
+-0.953307 -0.94953 -0.945609 -0.941545 -0.93734 -0.932994 -0.928508
+-0.923881 -0.919116 -0.914212 -0.90917 -0.903991 -0.898676 -0.893226
+-0.887642 -0.881923 -0.876072 -0.870089 -0.863975 -0.857731 -0.851358
+-0.844856 -0.838227 -0.831472 -0.824592 -0.817587 -0.81046 -0.80321
+-0.79584 -0.788349 -0.78074 -0.773013 -0.76517 -0.757212 -0.749139
+-0.740954 -0.732657 -0.72425 -0.715734 -0.70711 -0.69838 -0.689544
+-0.680604 -0.671562 -0.662419 -0.653176 -0.643835 -0.634397 -0.624863
+-0.615235 -0.605515 -0.595703 -0.585802 -0.575812 -0.565736 -0.555574
+-0.545329 -0.535002 -0.524594 -0.514107 -0.503543 -0.492902 -0.482188
+-0.471401 -0.460543 -0.449616 -0.438621 -0.42756 -0.416434 -0.405246
+-0.393997 -0.382688 -0.371322 -0.3599 -0.348423 -0.336895 -0.325315
+-0.313687 -0.302011 -0.29029 -0.278525 -0.266718 -0.254871 -0.242985
+-0.231063 -0.219106 -0.207116 -0.195095 -0.183045 -0.170967 -0.158863
+-0.146736 -0.134586 -0.122416 -0.110227 -0.0980223 -0.0858025 -0.0735698
+-0.061326 -0.0490729 -0.0368125 -0.0245465 -0.0122768 -5.30718e-06
+0.0122662;
+#X coords 0 1 515 -1 200 140 1;
+#X restore 24 279 graph;
+#X obj 240 366 loadbang;
+#X msg 240 388 \; expr-array2 sinesum 512 1;
+#X obj 99 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 99 176 symbol \$0-expr-array;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 24 204 expr $s2[$f1];
+#X text 21 37 Symbolic arguments like $s1 \, $s2 \, and so on are currently
+used in [expr] to get the name of an array or table. You can also type
+the name of an array directly into [expr] \, but this is limited since
+\, for example \, a dash ("e.g. \, my-table") will get interpreted
+as an operator ("e.g. \, my minus table").;
+#X text 113 219 of the array will be clipped;
+#X text 113 204 index values outside the range;
+#X text 20 116 The following syntax outputs the y-value for the element
+specified by the left inlet.;
+#X text 118 154 click here first;
+#X text 8 2 [expr] Using Symbolic Arguments;
+#X connect 0 0 8 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 1;
+#X connect 8 0 1 0;
+#X restore 169 397 pd expr_and_symbols;
+#X obj 21 74 expr 1;
+#X text 168 426 - float is the only type of output.;
+#X obj 273 577 pddplink http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 273 563 Expr family of objects by Shahrokh Yadegari;
+#N canvas 91 55 428 501 expr_weirdness 0;
+#X obj 42 98 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 42 143 5 0 0 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 119 expr 8 / 6;
+#X obj 42 254 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 42 302 5 0 0 0 - - -;
+#X obj 42 331 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 42 379 5 0 0 0 - - -;
+#X text 19 166 This gets tricky \, because Pd strips unnecessary characters
+from a floating point number. Hence \, if you try to type "8.0 / 6.0"
+in the [expr] object above \, the decimal point and the following zero
+will be removed once you click outside the object (try it).;
+#X text 19 230 There are several work-arounds for this problem:;
+#X text 19 253 1;
+#X text 19 330 2;
+#X obj 42 278 expr (8.0) / (6.0);
+#X text 79 143 "8" and "6" above are interpreted as integers;
+#X text 65 248 Putting parentheses next to the number forces Pd to
+interpret it as a symbol \, so no characters are stripped.;
+#X obj 42 355 expr 8.0/6.0;
+#X text 65 324 Removing the space between the numbers and the operator
+achieves the same thing.;
+#X obj 42 411 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 42 459 5 0 0 0 - - -;
+#X text 19 410 3;
+#X text 65 410 Using the "float" function makes the float type explicit.
+;
+#X obj 42 435 expr float(8) / 6;
+#X text 7 2 [expr] Weirdness with Floats vs. Ints;
+#X text 19 38 Numbers used in [expr~] follow the Max/MSP paradigm \,
+where numbers without a decimal point are interpreted as integers.
+This can be the source of some confusion in Pd \, which uses floating
+point numbers exclusively.;
+#X obj 22 576 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 22 618 5 0 0 0 - - -;
+#X text 19 486 Since float has priority over int \, the integer in
+example 3 is automatically converted to a float. Likewise \, using
+"6" instead of "6.0" in examples 1 and 2 would still give a floating
+point result.;
+#X text 19 539 These details come in handy if you want to use an integer
+to specify a large number:;
+#X text 166 595 What happens if you put a space;
+#X obj 22 596 expr 123456789%10;
+#X text 167 610 between the "%" sign and these integers?;
+#X text 19 704 Unfortunately \, [expr] doesn't understand scientific
+notation. But even if it did \, a float will lose precision in this
+calculation:;
+#X text 165 625 (Scroll down for the answer);
+#X obj 22 747 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 22 789 5 0 0 0 - - -;
+#X obj 22 767 expr int(123456789.0)%10;
+#X connect 0 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 12 0;
+#X connect 6 0 15 0;
+#X connect 12 0 5 0;
+#X connect 15 0 7 0;
+#X connect 17 0 21 0;
+#X connect 21 0 18 0;
+#X connect 24 0 29 0;
+#X connect 29 0 25 0;
+#X connect 33 0 35 0;
+#X connect 35 0 34 0;
+#X restore 275 546 pd expr_weirdness;
+#X text 11 24 expression evaluation of control data;
+#X text 98 269 list;
+#X msg 395 48 3 4;
+#X text 183 350 1) a dollar-sign ($);
+#X text 166 285 - an extra inlet is added for each additional dollar-sign
+variable specified as a creation argument ($v2 \, $f3 \, etc.). Each
+inlet accepts only one of the following: signal \, float \, or symbol.
+There may be at most nine variables in one [expr~] object. Each variable
+consists of:;
+#X text 183 363 2) "v" \, "f" \, "i" or "s" (signal \, float \, integer
+or symbol);
+#X text 183 376 3) an inlet number (Note: inlet numbers start from
+one);
+#X text 168 205 - if the variable $s1 is used as an argument \, it
+will be replaced by the incoming symbol. (If $f1 \, $i1 \, and $s1
+are not used as arguments \, the symbol will trigger the output.);
+#X text 168 126 - if the variable $f1 (float) or $i1 (integer) is specified
+as an argument \, it will be replaced in the expression by the incoming
+value. The expression will then be evaluated and output. (Notes: You
+cannot use $f1 and $i1 in the same [expr] object. If $f1 \, $i1 \,
+and $s1 are not used as arguments \, an incoming float will trigger
+the output.);
+#X text 168 243 - a bang will evaluate the expression with the last
+received values and trigger the output.;
+#X text 167 463 - the arguments themselves form the expression to evaluate.
+They may be floats or symbols \, including the special variables noted
+above ($i1 \, $f2 \, etc.). The operators and functions available for
+use in [expr~] are listed below:;
+#X text 168 269 - a list will be distributed to the inlets of [expr].
+;
+#X obj 170 516 pddp/pddplink all_about_expr_functions.pd -text all_about_expr_operators_and_functions
+;
+#X text 80 463 n) float;
+#X text 98 475 symbol atom;
+#X text 98 489 comma;
+#X text 98 502 semicolon;
+#X obj 101 546 pddp/pddplink all_about_expr_if.pd -text expr_if;
+#X obj 101 561 pddp/pddplink all_about_expr_and_value.pd -text expr_and_value
+;
+#X obj 101 578 pddp/pddplink all_about_expr_multiline.pd -text expr_multiline
+;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#N canvas 52 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 205 AUTHOR Shahrokh Yadegari;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd 0.35 test 26 and expr*
+0.4. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control nonlocal trigonometry;
+#X text 12 25 NAME expr;
+#X text 12 125 INLET_0 float bang symbol list;
+#X text 12 145 INLET_N float symbol;
+#X text 12 165 OUTLET_N float;
+#X text 12 85 DESCRIPTION expression evaluation of control data;
+#X text 12 245 RELEASE_DATE 1989;
+#X text 12 265 RELEASE_VERSION;
+#X text 12 65 LICENSE GPL v2;
+#X restore 500 598 pd META;
+#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 obj 22 43 expr~;
+#X obj 62 43 fexpr~;
+#X text 7 2 [expr] Related Objects;
+#X restore 101 598 pd Related_objects;
+#X obj 4 598 pddp/pddplink pddp/help.pd -text help;
+#X connect 13 0 27 0;
+#X connect 15 0 29 0;
+#X connect 17 0 19 0;
+#X connect 19 0 18 0;
+#X connect 20 0 19 1;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 27 0 16 0;
+#X connect 29 0 14 0;
+#X connect 36 0 19 0;
diff --git a/doc/pddp/expr~-help.pd b/doc/pddp/expr~-help.pd
new file mode 100644
index 00000000..cc8541db
--- /dev/null
+++ b/doc/pddp/expr~-help.pd
@@ -0,0 +1,203 @@
+#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 expr~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 185 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 205 AUTHOR Shahrokh Yadegari;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd 0.35 test 26 and expr*
+0.4. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal trigonometry;
+#X text 12 25 NAME expr~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_N float symbol signal;
+#X text 12 165 OUTLET_N signal;
+#X text 12 85 DESCRIPTION expression evaluation of signal data (vector)
+;
+#X text 12 265 RELEASE_VERSION;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 12 245 RELEASE_DATE 1999;
+#X text 12 65 LICENSE GPL v2;
+#X restore 500 597 pd META;
+#X obj 0 368 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 405 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 500 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 105 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 obj 61 42 fexpr~;
+#X obj 21 42 expr;
+#X text 7 1 [expr~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 194 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 377 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 235 cnv 17 3 125 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 252 float;
+#X text 98 343 symbol;
+#X obj 273 572 pddplink http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 273 555 Expr family of objects by Shahrokh Yadegari;
+#X obj 483 3 expr~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/expr~ -text
+pdpedia: expr~;
+#X obj 18 159 print~;
+#X msg 31 138 bang;
+#X obj 18 94 sig~ 440;
+#X floatatom 93 94 0 0 0 0 - - -;
+#X floatatom 18 71 0 0 0 0 - - -;
+#X obj 18 117 expr~ $v1*$f2;
+#X obj 163 149 print~;
+#X msg 175 128 bang;
+#X floatatom 163 84 0 0 0 0 - - -;
+#X floatatom 238 84 0 0 0 0 - - -;
+#X floatatom 363 109 0 0 0 0 - - -;
+#X floatatom 307 84 0 0 0 0 - - -;
+#X obj 307 109 osc~;
+#X text 16 52 vector times scalar;
+#X text 161 53 vector;
+#X obj 306 159 dac~;
+#X text 304 54 frequency;
+#X obj 163 107 expr~ $v1*$v2;
+#X obj 306 130 expr~ $v1*$f2/128;
+#X text 98 193 signal;
+#X text 98 235 signal;
+#X obj 366 78 hsl 50 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X text 98 377 signal;
+#N canvas 117 43 428 483 More_expr~_examples 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X floatatom 237 101 5 0 0 0 - - -;
+#X obj 24 150 tabsend~ a1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array a1 64 float 0;
+#X coords 0 1 63 -1 100 70 1;
+#X restore 25 192 graph;
+#X obj 24 127 expr~ max(min($v1 \, $f2/10) \, -$f2/10);
+#X text 22 40 A simple limiter example;
+#X obj 24 103 osc~ 2756.25;
+#X text 152 66 Move the value below between 0 and 10;
+#X text 156 81 to change the limiter threshold;
+#X obj 25 344 tabsend~ a2;
+#X obj 167 344 tabsend~ a3;
+#X obj 25 275 osc~ 2756.25;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array a2 64 float 1;
+#A 0 0.549579 0.537788 0.441331 0.271876 0.0531549 -0.182367 -0.398338
+-0.56015 -0.640495 -0.623948 -0.509821 -0.31276 -0.0608986 0.208152
+0.45295 0.634629 0.72309 0.702001 0.571703 0.349599 0.0678645 -0.231227
+-0.501668 -0.700852 -0.796298 -0.770949 -0.626166 -0.381895 -0.0739361
+0.251307 0.543884 0.757993 0.859183 0.829905 0.672509 0.409237 0.0790617
+-0.268115 -0.579036 -0.805301 -0.910919 -0.87807 -0.710105 -0.431258
+-0.0831469 0.281461 0.606691 0.842151 0.950817 0.914845 0.738504 0.447701
+0.0861703 -0.291136 -0.626444 -0.868064 -0.978385 -0.939756 -0.757318
+-0.458317 -0.0880561 0.297047 0.638088 0.882729;
+#X coords 0 1 63 -1 100 70 1;
+#X restore 25 394 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array a3 64 float 0;
+#X coords 0 1 63 -1 100 70 1;
+#X restore 147 394 graph;
+#X obj 167 275 osc~ 100;
+#X obj 25 303 expr~ $v1*$v2 \; if ($v2 > 0 \, 0 \, $v1*$v2);
+#X text 8 2 [expr~] More examples;
+#X connect 1 0 4 1;
+#X connect 4 0 2 0;
+#X connect 6 0 4 0;
+#X connect 11 0 15 0;
+#X connect 14 0 15 1;
+#X connect 15 0 9 0;
+#X connect 15 1 10 0;
+#X restore 101 569 pd More_expr~_examples;
+#N canvas 56 89 428 436 expr_and_symbols 0;
+#X floatatom 24 177 0 0 0 0 - - -;
+#X floatatom 24 232 0 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-expr-array 515 float 2;
+#X coords 0 1 515 -1 200 140 1;
+#X restore 24 279 graph;
+#X obj 240 338 loadbang;
+#X obj 99 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 99 176 symbol \$0-expr-array;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 24 204 expr $s2[$f1];
+#X text 113 219 of the array will be clipped;
+#X text 113 204 index values outside the range;
+#X text 20 116 The following syntax outputs the y-value for the element
+specified by the left inlet.;
+#X text 118 154 click here first;
+#X text 8 2 [expr~] Using Symbolic Arguments;
+#X obj 240 362 f \$0;
+#X msg 240 388 \; \$1-expr-array sinesum 512 1;
+#X text 21 37 Symbolic arguments like $s1 \, $s2 \, and so on are currently
+used in [expr] \, [expr~] \, and [fexpr~] to get the name of an array
+or table. You can also type the name of an array directly into [expr]
+\, but this is limited since \, for example \, a dash (e.g. \, "my-table")
+will get interpreted as an operator (e.g. \, "my minus table").;
+#X connect 0 0 7 0;
+#X connect 3 0 13 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 1;
+#X connect 7 0 1 0;
+#X connect 13 0 14 0;
+#X restore 170 343 pd expr_and_symbols;
+#X text 11 23 expression evaluation of signal data (vector);
+#X text 384 93 amplitude;
+#X text 183 298 1) a dollar-sign ($);
+#X text 166 234 - an extra inlet is added for each additional dollar-sign
+variable specified as a creation argument ($v2 \, $f3 \, etc.). Each
+inlet accepts only one of the following: signal \, float \, or symbol.
+There may be at most nine variables in one [expr~] object. Each variable
+consists of:;
+#X text 168 193 - the left inlet of [expr~] only accepts signals (i.e.
+\, $f1 and $s1 variables will not work). Use the variable $v1 as a
+creation argument to use this signal in an expression.;
+#X text 183 311 2) "v" \, "f" \, "i" or "s" (signal \, float \, integer
+or symbol);
+#X text 183 324 3) an inlet number (Note: inlet numbers start from
+one);
+#X text 167 422 - the arguments themselves form the expression to evaluate.
+They may be floats or symbols \, including the special variables noted
+above ($v1 \, $f2 \, etc.). Follow the link below for all availabel
+operators and functions in [expr~]:;
+#X obj 170 476 pddp/pddplink all_about_expr_functions.pd -text all_about_expr_operators_and_functions
+;
+#X text 80 422 n) float;
+#X text 98 434 symbol atom;
+#X text 98 448 comma;
+#X text 98 461 semicolon;
+#X obj 101 506 pddp/pddplink all_about_expr_if.pd -text expr_if;
+#X obj 101 526 pddp/pddplink all_about_expr_and_value.pd -text expr_and_value
+;
+#X obj 101 546 pddp/pddplink all_about_expr_multiline.pd -text expr_multiline
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 18 0 17 0;
+#X connect 19 0 22 0;
+#X connect 20 0 22 1;
+#X connect 21 0 19 0;
+#X connect 22 0 17 0;
+#X connect 24 0 23 0;
+#X connect 25 0 34 0;
+#X connect 26 0 34 1;
+#X connect 28 0 29 0;
+#X connect 29 0 35 0;
+#X connect 34 0 23 0;
+#X connect 35 0 32 0;
+#X connect 35 0 32 1;
+#X connect 38 0 35 1;
+#X connect 38 0 27 0;
diff --git a/doc/pddp/fexpr~-help.pd b/doc/pddp/fexpr~-help.pd
new file mode 100644
index 00000000..79bce933
--- /dev/null
+++ b/doc/pddp/fexpr~-help.pd
@@ -0,0 +1,458 @@
+#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 fexpr~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 195 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 110 PLATFORM windows macosx gnulinux;
+#X text 12 190 LIBRARY internal;
+#X text 12 210 AUTHOR Shahrokh Yadegari;
+#X text 12 230 WEBSITE http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 13 290 HELP_PATCH_AUTHORS Updated for Pd 0.35 test 26 and expr*
+0.4. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal trigonometry;
+#X text 12 25 NAME fexpr~;
+#X text 12 150 INLET_N float symbol signal;
+#X text 12 130 INLET_0 signal;
+#X text 12 170 OUTLET_N signal;
+#X text 12 85 DESCRIPTION expression evaluation of signal data (sample
+level);
+#X text 12 250 RELEASE_DATE 2000;
+#X text 12 270 RELEASE_VERSION;
+#X text 12 65 LICENSE GPL v2;
+#X restore 500 597 pd META;
+#X obj 0 369 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 401 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 489 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 107 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 obj 22 43 expr;
+#X text 8 2 [fexpr~] Related Objects;
+#X obj 62 43 expr~;
+#X restore 101 597 pd Related_objects;
+#X obj 78 204 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 378 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 245 cnv 17 3 115 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 265 float;
+#X text 98 344 symbol;
+#X obj 143 577 pddplink http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 143 563 Expr family of objects by Shahrokh Yadegari;
+#X text 98 203 signal;
+#X text 98 245 signal;
+#X text 98 377 signal;
+#X obj 480 3 fexpr~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/fexpr~ -text
+pdpedia: fexpr~;
+#X floatatom 240 67 0 0 0 0 - - -;
+#X floatatom 287 100 0 0 0 0 - - -;
+#X msg 287 69 -10;
+#X obj 152 167 dac~;
+#X text 141 45 Simple FIR filter;
+#X msg 108 66 start;
+#X msg 47 85 stop;
+#X obj 47 65 loadbang;
+#X msg 354 68 -20;
+#X obj 152 102 osc~ 2205;
+#X msg 189 67 1102.5;
+#X msg 152 67 2205;
+#X msg 321 68 0;
+#X text 316 95 If you change this;
+#X text 318 107 value you hear a click;
+#X obj 151 145 *~ 0.1;
+#N canvas 118 43 428 526 More_fexpr~_examples 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X floatatom 87 236 0 0 0 0 - - -;
+#X floatatom 247 257 0 0 0 0 - - -;
+#X obj 83 306 dac~;
+#X obj 84 277 fexpr~ ($x1[$f2/1000]+$x1)/2;
+#X msg 316 187 0 10000;
+#X obj 247 238 line 0;
+#X msg 250 188 -10000;
+#X text 20 38 Simple FIR filter using fractional offset;
+#X msg 156 188 -10000 10000;
+#X obj 87 257 osc~ 2205;
+#X msg 96 213 1102.5;
+#X msg 314 212 0 10000;
+#X msg 248 213 -20000;
+#X msg 154 213 -20000 10000;
+#X msg 87 188 2205;
+#X msg 30 182 start;
+#X msg 31 228 stop;
+#X obj 31 206 loadbang;
+#X text 69 161 frequency;
+#X text 159 170 of the simple filter;
+#X text 158 158 index defining the frequency;
+#X text 20 106 Thus \, the offset -10000 will filter audio at frequency
+of 2205 and the offset value -20000 will filter the audio at frequency
+of 1102.5.;
+#X text 21 55 When fractional offset is used \, fexpr~ determines indexed
+by linear interpolation. In the following example the offset value
+is divided by 1000 \, thus we can continuously change the offset without
+an audible click in the output.;
+#X obj 90 495 print~;
+#X msg 220 461 bang;
+#X floatatom 90 388 0 0 0 0 - - -;
+#X obj 90 456 fexpr~ $x1+$y[-1];
+#X msg 23 383 start;
+#X msg 23 431 stop;
+#X obj 23 409 loadbang;
+#X text 128 359 simple accumulator defined as and an IIR filter;
+#X msg 219 389 set 4000;
+#X obj 90 410 sig~ 0.001;
+#X msg 220 412 clear;
+#X text 27 356 comment;
+#X text 19 345 1 first click the start button;
+#X text 8 2 [fexpr~] More examples;
+#X text 273 429 the clear button;
+#X text 262 413 2 click the set or;
+#X text 260 462 3 click bang to see how;
+#X text 272 477 set and clear work;
+#X connect 1 0 10 0;
+#X connect 2 0 4 1;
+#X connect 4 0 3 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 6 0 2 0;
+#X connect 7 0 6 0;
+#X connect 9 0 6 0;
+#X connect 10 0 4 0;
+#X connect 11 0 1 0;
+#X connect 12 0 6 0;
+#X connect 13 0 6 0;
+#X connect 14 0 6 0;
+#X connect 15 0 1 0;
+#X connect 16 0 4 0;
+#X connect 17 0 4 0;
+#X connect 18 0 17 0;
+#X connect 25 0 24 0;
+#X connect 26 0 33 0;
+#X connect 27 0 24 0;
+#X connect 28 0 27 0;
+#X connect 29 0 27 0;
+#X connect 30 0 29 0;
+#X connect 32 0 27 0;
+#X connect 33 0 27 0;
+#X connect 34 0 27 0;
+#X restore 281 503 pd More_fexpr~_examples;
+#N canvas 9 72 545 449 lorenz 0;
+#X obj 166 117 v pr;
+#X obj 297 118 v r;
+#X obj 223 119 v b;
+#X floatatom 166 88 5 0 0 0 - - -;
+#X floatatom 297 90 5 0 0 0 - - -;
+#X msg 167 63 10;
+#X obj 221 60 expr 8./3;
+#X msg 118 186 set 1.2 2.3 4.4;
+#X floatatom 223 89 7 0 0 0 - - -;
+#X msg 65 96 stop;
+#X msg 65 117 start;
+#X floatatom 359 90 5 0 0 0 - - -;
+#X obj 359 119 v dt;
+#X msg 300 62 18;
+#X msg 355 63 0.01;
+#X obj 58 346 dac~;
+#X obj 118 9 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X text 191 9 <- turn audio on and bang here;
+#X text 162 142 if you hear a buzz \, you have probably gone unstable
+bang on the top again;
+#X obj 399 65 line;
+#X obj 118 291 /~ 20;
+#X obj 224 288 /~ 20;
+#X obj 330 287 /~ 20;
+#X msg 399 39 0.01 \, 0.04 5000;
+#X obj 118 235 fexpr~ $y1+(pr*$y2-pr*$y1)*dt \; $y2 +(-$y1*$y3 + r*$y1-$y2)*dt
+\; $y3+($y1*$y2 - b*$y3)*dt;
+#X obj 4 115 loadbang;
+#X text 113 -50 This is an example of how fexpr~ could be used for
+solving differential equations \, in this case the lorenz equations
+which generate chotic signals;
+#X text 311 232 Note the following shorthands:;
+#X text 218 186 the 'set' commands sets the initial previous values
+;
+#X obj 118 348 tabsend~ lorenz1a;
+#X obj 224 328 tabsend~ lorenz2a;
+#X obj 329 309 tabsend~ lorenz3a;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array lorenz1a 64 float 0;
+#X coords 0 1 63 -1 100 60 1;
+#X restore 13 417 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array lorenz2a 64 float 0;
+#X coords 0 1 63 -1 100 60 1;
+#X restore 183 417 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array lorenz3a 64 float 0;
+#X coords 0 1 63 -1 100 60 1;
+#X restore 363 417 graph;
+#X text 191 365 You can see the graphs if you scroll down;
+#X text 191 378 but the redrawings may cause clicks in the audio;
+#X text 414 101 these numbers;
+#X text 395 89 <- experiment with;
+#X text 310 248 $y1 -> $y1[-1] \, $y2 -> $y2[-1] \, ...;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 24 0;
+#X connect 8 0 2 0;
+#X connect 9 0 24 0;
+#X connect 10 0 24 0;
+#X connect 11 0 12 0;
+#X connect 13 0 4 0;
+#X connect 14 0 11 0;
+#X connect 16 0 5 0;
+#X connect 16 0 6 0;
+#X connect 16 0 13 0;
+#X connect 16 0 14 0;
+#X connect 16 0 7 0;
+#X connect 16 0 10 0;
+#X connect 19 0 11 0;
+#X connect 20 0 29 0;
+#X connect 20 0 15 0;
+#X connect 20 0 15 1;
+#X connect 21 0 30 0;
+#X connect 22 0 31 0;
+#X connect 23 0 19 0;
+#X connect 24 0 20 0;
+#X connect 24 1 21 0;
+#X connect 24 2 22 0;
+#X connect 25 0 9 0;
+#X restore 281 524 pd lorenz equations for audition;
+#N canvas 12 59 536 519 lorenz 0;
+#X obj 166 67 v pr;
+#X obj 297 68 v r;
+#X obj 223 69 v b;
+#X floatatom 166 38 5 0 0 0 - - -;
+#X floatatom 297 40 5 0 0 0 - - -;
+#X msg 167 13 10;
+#X obj 221 10 expr 8./3;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array lorenz1 2048 float 0;
+#X coords 0 -1 2047 1 100 60 1;
+#X restore 72 447 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array lorenz2 2048 float 0;
+#X coords 0 -1 2047 1 100 60 1;
+#X restore 217 447 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array lorenz3 2048 float 0;
+#X coords 0 -1 2047 1 100 60 1;
+#X restore 370 447 graph;
+#X msg 118 136 set 1.2 2.3 4.4;
+#X floatatom 223 39 7 0 0 0 - - -;
+#X msg 65 46 stop;
+#X msg 65 67 start;
+#X floatatom 349 40 5 0 0 0 - - -;
+#X obj 349 69 v dt;
+#X msg 300 12 18;
+#X msg 345 13 0.01;
+#X obj 118 -41 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X text 191 -41 <- turn audio on and bang here;
+#X text 142 92 if you hear a buzz \, you have probably gone unstable
+bang on the top again;
+#X obj 389 15 line;
+#X obj 118 241 /~ 20;
+#X obj 224 238 /~ 20;
+#X obj 330 237 /~ 20;
+#X msg 389 -11 0.01 \, 0.04 5000;
+#X obj 4 65 loadbang;
+#X text 103 -100 This is an example of how fexpr~ could be used for
+solving differential equations \, in this case the lorenz equations
+which generate chotic signals;
+#X text 312 184 Note the following shorthands:;
+#X text 218 136 the 'set' commands sets the initial previous values
+;
+#X obj 118 298 tabsend~ lorenz1;
+#X obj 224 278 tabsend~ lorenz2;
+#X obj 329 259 tabsend~ lorenz3;
+#X obj 447 280 block~ 2048;
+#X text 136 333 Lorenz Equations;
+#X obj 118 185 fexpr~ $y1+pr * ($y2-$y1)*dt \; $y2 +(-$y1*$y3 + r*$y1-$y2)*dt
+\; $y3+($y1*$y2 - b*$y3)*dt;
+#X text 139 397 dZ/dt = -bZ;
+#X text 136 367 dX/dt = pr * (X - Y);
+#X text 135 347 written with 3 state variable X \, Y \, and Z;
+#X text 137 382 dY/dt = -XZ + rX - y;
+#X text 404 52 these numbers;
+#X text 385 39 <- experiment with;
+#X text 311 200 $y1 -> $y1[-1] \, $y2 -> $y2[-1] \, ...;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 11 0;
+#X connect 10 0 35 0;
+#X connect 11 0 2 0;
+#X connect 12 0 35 0;
+#X connect 13 0 35 0;
+#X connect 14 0 15 0;
+#X connect 16 0 4 0;
+#X connect 17 0 14 0;
+#X connect 18 0 5 0;
+#X connect 18 0 6 0;
+#X connect 18 0 16 0;
+#X connect 18 0 17 0;
+#X connect 18 0 10 0;
+#X connect 18 0 13 0;
+#X connect 21 0 14 0;
+#X connect 22 0 30 0;
+#X connect 23 0 31 0;
+#X connect 24 0 32 0;
+#X connect 25 0 21 0;
+#X connect 26 0 12 0;
+#X connect 35 0 22 0;
+#X connect 35 1 23 0;
+#X connect 35 2 24 0;
+#X restore 281 545 pd lorenz equations for visualization;
+#X text 195 145 -10 offset will fully filter audio frequency of 2205
+\, and -20 offset will filter audio at frequency of 1102.5;
+#N canvas 9 230 428 130 CPU_usage 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [fexpr~] CPU Usage;
+#X text 19 37 NOTE: fexpr~ could use lots of CPU power \, by default
+fexpr~ is on when it is loaded. In this help patch we are turning them
+off with loadbang \, so to hear them you have to turn them on explicitly.
+You can use the "start" and "stop" messages to start and stop fexpr~
+;
+#X restore 8 167 pd CPU_usage;
+#X text 6 147 below:;
+#X text 6 111 Note: [fexpr~];
+#X text 6 123 can use lots;
+#X text 6 135 of CPU. Read;
+#X obj 152 124 fexpr~ ($x1[$f2]+$x1)/2;
+#X text 158 203 - the first inlet of [expr~] only accepts signals.
+For this reason \, you can't specify the $f1 or $s1 variables- only
+$x and $y variables are accepted.;
+#N canvas 39 43 508 524 $x_and_$y_variables 0;
+#X text 92 198 $y -> $y1[-1];
+#X text 20 167 Shorthands: $x -> $x1[0];
+#X text 92 183 $x1 -> $x1[0] $x2 -> $x2[0] .....;
+#X text 92 213 $y1 -> $y1[-1] $y2 -> $y2[-1] .....;
+#X text 45 403 e.g. \, set x2 3.4 0.4 sets x2[-1]=3.4 and x2[-2]=0.4
+;
+#X text 45 436 e.g. \, set y3 1.1 3.3 4.5 sets y3[-1]=1.1 y3[-2]=3.3
+and y3[-3]=4.5;
+#X text 45 361 e.g. \, set 0.1 2.2 0.4 sets y1[-1]=0.1 y2[-1]=2.2 \,
+and y3[-1]=0.4;
+#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 [fexpr~] $x and $y Variables;
+#X text 20 38 The following dollarsign variables are only used for
+fexpr~:;
+#X text 20 61 $x#[n];
+#X text 20 91 $x#;
+#X text 70 91 - $x# is a shorthand for $x#[0] \, specifying the current
+sample;
+#X text 70 61 - the sample from inlet # indexed by n where n has to
+satisfy 0 => n >= -vector size;
+#X text 20 121 $y[n];
+#X text 70 121 - the output value indexed by n where n has to satisfy
+0 > n >= -vector size. (The vector size can be changed by the "block~"
+object.);
+#X text 19 238 [fexpr~] responds to the following methods:;
+#X text 21 303 clear;
+#X text 81 303 - clears all the previous input and output buffers;
+#X text 21 318 clear x#;
+#X text 81 318 - clears the previous values of the #th input;
+#X text 21 333 clear y#;
+#X text 81 333 - clears the previous values of the #th output;
+#X text 21 348 set val val ...;
+#X text 121 348 - sets the first past values of each output;
+#X text 21 391 set x# val-1 val-2 ...;
+#X text 161 391 - sets the as many supplied values of the #th input
+;
+#X text 21 423 set y# val-1 val-2 ...;
+#X text 161 424 - sets the as many supplied values of the #th input
+;
+#X text 21 481 Note: The inlet number starts from one. There may be
+at most nine variables in one [fexpr~] object.;
+#X text 21 258 start;
+#X text 81 258 - start computation for a [fexpr~] object;
+#X text 81 273 - stop computation for a [fexpr~] object;
+#X text 21 273 stop;
+#X text 21 288 verbose;
+#X text 81 288 - toggle verbose mode;
+#X restore 160 321 pd $x_and_$y_variables;
+#X text 158 244 - an extra inlet is added for each dollar-sign variable
+used in the expression ($s2 \, $f3 \, etc.). Extra inlets accept only
+one of the following: signals \, floats \, or symbols. Each variable
+is denoted by a dollarsign \, an "f" for float \, "s" for symbol \,
+or an "x" or "y" as specified in the following subpatch:;
+#N canvas 118 44 428 479 fexpr~_and_symbols 0;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-expr-array 515 float 2;
+#X coords 0 1 515 -1 200 140 1;
+#X restore 24 329 graph;
+#X obj 240 386 loadbang;
+#X obj 105 176 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 117 239 of the array will be clipped;
+#X text 117 224 index values outside the range;
+#X text 20 116 The following syntax outputs the y-value for the element
+specified by the left inlet.;
+#X text 124 174 click here first;
+#X obj 105 196 symbol \$0-expr~-array;
+#X floatatom 24 266 5 0 0 0 - - -;
+#X text 21 37 Symbolic arguments like $s1 \, $s2 \, and so on are currently
+used in [expr] \, [expr~] \, and [fexpr~] to get the name of an array
+or table. You can also type the name of an array directly into [expr~]
+\, but this is limited since \, for example \, a dash ("e.g. \, my-table")
+will get interpreted as an operator ("e.g. \, my minus table").;
+#X text 8 2 [fexpr~] Using Symbolic Arguments;
+#X obj 24 224 expr $s2[$f1];
+#X floatatom 24 177 5 0 0 0 - - -;
+#X obj 240 412 f \$0;
+#X msg 240 438 \; \$1-expr-array sinesum 512 1;
+#X connect 1 0 14 0;
+#X connect 2 0 8 0;
+#X connect 8 0 12 1;
+#X connect 12 0 9 0;
+#X connect 13 0 12 0;
+#X connect 14 0 15 0;
+#X restore 160 344 pd fexpr~_and_symbols;
+#X text 11 23 expression evaluation of signal data (sample level);
+#X text 80 416 n) float;
+#X text 167 416 - the arguments themselves form the expression to evaluate.
+They may be floats or symbols \, including the special variables noted
+above ($x1 \, $f2 \, etc.). The operators and functions available for
+use in [fexpr~] are listed below:;
+#X text 98 428 symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 498 pddp/pddplink all_about_expr_if.pd -text expr_if;
+#X obj 98 518 pddp/pddplink all_about_expr_and_value.pd -text expr_and_value
+;
+#X obj 98 540 pddp/pddplink all_about_expr_multiline.pd -text expr_multiline
+;
+#X obj 167 468 pddp/pddplink all_about_expr_functions.pd -text all_about_expr_operators_and_functions
+;
+#X connect 20 0 29 0;
+#X connect 21 0 45 1;
+#X connect 22 0 21 0;
+#X connect 25 0 45 0;
+#X connect 26 0 45 0;
+#X connect 27 0 26 0;
+#X connect 28 0 21 0;
+#X connect 29 0 45 0;
+#X connect 30 0 29 0;
+#X connect 31 0 29 0;
+#X connect 32 0 21 0;
+#X connect 35 0 23 0;
+#X connect 35 0 23 1;
+#X connect 45 0 35 0;
diff --git a/doc/pddp/fft~-help.pd b/doc/pddp/fft~-help.pd
new file mode 100644
index 00000000..8581e2f0
--- /dev/null
+++ b/doc/pddp/fft~-help.pd
@@ -0,0 +1,117 @@
+#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 fft~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 399 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 110 PLATFORM windows macosx gnulinux;
+#X text 12 210 LIBRARY internal;
+#X text 12 250 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 290 RELEASE_VERSION 0.41.4;
+#X text 12 270 RELEASE_DATE 2009-06-12;
+#X text 12 70 LICENSE SIBSD;
+#X text 12 230 AUTHOR Miller Puckette;
+#X text 12 310 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 GENRE help;
+#X text 12 25 NAME fft~;
+#X text 12 45 KEYWORDS signal block_oriented analysis needs_work (ifft~
+rfft~ rifft~ need separate help patches);
+#X text 12 130 INLET_0 signal;
+#X text 12 150 INLET_1 signal;
+#X text 12 170 OUTLET_0 signal;
+#X text 12 190 OUTLET_1 signal;
+#X text 12 90 DESCRIPTION Fourier analyses;
+#X restore 500 597 pd META;
+#X obj 0 460 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 523 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 551 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 527 (none);
+#N canvas 103 483 428 107 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 [fft~] Related Objects;
+#X obj 22 42 ifft~;
+#X obj 68 42 rfft~;
+#X obj 114 42 rifft~;
+#X obj 163 42 block~;
+#X text 211 42 [switch~];
+#X restore 101 597 pd Related_objects;
+#X obj 78 408 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 469 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 433 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 491 3 fft~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/fft~ -text
+pdpedia: fft~;
+#X floatatom 15 124 0 0 0 0 - - -;
+#X obj 15 75 * 44100;
+#X floatatom 15 53 0 0 0 0 - - -;
+#X obj 15 180 osc~;
+#X obj 15 205 rfft~;
+#X obj 15 99 / 64;
+#X obj 15 261 rifft~;
+#X obj 60 261 print~ real;
+#X obj 74 236 print~ imaginary;
+#X obj 15 298 /~ 64;
+#X obj 15 364 print~ resynthesized;
+#X msg 25 337 bang;
+#X msg 60 192 bang;
+#X msg 36 150 0.25;
+#X msg 77 150 0;
+#X text 42 125 frequency in Hz.;
+#X text 43 52 frequency in bins;
+#X text 55 298 <- renormalize;
+#X text 61 337 <- print resynthesis;
+#X text 98 407 signal;
+#X text 98 432 signal;
+#X obj 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 495 signal;
+#X text 98 468 signal;
+#X text 11 23 Fourier analyses;
+#X text 183 313 There is no normalization \, so that an FFT followed
+by an IFFT has a gain of N.;
+#X text 182 352 See the FFT examples to see how to use these in practice.
+;
+#X text 184 243 The real FFT outputs N/2+1 real parts and N/2-1 imaginary
+parts. The other outputs are zero. At DC and at the Nyquist there is
+no imaginary part \, but the second through Nth output is as a real
+and imaginary pair \, which can be thought of as the cosine and sin
+component strengths.;
+#X text 104 151 <- bash phase;
+#X text 92 193 <- print analysis;
+#X text 184 118 The FFT objects do Fourier analyses and resyntheses
+of incoming real or complex signals. Complex signals are handled as
+pairs of signals (real and imaginary part.) The analysis size is one
+block (you can use the [block~] or [switch~] objects to control block
+size).;
+#X obj 5 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 555 pddp/pddplink ../3.audio.examples/I01.Fourier.analysis.pd
+-text doc/3.audio.examples/I01.Fourier.analysis.pd;
+#X text 98 573 also see examples I02-I10 in doc/3.audio.examples;
+#X connect 14 0 17 0;
+#X connect 15 0 19 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 18 0 21 0;
+#X connect 18 0 20 0;
+#X connect 18 1 22 0;
+#X connect 18 1 20 1;
+#X connect 19 0 14 0;
+#X connect 20 0 23 0;
+#X connect 23 0 24 0;
+#X connect 25 0 24 0;
+#X connect 26 0 21 0;
+#X connect 26 0 22 0;
+#X connect 27 0 17 1;
+#X connect 28 0 17 1;
diff --git a/doc/pddp/fiddle~-help.pd b/doc/pddp/fiddle~-help.pd
new file mode 100644
index 00000000..76237fd7
--- /dev/null
+++ b/doc/pddp/fiddle~-help.pd
@@ -0,0 +1,238 @@
+#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 fiddle~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 313 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 180 494 407 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 255 LIBRARY internal;
+#X text 12 295 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 335 RELEASE_VERSION 0.41.4;
+#X text 12 315 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 275 AUTHOR Miller Puckette;
+#X text 12 355 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal analysis;
+#X text 12 25 NAME fiddle~;
+#X text 12 125 INLET_0 signal amp-range vibrato reattack npartial auto
+npoints bang print;
+#X text 12 155 OUTLET_0 float;
+#X text 12 175 OUTLET_1 bang;
+#X text 12 195 OUTLET_2 list;
+#X text 12 215 OUTLET_3 float;
+#X text 12 235 OUTLET_4 list;
+#X text 12 85 DESCRIPTION pitch estimator and sinusoidal peak finder
+;
+#X restore 500 597 pd META;
+#X obj 0 363 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 479 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 562 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 322 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 104 488 428 103 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 sigmund~;
+#X obj 88 42 bonk~;
+#X text 7 1 [fiddle~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 98 321 signal;
+#X obj 78 372 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 472 3 fiddle~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/fiddle~ -text
+pdpedia: fiddle~;
+#N canvas 62 43 489 501 Messages_to_fiddle~ 0;
+#X msg 22 416 print;
+#X msg 22 54 amp-range 40 50;
+#X msg 22 174 reattack 100 10;
+#X msg 22 229 npartial 7;
+#X msg 22 117 vibrato 50 0.5;
+#X text 125 38 a low and high amplitude threshold: if signal amplitude
+is below the low threshold \, no pitches or peaks are output. The high
+threshold is a minimum at which "cooked" outputs may appear.;
+#X text 125 99 A period in milliseconds (50) over which the raw pitch
+may not deviate more than an interval in half-tones (0.5) from the
+average pitch to report it as a note to the "cooked" pitch outlet.
+;
+#X text 125 160 A period in milliseconds (100) over which a re-attack
+is reported if the amplitude rises more than (1) dB. The re-attack
+will result in a "bang" in the attack outlet and may give rise to repeated
+notes in the cooked pitch output.;
+#X msg 22 278 auto 1;
+#X msg 22 300 auto 0;
+#X msg 22 385 bang;
+#X text 126 383 poll current values --- useful if not in auto mode
+\,;
+#X text 125 221 Higher partials are weighed less strongly than lower
+ones in determining the pitch. This specifies the number of the partial
+(7) which will be weighted half as strongly as the fundamental.;
+#X text 125 282 start and stop "auto" mode (on by default.) If off
+\, output only appears on "bang" (poll mode).;
+#X text 126 415 print out all settings;
+#X msg 22 332 npoints 2048;
+#X text 127 341 number of points in analysis window (power of 2 \,
+128-2048);
+#X msg 22 353 npoints 1024;
+#X obj 22 462 outlet;
+#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 Messages to [fiddle~];
+#X connect 0 0 18 0;
+#X connect 1 0 18 0;
+#X connect 2 0 18 0;
+#X connect 3 0 18 0;
+#X connect 4 0 18 0;
+#X connect 8 0 18 0;
+#X connect 9 0 18 0;
+#X connect 10 0 18 0;
+#X connect 15 0 18 0;
+#X connect 17 0 18 0;
+#X restore 133 116 pd Messages_to_fiddle~;
+#X obj 324 203 unpack;
+#X floatatom 324 253 0 0 0 0 - - -;
+#X floatatom 338 230 0 0 0 0 - - -;
+#X obj 324 173 route 1 2 3 4;
+#X obj 387 203 unpack;
+#X floatatom 387 253 0 0 0 0 - - -;
+#X floatatom 401 230 0 0 0 0 - - -;
+#X obj 451 203 unpack;
+#X floatatom 451 253 0 0 0 0 - - -;
+#X floatatom 465 230 0 0 0 0 - - -;
+#X obj 192 203 unpack;
+#X floatatom 192 253 0 0 0 0 - - -;
+#X floatatom 205 230 0 0 0 0 - - -;
+#X floatatom 259 253 0 0 0 0 - - -;
+#X obj 104 253 print attack;
+#X obj 23 253 print pitch;
+#X obj 123 142 fiddle~ 1024 1 20 3;
+#X text 331 277 individual sinusoidal components;
+#X text 259 275 amplitude;
+#X text 269 290 (dB);
+#X text 192 273 raw pitch;
+#X text 110 273 bang on;
+#X text 110 288 attack;
+#X text 18 273 cooked pitch;
+#X text 18 288 output;
+#N canvas 54 154 428 270 test_input_pitch 0;
+#X obj 77 168 phasor~;
+#X obj 77 146 sig~;
+#X floatatom 77 124 0 0 0 0 - - -;
+#X obj 77 102 mtof;
+#X obj 149 191 *~;
+#X obj 137 40 loadbang;
+#X obj 168 168 sig~;
+#X msg 137 124 1;
+#X msg 77 58 57;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 6 58 inlet;
+#X obj 213 70 inlet;
+#X text 7 1 Test Input for [fiddle~];
+#X obj 150 225 outlet~;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 13 0;
+#X connect 5 0 8 0;
+#X connect 5 0 7 0;
+#X connect 6 0 4 1;
+#X connect 7 0 6 0;
+#X connect 8 0 3 0;
+#X connect 10 0 3 0;
+#X connect 11 0 6 0;
+#X restore 124 90 pd test_input_pitch;
+#X text 272 64 test input;
+#X text 272 77 amplitude;
+#X floatatom 124 65 5 0 0 0 - - -;
+#X msg 170 65 1;
+#X msg 201 65 0;
+#X floatatom 235 65 5 0 0 0 - - -;
+#X text 20 64 test input pitch;
+#X obj 78 392 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 78 412 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X obj 78 432 cnv 17 3 17 empty \$0-pddp.cnv.let.3 3 5 9 0 16 -228856
+-162280 0;
+#X obj 78 452 cnv 17 3 17 empty \$0-pddp.cnv.let.4 4 5 9 0 16 -228856
+-162280 0;
+#N canvas 89 215 428 349 More_info 0;
+#X text 19 38 The Fiddle object estimates the pitch and amplitude of
+an incoming sound \, both continuously and as a stream of discrete
+"note" events. Fiddle optionally outputs a list of detected sinusoidal
+peaks used to make the pitch determination. Fiddle is described theoretically
+in the 1998 ICMC proceedings \, reprinted on http://man104nfs.ucsd.edu/~mpuckett.
+;
+#X text 19 138 Fiddle's creation arguments specify an analysis window
+size \, the maximum polyphony (i.e. \, the number of simultaneous "pitches"
+to try to find) \, the number of peaks in the spectrum to consider
+\, and the number of peaks \, if any \, to output "raw." The outlets
+give discrete pitch (a number) \, detected attacks in the amplitude
+envelope (a bang) \, one or more voices of continuous pitch and amplitude
+\, overall amplitude \, and optionally a sequence of messages with
+the peaks.;
+#X text 18 253 The analysis hop size is half the window size so in
+the example shown here \, one analysis is done every 512 samples (11.6
+msec at 44K1) \, and the analysis uses the most recent 1024 samples
+(23.2 msec at 44K1). The minimum frequency that Fiddle will report
+is 2-1/2 cycles per analysis windows \, or about 108 Hz. (just below
+MIDI 45.);
+#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 [fiddle~] More Info;
+#X restore 101 571 pd More_info;
+#X text 98 372 float;
+#X text 98 392 bang;
+#X text 98 412 list;
+#X text 98 432 float;
+#X text 98 452 list;
+#X text 11 23 pitch estimator and sinusoidal peak finder;
+#X text 168 372 - cooked pitch output.;
+#X text 168 392 - bang on attack.;
+#X text 168 412 - raw pitch.;
+#X text 168 432 - amplitude (dB).;
+#X text 168 452 - individual sinusoidal components.;
+#X text 167 497 - window size (128-2048 \, default 1024).;
+#X text 167 511 - number of pitch outlets (1-3 \, default 1).;
+#X text 167 525 - number of peaks to find (1-100 \, default 20).;
+#X text 167 539 - number of peaks to output (default 0.).;
+#X text 80 497 1) float;
+#X text 80 511 2) float;
+#X text 80 525 3) float;
+#X text 80 539 4) float;
+#X text 98 338 See "Messages_to_fiddle~" subpatch in the example above.
+;
+#X text 168 321 - the incoming signal.;
+#X obj 5 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 13 0 30 0;
+#X connect 14 0 15 0;
+#X connect 14 1 16 0;
+#X connect 17 0 14 0;
+#X connect 17 1 18 0;
+#X connect 17 2 21 0;
+#X connect 18 0 19 0;
+#X connect 18 1 20 0;
+#X connect 21 0 22 0;
+#X connect 21 1 23 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 30 0 29 0;
+#X connect 30 1 28 0;
+#X connect 30 2 24 0;
+#X connect 30 3 27 0;
+#X connect 30 4 17 0;
+#X connect 39 0 30 0;
+#X connect 42 0 39 0;
+#X connect 43 0 39 1;
+#X connect 44 0 39 1;
+#X connect 45 0 39 1;
diff --git a/doc/pddp/float-help.pd b/doc/pddp/float-help.pd
index f8fe652e..689de19c 100644
--- a/doc/pddp/float-help.pd
+++ b/doc/pddp/float-help.pd
@@ -1,157 +1,204 @@
-#N canvas 282 28 573 622 10;
-#X obj 5 574 cnv 15 550 20 empty empty empty 20 12 0 14 -228856 -66577
+#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 float 3 12 0 18
+-204280 -1 0;
+#X obj 0 339 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 63 256 482 332 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control storage;
+#X text 12 25 NAME float;
+#X text 12 45 ALIAS f;
+#X text 12 145 INLET_0 float bang;
+#X text 12 165 INLET_1 float;
+#X text 12 185 OUTLET_0 float;
+#X text 12 105 DESCRIPTION store a number;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 78 144 cnv 10 50 16 empty empty empty 20 12 0 14 -262126 -66577
0;
-#X obj 5 -12 cnv 15 550 40 empty empty float 3 12 0 18 -204280 -1 0
-;
-#X obj 4 244 cnv 3 550 3 empty empty inlets 15 12 0 13 -228856 -1 0
-;
-#N canvas 407 510 482 332 META 0;
-#X text 12 5 CATEGORY control;
-#X text 12 35 KEYWORDS control number float store;
-#X text 12 65 DESCRIPTION stores a number;
-#X restore 505 576 pd META;
-#X obj 83 156 cnv 10 50 16 empty empty empty 20 12 0 14 -262126 -66577
+#X obj 341 145 cnv 10 23 16 empty empty empty 20 12 0 14 -262126 -66577
0;
-#X obj 346 163 cnv 10 23 16 empty empty empty 20 12 0 14 -262126 -66577
-0;
-#X floatatom 384 135 5 0 0 0 - - -;
-#X floatatom 345 187 5 0 0 0 - - -;
-#X obj 364 135 bng 15 250 50 0 empty empty empty 20 7 0 12 -4034 -1
+#X floatatom 379 117 5 0 0 0 - - -;
+#X floatatom 340 169 5 0 0 0 - - -;
+#X obj 359 117 bng 15 250 50 0 empty empty empty 20 7 0 12 -4034 -1
-1;
-#X floatatom 85 181 5 0 0 0 - - -;
-#X msg 85 73 bang;
-#X msg 325 79 7 3 4;
-#X obj 345 162 f;
-#X obj 85 156 float 7;
-#X obj 4 394 cnv 3 550 3 empty empty outlet 15 12 0 13 -228856 -1 0
-;
-#X obj 4 444 cnv 3 550 3 empty empty argument 15 12 0 13 -228856 -1
-0;
-#X obj 4 494 cnv 3 550 3 empty empty more_info 15 12 0 13 -228856 -1
-0;
-#X obj 73 350 cnv 17 3 40 empty empty 1 5 9 0 16 -228856 -162280 0
-;
-#X obj 73 264 cnv 17 3 80 empty empty 0 5 9 0 16 -228856 -162280 0
-;
-#X text 103 263 BANG - output the currently stored value;
-#X text 103 350 FLOAT - a float received on the right inlet is stored
-;
-#X obj 465 9 pddp/pddplink http://wiki.puredata.info/en/float -text
+#X floatatom 80 169 5 0 0 0 - - -;
+#X msg 80 61 bang;
+#X msg 320 61 7 3 4;
+#X obj 340 144 f;
+#X obj 80 144 float 7;
+#X obj 0 436 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 473 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 523 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 408 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 78 347 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 460 21 pddp/pddplink http://wiki.puredata.info/en/float -text
pdpedia: float;
-#X text 103 283 FLOAT - outputs the incoming number and stores it;
-#X text 103 303 LIST - truncates to the first element \, outputs that
-element \, and stores it;
-#X obj 467 -9 float;
-#X obj 527 -9 f;
-#X text 506 -8 or;
-#X msg 105 126 12;
-#X msg 138 126 -0.02;
-#X msg 53 102 555;
-#X msg 344 102 list one 2 3;
-#X text 428 101 does not work!;
-#X text 104 412 FLOAT - outputs the stored value as a float message
-;
-#X obj 105 532 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s3.1
+#X obj 462 3 float;
+#X obj 522 3 f;
+#X text 501 4 or;
+#X msg 119 115 12;
+#X msg 152 115 -0.02;
+#X msg 94 90 555;
+#X msg 340 84 list one 2 3;
+#X text 424 83 does not work!;
+#X obj 100 543 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s3.1
-text Pd manual 2.3.1: anatomy of a message;
-#N canvas 0 22 458 308 float/list 0;
-#X msg 75 133 float 1 2 3;
-#X text 34 22 FLOAT CONVERSION;
-#X msg 95 187 list 1 2 3;
-#X text 92 164 A list with multiple elements remains a list.;
-#X text 43 59 A float with one element remains a float.;
-#X text 72 106 A float with multiple elements remains a float but is
-cut to one element.;
-#X text 99 218 A list with one float element is converted to a float.
+#N canvas 106 185 428 374 float/list 0;
+#X msg 51 111 float 1 2 3;
+#X msg 71 165 list 1 2 3;
+#X text 68 142 A list with multiple elements remains a list.;
+#X text 19 37 A float with one element remains a float.;
+#X text 75 196 A list with one float element is converted to a float.
;
-#X obj 58 308 bng 15 250 50 0 empty empty bang 0 20 1 9 -262144 -1
+#X obj 27 286 bng 15 250 50 0 empty empty bang 0 20 1 9 -262144 -1
-1;
-#X obj 105 308 bng 15 250 50 0 empty empty float 0 21 1 9 -262144 -1
+#X obj 76 286 bng 15 250 50 0 empty empty float 0 21 1 9 -262144 -1
-1;
-#X obj 152 308 bng 15 250 50 0 empty empty symbol 0 21 1 9 -262144
+#X obj 118 286 bng 15 250 50 0 empty empty symbol 0 21 1 9 -262144
-1 -1;
-#X obj 200 308 bng 15 250 50 0 empty empty list 0 21 1 9 -262144 -1
+#X obj 166 286 bng 15 250 50 0 empty empty list 0 21 1 9 -262144 -1
-1;
-#X obj 248 308 bng 15 250 50 0 empty empty UNDEFINED 0 21 1 9 -262144
+#X obj 211 286 bng 15 250 50 0 empty empty UNDEFINED 0 21 1 9 -262144
-1 -1;
-#X obj 57 286 route bang float symbol list;
-#X obj 92 349 print FLOAT;
-#X msg 50 81 float 3;
-#X msg 106 239 list 2;
-#X obj 188 349 print LIST;
-#X connect 0 0 12 0;
-#X connect 2 0 12 0;
-#X connect 12 0 7 0;
-#X connect 12 1 8 0;
-#X connect 12 1 13 0;
-#X connect 12 2 9 0;
-#X connect 12 3 10 0;
-#X connect 12 3 16 0;
-#X connect 12 4 11 0;
-#X connect 14 0 12 0;
-#X connect 15 0 12 0;
-#X restore 391 541 pd float/list conversion;
-#N canvas 57 22 649 630 More_Info 0;
-#X text 43 24 All numbers in Pd are kept in 32-bit floating point and
+#X obj 26 264 route bang float symbol list;
+#X obj 67 327 print FLOAT;
+#X msg 26 59 float 3;
+#X msg 82 217 list 2;
+#X obj 149 327 print LIST;
+#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 [float] Conversion To/From a List;
+#X text 48 81 A float with multiple elements remains a float but is
+truncated to one element.;
+#X connect 0 0 10 0;
+#X connect 1 0 10 0;
+#X connect 10 0 5 0;
+#X connect 10 1 6 0;
+#X connect 10 1 11 0;
+#X connect 10 2 7 0;
+#X connect 10 3 8 0;
+#X connect 10 3 14 0;
+#X connect 10 4 9 0;
+#X connect 12 0 10 0;
+#X connect 13 0 10 0;
+#X restore 386 556 pd float/list conversion;
+#N canvas 111 59 428 526 More_Info 0;
+#X text 19 37 All numbers in Pd are kept in 32-bit floating point and
can represent real numbers between -8 \, 388608 and 8.388.608.00;
-#X text 11 78 WHAT IS A FLOATING POINT NUMBER?;
-#X text 41 267 The following are examples of floating point numbers:
+#X text 19 233 The following are examples of floating point numbers:
;
-#X text 61 293 3;
-#X text 62 334 -111.5;
-#X text 61 313 0.5;
-#X text 40 387 3e-05 : This example is a computer shorthand for scientific
-notation. It means 3*10-5 (or 10 to the negative 5th power multiplied
-by 3).;
-#X text 41 108 According to Webopedia.com \, "computers are integer
+#X text 49 253 3;
+#X text 50 294 -111.5;
+#X text 49 273 0.5;
+#X text 20 126 According to Webopedia.com \, "computers are integer
machines and are capable of representing real numbers only by using
complex codes." Hence \, real numbers must be 'approximated' by computers
using the "floating point standard". In such a number \, the decimal
point can "float" meaning that there is no fixed number of digits preceding
or following the decimal. A floating point number is therefore a computer's
approximation of a real number.;
-#X text 43 453 Interesting side-note: In the early 1990's \, the Intel
-80486 was shipped with a math coprocessor to help accelerate the process
-of computing floating point numbers (which previously required a considerable
-amount of CPU power.) Math coprocessors have since found there way
-into nearly every graphics card and CPU available today.;
-#X text 62 358 10000 to 1e-16;
-#X restore 390 517 pd More_Info;
-#X obj 105 549 pddp/pddplink http://en.wikipedia.org/wiki/Floating_point
+#X text 50 318 10000 to 1e-16;
+#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 [float] More Info;
+#X obj 1 91 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 7 91 What is a floating point number?;
+#X obj 1 411 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 7 411 An Interesting Side-Note;
+#X text 19 443 In the early 1990's \, the Intel 80486 was shipped with
+a math coprocessor to help accelerate the process of computing floating
+point numbers (which previously required a considerable amount of CPU
+power). Math coprocessors have since found there way into nearly every
+graphics card and CPU available today.;
+#X text 49 343 3e-05 : This example is a computer shorthand for scientific
+notation. It means 3*10^-5 (or 10 to the negative 5th power multiplied
+by 3).;
+#X restore 385 532 pd More_Info;
+#X text 115 60 outputs argument;
+#X text 123 89 overrides argument;
+#X text 133 145 stores value;
+#X text 98 346 bang;
+#X text 98 366 float;
+#X text 98 386 list;
+#X text 98 408 float;
+#N canvas 102 481 428 108 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 [float] Related Objects;
+#X obj 22 36 int;
+#X obj 54 36 value;
+#X obj 101 36 list;
+#X floatatom 142 37 5 0 0 0 - - -;
+#X msg 185 36;
+#X restore 101 597 pd Related_objects;
+#X text 99 445 float;
+#X text 11 20 store a number;
+#X obj 78 445 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 168 386 - truncates to the first element \, outputs it \, and
+stores it.;
+#X text 168 408 - a float received on the right inlet is stored.;
+#X text 169 445 - outputs the stored value as a float message.;
+#X text 81 490 1) float;
+#X text 168 346 - outputs the currently stored value.;
+#X text 168 366 - outputs the incoming number and stores it.;
+#X text 171 490 - [float] accepts a single number as a creation argument
+which sets the value that is stored.;
+#X obj 80 226 21;
+#X obj 80 206 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 80 248 5 0 0 0 - - -;
+#X text 122 204 As an additional shortcut \, you can leave off the
+class name "float" altogether and just use a single number in an object
+box to create a [float] object (with the value initialized to that
+number).;
+#X text 20 225 [float];
+#X text 21 239 object;
+#X text 21 210 implicit;
+#X obj 441 280 1 2 3;
+#X obj 441 260 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 441 302 print;
+#X text 483 264 implicit;
+#X text 482 293 object;
+#X text 482 279 [list];
+#X text 77 278 If you add additional arguments after this number you
+will create an implicit [list] object.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 100 575 pddp/pddplink http://en.wikipedia.org/wiki/Floating_point
;
-#X text 120 72 outputs argument;
-#X text 91 101 overrides argument;
-#X text 103 462 [float] accepts a single number as a creation argument
-which sets value that is stored.;
-#N canvas 309 454 609 478 guts 0;
-#X obj 117 95 textfile;
-#X msg 116 24 symbol template-HCS.pd;
-#X msg 116 54 read \$1 \, rewind \, bang;
-#X obj 117 141 trigger bang anything;
-#X obj 58 117 bang;
-#X obj 240 162 route #X;
-#X obj 240 183 route text;
-#X obj 240 250 route DESCRIPTION;
-#X obj 239 276 print;
-#X obj 140 277 print TEXT;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 4 0 0 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X restore 454 576 pd guts;
-#X text 16 8 description: stores a number;
-#X text 106 516 all_about_data-types.pd;
-#X text 138 157 stores value;
+#X obj 99 527 pddp/pddplink all_about_messages.pd;
+#X obj 100 560 pddp/pddplink ../2.control.examples/05.counter.pd -text
+doc/2.control.examples/05.counter.pd;
#X connect 6 0 12 1;
#X connect 8 0 12 0;
#X connect 10 0 13 0;
#X connect 11 0 12 0;
#X connect 12 0 7 0;
#X connect 13 0 9 0;
-#X connect 27 0 13 1;
-#X connect 28 0 13 1;
-#X connect 29 0 13 0;
-#X connect 30 0 12 0;
+#X connect 23 0 13 1;
+#X connect 24 0 13 1;
+#X connect 25 0 13 0;
+#X connect 26 0 12 0;
+#X connect 49 0 51 0;
+#X connect 50 0 49 0;
+#X connect 56 0 58 0;
+#X connect 57 0 56 0;
diff --git a/doc/pddp/framp~-help.pd b/doc/pddp/framp~-help.pd
new file mode 100644
index 00000000..b50a9093
--- /dev/null
+++ b/doc/pddp/framp~-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 framp~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 417 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 245 507 362 META 0;
+#X text 12 115 PLATFORM windows macosx gnulinux;
+#X text 12 215 LIBRARY internal;
+#X text 12 255 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 235 AUTHOR Miller Puckette;
+#X text 12 315 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 GENRE help;
+#X text 12 45 KEYWORDS signal needs_work block_oriented;
+#X text 12 25 NAME framp~;
+#X text 12 135 INLET_0 signal;
+#X text 12 155 INLET_1 signal;
+#X text 12 175 OUTLET_0 signal;
+#X text 12 195 OUTLET_1 signal;
+#X text 12 85 DESCRIPTION estimate frequency and amplitude of FFT components
+;
+#X text 12 275 RELEASE_DATE 1997;
+#X text 12 295 RELEASE_VERSION;
+#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 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 105 479 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 fft~;
+#X text 8 2 [framp~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 426 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 486 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 451 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 479 3 framp~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/framp~ -text
+pdpedia: framp~;
+#X text 147 127 frequency;
+#X floatatom 78 142 0 0 0 0 - - -;
+#X obj 78 92 * 44100;
+#X floatatom 78 67 0 0 0 0 - - -;
+#X text 150 65 frequency;
+#X text 153 83 in bins;
+#X text 147 144 in Hz.;
+#X obj 79 193 rfft~;
+#X obj 78 117 / 64;
+#X msg 165 214 bang;
+#X obj 78 220 framp~;
+#X obj 165 269 print~ frequency;
+#X obj 180 244 print~ amplitude;
+#X obj 78 168 osc~;
+#X text 201 214 <- print analysis;
+#X text 98 425 signal;
+#X text 98 450 signal;
+#X text 98 485 signal;
+#X obj 78 511 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 510 signal;
+#X text 11 23 estimate frequency and amplitude of FFT components;
+#X text 75 309 [framp~] takes as input a rectangular-windowed FFT and
+outputs \, for each FFT channel \, the estimated amplitude and frequency
+of any component feedinf that channel. A sinusoidal component should
+appear in four components (or three in the special case of a sinusoid
+exactly tuned to a bin.) Frequency output is in bins \, i.e. \, units
+of SR/N.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 15 0 27 0;
+#X connect 16 0 22 0;
+#X connect 17 0 16 0;
+#X connect 21 0 24 0;
+#X connect 21 1 24 1;
+#X connect 22 0 15 0;
+#X connect 23 0 25 0;
+#X connect 23 0 26 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 27 0 21 0;
diff --git a/doc/pddp/ftom-help.pd b/doc/pddp/ftom-help.pd
new file mode 100644
index 00000000..8b741db2
--- /dev/null
+++ b/doc/pddp/ftom-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 ftom 3 12 0 18 -204280
+-1 0;
+#X obj 0 421 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion MIDI;
+#X text 12 25 NAME ftom;
+#X text 12 85 DESCRIPTION frequency to MIDI conversion;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 491 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 524 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 553 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 430 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 528 (none);
+#N canvas 71 422 428 163 Related_objects 0;
+#X text 19 37 Control objects for conversion:;
+#X obj 59 66 dbtorms;
+#X obj 113 66 rmstodb;
+#X obj 167 66 dbtopow;
+#X obj 222 66 powtodb;
+#X obj 22 125 mtof~;
+#X obj 67 125 ftom~;
+#X obj 110 125 dbtorms~;
+#X obj 175 125 rmstodb~;
+#X obj 241 125 dbtopow~;
+#X obj 303 125 powtodb~;
+#X text 19 102 Signal objects for conversion:;
+#X obj 22 66 mtof;
+#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 [ftom] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X floatatom 249 186 0 0 0 0 - - -;
+#X floatatom 249 130 0 0 0 0 - - -;
+#X obj 78 500 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 429 float;
+#X text 98 456 list;
+#X text 98 500 float;
+#X obj 492 3 ftom;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/ftom -text
+pdpedia: ftom;
+#X obj 249 159 ftom;
+#X text 11 23 frequency to MIDI conversion;
+#X text 158 456 - lists will be truncated \, and the first element
+will be used as input.;
+#X text 99 215 The [ftom] object transposes a frequency in Hertz into
+a MIDI value \, 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 obj 98 557 pddp/pddplink all_about_acoustic_conversions.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/A06.frequency.pd -text
+doc/3.audio.examples/A06.frequency.pd;
+#X connect 11 0 18 0;
+#X connect 18 0 10 0;
diff --git a/doc/pddp/ftom~-help.pd b/doc/pddp/ftom~-help.pd
new file mode 100644
index 00000000..c6acda3e
--- /dev/null
+++ b/doc/pddp/ftom~-help.pd
@@ -0,0 +1,84 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion MIDI;
+#X text 12 25 NAME ftom~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 85 DESCRIPTION frequency to MIDI conversion for audio signals
+;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/gatom-help.pd b/doc/pddp/gatom-help.pd
new file mode 100644
index 00000000..e98d7473
--- /dev/null
+++ b/doc/pddp/gatom-help.pd
@@ -0,0 +1,148 @@
+#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 gatom 3 12 0 18
+-204280 -1 0;
+#X obj 0 248 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 247 494 344 META 0;
+#X text 12 115 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 75 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 HELP_PATCH_AUTHORS Updated for Pd version 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 25 NAME gatom;
+#X text 12 135 INLET_0 float bang symbol set;
+#X text 12 155 OUTLET_0 float;
+#X text 12 95 DESCRIPTION atom (number box);
+#X text 12 45 KEYWORDS control storage GUI nonlocal symbol_op needs_work
+(what about symbol box?);
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 413 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 485 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 460 (none);
+#N canvas 93 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 text 47 1 Related Objects;
+#X floatatom 9 3 5 0 0 0 - - -;
+#X obj 21 42 float;
+#X obj 61 42 list;
+#X obj 102 45 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj 169 42 drawnumber;
+#X restore 102 597 pd Related_objects;
+#X obj 78 257 cnv 17 3 145 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 421 float;
+#X obj 78 422 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 486 3 5 0 0 0 - - -;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/gatom -text
+pdpedia: gatom;
+#X floatatom 86 73 0 0 0 0 - - -;
+#X floatatom 86 111 0 0 0 0 - - -;
+#X msg 25 148 set 45;
+#X floatatom 25 176 0 0 0 0 - - -;
+#X floatatom 25 205 0 0 0 0 - - -;
+#X text 132 67 Number boxes allow you to display numbers or to enter
+numbers using the mouse and keyboard. When a number arrives at the
+number box's inlet \, it is displayed and sent to the outlet. You can
+click on a number box and drag upward or downward to change the value
+continuously.;
+#X text 98 256 bang;
+#X text 168 256 - a bang to the inlet of a number box outputs its current
+value.;
+#X text 98 286 float;
+#X text 168 286 - a float sets the current value and outputs it.;
+#X text 98 306 list;
+#X text 98 326 symbol;
+#X text 168 326 - sending a symbol to a number box sets the value to
+zero and outputs it.;
+#X text 98 356 set;
+#X text 79 143 the "set" message sets the number box's value but does
+not send it to the outlet.;
+#X text 168 356 - the set message updates the value of the number box
+without outputting it (e.g. \, "set 23" sets the value to 23). Sending
+a set message without a value does not change the current value in
+the number box.;
+#X text 168 421 - a number box outputs a float for each message it
+receives (except set).;
+#N canvas 102 43 430 514 Number_box_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 70 102 12 0 0 0 - - -;
+#X floatatom 71 223 1 0 0 0 - - -;
+#X text 50 2 Properties for gatom;
+#X text 20 38 Right click on a number box and choose "Properties" to
+change the following:;
+#X text 19 69 width;
+#X text 69 69 - width of the number box (in characters). By default
+the width is 5 characters.;
+#X text 148 102 width = 12 characters;
+#X floatatom 70 123 2 0 0 0 - - -;
+#X text 148 123 width = 2 characters;
+#X text 69 164 If you select a width of 0 \, the number box will grow
+as needed to hold the number--BUT BEWARE \, THIS IS EXPENSIVE IN CPU
+TIME. In a production patch \, you'll want to set a specific width.
+;
+#X floatatom 70 143 0 0 0 0 - - -;
+#X text 148 143 width = 0 characters (read below);
+#X text 69 240 A width of one gives a clickable toggle switch ala Max.
+;
+#X text 88 223 width = 1 character: toggle between 0 and 1;
+#X text 19 260 limits;
+#X floatatom 71 282 5 0 127 0 - - -;
+#X text 109 281 numbers between 0 and 127;
+#X text 69 260 - set lower and upper limits for scrolling the number
+box;
+#X text 68 300 This only affects scrolling- you can still send values
+to the number box that are outside these limits.;
+#X floatatom 71 353 5 0 127 1 my_number_box - -;
+#X text 19 331 label;
+#X text 69 331 - give the number box a visible name;
+#X text 68 371 Use the radio buttons to reposition the label to the
+left \, right \, top \, or bottom of the number box. Spaces in the
+label will automatically be converted to underscores.;
+#X text 19 413 messages;
+#X text 69 413 - nonlocal send and receive;
+#X floatatom 193 532 5 0 0 2 Number_box_7 gatom-help-rcv gatom-help-snd
+;
+#X obj 276 540 r gatom-help-snd;
+#X obj 71 516 s gatom-help-rcv;
+#X msg 71 490 28;
+#X text 68 433 As an alternative to using wires \, you can set send
+and receive names to send messages through the number box. "Number-box-7"
+below is set to receive messages to "gatom-help-rcv" \, and send messages
+to "gatom-help-snd";
+#X floatatom 276 563 5 0 0 0 - - -;
+#X text 68 583 Notice that you cannot make local connections with wires
+to "Number_box_7" when using non-local send and receive names. If you
+want to use both \, see the [nbx] object:;
+#X obj 71 626 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X floatatom 13 3 5 0 0 0 - - -;
+#X connect 27 0 31 0;
+#X connect 29 0 28 0;
+#X restore 102 567 pd Number_box_properties;
+#X text 100 489 You can shift-click and drag to change the number by
+hundredths instead of units. Alt clicking toggles the value between
+0 and the last nonzero value.;
+#X text 99 530 You can also type in values by clicking and typing a
+number followed by "enter.";
+#X text 168 306 - a list is truncated to the first item.;
+#X text 11 23 atom (number box);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 15 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
diff --git a/doc/pddp/get-help.pd b/doc/pddp/get-help.pd
new file mode 100644
index 00000000..e764268d
--- /dev/null
+++ b/doc/pddp/get-help.pd
@@ -0,0 +1,126 @@
+#N struct get-help-template float x float y symbol s;
+#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 get 3 12 0 18 -204280
+-1 0;
+#X obj 0 338 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure;
+#X text 12 85 DESCRIPTION get values from a scalar;
+#X text 12 25 NAME get;
+#X text 12 125 INLET_0 pointer;
+#X text 12 145 OUTLET_N float symbol;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 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 438 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 102 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 72 34 set;
+#X obj 104 34 append;
+#X obj 163 34 getsize;
+#X obj 14 59 setsize;
+#X obj 72 59 element;
+#X obj 184 59 sublist;
+#X obj 14 34 pointer;
+#X obj 132 59 struct;
+#X text 7 1 [get] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 347 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 383 float;
+#X obj 78 384 cnv 17 3 48 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 493 3 get;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/get -text
+pdpedia: get;
+#X msg 121 139 next;
+#X floatatom 106 234 5 0 0 0 - - -;
+#X floatatom 185 234 5 0 0 0 - - -;
+#X obj 106 162 pointer;
+#X text 302 115 output first scalar in list;
+#X text 164 138 output next item;
+#X text 102 250 x output;
+#X text 183 250 y output;
+#X text 261 251 s output;
+#X symbolatom 265 234 18 0 0 0 - - -;
+#X obj 145 186 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 98 346 pointer;
+#X text 168 346 - [get] takes a pointer to a scalar.;
+#X text 98 398 symbol;
+#X text 166 183 bang when there are no more items;
+#X text 11 23 get values from a scalar;
+#X text 221 283 <- Click here to see the data;
+#N canvas 103 43 428 248 get-help-data 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 [get] Data Window;
+#X scalar get-help-template 22 43 guten_tag \;;
+#X scalar get-help-template 79 87 jo_napot_kivanok \;;
+#X text 62 42 Each blue rectangle is a scalar. Their appearance and
+data structure are defined by the template "get-help-template".;
+#X text 27 124 The values of the fields "x" and "y" specify the screen
+coordinates for the top left corner of each rectangle. In editmode
+you can click and drag each rectangle to change these values.;
+#X text 27 177 In addition to using the [get] object \, you can right-click
+on a rectangle and choose "Properties" to view the field values of
+the scalar. (You can also change them-- once you are finished \, click
+"Ok" to update the values.);
+#X restore 106 283 pd get-help-data;
+#X msg 106 116 traverse pd-get-help-data \, next;
+#X obj 106 208 get get-help-template x y s;
+#N canvas 111 383 428 175 get-help-template 0;
+#X obj 23 118 filledpolygon 9 0 1 0 0 20 0 20 30 0 30;
+#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 [get] Template subpatch;
+#X text 19 69 This [struct] just defines a simple data structure. The
+values for the fields were set when this help patch was created.;
+#X text 21 137 (Draw a blue rectangle);
+#X obj 21 42 struct get-help-template float x float y symbol s;
+#X restore 106 305 pd get-help-template;
+#X text 168 383 - one outlet is created for each field specified in
+the creation arguments. When [get] receives a pointer at its inlet
+\, the value of each field is output to the corresponding outlet.;
+#X text 168 472 - the name of a field or fields in that template. An
+outlet is created for each field specified.;
+#X text 103 56 [get] \, when sent a pointer to a scalar \, retrieves
+fields from it by name. The fields can be a float or symbol. (In the
+future this will also allow access to sublists of scalars.);
+#X text 168 457 - a struct name to specify the template of a scalar.
+;
+#X text 97 510 If you have data whose templates vary (from a heterogeneous
+list \, for example) you can use [pointer] to select according to template
+before sending to [get]. (See pointer-help.pd for more information.)
+;
+#X text 80 457 1) symbol atom;
+#X text 80 472 n) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 97 563 pddp/pddplink ../04.data.structures/02.getting.data.pd
+-text doc/04.data.structures/02.getting.data.pd;
+#X obj 97 578 pddp/pddplink scalar-help.pd;
+#X connect 13 0 16 0;
+#X connect 16 0 32 0;
+#X connect 16 1 23 0;
+#X connect 31 0 16 0;
+#X connect 32 0 14 0;
+#X connect 32 1 15 0;
+#X connect 32 2 22 0;
diff --git a/doc/pddp/getsize-help.pd b/doc/pddp/getsize-help.pd
new file mode 100644
index 00000000..c8a1d182
--- /dev/null
+++ b/doc/pddp/getsize-help.pd
@@ -0,0 +1,103 @@
+#N struct help-getsize-template float x float y array array1 help-getsize-array1-template
+;
+#N struct help-getsize-array1-template float y;
+#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 getsize 3 12 0 18
+-204280 -1 0;
+#X obj 0 406 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.4. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure array;
+#X text 12 85 DESCRIPTION get the number of elements in an array;
+#X text 12 25 NAME getsize;
+#X text 12 125 INLET_0 pointer;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 443 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 485 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 553 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 78 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 71 34 pointer;
+#X obj 205 34 setsize;
+#X obj 138 34 element;
+#X obj 14 34 struct;
+#X text 7 1 [getsize] Related Objects;
+#X obj 14 70 get;
+#X obj 51 70 set;
+#X obj 84 70 append;
+#X obj 138 70 sublist;
+#X restore 102 597 pd Related_objects;
+#X obj 78 415 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 451 float;
+#X obj 78 452 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 473 3 getsize;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/getsize -text
+pdpedia: getsize;
+#X obj 78 140 pointer;
+#X floatatom 78 200 5 0 0 0 - - -;
+#X obj 78 171 getsize help-getsize-template array1;
+#N canvas 82 384 428 146 help-getsize-template 0;
+#X obj 21 82 plot array1 500 1 10 15 20;
+#X obj 21 109 filledpolygon 509 509 0 -10 -10 10 -10 10 10 -10 10;
+#X obj 21 42 struct help-getsize-template float x float y array array1
+help-getsize-array1-template;
+#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 [getsize] Data Structure;
+#X restore 78 233 pd help-getsize-template;
+#N canvas 83 405 428 138 help-getsize-array1-template 0;
+#X obj 21 69 filledpolygon 0 0 0 -5 0 0 5 5 0 0 -5;
+#X obj 21 42 struct help-getsize-array1-template float y;
+#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 [getsize] Data Structure;
+#X text 18 91 This is the template for the elements of the array "array1"
+\, which is defined in "help-getsize-template".;
+#X restore 78 254 pd help-getsize-array1-template;
+#X text 98 414 pointer;
+#X text 11 23 get the number of elements in an array;
+#X text 168 414 - a pointer to a scalar that contains an array.;
+#X text 168 451 - the output of [getsize] is the number of elements
+in the array. The smallest possible size is one.;
+#X text 81 504 1) symbol;
+#X text 81 520 2) symbol;
+#X text 77 55 When sent a pointer \, [getsize] looks up a field \,
+which should be an array \, and outputs the number of elements of the
+array.;
+#X text 168 504 - a struct name to specify the the template of a scalar.
+;
+#X text 119 200 here we just get the size of the array "array1".;
+#X text 168 519 - the name of a field within that template. (The field
+must be an array.);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 557 pddp/pddplink all_about_arrays.pd;
+#X obj 98 572 pddp/pddplink scalar-help.pd;
+#X scalar help-getsize-template 349 282 \; 8 \; 14 \; -5 \; 10 \; 21
+\; 10 \; 20 \; 70 \; 10 \; \;;
+#X text 77 332 To the right is an example data structure that contains
+an array with 9 elements. (The purple square is just a reference point.)
+;
+#X msg 78 109 traverse pd-getsize-help.pd \, next;
+#X connect 13 0 15 0;
+#X connect 15 0 14 0;
+#X connect 33 0 13 0;
diff --git a/doc/pddp/graph-help.pd b/doc/pddp/graph-help.pd
new file mode 100644
index 00000000..2d8348ff
--- /dev/null
+++ b/doc/pddp/graph-help.pd
@@ -0,0 +1,64 @@
+#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 (graph) 3 12 0 18
+-204280 -1 0;
+#X obj 0 453 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 GENRE help;
+#X text 12 45 KEYWORDS signal GUI;
+#X text 12 85 DESCRIPTION container canvas for a garray;
+#X text 12 25 NAME graph;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#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 513 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;
+#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 obj 23 43 table;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X restore 70 43 pd;
+#X text 8 2 (graph) Related Objects;
+#X restore 102 598 pd Related_objects;
+#X text 80 532 1) symbol atom;
+#X text 98 461 (none);
+#X text 98 491 (none);
+#N canvas 0 0 450 300 (subpatch) 0;
+#X coords 0 1 100 -1 40 20 1;
+#X restore 481 2 graph;
+#X obj 456 20 pddp/pddplink http://wiki.puredata.info/en/graph -text
+pdpedia: graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X coords 0 1 100 -1 200 140 1;
+#X restore 165 188 graph;
+#X text 100 56 A graph in Pd is a rectangular subregion of the window
+in which you can store numeric arrays.;
+#X text 99 133 You can change the array values by redrawing it in the
+graph. See also "11.arrays" and passim in the "control examples".;
+#X text 99 88 If you create a new array Pd will usually make a new
+graph to put it in (you can change this using the "array" dialog that
+pops up.);
+#X text 99 345 You can put a garray in the graph above by choosing
+"Array" from the "Put" menu. Just choose "in last graph" from the dialog
+window. For more help on garrays \, see below under the heading "more_info".
+;
+#X text 167 532 - (optional) the name of the graph. When using the
+"Put" menu \, the name is created automatically.;
+#X text 11 23 container canvas for a garray;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 572 pddp/pddplink array-help.pd -text array-help;
diff --git a/doc/pddp/gripd-help.pd b/doc/pddp/gripd-help.pd
new file mode 100644
index 00000000..b800b8ad
--- /dev/null
+++ b/doc/pddp/gripd-help.pd
@@ -0,0 +1,73 @@
+#N canvas 0 2 695 658 10;
+#X obj 22 747 gripd;
+#X msg 23 40 connect;
+#X msg 38 75 disconnect;
+#X msg 117 445 poll_send 5;
+#X msg 124 470 poll_receive 5;
+#X msg 126 501 set_path ../gripd;
+#X msg 89 631 set_python_path c:/program files/python;
+#X text 369 661 "c:/program files/python" by default.;
+#X text 372 678 Linux: Does nothing.;
+#X text 229 471 Time in ms to poll for info from GUI.;
+#X text 199 446 Time in ms to poll for sending info to GUI.;
+#X text 62 747 Takes one optional argument to specify a port.;
+#X text 82 15 all backslashes must be "/".;
+#X text 19 2 Windows: For paths \, spaces are ok \, but;
+#X text 120 67 Set gripd object to stop waiting for a connection.;
+#X text 121 80 Also closes gripd GUI opened by "open <filename>".;
+#X text 86 34 Set gripd object to wait for a connection (Not needed
+with "open" message.);
+#X floatatom 22 802 5 0 0 0 - - -;
+#X msg 105 376 lock;
+#X msg 115 407 unlock;
+#X msg 49 112 open ../gripd/examples/gripd.gpd;
+#X msg 52 219 open_locked ../gripd/examples/gripd.gpd;
+#X text 144 376 Set GUI to lock mode;
+#X text 164 407 Set GUI to normal (editable) mode;
+#X text 283 168 Relative paths are relative to the directory;
+#X text 283 180 containing PD executable.;
+#X text 255 568 Relative paths are relative to the directory;
+#X text 254 583 containing PD executable.;
+#X text 68 803 left outlet: 1 on connect \, 0 on disconnect;
+#X floatatom 52 780 5 0 0 0 - - -;
+#X text 96 781 right outlet: 1 when shown \, 0 when hidden;
+#X msg 59 248 show;
+#X msg 68 276 hide;
+#X text 96 249 show GUI window when hidden;
+#X text 106 275 hide GUI window when shown;
+#X text 372 645 Normally not needed (used for gripd.py);
+#X text 371 629 Windows: Path to directory containing python.exe.;
+#X text 283 108 Open gripd GUI and optional .gpd file \, and connect.
+;
+#X text 330 219 Open gripd GUI in locked mode;
+#X text 348 135 If it fails tries gripd.py via python.exe.;
+#X text 284 121 Windows: first tries to execute gripd.exe.;
+#X text 255 503 Path to directory containing gripd executable;
+#X text 255 519 "../gripd" by default;
+#X text 254 535 Windows: sets path to file gripd.exe (and gripd.py).
+;
+#X text 255 552 Linux: sets path to file gripd (symlink to gripd.py).
+;
+#X text 284 155 Linux: executes file gripd;
+#X msg 79 309 openpanel;
+#X msg 89 340 savepanel;
+#X text 156 340 open a save file dialog and send file to savepanel
+receive symbol;
+#X text 152 303 open an open file dialog and send file to openpanel
+receive symbol;
+#X connect 0 0 17 0;
+#X connect 0 1 29 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 0;
+#X connect 6 0 0 0;
+#X connect 18 0 0 0;
+#X connect 19 0 0 0;
+#X connect 20 0 0 0;
+#X connect 21 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 46 0 0 0;
+#X connect 47 0 0 0;
diff --git a/doc/pddp/hdial-help.pd b/doc/pddp/hdial-help.pd
new file mode 100644
index 00000000..d1dfe77d
--- /dev/null
+++ b/doc/pddp/hdial-help.pd
@@ -0,0 +1,283 @@
+#N canvas 106 314 612 281 10;
+#X obj 1 1 cnv 8 100 60 empty empty hdial=hdl 20 20 1 18 -262144 -1109
+0;
+#X text 16 213 (c) musil@iem.kug.ac.at;
+#X text 58 226 IEM KUG;
+#X text 289 52 click properties to;
+#X text 277 63 modify geometry \, colors \, etc.;
+#X obj 356 172 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 21 54 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 355 124 s foo8_rcv;
+#X obj 356 150 r foo8_snd;
+#X obj 44 100 hdl 25 1 1 10 foo8_snd foo8_rcv hdial_0_9 156 -8 192
+10 -99865 -262144 -260818 2;
+#X msg 44 142 \$1;
+#X floatatom 44 164 4 0 0 0 - - -;
+#X obj 44 186 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 89 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 89 140 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 176 64 set \$1;
+#X floatatom 176 43 4 0 9 0 - - -;
+#X floatatom 44 54 4 0 9 0 - - -;
+#X msg 91 41 7 0 -5.44;
+#X msg 95 63 3 3 4.55;
+#X obj 106 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 123 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X obj 140 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 157 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 174 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 191 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 208 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 225 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 242 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 82 178 print;
+#X floatatom 380 198 4 0 0 0 - - -;
+#X msg 380 172 \$1;
+#X msg 355 103 set \$1;
+#X floatatom 355 82 4 0 9 0 - - -;
+#X text 128 178 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 127 189 for moving selected gui-objects;
+#N canvas 226 227 699 530 edit 0;
+#X obj 42 198 f;
+#X msg 20 177 bang;
+#X floatatom 58 176 3 63 156 0 - - -;
+#X floatatom 93 198 3 -20 37 0 - - -;
+#X obj 42 221 pack 0 0;
+#X text 120 198 y-label;
+#X text 86 176 x-label;
+#X floatatom 270 187 3 8 50 0 - - -;
+#X text 297 187 size;
+#X obj 286 293 f;
+#X msg 264 272 bang;
+#X floatatom 302 271 3 -10 10 0 - - -;
+#X floatatom 337 293 3 -10 10 0 - - -;
+#X obj 286 316 pack 0 0;
+#X obj 300 412 f;
+#X msg 278 391 bang;
+#X floatatom 316 390 3 20 60 0 - - -;
+#X floatatom 351 412 3 100 200 0 - - -;
+#X obj 300 435 pack 0 0;
+#X text 330 271 x-delta;
+#X text 364 293 y-delta;
+#X text 344 390 x-position;
+#X text 378 412 y-position;
+#X obj 62 313 f;
+#X msg 40 292 bang;
+#X floatatom 78 291 3 0 2 0 - - -;
+#X floatatom 113 313 3 4 36 0 - - -;
+#X obj 62 336 pack 0 0;
+#X text 106 291 font;
+#X text 142 313 height;
+#X text 504 293 no init;
+#X text 475 348 init value on loadbang;
+#X floatatom 482 228 5 2 20 0 - - -;
+#X msg 47 125 \; foo8_rcv color \$1 \$2 \$3;
+#X msg 42 246 \; foo8_rcv label_pos \$1 \$2;
+#X msg 62 361 \; foo8_rcv label_font \$1 \$2;
+#X msg 34 423 \; foo8_rcv label blabla;
+#X msg 300 460 \; foo8_rcv pos \$1 \$2;
+#X msg 286 341 \; foo8_rcv delta \$1 \$2;
+#X msg 270 216 \; foo8_rcv size \$1;
+#X msg 482 171 \; foo8a_rcv receive foo8_rcv;
+#X msg 483 133 \; foo8_rcv receive foo8a_rcv;
+#X msg 483 88 \; foo8_rcv send foo8_snd;
+#X msg 483 50 \; foo8_rcv send foo8a_snd;
+#X msg 483 312 \; foo8_rcv init 0;
+#X msg 485 366 \; foo8_rcv init 1;
+#X msg 490 436 \; foo8_rcv single_change;
+#X msg 490 470 \; foo8_rcv double_change;
+#X text 491 417 changing-behavior;
+#X msg 482 254 \; foo8_rcv number \$1;
+#X text 526 228 number of buttons;
+#X obj 47 104 pack 0 0 0;
+#X obj 47 76 f;
+#X msg 24 28 bang;
+#X floatatom 63 26 3 0 29 0 - - -;
+#X floatatom 79 46 3 0 29 0 - - -;
+#X floatatom 112 62 3 0 29 0 - - -;
+#X text 91 26 background;
+#X text 106 46 front-color;
+#X text 140 63 label-color;
+#X msg 285 25 back;
+#X msg 285 45 front;
+#X msg 285 65 label;
+#X msg 247 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 86 pd RGB_____________;
+#X floatatom 327 55 3 0 255 0 - - -;
+#X floatatom 370 55 3 0 255 0 - - -;
+#X floatatom 413 56 3 0 255 0 - - -;
+#X text 34 0 preset-colors;
+#X text 296 -3 RGB-colors;
+#X text 327 37 red;
+#X text 363 36 green;
+#X text 411 36 blue;
+#X msg 34 459 \; foo8_rcv label hdial_0_9;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 34 0;
+#X connect 7 0 39 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 38 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 37 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 35 0;
+#X connect 32 0 49 0;
+#X connect 51 0 33 0;
+#X connect 52 0 51 0;
+#X connect 53 0 52 0;
+#X connect 54 0 52 1;
+#X connect 55 0 51 1;
+#X connect 56 0 51 2;
+#X connect 60 0 64 0;
+#X connect 61 0 64 0;
+#X connect 62 0 64 0;
+#X connect 63 0 64 0;
+#X connect 64 0 51 0;
+#X connect 64 1 51 1;
+#X connect 64 2 51 2;
+#X connect 65 0 64 1;
+#X connect 66 0 64 2;
+#X connect 67 0 64 3;
+#X restore 469 108 pd edit;
+#X obj 346 35 hdl 15 1 0 8 eee eee empty 20 8 192 8 -262144 -1 -1 0
+;
+#X obj 260 11 x_all_guis aaa bbb ccc ddd eee fff ggg hhh iii;
+#X text 183 11 gui-hdial:;
+#X text 33 238 graz \, austria 2002;
+#X text 251 232 updated for Pd version 0.35;
+#X text 279 254 KEYWORDS deprecated;
+#X connect 6 0 9 0;
+#X connect 8 0 5 0;
+#X connect 8 0 31 0;
+#X connect 9 0 10 0;
+#X connect 9 0 14 0;
+#X connect 9 0 29 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 14 0 13 0;
+#X connect 14 1 20 0;
+#X connect 14 2 21 0;
+#X connect 14 3 22 0;
+#X connect 14 4 23 0;
+#X connect 14 5 24 0;
+#X connect 14 6 25 0;
+#X connect 14 7 26 0;
+#X connect 14 8 27 0;
+#X connect 14 9 28 0;
+#X connect 15 0 9 0;
+#X connect 16 0 15 0;
+#X connect 17 0 9 0;
+#X connect 18 0 9 0;
+#X connect 19 0 9 0;
+#X connect 31 0 30 0;
+#X connect 32 0 7 0;
+#X connect 33 0 32 0;
diff --git a/doc/pddp/hidin-help.pd b/doc/pddp/hidin-help.pd
new file mode 100644
index 00000000..1af8c50f
--- /dev/null
+++ b/doc/pddp/hidin-help.pd
@@ -0,0 +1,158 @@
+#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 hidin 3 12 0 18
+-204280 -1 0;
+#X obj 0 441 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 95 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 55 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 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 GENRE help;
+#X text 12 75 DESCRIPTION;
+#X text 12 115 INLET_0 bang start stop interval open close show print
+;
+#X text 12 135 OUTLET_0;
+#X text 12 155 OUTLET_1;
+#X text 12 25 KEYWORDS control needs_work (needs description and messages
+for outlets);
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#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 538 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 text 98 542 (none);
+#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 [hidin] Related Objects;
+#X obj 22 43 key;
+#X restore 102 598 pd Related_objects;
+#X obj 79 450 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 79 487 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 143 257 hidin;
+#X msg 143 90 stop;
+#X msg 143 207 show;
+#X floatatom 29 400 3 0 0 0 - - -;
+#X floatatom 55 400 3 0 0 0 - - -;
+#X floatatom 81 400 3 0 0 0 - - -;
+#X floatatom 107 400 3 0 0 0 - - -;
+#X floatatom 133 400 3 0 0 0 - - -;
+#X floatatom 159 400 3 0 0 0 - - -;
+#X floatatom 185 400 3 0 0 0 - - -;
+#X floatatom 211 400 3 0 0 0 - - -;
+#X text 220 112 the interval between each event (in ms);
+#X msg 143 230 print;
+#X msg 143 163 open 0;
+#X obj 22 295 cyclone/prepend set;
+#X msg 22 341;
+#X obj 143 359 route 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+;
+#X floatatom 237 400 3 0 0 0 - - -;
+#X floatatom 263 400 3 0 0 0 - - -;
+#X floatatom 289 400 3 0 0 0 - - -;
+#X floatatom 315 400 3 0 0 0 - - -;
+#X floatatom 341 400 3 0 0 0 - - -;
+#X floatatom 367 400 3 0 0 0 - - -;
+#X floatatom 393 400 3 0 0 0 - - -;
+#X floatatom 419 400 3 0 0 0 - - -;
+#X text 154 329 [hidin] numbers the elements in the order that it finds
+them;
+#N canvas 162 133 578 428 serin 0;
+#X obj 209 61 cnv 15 15 15 empty \$0-open-canvas 0 4 8 0 14 -233017
+-1 0;
+#X obj 60 61 hradio 15 1 1 10 empty empty empty 0 -6 0 8 -225271 -1
+-1 0;
+#X obj 60 13 inlet;
+#X msg 200 202 label \$1;
+#X obj 200 180 makefilename %d;
+#X obj 59 108 int;
+#X obj 59 337 outlet;
+#X msg 201 306 set \$1 \$2;
+#X obj 59 266 trigger bang anything;
+#X obj 201 286 list;
+#X msg 60 210 open \$1;
+#X obj 200 225 send \$0-open-canvas;
+#X connect 1 0 5 0;
+#X connect 2 0 1 0;
+#X connect 3 0 11 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 5 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 8 1 9 0;
+#X connect 9 0 7 0;
+#X connect 10 0 8 0;
+#X coords 0 -1 1 1 165 17 1 60 60;
+#X restore 153 140 pd serin;
+#X text 180 206 print the available elements of the current device
+;
+#X text 187 231 print the available devices to the Pd window;
+#X floatatom 445 400 3 0 0 0 - - -;
+#X floatatom 471 400 3 0 0 0 - - -;
+#X floatatom 497 400 3 0 0 0 - - -;
+#X text 28 315 message format:;
+#X msg 143 112 interval 10;
+#X msg 143 46 bang;
+#X text 179 45 prints a list of devices to the right outlet;
+#X obj 170 284 print DEVICES;
+#X obj 493 3 hidin;
+#X obj 460 20 pddp/pddplink http://wiki.puredata.info/en/hidin -text
+pdpedia: hidin;
+#X text 11 23 needs a description;
+#X msg 143 185 close;
+#X msg 143 68 start;
+#X text 98 449 For messages to [hidin] \, see the example patch above.
+;
+#X text 98 486 list;
+#X text 168 486 - ???;
+#X obj 79 510 cnv 17 3 17 empty \$0-pddp.cnv.let.0 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 509 list;
+#X text 168 509 - ???;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 11 0 25 0;
+#X connect 11 0 27 0;
+#X connect 11 1 47 0;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
+#X connect 23 0 11 0;
+#X connect 24 0 11 0;
+#X connect 25 0 26 0;
+#X connect 27 0 14 0;
+#X connect 27 1 15 0;
+#X connect 27 2 16 0;
+#X connect 27 3 17 0;
+#X connect 27 4 18 0;
+#X connect 27 5 19 0;
+#X connect 27 6 20 0;
+#X connect 27 7 21 0;
+#X connect 27 8 28 0;
+#X connect 27 9 29 0;
+#X connect 27 10 30 0;
+#X connect 27 11 31 0;
+#X connect 27 12 32 0;
+#X connect 27 13 33 0;
+#X connect 27 14 34 0;
+#X connect 27 15 35 0;
+#X connect 27 16 40 0;
+#X connect 27 17 41 0;
+#X connect 27 18 42 0;
+#X connect 37 0 24 0;
+#X connect 44 0 11 0;
+#X connect 45 0 11 0;
+#X connect 51 0 11 0;
+#X connect 52 0 11 0;
diff --git a/doc/pddp/hilbert~-help.pd b/doc/pddp/hilbert~-help.pd
new file mode 100644
index 00000000..883b7795
--- /dev/null
+++ b/doc/pddp/hilbert~-help.pd
@@ -0,0 +1,85 @@
+#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 hilbert~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 397 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 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 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 GENRE help;
+#X text 12 45 KEYWORDS signal abstraction filter;
+#X text 12 85 DESCRIPTION Hilbert transform;
+#X text 12 25 NAME hilbert~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_1 bang;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 185 OUTLET_1 signal;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#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 514 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 542 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 518 (none);
+#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 [hilbert~] Related Objects;
+#X obj 22 43 complex-mod~;
+#X restore 102 598 pd Related_objects;
+#X obj 78 406 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 466 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 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 468 3 hilbert~;
+#X obj 442 20 pddp/pddplink http://wiki.puredata.info/en/hilbert~ -text
+pdpedia: hilbert~;
+#X text 11 23 Hilbert transform;
+#X obj 37 225 hilbert~;
+#X obj 36 196 osc~ 440;
+#X floatatom 36 168 0 0 0 0 - - -;
+#X text 98 405 signal;
+#X text 168 405 - the incoming signal;
+#X text 98 428 bang;
+#X text 167 428 - clear the internal state;
+#X text 76 86 The Hilbert transform (the name is abused here according
+to computer music tradition) puts out a phase quadrature version of
+the input signal suitable for signal sideband modulation via [complex-mod~].
+;
+#X text 98 465 signal;
+#X text 98 546 The [hilbert~] object is an abstraction \, so you can
+click on the object to bring up the subpatch to see how it works.;
+#X msg 102 259 bang;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/H09.ssb.modulation.pd
+-text doc/3.audio.examples/H09.ssb.modulation.pd;
+#X obj 78 489 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 488 signal;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-right 882 float 2;
+#X array \$0-left 882 float 2;
+#X coords 0 1 881 -1 300 170 1;
+#X restore 217 183 graph;
+#X obj 37 345 tabwrite~ \$0-left;
+#X obj 83 319 tabwrite~ \$0-right;
+#X connect 15 0 32 0;
+#X connect 15 1 33 0;
+#X connect 16 0 15 0;
+#X connect 17 0 16 0;
+#X connect 25 0 32 0;
+#X connect 25 0 33 0;
diff --git a/doc/pddp/hip~-help.pd b/doc/pddp/hip~-help.pd
new file mode 100644
index 00000000..2114bd4b
--- /dev/null
+++ b/doc/pddp/hip~-help.pd
@@ -0,0 +1,100 @@
+#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 hip~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 381 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION one-pole high pass filter;
+#X text 12 25 NAME hip~;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 125 INLET_0 signal clear;
+#X text 12 145 INLET_1 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 488 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 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 390 cnv 17 3 37 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 100 425 428 166 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 [hip~] Related Objects;
+#X obj 22 43 lop~;
+#X obj 69 43 bp~;
+#X obj 117 43 vcf~;
+#X text 22 81 Raw Filters;
+#X obj 73 108 rzero~;
+#X obj 195 108 cpole~;
+#X obj 24 108 rpole~;
+#X obj 122 108 rzero_rev~;
+#X obj 244 108 czero~;
+#X obj 293 108 czero_rev~;
+#X restore 101 597 pd Related_objects;
+#X text 98 389 signal;
+#X obj 78 497 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 497 signal;
+#X obj 491 3 hip~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/hip~ -text
+pdpedia: hip~;
+#X obj 146 270 env~;
+#X floatatom 146 293 0 0 0 0 - - -;
+#X floatatom 195 215 0 0 0 0 - - -;
+#X obj 146 243 hip~ 5;
+#X obj 88 270 env~;
+#X floatatom 88 292 0 0 0 0 - - -;
+#X floatatom 88 144 0 0 0 0 - - -;
+#X text 89 105 The left inlet is the incoming audio signal. The right
+inlet is the cutoff frequency in Hz.;
+#X obj 88 167 osc~ 100;
+#X text 133 142 <-- scroll to change input frequency;
+#X msg 146 191 clear;
+#X text 198 190 <-- reinitialize internal state;
+#X text 227 216 <-- set cutoff frequency;
+#X text 168 389 - incoming audio signal.;
+#X obj 78 432 cnv 17 3 45 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 431 float;
+#X text 98 449 list;
+#X text 98 409 clear;
+#X text 84 312 Compare the strength of the original signal on the left
+with that of the filtered signal on the right.;
+#X text 11 23 one-pole high pass filter;
+#X text 168 543 - initial rolloff frequency.;
+#X text 168 409 - reinitialize internal state.;
+#X text 168 431 - cutoff frequency in Hz.;
+#X text 168 449 - a list to the right inlet is truncated \, and the
+first element is used as the cutoff frequency.;
+#X text 88 68 [hip~] is a one-pole high pass filter with a specified
+rolloff frequency.;
+#X text 191 272 [env~] gives the amplitude of the signal envelop in
+dB.;
+#X text 168 497 - the output is the filtered audio signal.;
+#X text 80 543 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 14 0 15 0;
+#X connect 16 0 17 1;
+#X connect 17 0 14 0;
+#X connect 18 0 19 0;
+#X connect 20 0 22 0;
+#X connect 22 0 18 0;
+#X connect 22 0 17 0;
+#X connect 24 0 17 0;
diff --git a/doc/pddp/hradio-help.pd b/doc/pddp/hradio-help.pd
new file mode 100644
index 00000000..c082b31d
--- /dev/null
+++ b/doc/pddp/hradio-help.pd
@@ -0,0 +1,405 @@
+#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 125 PLATFORM windows macosx gnulinux;
+#X text 12 195 LIBRARY internal;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 215 AUTHOR Thomas Musil;
+#X text 12 235 WEBSITE;
+#X text 12 295 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control storage GUI nonlocal;
+#X text 12 105 DESCRIPTION horizontal row of gui-radio buttons;
+#X text 12 25 NAME hradio;
+#X text 12 145 INLET_0 float bang list size init number send receive
+label label_pos label_font color pos delta;
+#X text 12 175 OUTLET_0 float;
+#X text 12 275 RELEASE_VERSION;
+#X text 12 255 RELEASE_DATE 2002;
+#X text 12 45 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/doc/pddp/hslider-help.pd b/doc/pddp/hslider-help.pd
new file mode 100644
index 00000000..2c50bc21
--- /dev/null
+++ b/doc/pddp/hslider-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 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 195 LIBRARY internal;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 215 AUTHOR Thomas Musil;
+#X text 12 235 WEBSITE;
+#X text 12 295 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control storage GUI nonlocal;
+#X text 12 105 DESCRIPTION horizontal gui-slider;
+#X text 12 25 NAME hslider;
+#X text 12 45 ALIAS hsl;
+#X text 12 145 INLET_0 float bang size range log init steady receive
+send label label_pos label_font color pos delta;
+#X text 12 175 OUTLET_0 float;
+#X text 12 275 RELEASE_VERSION;
+#X text 12 255 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/doc/pddp/import-help.pd b/doc/pddp/import-help.pd
new file mode 100644
index 00000000..130ce42f
--- /dev/null
+++ b/doc/pddp/import-help.pd
@@ -0,0 +1,87 @@
+#N canvas 0 0 555 619 10;
+#X declare;
+#X declare;
+#X declare -lib ext13 -lib memento -lib rradical;
+#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 import 3 12 0 18
+-204280 -1 0;
+#X obj 0 294 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION load libraries from a patch;
+#X text 12 125 INLET_0 bang rewind;
+#X text 12 145 OUTLET_0 symbol;
+#X text 12 165 OUTLET_1 bang;
+#X text 12 25 NAME import;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 369 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 455 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 505 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 105 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 7 1 [import] Related Objects;
+#X obj 22 42 declare;
+#X restore 102 597 pd Related_objects;
+#X obj 78 303 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 378 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 411 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 482 3 import;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/import -text
+pdpedia: import;
+#X msg 91 114 bang;
+#X obj 91 162 import ext13 memento rradical;
+#X symbolatom 102 188 0 0 0 0 - - -;
+#X obj 91 214 print;
+#X text 138 113 get next item in list of loaded libs;
+#X text 150 137 start at the top of the list again;
+#X msg 103 138 rewind;
+#X text 97 509 [import] loads libraries from the patch. On Pd 0.40.
+or greater \, it loads the library into the patch's local namespace.
+On older versions \, it loads the libraries into the global namespace.
+;
+#X text 98 302 bang;
+#X text 98 332 rewind;
+#X text 98 377 symbol;
+#X text 98 410 bang;
+#X obj 262 184 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 283 183 bang after the end of the list is reached;
+#X text 11 23 load libraries from a patch;
+#X text 168 377 - a "bang" to the inlet of [import] sends a symbol
+to the left outlet which the name of a loaded library.;
+#X text 168 332 - the "rewind" message starts at the top of the list
+of libraries.;
+#X text 168 302 - sending a "bang" to [import] makes it output the
+loaded libraries one at a time (i.e. \, one per bang).;
+#X text 167 410 - once [import] has output the last library in the
+list \, sending another "bang" to its inlet will cause a "bang" to
+be sent out its right outlet.;
+#X text 80 471 n) symbol atom;
+#X text 167 471 - the arguments to [import] specify the libraries to
+load for patch.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 97 568 pddp/pddplink all_about_libraries.pd;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 14 0 16 0;
+#X connect 14 1 25 0;
+#X connect 19 0 14 0;
diff --git a/doc/pddp/initbang-help-ex1-loadbang.pd b/doc/pddp/initbang-help-ex1-loadbang.pd
new file mode 100644
index 00000000..a8b251c6
--- /dev/null
+++ b/doc/pddp/initbang-help-ex1-loadbang.pd
@@ -0,0 +1,18 @@
+#N canvas 104 284 428 300 10;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [initbang] Abstraction Example No 1;
+#X msg 157 203 obj 20 50 outlet;
+#X obj 157 226 s pd-initbang-help-ex1-loadbang.pd;
+#X obj 157 180 loadbang;
+#X text 67 48 This abstraction uses [loadbang] below to create the
+[outlet] seen at left. The [loadbang] object only gets triggered after
+all objects and connections in the parent patch have been created.
+;
+#X text 67 98 This poses a problem if you want to save the patch with
+a connection from this abstraction's outlet in the parent patch to
+the [print from_loadbang] object below it. The next time you open the
+patch \, Pd will attempt to connect those objects BEFORE the [outlet]
+gets created \, and you will get an error.;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
diff --git a/doc/pddp/initbang-help-ex2-initbang.pd b/doc/pddp/initbang-help-ex2-initbang.pd
new file mode 100644
index 00000000..6fb41643
--- /dev/null
+++ b/doc/pddp/initbang-help-ex2-initbang.pd
@@ -0,0 +1,15 @@
+#N canvas 81 215 428 300 10;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [initbang] Abstraction Example No 2;
+#X obj 157 191 s pd-initbang-help-ex2-initbang.pd;
+#X obj 157 145 initbang;
+#X text 74 109 <- dynamically created [outlet];
+#X msg 157 168 obj 20 110 outlet;
+#X text 19 36 This abstraction just shows a simple example of how [initbang]
+works. Since [initbang] is used below (instead of [loadbang]) \, the
+outlet gets created before the parent patch initializes. This ensures
+that connections get created properly when the parent patch is opened.
+;
+#X connect 3 0 5 0;
+#X connect 5 0 2 0;
diff --git a/doc/pddp/initbang-help.pd b/doc/pddp/initbang-help.pd
index f2f876ea..6b8a75d1 100644
--- a/doc/pddp/initbang-help.pd
+++ b/doc/pddp/initbang-help.pd
@@ -1,17 +1,72 @@
-#N canvas 81 22 549 570 10;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 104 464 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm
+#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 initbang 3 12 0
+18 -204280 -1 0;
+#X obj 1 412 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 115 PLATFORM windows macosx gnulinux;
+#X text 12 155 LIBRARY internal;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 WEBSITE;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION send "bang" automatically when abstraction
+starts to load;
+#X text 12 25 NAME initbang;
+#X text 12 135 OUTLET_0 bang;
+#X text 12 45 KEYWORDS control bang_op;
+#X text 12 215 RELEASE_DATE 2006;
+#X text 12 235 RELEASE_VERSION;
+#X text 12 255 HELP_PATCH_AUTHORS IOhannes m zmoelnig. Jonathan Wilkes
+revised the patch to conform to the PDDP template for Pd version 0.42.
;
-#X text 104 61 This object does not accept arguments of any type.;
-#X text 14 62 ARGUMENTS:;
-#X text 29 82 OUTLETS:;
-#X text 20 121 EXAMPLES:;
-#X text 21 463 SEE ALSO:;
-#X obj 21 18 initbang;
-#X text 38 43 INLETS:;
-#X text 104 43 (none);
-#X text 108 18 - SEND "bang" AUTOMATICALLY WHEN ABSTRACTION STARTS
-TO LOAD.;
-#X text 104 82 A "bang" message is sent automatically when the containing
+#X text 12 175 AUTHOR IOhannes m zmoelnig;
+#X restore 502 597 pd META;
+#X obj 1 439 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 1 492 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 1 519 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 100 496 (none);
+#N canvas 94 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 21 42 closebang;
+#X text 7 1 [initbang] Related Objects;
+#X restore 104 597 pd Related_objects;
+#X obj 80 448 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 442 22 pddp/pddplink http://wiki.puredata.info/en/initbang -text
+pdpedia: initbang;
+#X obj 468 5 initbang;
+#X text 100 416 (none);
+#X text 100 447 bang;
+#X text 102 556 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm
+;
+#X obj 95 383 print from_initbang;
+#X obj 95 227 print from_loadbang;
+#X obj 95 115 initbang-help-ex1-loadbang;
+#X obj 95 349 initbang-help-ex2-initbang;
+#X text 102 523 [initbang] is useful if you want to build abstractions
+that have a variable number of inlets or outlets.;
+#X text 112 139 If you connect this outlet to the [print] object below
+and save the patch \, there will be a problem the next time you open
+it. Pd will try to connect the abstraction's outlet to the inlet of
+[print] \, but this will happen before [loadbang] is executed (i.e.
+\, before the outlet exists). The result will be an error \, and no
+connection will be made.;
+#X text 13 21 send "bang" automatically when abstraction starts to
+load;
+#X text 170 447 - a bang message is sent automatically when the containing
patch is first opened as an embeded object in another patch.;
+#X obj 6 597 pddp/pddplink pddp/help.pd -text help;
+#X text 93 71 The abstraction below dynamically creates an outlet using
+[loadbang]. The [loadbang] object send a bang after this help patch
+has loaded.;
+#X text 92 261 To solve this problem \, the abstraction below uses
+[initbang] instead of [loadbang]. [initbang] will send a bang before
+Pd initializes the parent patch \, so that the [outlet] is created
+before the connection between objects is made. Thus \, you can see
+below that the objects are connected successfully.;
diff --git a/doc/pddp/inlet-help.pd b/doc/pddp/inlet-help.pd
new file mode 100644
index 00000000..9c7b51f3
--- /dev/null
+++ b/doc/pddp/inlet-help.pd
@@ -0,0 +1,99 @@
+#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 inlet 3 12 0 18
+-204280 -1 0;
+#X obj 0 412 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 225 RELEASE_VERSION 0.41.4;
+#X text 12 205 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 85 DESCRIPTION control inlet for a subpatch;
+#X text 12 25 NAME inlet;
+#X text 12 125 OUTLET_0 anything;
+#X text 12 45 KEYWORDS control nonlocal canvas_op;
+#X restore 500 597 pd META;
+#X obj 0 441 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 517 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;
+#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 obj 22 43 inlet;
+#X obj 67 43 outlet;
+#X obj 118 43 inlet~;
+#X obj 168 43 outlet;
+#X text 8 2 [inlet] Related Objects;
+#X obj 217 43 block~;
+#X text 266 43 [switch~];
+#X restore 102 598 pd Related_objects;
+#X obj 78 450 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 449 anything;
+#X obj 493 3 inlet;
+#X obj 461 20 pddp/pddplink http://wiki.puredata.info/en/inlet -text
+pdpedia: inlet;
+#X text 11 23 control inlet for a subpatch;
+#X obj 373 259 print~;
+#X obj 373 199 sig~ 12;
+#X floatatom 130 203 0 0 0 0 - - -;
+#X floatatom 130 255 0 0 0 0 - - -;
+#X text 100 182 messages in and out;
+#X text 343 176 audio in and out;
+#X obj 373 237 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 50 247 428 293 subpatch-with-inlets-and-outlets 0;
+#X obj 68 68 inlet;
+#X text 20 38 control inlet for receiving messages;
+#X floatatom 68 96 0 0 0 0 - - -;
+#X floatatom 68 218 0 0 0 0 - - -;
+#X obj 68 250 outlet;
+#X text 20 188 control outlet for sending message;
+#X obj 340 84 inlet~;
+#X obj 340 135 print~;
+#X msg 355 109 bang;
+#X obj 340 243 outlet~;
+#X obj 340 217 sig~ 34;
+#X text 333 38 same for;
+#X text 334 57 signals.;
+#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 [inlet] Creating Inlets/Outlets on Subpatches;
+#X connect 0 0 2 0;
+#X connect 3 0 4 0;
+#X connect 6 0 7 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X restore 130 229 pd subpatch-with-inlets-and-outlets;
+#X text 98 417 (none);
+#X text 98 521 (none);
+#X text 167 521 - a symbolic argument to an [inlet] object which will
+be ignored. However \, [inlet] will not create if you give it a float
+argument.;
+#X text 98 127 The subpatch below shows how to use [inlet] \, [inlet~]
+\, [outlet] \, and [outlet~] objects to get data into and out of a
+subpatch:;
+#X text 168 449 - an outlet passes any message sent from the parent
+patch to the corresponding inlet of this subpatch. When multiple [inlet~]
+or [inlet] objects are in one subpatch \, their horizontal order determines
+which inlet corresponds to which [inlet~]/[inlet] object.;
+#X text 98 77 The [inlet] object allows messages to be sent to a subpatch
+from an object on the parent canvas.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 20 1;
+#X connect 15 0 20 0;
+#X connect 19 0 13 0;
+#X connect 20 0 16 0;
+#X connect 20 1 13 0;
diff --git a/doc/pddp/inlet~-help.pd b/doc/pddp/inlet~-help.pd
new file mode 100644
index 00000000..afe58628
--- /dev/null
+++ b/doc/pddp/inlet~-help.pd
@@ -0,0 +1,183 @@
+#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 inlet~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 360 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 85 DESCRIPTION signal inlet for a subpatch;
+#X text 12 25 NAME inlet~;
+#X text 12 125 OUTLET_0 signal;
+#X text 12 45 KEYWORDS signal nonlocal canvas_op;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 387 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 566 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 obj 22 43 inlet;
+#X obj 67 43 outlet;
+#X obj 118 43 inlet~;
+#X obj 168 43 outlet;
+#X obj 225 43 block~;
+#X text 8 2 [inlet~] Related Objects;
+#X text 275 42 [switch~];
+#X restore 102 598 pd Related_objects;
+#X obj 78 396 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 369 259 print~;
+#X obj 369 199 sig~ 12;
+#X floatatom 126 203 0 0 0 0 - - -;
+#X floatatom 126 255 0 0 0 0 - - -;
+#X text 96 182 messages in and out;
+#X text 339 176 audio in and out;
+#X obj 369 237 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 50 247 428 293 subpatch-with-inlets-and-outlets 0;
+#X obj 68 68 inlet;
+#X text 20 38 control inlet for receiving messages;
+#X floatatom 68 96 0 0 0 0 - - -;
+#X floatatom 68 218 0 0 0 0 - - -;
+#X obj 68 250 outlet;
+#X text 20 188 control outlet for sending message;
+#X obj 340 84 inlet~;
+#X obj 340 135 print~;
+#X msg 355 109 bang;
+#X obj 340 243 outlet~;
+#X obj 340 217 sig~ 34;
+#X text 333 38 same for;
+#X text 334 57 signals.;
+#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 [inlet~] Creating Inlets/Outlets on Subpatches;
+#X connect 0 0 2 0;
+#X connect 3 0 4 0;
+#X connect 6 0 7 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X restore 126 229 pd subpatch-with-inlets-and-outlets;
+#X text 98 363 (none);
+#X text 11 23 signal inlet for a subpatch;
+#X obj 477 3 inlet~;
+#X obj 451 20 pddp/pddplink http://wiki.puredata.info/en/inlet~ -text
+pdpedia: inlet~;
+#X text 98 395 signal;
+#N canvas 60 123 428 466 up/downsampling 0;
+#X obj 30 396 print~;
+#X obj 48 370 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 112 396 print~;
+#X obj 130 372 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 195 396 print~;
+#X obj 213 370 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-tab 64 float 3;
+#A 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 1 64 -1 200 140 1;
+#X restore 216 181 graph;
+#X obj 274 368 s \$0-tab;
+#X msg 274 341 const 0 \, 0 0 1;
+#X obj 145 233 print~;
+#X obj 145 208 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 23 181 tabreceive~ \$0-tab;
+#N canvas 81 269 585 267 test-subpatch-upsampled 0;
+#X obj 40 17 block~ 128 1 2;
+#X obj 209 149 inlet~ hold;
+#X obj 367 153 inlet~ lin;
+#X obj 23 202 print~;
+#X obj 41 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 209 209 print~;
+#X obj 227 183 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 366 213 print~;
+#X obj 383 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 42 49 Upsampling methods:;
+#X text 206 114 sample/hold;
+#X text 337 111 linear interpolation;
+#X text 16 114 interleaved zeros;
+#X obj 23 146 inlet~;
+#X connect 1 0 5 0;
+#X connect 2 0 7 0;
+#X connect 4 0 3 0;
+#X connect 6 0 5 0;
+#X connect 8 0 7 0;
+#X connect 13 0 3 0;
+#X restore 23 285 pd test-subpatch-upsampled;
+#N canvas 46 43 585 267 test-subpatch-downsampled 0;
+#X obj 23 146 outlet~;
+#X obj 209 149 outlet~ hold;
+#X obj 367 153 outlet~ lin;
+#X text 206 173 sample/hold;
+#X text 364 177 linear interpolation;
+#X text 197 19 upsampling methods:;
+#X obj 40 17 block~ 32 1 0.5;
+#X text 18 169 interleaved zeros;
+#X obj 21 83 tabreceive~ \$0-tab;
+#X connect 8 0 0 0;
+#X connect 8 0 1 0;
+#X connect 8 0 2 0;
+#X restore 29 340 pd test-subpatch-downsampled;
+#X text 20 38 When a subpatch is reblocked to a higher or lower sample
+rate \, the inlet~ and outlet~ objects offer a choice of three upsampling
+methods. (The inlet~ upsamples when entering a subpatch with a higher
+sample rate \; the outlet~ upsamples when leaving a subpatch of _lower_
+sample rate \, as demonstrated below.) There is no corresponding choice
+of downsampling method - downsampling is done simply by dropping the
+extra samples.;
+#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 [inlet~] Up/downsampling;
+#X connect 1 0 0 0;
+#X connect 3 0 2 0;
+#X connect 5 0 4 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 1;
+#X connect 11 0 12 2;
+#X connect 11 0 9 0;
+#X connect 11 0 12 0;
+#X connect 13 0 0 0;
+#X connect 13 1 2 0;
+#X connect 13 2 4 0;
+#X restore 171 538 pd up/downsampling;
+#X text 80 482 1) symbol atom;
+#X text 98 127 The subpatch below shows how to use [inlet] \, [inlet~]
+\, [outlet] \, and [outlet~] objects to get data into and out of a
+subpatch:;
+#X text 168 395 - the [inlet~] object outputs the signal sent to the
+inlet of the subpatch in which it is found. When multiple [inlet~]
+or [inlet] objects are in one subpatch \, their horizontal order determines
+which inlet corresponds to which [inlet~]/[inlet] object.;
+#X text 168 482 - (optional) The word "hold" will cause sample/hold
+upsampling/downsampling \, and the word "lin" will cause linear upsampling/downsampling.
+See the subpatch below for more details:;
+#X text 98 77 The [inlet~] object allows signals to be sent to a subpatch
+from objects on the parent canvas.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 10 0 16 1;
+#X connect 11 0 16 0;
+#X connect 15 0 9 0;
+#X connect 16 0 12 0;
+#X connect 16 1 9 0;
diff --git a/doc/pddp/int-help.pd b/doc/pddp/int-help.pd
index 17b1d9c9..956db8ca 100644
--- a/doc/pddp/int-help.pd
+++ b/doc/pddp/int-help.pd
@@ -1,90 +1,142 @@
-#N canvas 9 22 906 517 10;
-#X msg 23 230 bang;
-#X floatatom 13 313 0 0 0 0 - - -;
-#X floatatom 13 208 0 0 0 0 - - -;
-#X floatatom 56 264 0 0 0 0 - - -;
-#X text 61 230 You can force the object to output the stored number.
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 550 21 empty empty empty 20 12 0 14 -228856 -66577
+0;
+#X obj 0 0 cnv 15 550 40 empty empty int 3 12 0 18 -204280 -1 0;
+#X obj 0 234 cnv 3 550 3 empty empty inlets 15 12 0 13 -228856 -1 0
+;
+#N canvas 49 212 482 395 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS This help patch 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. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control storage;
+#X text 12 105 DESCRIPTION store an integer;
+#X text 12 25 NAME int;
+#X text 12 45 ALIAS i;
+#X text 12 145 INLET_0 bang float;
+#X text 12 165 INLET_1 float;
+#X text 12 185 OUTLET_0 float;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 375 cnv 3 550 3 empty empty outlets 15 12 0 13 -228856 -1
+0;
+#X obj 0 412 cnv 3 550 3 empty empty arguments 15 12 0 13 -228856 -1
+0;
+#X obj 0 475 cnv 3 550 3 empty empty more_info 15 12 0 13 -228856 -1
+0;
+#X obj 78 334 cnv 17 3 30 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 78 243 cnv 17 3 82 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 501 4 or;
+#X obj 100 524 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s3.1
+-text Pd manual 2.3.1: anatomy of a message;
+#N canvas 107 165 428 375 More_Info 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 36 Integers are "whole" numbers - numbers which do not contain
+fractions. The following are examples of whole numbers:;
+#X text 20 66 1;
+#X text 20 81 -544;
+#X text 20 110 10024;
+#X text 19 95 420;
+#X obj 1 161 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 7 1 [int] What is an integer;
+#X text 7 161 [int] Note;
+#X text 21 231 -8 \,;
+#X text 39 231 388 \,;
+#X text 63 231 608;
+#X text 22 248 and:;
+#X text 33 267 388 \,;
+#X text 57 267 608;
+#X text 22 267 8 \,;
+#X text 21 290 Hence \, the [int] object takes about as much CPU as
+the [float] object \; but is useful when numbers need to be truncated
+and/or when patches are being designed to be compatible with Pd and
+MAX/MSP.;
+#X text 21 206 All numbers in Pd are kept in 32-bit floating point
+and can represent real numbers between:;
+#X restore 102 545 pd More_Info;
+#X text 101 508 all_about_data-types.pd;
+#X text 98 242 bang;
+#X text 98 262 float;
+#X text 98 302 list;
+#X text 98 334 float;
+#N canvas 93 484 428 108 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 64 36 value;
+#X obj 111 36 list;
+#X floatatom 152 37 5 0 0 0 - - -;
+#X msg 195 36;
+#X obj 22 36 float;
+#X obj 22 66 symbol;
+#X obj 71 66 random;
+#X text 7 1 [int] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 99 382 float;
+#X obj 474 3 int;
+#X obj 522 3 i;
+#X obj 470 21 pddp/pddplink http://wiki.puredata.info/en/int -text
+pdpedia: int;
+#X msg 115 122 bang;
+#X floatatom 105 205 0 0 0 0 - - -;
+#X floatatom 105 100 0 0 0 0 - - -;
+#X floatatom 144 153 0 0 0 0 - - -;
+#X text 153 122 You can force the object to output the stored number.
;
-#X text 58 208 You can set and output the value simoultaneously.;
-#X text 71 288 You can store the number \, without outputting it.;
-#X text 458 142 NOTE;
-#X text 10 452 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 text 456 415 RELATED OBJECTS;
-#X obj 546 442 symbol;
-#X obj 45 12 int;
-#X text 9 41 The int object stores an integer (which is set either
-by its creation argument or by the right inlet) and then outputs that
-number when it receives a "bang" message or a new number in its left
-inlet.;
-#X text 8 98 This object acts exactly as its nearest cousin:;
-#X obj 297 97 float;
-#X text 465 159 All numbers in Pd are kept in 32-bit floating point
-and can represent real numbers between -8 \, 388 \, 608 and 8 \, 388
-\, 608 Hence \, the [int] object takes about as much CPU as the [float]
-object \; but is useful when numbers need to be truncated and/or when
-patches are being designed to be compatible with Pd and MAX/MSP.;
-#X text 8 160 Tip: Press and hold SHIFT while click-n-dragging these
+#X text 150 100 You can set and output the value simoultaneously.;
+#X text 172 153 You can store the number \, without outputting it.
+;
+#X text 100 52 Tip: Press and hold SHIFT while click-n-dragging these
number boxes to see how the [int] object truncates the number - drops
decimal places.;
-#X obj 13 287 int 6.5;
-#X text 7 114 with only one exception: All decimal places are dropped!
-All fractions will be truncated \; they will not be 'rounded off'.
-;
-#X obj 465 442 float;
-#X obj 603 442 random;
-#X text 457 10 WHAT IS AN INTEGER?;
-#X text 463 29 Integers are "whole" numbers - numbers which do not
-contain fractions. The following are examples of whole numbers:;
-#X text 464 59 1;
-#X text 464 74 -544;
-#X text 464 103 10024;
-#X text 463 88 420;
-#N canvas 0 22 414 279 related_objects_from_other_libraries 0;
-#X obj 22 19 list2int;
-#X obj 77 19 i2l;
-#X obj 104 19 probalizer 200 200 100 100 1 0 10 1 10 2 10 3 10 4 10
-5 10 6 10 7 10 8 10 9 10 10 10 11 10 12 10 13 10 14 10 15 10 16 10
-17 10 18 10 19 10 20 10 21 10 22 10 23 10 24 10 25 10 26 10 27 10 28
-10 29 10 30 10 31 10 32 10 33 10 34 10 35 10 36 10 37 10 38 10 39 10
-40 10 41 10 42 10 43 10 44 10 45 10 46 10 47 10 48 10 49 10 50 10 51
-10 52 10 53 10 54 10 55 10 56 10 57 10 58 10 59 10 60 10 61 10 62 10
-63 10 64 10 65 10 66 10 67 10 68 10 69 10 70 10 71 10 72 10 73 10 74
-10 75 10 76 10 77 10 78 10 79 10 80 10 81 10 82 10 83 10 84 10 85 10
-86 10 87 10 88 10 89 10 90 10 91 10 92 10 93 10 94 10 95 10 96 10 97
-10 98 10 99 10;
-#X text 20 56 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 105 The best places to find information about Pd's libraries
-is:;
-#X text 16 127 www.puredata.org and click on "Downloads" then "Software"
+#X obj 105 179 int 6.5;
+#X text 100 479 Note: [int] does not 'rounded off' floats. It discards
+everything to the right of the decimal point.;
+#X obj 78 384 cnv 17 3 17 empty empty 0 5 9 0 16 -228856 -162280 0
;
-#X text 18 157 iem.kug.ac.at/pdb/;
-#X restore 464 464 pd related_objects_from_other_libraries;
-#X text 466 283 The [int] object can be used as a basis for building
+#N canvas 108 391 428 173 Building_a_counter 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 37 The [int] object can be used as a basis for building
simple counter mechanisms in Pd. In the example below \, the [int]
object's stored value is incremented by 1 with each "bang".;
-#X text 11 334 The creation argument initializes the object and stores
-the number until the value is reset. The creation argument is optional.
-If no creation argument is provided \, the object defaults to zero.
-;
-#X msg 481 340 bang;
-#X obj 481 369 int;
-#X obj 509 369 + 1;
-#X floatatom 481 395 5 0 0 0 - - -;
-#X text 456 263 EXAMPLE: BUILDING A COUNTER;
-#X obj 244 12 i;
-#X obj 436 3 cnv 10 2 500 empty empty empty 20 12 0 14 -166441 -262144
-0;
-#X obj 506 442 f;
-#X text 87 11 - STORE AN INTEGER -;
-#X connect 0 0 17 0;
-#X connect 2 0 17 0;
-#X connect 3 0 17 1;
-#X connect 17 0 1 0;
-#X connect 30 0 31 0;
-#X connect 31 0 32 0;
-#X connect 31 0 33 0;
-#X connect 32 0 31 1;
+#X msg 164 84 bang;
+#X obj 164 113 int;
+#X obj 192 113 + 1;
+#X floatatom 164 139 5 0 0 0 - - -;
+#X text 7 1 [int] Example: Building a Counter;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 1;
+#X restore 102 567 pd Building_a_counter;
+#X text 11 20 store an integer;
+#X text 169 430 - initializes the object and stores the number until
+the value is reset. The creation argument is optional. If no creation
+argument is provided \, the object defaults to zero.;
+#X text 169 382 - outputs the stored value as a float message.;
+#X text 168 242 - output the currently stored integer.;
+#X text 168 262 - [int] will convert an incoming float to an integer--
+all numerals to the right of the decimal place are truncated (dropped).
+This value is then sent to the outlet.;
+#X text 168 302 - a list is truncated to the first element \, which
+is then output and stored.;
+#X text 168 334 - a float received at the right inlet is converted
+to an integer and stored for later use.;
+#X text 81 430 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 22 0 30 0;
+#X connect 24 0 30 0;
+#X connect 25 0 30 1;
+#X connect 30 0 23 0;
diff --git a/doc/pddp/intro-help.pd b/doc/pddp/intro-help.pd
new file mode 100644
index 00000000..10ae3502
--- /dev/null
+++ b/doc/pddp/intro-help.pd
@@ -0,0 +1,360 @@
+#N canvas 14 5 569 440 12;
+#X declare;
+#X obj 24 150 bang;
+#X text 124 150 - output a bang message;
+#X obj 24 180 float;
+#X text 124 180 - store and recall a number;
+#X obj 24 210 symbol;
+#X text 124 210 - store and recall a symbol;
+#X obj 24 240 int;
+#X text 124 240 - store and recall an integer;
+#X obj 24 270 send;
+#X text 124 270 - send a message to a named object;
+#X obj 24 300 receive;
+#X text 124 300 - catch "sent" messages;
+#X obj 24 330 select;
+#X text 124 330 - test for matching numbers or symbols;
+#X obj 24 360 route;
+#X text 124 360 - route messages according to first element;
+#X obj 24 390 pack;
+#X text 124 390 - make compound messages;
+#X obj 24 420 unpack;
+#X text 124 420 - get elements of compound messages;
+#X obj 24 450 trigger;
+#X text 124 450 - sequence and convert messagess;
+#X obj 24 480 spigot;
+#X text 124 480 - interruptible message connection;
+#X obj 24 510 moses;
+#X text 124 510 - part a numeric stream;
+#X obj 24 540 until;
+#X text 124 540 - looping mechanism;
+#X obj 24 570 print;
+#X text 124 570 - print out messages;
+#X obj 24 600 makefilename;
+#X text 145 601 - format a symbol with a variable field;
+#X obj 24 630 change;
+#X text 124 630 - remove repeated numbers from a stream;
+#X obj 24 660 swap;
+#X text 124 660 - swap two numbers;
+#X obj 24 690 value;
+#X text 124 690 - shared numeric value;
+#X obj 19 751 delay;
+#X text 119 751 - send a message after a time delay;
+#X obj 19 781 metro;
+#X text 119 781 - send a message periodically;
+#X obj 19 811 line;
+#X text 119 811 - send a series of linearly stepped numbers;
+#X obj 19 841 timer;
+#X text 119 841 - measure time intervals;
+#X obj 19 871 cputime;
+#X text 119 871 - measure CPU time;
+#X obj 19 901 realtime;
+#X text 119 901 - measure real time;
+#X obj 19 931 pipe;
+#X text 119 931 - dynamically growable delay line for numbers;
+#X text 209 990 - arithmetic;
+#X text 210 1013 - relational tests;
+#X text 189 1037 - bit twiddling;
+#X obj 20 1066 mtof;
+#X obj 20 1088 ftom;
+#X obj 61 1066 powtodb;
+#X obj 129 1065 rmstodb;
+#X obj 61 1087 dbtopow;
+#X obj 129 1087 dbtorms;
+#X text 211 1079 - convert acoustical units;
+#X obj 19 1111 mod;
+#X obj 50 1111 div;
+#X obj 81 1111 sin;
+#X obj 112 1111 cos;
+#X obj 143 1111 tan;
+#X obj 19 1132 atan;
+#X obj 59 1132 atan2;
+#X obj 108 1132 sqrt;
+#X obj 148 1132 log;
+#X obj 179 1132 exp;
+#X obj 210 1132 abs;
+#X text 250 1123 - higher math;
+#X obj 19 1155 random;
+#X text 119 1155 - lower math;
+#X obj 19 1178 max;
+#X obj 51 1178 min;
+#X text 119 1178 - greater or lesser of 2 numbers;
+#X obj 19 1201 clip;
+#X text 119 1201 - force a number into a range;
+#X obj 16 1251 notein;
+#X obj 75 1251 ctlin;
+#X obj 126 1251 pgmin;
+#X obj 176 1251 bendin;
+#X obj 235 1251 touchin;
+#X obj 16 1274 polytouchin;
+#X obj 120 1274 midiin;
+#X obj 179 1274 sysexin;
+#X text 318 1263 - MIDI input;
+#X obj 19 1317 noteout;
+#X obj 87 1317 ctlout;
+#X obj 147 1317 pgmout;
+#X obj 206 1317 bendout;
+#X obj 19 1338 touchout;
+#X obj 97 1338 polytouchout;
+#X obj 210 1338 midiout;
+#X text 318 1327 - MIDI output;
+#X obj 20 1370 makenote;
+#X text 109 1368 - schedule a delayed "note off" message corresponding
+to a note-on;
+#X obj 19 1402 stripnote;
+#X text 112 1403 - strip "note off" messages;
+#X obj 17 1441 tabread;
+#X text 117 1441 - read a number from a table;
+#X obj 17 1463 tabread4;
+#X text 117 1463 - read a number from a table;
+#X obj 17 1485 tabwrite;
+#X text 117 1485 - write a number to a table;
+#X obj 17 1508 soundfiler;
+#X text 117 1508 - read and write tables to soundfiles;
+#X obj 19 1558 loadbang;
+#X text 119 1558 - bang on load;
+#X obj 19 1584 serial;
+#X text 119 1584 - serial device control for NT only;
+#X obj 19 1612 netsend;
+#X text 119 1612 - send messages over the internet;
+#X obj 19 1633 netreceive;
+#X text 119 1633 - receive them;
+#X obj 19 1663 qlist;
+#X text 119 1663 - message sequencer;
+#X obj 19 1693 textfile;
+#X text 119 1693 - file to message converter;
+#X obj 19 1723 openpanel;
+#X text 119 1723 - "Open" dialog;
+#X obj 19 1746 savepanel;
+#X text 119 1746 - "Save as" dialog;
+#X obj 19 1783 bag;
+#X text 119 1783 - set of numbers;
+#X obj 19 1813 poly;
+#X text 119 1813 - polyphonic voice allocation;
+#X obj 19 1843 key;
+#X obj 53 1843 keyup;
+#X text 119 1843 - numeric key values from keyboard;
+#X obj 19 1866 keyname;
+#X text 119 1866 - symbolic key name;
+#X text 144 1960 - arithmetic on audio signals;
+#X text 116 1992 - maximum or minimum of 2 inputs;
+#X obj 16 2022 clip~;
+#X text 116 2022 - constrict signal to lie between two bounds;
+#X obj 16 2052 q8_rsqrt~;
+#X text 116 2052 - cheap reciprocal square root (beware -- 8 bits!)
+;
+#X obj 16 2082 q8_sqrt~;
+#X text 116 2082 - cheap square root (beware -- 8 bits!);
+#X obj 16 2112 wrap~;
+#X text 116 2112 - wraparound (fractional part;
+#X obj 16 2142 fft~;
+#X text 116 2142 - complex forward discrete Fourier transform;
+#X obj 16 2172 ifft~;
+#X text 116 2172 - complex inverse discrete Fourier transform;
+#X obj 16 2202 rfft~;
+#X text 116 2202 - real forward discrete Fourier transform;
+#X obj 16 2232 rifft~;
+#X text 116 2232 - real inverse discrete Fourier transform;
+#X obj 16 2262 framp~;
+#X text 116 2262 - output a ramp for each block;
+#X obj 16 2292 mtof~;
+#X obj 67 2292 ftom~;
+#X obj 117 2292 rmstodb~;
+#X obj 195 2292 dbtorms~;
+#X obj 273 2292 rmstopow~;
+#X obj 359 2292 powtorms~;
+#X text 448 2293 - acoustic conversions;
+#X obj 20 2355 dac~;
+#X text 120 2355 - audio output;
+#X obj 20 2385 adc~;
+#X text 120 2385 - audio input;
+#X obj 20 2415 sig~;
+#X text 120 2415 - convert numbers to audio signals;
+#X obj 20 2445 line~;
+#X text 120 2445 - generate audio ramps;
+#X obj 20 2475 vline~;
+#X text 120 2475 - deluxe line~;
+#X obj 20 2535 snapshot~;
+#X text 120 2535 - sample a signal (convert it back to a number);
+#X obj 20 2565 vsnapshot~;
+#X text 120 2565 - deluxe snapshot~;
+#X obj 20 2595 bang~;
+#X text 120 2595 - send a bang message after each DSP block;
+#X obj 20 2625 samplerate~;
+#X text 120 2625 - get the sample rate;
+#X obj 20 2655 send~;
+#X text 120 2655 - nonlocal signal connection with fanout;
+#X obj 20 2685 receive~;
+#X text 120 2685 - get signal from send~;
+#X obj 20 2715 throw~;
+#X text 120 2715 - add to a summing bus;
+#X obj 20 2745 catch~;
+#X text 120 2745 - define and read a summing bus;
+#X obj 20 2775 block~;
+#X text 120 2775 - specify block size and overlap;
+#X obj 20 2805 switch~;
+#X text 120 2805 - switch DSP computation on and off;
+#X obj 20 2835 readsf~;
+#X text 120 2835 - soundfile playback from disk;
+#X obj 20 2865 writesf~;
+#X text 120 2865 - record sound to disk;
+#X obj 17 2927 phasor~;
+#X text 117 2927 - sawtooth oscillator;
+#X obj 17 2957 cos~;
+#X text 117 2957 - cosine;
+#X obj 17 2987 osc~;
+#X text 117 2987 - cosine oscillator;
+#X obj 17 3017 tabwrite~;
+#X text 117 3017 - write to a table;
+#X obj 17 3047 tabplay~;
+#X text 117 3047 - play back from a table (non-transposing);
+#X obj 17 3077 tabread~;
+#X text 117 3077 - non-interpolating table read;
+#X obj 17 3107 tabread4~;
+#X text 117 3107 - four-point interpolating table read;
+#X obj 17 3137 tabosc4~;
+#X text 117 3137 - wavetable oscillator;
+#X obj 17 3167 tabsend~;
+#X text 117 3167 - write one block continuously to a table;
+#X obj 17 3197 tabreceive~;
+#X text 117 3197 - read one block continuously from a table;
+#X text 18 3228 -------------------- AUDIO FILTERS ------------------------
+;
+#X obj 18 3258 vcf~;
+#X text 118 3258 - voltage controlled filter;
+#X obj 18 3288 noise~;
+#X text 118 3288 - white noise generator;
+#X obj 18 3318 env~;
+#X text 118 3318 - envelope follower;
+#X obj 18 3348 hip~;
+#X text 118 3348 - high pass filter;
+#X obj 18 3378 lop~;
+#X text 118 3378 - low pass filter;
+#X obj 18 3408 bp~;
+#X text 118 3408 - band pass filter;
+#X obj 18 3438 biquad~;
+#X text 118 3438 - raw filter;
+#X obj 18 3468 samphold~;
+#X text 118 3468 - sample and hold unit;
+#X obj 18 3498 print~;
+#X text 118 3498 - print out one or more "blocks";
+#X obj 18 3528 rpole~;
+#X text 118 3528 - raw real-valued one-pole filter;
+#X obj 18 3558 rzero~;
+#X text 118 3558 - raw real-valued one-zero filter;
+#X obj 18 3588 rzero_rev~;
+#X text 121 3588 - time-reversed;
+#X obj 18 3618 cpole~;
+#X obj 77 3618 czero~;
+#X text 214 3618 - corresponding complex-valued filters;
+#X text 18 3648 -------------------- AUDIO DELAY ------------------------
+;
+#X obj 18 3678 delwrite~;
+#X text 118 3678 - write to a delay line;
+#X obj 18 3708 delread~;
+#X text 118 3708 - read from a delay line;
+#X obj 18 3738 vd~;
+#X text 118 3738 - read from a delay line at a variable delay time
+;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X restore 18 3798 pd;
+#X text 118 3798 - define a subwindow;
+#X obj 18 3828 table;
+#X text 118 3828 - array of numbers in a subwindow;
+#X obj 18 3858 inlet;
+#X text 118 3858 - add an inlet to a pd;
+#X obj 18 3888 outlet;
+#X text 118 3888 - add an outlet to a pd;
+#X obj 18 3918 inlet~;
+#X obj 78 3918 outlet~;
+#X obj 18 3978 struct;
+#X text 118 3978 - define a data structure;
+#X obj 18 4008 drawcurve;
+#X obj 106 4008 filledcurve;
+#X text 219 4008 - draw a curve;
+#X obj 18 4038 drawpolygon;
+#X obj 123 4038 filledpolygon;
+#X text 253 4038 - draw a polygon;
+#X obj 18 4068 plot;
+#X text 118 4068 - plot an array field;
+#X obj 18 4098 drawnumber;
+#X text 118 4098 - print a numeric value;
+#X obj 18 4158 pointer;
+#X text 118 4158 - point to an object belonging to a template;
+#X obj 18 4188 get;
+#X text 118 4188 - get numeric fields;
+#X obj 18 4218 set;
+#X text 118 4218 - change numeric fields;
+#X obj 18 4248 element;
+#X text 118 4248 - get an array element;
+#X obj 18 4278 getsize;
+#X text 118 4278 - get the size of an array;
+#X obj 18 4308 setsize;
+#X text 118 4308 - change the size of an array;
+#X obj 18 4338 append;
+#X text 118 4338 - add an element to a list;
+#X obj 18 4368 sublist;
+#X obj 14 4449 scalar;
+#X text 104 4448 - draw a scalar on parent;
+#X obj 15 4479 scope~;
+#X text 115 4479 (use tabwrite~ now);
+#X obj 15 4509 namecanvas;
+#X obj 15 4539 template;
+#X text 115 4539 (use struct now);
+#X obj 136 3618 czero_rev~;
+#X text 20 2324 ------------- AUDIO GLUE ----------------------------
+;
+#X obj 20 2505 threshold~;
+#X text 120 2505 - detect signal thresholds;
+#X text 16 1930 ---------------------- AUDIO MATH -----------------------
+;
+#X text 17 1419 --------------------- TABLES -------------------------
+;
+#X text 18 1539 --------------------- MISC ----------------------;
+#X text 20 961 ------------------------- MATH -----------------;
+#X text 19 721 ------------------------- TIME --------------------------
+;
+#X text 17 1232 ------------------------ MIDI -------------------------
+;
+#X text 24 120 --------------- GLUE ----------------;
+#X text 18 3768 ------------------------ SUBWINDOWS ------------------------
+;
+#X text 18 3948 ---------------------- DATA TEMPLATES ----------------------
+;
+#X text 18 4128 ---------------------- ACCESSING DATA ----------------------
+;
+#X text 17 2897 ------------ AUDIO OSCILLATORS AND TABLES -------------
+;
+#X obj 57 1992 min~;
+#X obj 16 1992 max~;
+#X obj 19 1014 ==;
+#X obj 51 1014 !=;
+#X obj 83 1014 >;
+#X obj 115 1014 <;
+#X obj 146 1014 >=;
+#X obj 177 1014 <=;
+#X text 18 4410 ------------------------ OBSOLETE --------------------------
+;
+#X obj 51 991 -;
+#X obj 84 991 *;
+#X obj 116 991 /;
+#X obj 149 991 pow;
+#X obj 19 991 +;
+#X obj 19 1037 &;
+#X obj 47 1037 &&;
+#X obj 74 1038 |;
+#X obj 102 1038 ||;
+#X obj 129 1038 %;
+#X obj 16 1960 +~;
+#X obj 48 1960 -~;
+#X obj 79 1960 *~;
+#X obj 111 1960 /~;
+#X obj 19 1895 declare;
+#X text 119 1895 - set search path and/or load libraries;
+#X text 156 3919 - signal versions;
+#X text 23 22 The following is a list of built-in objects in Pd. (Not
+included in this list are messages \, atoms \, graphs \, etc. which
+aren't typed into object boxes but come straight off the "add" menu.)
+Right-click (or double-click on a Macintosh) on any object to get its
+"help window".;
+#X text 118 4368 - get a pointer into a list within a scalar;
diff --git a/doc/pddp/key-help.pd b/doc/pddp/key-help.pd
index 5b238af2..eca1350c 100644
--- a/doc/pddp/key-help.pd
+++ b/doc/pddp/key-help.pd
@@ -1,81 +1,111 @@
-#N canvas 274 90 707 580 12;
-#X obj 107 541 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 104 74 This object does not accept arguments of any type.;
-#N canvas 85 22 597 608 More_Info 0;
-#X text 31 23 OBJECT OUTLETS;
-#N canvas 176 22 575 461 reacting_to_user_input 0;
-#X text 27 18 REACTING TO USER INPUT;
-#X text 41 49 Most \, if not all \, programming environments provide
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 5 GENRE help;
+#X text 12 85 DESCRIPTION get input from the keyboard;
+#X text 12 25 NAME key;
+#X text 12 125 OUTLET_0 float;
+#X text 12 45 KEYWORDS control user_input;
+#X text 12 225 RELEASE_VERSION;
+#X text 12 205 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 41 125 Pd's [key] \, [keyup] \, and [keyname] are complimented
+#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 42 201 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 55 272 onKeyUp;
-#X text 55 253 onKeyDown;
-#X text 55 291 onKeyPress;
-#X text 42 322 hmmm...wouldn't it be great if Pd also gave us onChange
+#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 restore 47 506 pd reacting_to_user_input;
-#X obj 37 61 key;
-#X obj 16 135 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 37 118 5 0 0 0 - - -;
-#X obj 31 268 keyup;
-#X obj 18 323 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 39 306 5 0 0 0 - - -;
-#X text 88 208 Also note that key combinations \, such as SHIFT+7 produce
-a different result than SHIFT or 7 alone.;
-#X text 88 323 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 89 54 The number at this 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 text 88 267 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 89 119 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 21 392 keyname;
-#X obj 21 449 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 70 480 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 76 458 10 0 0 0 - - -;
-#X floatatom 18 421 5 0 0 0 - - -;
-#X text 90 388 This object captures both the "keydown" and "keyup"
-events. The left inlet produces a 1 when a key goes down \, and a zero
-when the key goes up. The right outlet produces a symbol which represents
-the name of the key.;
-#N canvas 174 22 571 511 some_keyboard_fun 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 [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 388 30 r keyboard_fun;
+#X obj 228 30 r keyboard_fun;
#X msg 52 105 read keyboard_fun.txt;
#X msg 45 51 rewind;
-#X obj 388 112 symbol add2;
-#X obj 388 83 t b s;
-#X obj 388 138 pack s s;
-#X obj 388 164 route list;
+#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 388 57 symbol;
+#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;
@@ -95,67 +125,11 @@ the name of the key.;
#X connect 13 0 8 0;
#X connect 15 0 2 0;
#X connect 16 0 11 0;
-#X restore 47 532 pd some_keyboard_fun;
-#X connect 2 0 3 0;
-#X connect 2 0 4 0;
-#X connect 5 0 7 0;
-#X connect 5 0 6 0;
-#X connect 13 0 17 0;
-#X connect 13 1 16 0;
-#X connect 16 0 15 0;
-#X connect 17 0 14 0;
-#X restore 107 491 pd More_Info;
-#N canvas 85 22 397 246 Related_Objects 0;
-#X text 25 8 Native Pd Objects;
-#X text 25 92 Externals and other object libraries;
-#X obj 61 129 gemkeyboard;
-#X obj 62 159 gemkeyname;
-#X restore 107 465 pd Related_Objects;
-#X text 35 53 INLETS:;
-#X text 6 75 ARGUMENTS:;
-#X text 26 94 OUTLETS:;
-#X text 17 170 EXAMPLES:;
-#X text 18 463 SEE ALSO:;
-#X obj 8 8 cnv 15 180 30 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 28 14 key;
-#X obj 63 14 keyup;
-#X obj 114 14 keyname;
-#X text 195 15 - GRAB KEYBOARD;
-#X text 104 53 None;
-#X text 104 94 Please see the following sub-patch called "More_Info"
-for detailed information about the objects' outlets. The outlets of
-this 'object group' provide Pd with information about keystrokes on
-your computer's keyboard.;
-#X obj 108 174 key;
-#X floatatom 108 201 3 0 0 0 - - -;
-#X floatatom 147 200 3 0 0 0 - - -;
-#X obj 147 174 keyup;
-#X floatatom 201 200 3 0 0 0 - - -;
-#X obj 201 174 keyname;
-#X symbolatom 252 199 10 0 0 0 - - -;
-#X text 109 248 To see this example in action \, simply type something
-on your keyboard.;
-#X obj 108 225 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 147 225 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 201 225 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 110 291 [key] and [keyup] report the (system dependent) numbers
-of "printing" keys of the keyboard. [keyname] gives the symbolic name
-of the key \, with a 1 if it's up or 0 if it's down \, and works with
-non-printing keys like shift or "F1".;
-#X text 111 362 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.;
-#X text 155 542 - Dave Sabine \, July 11 \, 2003;
-#X obj 281 514 pddp/pddplink all_about_hid.pd -text all_about_hid;
-#X text 105 515 for more on HIDs:;
+#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 18 0 25 0;
-#X connect 19 0 26 0;
-#X connect 20 0 19 0;
-#X connect 21 0 27 0;
-#X connect 22 0 21 0;
-#X connect 22 1 23 0;
+#X connect 17 0 19 0;
diff --git a/doc/pddp/keyname-help.pd b/doc/pddp/keyname-help.pd
new file mode 100644
index 00000000..04a9b809
--- /dev/null
+++ b/doc/pddp/keyname-help.pd
@@ -0,0 +1,140 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 225 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 5 GENRE help;
+#X text 12 85 DESCRIPTION get input and key name from the keyboard
+;
+#X text 12 25 NAME keyname;
+#X text 12 125 OUTLET_0 float;
+#X text 12 145 OUTLET_1 symbol;
+#X text 12 45 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/doc/pddp/keyup-help.pd b/doc/pddp/keyup-help.pd
new file mode 100644
index 00000000..5f5b046f
--- /dev/null
+++ b/doc/pddp/keyup-help.pd
@@ -0,0 +1,138 @@
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 225 RELEASE_VERSION 0.41.4;
+#X text 12 205 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 5 GENRE help;
+#X text 12 85 DESCRIPTION get input from the keyboard on key release
+;
+#X text 12 25 NAME keyup;
+#X text 12 125 INLET_0 float;
+#X text 12 45 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/doc/pddp/line-help.pd b/doc/pddp/line-help.pd
index d0766995..c688ef62 100644
--- a/doc/pddp/line-help.pd
+++ b/doc/pddp/line-help.pd
@@ -1,102 +1,42 @@
-#N canvas 81 22 779 506 10;
-#X obj 3 29 line;
-#X text 38 29 -- ramp generator;
-#X text 5 59 [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 text 5 147 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 following works:;
-#X obj 10 262 line;
-#X msg 44 238 1000;
-#X msg 10 238 1000;
-#X obj 10 195 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 10 215 t b b;
-#X floatatom 10 284 5 0 0 0 - - -;
-#X obj 151 270 line;
-#X msg 151 246 1000;
-#X obj 151 226 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 151 292 5 0 0 0 - - -;
-#X text 5 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 5 435 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 390 41 [line] will accept a list of two numbers. The first
-in the list will be assigned as the new target \, the second in the
-list will be the new time (duration of the ramp) as below:;
-#X obj 376 7 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 376 471 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 409 215 line;
-#X msg 409 127 1000 1000;
-#X floatatom 409 236 5 0 0 0 - - -;
-#X text 475 126 ramp up.;
-#X msg 418 150 0 1000;
-#X text 465 150 ramp down.;
-#X msg 430 194 stop;
-#X text 390 86 [line] will also accept the "stop" message which effectively
-halt the current ramp.;
-#N canvas 51 105 536 509 continuous_ramps 0;
-#X text 29 44 [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 immediatly created to the new target value
-starting from the "current" value.;
-#X text 27 105 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 34 254 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 64 212 stop;
-#X msg 57 192 42;
-#X obj 31 233 line;
-#X msg 31 151 127 5000;
-#X msg 49 172 0 5000;
-#X text 18 23 CONTINUOUS RAMPS;
-#X text 24 278 Due to this unique behavior \, a common construct found
-in Pd patches includes the [pack] object as follows:;
-#X obj 38 399 line;
-#X floatatom 38 420 10 0 0 0 - - -;
-#X floatatom 38 313 5 0 0 0 - - -;
-#X obj 38 379 pack f 500;
-#X msg 49 332 50;
-#X msg 57 353 2000;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 2 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 13 0 10 0;
-#X connect 14 0 13 0;
-#X connect 15 0 13 0;
-#X restore 403 290 pd continuous_ramps;
-#X text 152 196 While this does NOT work unless;
-#X text 150 206 you click "500" first.;
-#X msg 185 246 500;
-#X msg 426 173 42;
-#X text 452 174 jumps to this value immediately.;
-#X text 467 194 stops the current ramp.;
-#X text 388 316 More information about [line] can be found in the Pure
-Documentation folder doc/3.audio.examples.;
-#X text 401 451 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 393 354 RELATED OBJECTS;
-#X obj 413 373 line~;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS signal time;
+#X text 12 85 DESCRIPTION ramp generator;
+#X text 12 25 NAME line;
+#X text 12 125 INLET_0 float list stop;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 265 RELEASE_VERSION;
+#X text 12 245 RELEASE_DATE 1997;
+#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~;
@@ -111,59 +51,217 @@ is:;
;
#X text 14 141 or;
#X text 15 155 iem.kug.ac.at/pdb/;
-#X restore 522 373 pd related_objects_from_other_libraries;
-#N canvas 0 22 462 536 grain_rate_and_creation_arguments 0;
-#X text 20 18 GRAIN RATE;
-#X text 32 38 The "grain rate" of [line] is the rate at which it will
+#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 33 144 This means simply that [line] will output a new value
+#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 33 125 The default grain rate is 20 milliseconds.;
-#X text 30 192 [line]'s optional creation arguments can be used to
+#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 32 247 First creation argument is the initial value: the starting
+#X text 21 248 First creation argument is the initial value: the starting
point of the first ramp.;
-#X text 31 286 The second creation argument sets the grain rate. Observe
+#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 44 417 line 0 5;
-#X obj 47 450 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+#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 147 346 127;
-#X msg 179 354 0;
-#X obj 146 382 pack f 5000;
-#X obj 214 450 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+#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 211 417 line 0 500;
-#X connect 7 0 8 0;
-#X connect 9 0 11 0;
-#X connect 10 0 11 0;
-#X connect 11 0 7 0;
-#X connect 11 0 13 0;
-#X connect 13 0 12 0;
-#X restore 403 263 pd grain_rate_and_creation_arguments;
-#X obj 3 3 cnv 5 770 20 empty empty line 20 10 1 18 -233017 -66577
-0;
-#X obj 463 373 vline~;
-#X connect 4 0 9 0;
-#X connect 5 0 4 1;
-#X connect 6 0 4 0;
-#X connect 7 0 8 0;
-#X connect 8 0 6 0;
-#X connect 8 1 5 0;
-#X connect 10 0 13 0;
-#X connect 11 0 10 0;
+#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 connect 17 0 18 0;
-#X connect 19 0 21 0;
-#X connect 20 0 19 0;
-#X connect 23 0 19 0;
-#X connect 25 0 19 0;
-#X connect 30 0 10 1;
-#X connect 31 0 19 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/doc/pddp/line~-help.pd b/doc/pddp/line~-help.pd
new file mode 100644
index 00000000..10caf32d
--- /dev/null
+++ b/doc/pddp/line~-help.pd
@@ -0,0 +1,105 @@
+#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 276 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal time conversion;
+#X text 12 85 DESCRIPTION audio ramp generator;
+#X text 12 25 NAME line~;
+#X text 12 145 INLET_1 list;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 125 INLET_0 float list stop;
+#X text 12 265 RELEASE_VERSION;
+#X text 12 245 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 489 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 text 98 493 (none);
+#N canvas 107 479 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 vline~;
+#X obj 82 43 line;
+#X text 8 2 [line~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 285 cnv 17 3 90 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 284 float;
+#X text 98 310 list;
+#X obj 78 461 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 386 cnv 17 3 55 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 385 float;
+#X obj 478 3 line~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/line~ -text
+pdpedia: line~;
+#X obj 66 210 snapshot~;
+#X obj 66 164 line~;
+#X floatatom 66 233 0 0 0 0 - - -;
+#X obj 108 187 metro 100;
+#X msg 66 66 1 1000;
+#X text 121 65 a pair of numbers starts a ramp;
+#X msg 126 113 2;
+#X text 158 113 a single number jumps to value;
+#X msg 124 138 stop;
+#X text 167 137 "stop" message freezes line~ at its current value;
+#X msg 93 113 0;
+#X msg 76 88 0 5000;
+#X obj 108 164 loadbang;
+#X text 98 364 stop;
+#X text 98 460 signal;
+#X text 167 385 - stores a duration in milliseconds until the next
+target value is sent to the left inlet. Unlike most other objects in
+Pd \, the value is only stored until it is used with this target value
+to start the ramp-- after that point the right inlet is reset (to zero).
+;
+#X text 11 23 audio ramp generator;
+#X text 168 310 - [line~] takes a two-element list to start a new ramp.
+The first element specifies the target value \, and the second one
+sets the duration in milliseconds. (Lists with more than two elements
+will be truncated.);
+#X text 168 284 - a float to the left inlet of [line~] will cause the
+output to jump immediately to the target value.;
+#X text 168 364 - the stop message freezes [line~] at its current value.
+;
+#X text 168 460 - the outgoing signal is the linear ramp.;
+#X text 179 201 The [line~] object generates linear ramps whose levels
+and timing are determined by messages you send it. The messages may
+be a single target value (causing the output to jump to the target)
+or a target and a time in milliseconds (to start a new ramp).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 547 pddp/pddplink ../3.audio.examples/A03.line.pd/ -text
+doc/3.audio.examples/A03.line.pd;
+#X obj 98 562 pddp/pddplink ../3.audio.examples/A04.line2.pd/ -text
+doc/3.audio.examples/A04.line2.pd;
+#X text 98 521 More information about [line] can be found in the Pure
+Documentation folder doc/3.audio.examples:;
+#X obj 98 577 pddp/pddplink ../3.audio.examples/C05.sampler.oneshot.pd
+-text doc/3.audio.examples/C05.sampler.oneshot.pd;
+#X connect 17 0 19 0;
+#X connect 18 0 17 0;
+#X connect 20 0 17 0;
+#X connect 21 0 18 0;
+#X connect 23 0 18 0;
+#X connect 25 0 18 0;
+#X connect 27 0 18 0;
+#X connect 28 0 18 0;
+#X connect 29 0 20 0;
diff --git a/doc/pddp/list-help.pd b/doc/pddp/list-help.pd
new file mode 100644
index 00000000..770817d3
--- /dev/null
+++ b/doc/pddp/list-help.pd
@@ -0,0 +1,629 @@
+#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 110 PLATFORM windows macosx gnulinux;
+#X text 12 130 LIBRARY internal;
+#X text 12 170 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 70 LICENSE SIBSD;
+#X text 12 150 AUTHOR Miller Puckette;
+#X text 12 230 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 90 DESCRIPTION building and using variable-length messages
+;
+#X text 12 25 NAME list append list prepend list trim list split list
+length;
+#X text 12 50 KEYWORDS control storage needs_work list_op symbol_op
+;
+#X text 12 5 GENRE help;
+#X text 12 190 RELEASE_DATE 2005;
+#X text 12 210 RELEASE_VERSION;
+#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/doc/pddp/loadbang-help.pd b/doc/pddp/loadbang-help.pd
index ec4ea27d..38bcc8d7 100644
--- a/doc/pddp/loadbang-help.pd
+++ b/doc/pddp/loadbang-help.pd
@@ -1,97 +1,131 @@
-#N canvas 2 1 603 598 12;
-#X text 108 18 - SEND "bang" AUTOMATICALLY WHEN PATCH LOADS.;
-#X obj 126 218 loadbang;
-#X obj 126 385 loadbang;
-#X obj 126 410 metro 1000;
-#X obj 126 434 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 126 266 f 1;
-#X obj 169 266 f 4;
-#X obj 126 291 +;
-#X floatatom 126 315 5 0 0 0 - - -;
-#X obj 126 241 t b b;
-#X obj 104 540 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 21 18 loadbang;
-#X text 104 464 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm
-;
-#X text 104 53 The inlet is inactive and serves no purpose.;
-#X text 104 81 This object does not accept arguments of any type.;
-#X text 104 112 A "bang" message is sent automatically when the containing
-patch is loaded.;
-#X text 104 161 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 104 344 In this example \, [loadbang] was used simply to start
-a process automatically when this patch was loaded.;
-#X text 152 541 - Dave Sabine \, November 12 \, 2002;
-#N canvas 85 2 579 656 More_Info 0;
-#X obj 25 152 print foo;
-#X obj 25 104 loadbang;
-#X text 14 188 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 26 355 f;
-#X floatatom 26 380 2 0 0 0 - - -;
-#X obj 65 355 f;
-#X floatatom 65 380 2 0 0 0 - - -;
-#X obj 105 355 f;
-#X floatatom 104 380 2 0 0 0 - - -;
-#X obj 26 263 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 195 316 random 10;
-#X obj 104 317 random 10;
-#X text 14 415 IMPORTANT;
-#X text 44 600 c:/pd/pd.exe -noloadbang;
-#X text 14 10 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 104 283 loadbang;
-#X obj 288 317 random 10;
-#X text 14 438 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 14 523 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 msg 25 127 you have opened the [loadbang] help document;
-#X connect 1 0 19 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 15 0 11 0;
-#X connect 15 0 10 0;
-#X connect 15 0 16 0;
-#X connect 16 0 7 1;
-#X connect 19 0 0 0;
-#X restore 104 514 pd More_Info;
-#N canvas 85 2 389 238 Related_Objects 0;
-#X obj 44 49 bang;
-#X obj 102 51 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 143 48 trigger;
-#X text 25 8 Native Pd Objects;
-#X text 25 92 Externals and other object libraries;
-#X text 36 126 [init];
-#X restore 104 488 pd Related_Objects;
-#X text 38 53 INLETS:;
-#X text 14 82 ARGUMENTS:;
-#X text 29 112 OUTLETS:;
-#X text 20 161 EXAMPLES:;
-#X text 21 463 SEE ALSO:;
-#X connect 1 0 9 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 5 0 7 0;
-#X connect 6 0 7 1;
-#X connect 7 0 8 0;
-#X connect 9 0 5 0;
-#X connect 9 1 6 0;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 5 GENRE help;
+#X text 12 85 DESCRIPTION send "bang" automatically when patch loads
+;
+#X text 12 25 NAME loadbang;
+#X text 12 125 OUTLET_0 bang;
+#X text 12 45 KEYWORDS control bang_op;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#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/doc/pddp/log-help.pd b/doc/pddp/log-help.pd
new file mode 100644
index 00000000..6c2f4a69
--- /dev/null
+++ b/doc/pddp/log-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 log 3 12 0 18 -204280
+-1 0;
+#X obj 0 439 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION natural logarithm of a number;
+#X text 12 25 NAME log;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 541 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 545 (none);
+#N canvas 86 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 obj 208 42 abs;
+#X obj 236 42 sqrt;
+#X obj 271 42 pow;
+#X obj 56 75 cos~;
+#X obj 88 75 osc~;
+#X obj 22 75 expr;
+#X obj 22 42 sin;
+#X obj 48 42 cos;
+#X obj 75 42 tan;
+#X obj 108 42 atan;
+#X obj 143 42 atan2;
+#X text 7 1 [log] Related Objects;
+#X obj 181 42 exp;
+#X restore 101 597 pd Related_objects;
+#X obj 78 448 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 447 float;
+#X text 98 467 list;
+#X text 98 512 float;
+#X obj 78 513 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 239 217 0 0 0 0 - - -;
+#X floatatom 239 160 0 0 0 0 - - -;
+#X text 94 274 [log] will output the natural logarithm (base E) of
+a number. The value of zero will produce "-1000" which represents "negative
+infinity".;
+#X obj 239 190 log;
+#X obj 493 3 log;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/log -text
+pdpedia: log;
+#X text 11 23 natural logarithm of a number;
+#X text 168 467 - a list will be truncated \, and the first element
+will be used as input.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 15 0 17 0;
+#X connect 17 0 14 0;
diff --git a/doc/pddp/loop~-help.pd b/doc/pddp/loop~-help.pd
new file mode 100644
index 00000000..955db385
--- /dev/null
+++ b/doc/pddp/loop~-help.pd
@@ -0,0 +1,171 @@
+#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 loop~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 343 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 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION phase generator for looping samplers;
+#X text 12 25 NAME loop~;
+#X text 12 125 INLET_0 float signal bang set;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 145 INLET_1 signal float;
+#X text 12 185 OUTLET_1 signal;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 497 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 544 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 569 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 352 cnv 17 3 95 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 548 (none);
+#N canvas 81 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 [loop~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X text 98 351 signal;
+#X obj 78 504 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 504 signal;
+#X obj 481 3 loop~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/loop~ -text
+pdpedia: loop~;
+#X obj 78 456 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 379 float;
+#X text 98 407 bang;
+#X text 98 425 set;
+#X text 98 455 signal;
+#X text 98 475 float;
+#X text 11 23 phase generator for looping samplers;
+#X text 168 351 - signal input sets the transposition level (1 is normal
+\, 2 is up an octave \, etc.).;
+#X text 168 379 - a float sets the transposition level (1 is normal
+\, 2 is up an octave \, etc.).;
+#X text 168 407 - reset the phase to zero.;
+#X text 168 425 - the set message followed by a number sets the phase
+(e.g. \, "set 0.5").;
+#X text 168 455 - set the window size in samples.;
+#X text 168 475 - set the window size in samples.;
+#X floatatom 33 46 0 0 0 0 - - -;
+#X obj 270 210 print~;
+#X msg 270 180 bang;
+#X obj 33 171 loop~;
+#X floatatom 60 117 0 0 0 0 - - -;
+#X msg 47 93 bang;
+#X obj 199 210 print~;
+#X msg 199 180 bang;
+#X obj 32 210 *~;
+#X obj 32 321 dac~;
+#X obj 32 298 hip~ 5;
+#X obj 78 214 samphold~;
+#X obj 32 233 +~;
+#X floatatom 78 139 0 0 0 0 - - -;
+#X obj 78 162 *~ 1000;
+#X msg 39 70 set 0.5;
+#X text 96 69 set phase (0 to 1);
+#X text 96 94 reset phase to 0;
+#X text 96 116 right signal input is window size in samples;
+#X text 116 138 here's how to handle onsets;
+#X obj 32 277 *~;
+#X floatatom 158 244 0 0 0 0 - - -;
+#X obj 158 313 line~;
+#X obj 158 267 dbtorms;
+#X obj 158 290 pack 0 50;
+#X text 184 243 output level 0-100;
+#X text 203 159 print outputs;
+#X text 61 45 transposition (1 is normal \, 2 is up an octave \, etc)
+;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 150000 float 0;
+#X coords 0 1 150000 -1 100 75 1;
+#X restore 390 127 graph;
+#X obj 308 321 soundfiler;
+#N canvas 100 385 428 186 About_[loop~] 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 [loop~] More info;
+#X text 20 108 You can send "bang" or "set" message to force the phase
+to zero--you should mute the output before doing so. This may be desirable
+if you've set a large window size but then want to decrease it without
+waiting for the next phase crossing.;
+#X text 20 38 [loop~] takes input signals to set a window size and
+transposition \, and outputs a phase and a sampled window size. The
+window size only changes at phase zero crossings and the phase output
+is adjusted so that changing window size doesn't change the transposition.
+;
+#X restore 102 575 pd About_[loop~];
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 78 524 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 524 signal;
+#X obj 32 256 tabread4~ \$0-array;
+#X msg 390 210 resize 150000;
+#X obj 390 232 s \$0-array;
+#X obj 308 235 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 308 255 f \$0;
+#X msg 308 277 read ../doc/sound/bell.aiff \$1-array;
+#X obj 338 235 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 338 255 f \$0;
+#X msg 318 299 read ../doc/sound/vocal.aiff \$1-array;
+#X connect 28 0 31 0;
+#X connect 30 0 29 0;
+#X connect 31 0 34 0;
+#X connect 31 0 36 0;
+#X connect 31 0 39 1;
+#X connect 31 1 29 0;
+#X connect 31 1 36 1;
+#X connect 32 0 31 1;
+#X connect 33 0 31 0;
+#X connect 35 0 34 0;
+#X connect 36 0 40 0;
+#X connect 38 0 37 0;
+#X connect 38 0 37 1;
+#X connect 39 0 40 1;
+#X connect 40 0 63 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 0;
+#X connect 43 0 31 0;
+#X connect 48 0 38 0;
+#X connect 49 0 51 0;
+#X connect 50 0 48 1;
+#X connect 51 0 52 0;
+#X connect 52 0 50 0;
+#X connect 63 0 48 0;
+#X connect 64 0 65 0;
+#X connect 66 0 67 0;
+#X connect 67 0 68 0;
+#X connect 68 0 57 0;
+#X connect 69 0 70 0;
+#X connect 70 0 71 0;
+#X connect 71 0 57 0;
diff --git a/doc/pddp/lop~-help.pd b/doc/pddp/lop~-help.pd
new file mode 100644
index 00000000..d96c1fe6
--- /dev/null
+++ b/doc/pddp/lop~-help.pd
@@ -0,0 +1,96 @@
+#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 lop~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 381 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION one-pole low pass filter;
+#X text 12 25 NAME lop~;
+#X text 12 125 INLET_0 signal clear;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 488 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;
+#X obj 78 390 cnv 17 3 37 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 94 426 428 166 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 69 43 bp~;
+#X obj 117 43 vcf~;
+#X text 22 81 Raw Filters;
+#X obj 73 108 rzero~;
+#X obj 195 108 cpole~;
+#X obj 24 108 rpole~;
+#X obj 122 108 rzero_rev~;
+#X obj 244 108 czero~;
+#X obj 293 108 czero_rev~;
+#X obj 22 43 hip~;
+#X text 8 2 [lop~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 98 389 signal;
+#X obj 78 497 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 497 signal;
+#X obj 147 240 env~;
+#X floatatom 147 263 0 0 0 0 - - -;
+#X floatatom 180 185 0 0 0 0 - - -;
+#X obj 88 240 env~;
+#X floatatom 88 262 0 0 0 0 - - -;
+#X floatatom 88 114 0 0 0 0 - - -;
+#X obj 88 137 osc~ 100;
+#X msg 147 161 clear;
+#X text 168 389 - incoming audio signal.;
+#X obj 78 432 cnv 17 3 45 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 431 float;
+#X text 98 449 list;
+#X text 98 409 clear;
+#X obj 490 3 lop~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/lop~ -text
+pdpedia: lop~;
+#X text 133 112 <- scroll to change input frequency;
+#X obj 147 213 lop~ 5;
+#X text 84 291 Compare the strength of the original signal on the left
+with that of the filtered signal on the right.;
+#X text 11 23 one-pole low pass filter;
+#X text 168 544 - initial rolloff frequency.;
+#X text 168 409 - reinitialize internal state.;
+#X text 168 431 - cutoff frequency in Hz.;
+#X text 168 449 - a list to the right inlet is truncated \, and the
+first element is used as the cutoff frequency.;
+#X text 168 497 - output is the filtered audio signal.;
+#X text 80 544 1) float;
+#X text 191 240 [env~] gives the amplitude of the signal envelop in
+dB.;
+#X text 88 68 [lop~] is a one-pole low pass filter with a specified
+rolloff frequency.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 12 0 13 0;
+#X connect 14 0 28 1;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 18 0 15 0;
+#X connect 18 0 28 0;
+#X connect 19 0 28 0;
+#X connect 28 0 12 0;
diff --git a/doc/pddp/lrshift~-help.pd b/doc/pddp/lrshift~-help.pd
new file mode 100644
index 00000000..5d06b497
--- /dev/null
+++ b/doc/pddp/lrshift~-help.pd
@@ -0,0 +1,87 @@
+#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 lrshift~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 390 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd 0.31. Jonathan Wilkes
+revised the patch to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal block_oriented;
+#X text 12 85 DESCRIPTION shift signal vector elements left or right
+;
+#X text 12 25 NAME lrshift~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 427 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 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 110 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 text 7 1 [lrshift~] Related Objects;
+#X obj 21 41 fft~;
+#X restore 101 597 pd Related_objects;
+#X obj 78 399 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 436 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 469 3 lrshift~;
+#X obj 441 20 pddp/pddplink http://wiki.puredata.info/en/lrshift~ -text
+pdpedia: lrshift~;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-shiftin 64 float 0;
+#X coords 0 1 63 0 100 70 1;
+#X restore 418 158 graph;
+#X msg 418 264 1 1;
+#X obj 418 241 loadbang;
+#X msg 270 275 bang;
+#X obj 246 301 print~;
+#X msg 187 276 bang;
+#X obj 163 302 print~;
+#X msg 94 265 bang;
+#X obj 74 302 print~;
+#X text 167 210 shift left;
+#X text 247 210 shift right;
+#X obj 163 250 lrshift~ 1;
+#X obj 246 249 lrshift~ -1;
+#X text 98 398 signal;
+#X text 98 435 signal;
+#X text 168 435 - acting at whatever vector size the window is running
+at \, lrshift~ shifts samples to the left (toward the beginning sample)
+or to the right. The argument gives the direction and the amount of
+the shift. The rightmost (or leftmost) samples are set to zero.;
+#X text 11 23 shift signal vector elements left or right;
+#X text 168 398 - an incoming signal.;
+#X text 80 520 1) float;
+#X text 168 520 - (integer) sets the direction and amount to shift
+the samples. Negative numbers shift samples the left \, and positive
+numbers shift to the right.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 73 182 tabreceive~ \$0-shiftin;
+#X obj 418 286 s \$0-shiftin;
+#X connect 13 0 35 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 19 0 20 0;
+#X connect 23 0 18 0;
+#X connect 24 0 16 0;
+#X connect 34 0 20 0;
+#X connect 34 0 23 0;
+#X connect 34 0 24 0;
diff --git a/doc/pddp/makefilename-help.pd b/doc/pddp/makefilename-help.pd
index b1c8f9f8..311b9401 100644
--- a/doc/pddp/makefilename-help.pd
+++ b/doc/pddp/makefilename-help.pd
@@ -1,138 +1,306 @@
-#N canvas 173 51 581 575 10;
-#X obj 104 539 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 8 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 104 483 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm
-;
-#N canvas 135 30 516 644 More_Info 0;
-#X text 17 4 COMMON USES;
-#X text 15 577 INNOVATIVE USES;
-#X text 47 19 I believe that this object was developed first to allow
+#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 makefilename 3 12
+0 18 -204280 -1 0;
+#X obj 0 197 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Dave Sabine \, Hans-Christoph Steiner.
+Jonathan Wilkes revised the patch to conform to the PDDP template for
+Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION format a string with a variable field;
+#X text 12 25 NAME makefilename;
+#X text 12 125 INLET_0 float symbol;
+#X text 12 145 OUTLET_0 symbol;
+#X text 12 45 KEYWORDS control conversion needs_work symbol_op;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 337 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 374 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 497 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 75 446 428 187 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 [makefilename] Related Objects;
+#X obj 21 42 symbol;
+#X obj 71 42 int;
+#X obj 102 42 float;
+#X obj 152 42 openpanel;
+#X obj 19 96 pddp/helplink zexy/makesymbol;
+#X obj 19 116 pddp/helplink cyclone/sprintf;
+#X obj 19 136 pddp/helplink cxc/ascseq;
+#X text 19 74 Externals;
+#X restore 101 597 pd Related_objects;
+#X obj 78 206 cnv 17 3 120 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 205 float;
+#X obj 78 346 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 444 3 makefilename;
+#X obj 415 20 pddp/pddplink http://wiki.puredata.info/en/makefilename
+-text pdpedia: makefilename;
+#X floatatom 49 64 0 0 0 0 - - -;
+#X text 81 143 numbered filenames;
+#X symbolatom 49 122 0 0 0 0 - - -;
+#X obj 49 91 makefilename soundfile%d.aif;
+#X obj 304 102 symbol;
+#X msg 304 54 dave;
+#X msg 343 54 drums;
+#X msg 400 54 Pd;
+#X msg 437 55 cool;
+#X obj 304 126 makefilename %s_PD.aif;
+#X symbolatom 304 150 0 0 0 0 - - -;
+#X text 168 205 - if a number (integer) is sent to the inlet \, the
+argument should be written with a "%c" \, "%d" \, or "%X" which represents
+the location of the incoming variable number in the outgoing symbol.
+Floats will be converted to integers.;
+#X text 98 255 symbol;
+#X text 98 296 list;
+#X text 98 345 symbol;
+#X text 169 392 - this object generates symbols according to a format
+string (the argument) \, for use as a series of filenames \, table
+names \, etc. Variables for numbers can be specified by using "%s"
+\, "%c" \, "%d" \, or "%X" in the string (see subpatch below). For
+variable symbols \, use "%s". No checking is done. Each [makefilename]
+object can have only one variable.;
+#X text 168 255 - if a symbol is sent to the inlet \, the argument
+should be written with a "%s" which represents the location of the
+incoming variable symbol in the outgoing symbol.;
+#X text 98 572 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm;
+#N canvas 74 23 428 594 More_Info 0;
+#X text 20 33 I believe that this object was developed first to allow
PD to generate sequential file names - perhaps to be used in conjunction
with [soundfiler] or [openpanel]. For example \, an audio loop recorder
might generate a continuous series of sound files to be saved on a
hard drive...like below:;
-#X obj 53 125 f;
-#X symbolatom 53 166 0 0 0 0 - - -;
-#X obj 82 125 + 1;
-#X obj 53 145 makefilename file-%d.aif;
-#X text 20 430 LIMITATIONS;
-#N canvas 175 22 599 615 spaces_and_multiple_variables 0;
-#X text 25 19 Instead of using spaces \, an underscore will often produce
-a tolerable compromise.;
-#X obj 210 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 23 127 f;
+#X symbolatom 23 168 0 0 0 0 - - -;
+#X obj 52 127 + 1;
+#X obj 23 147 makefilename file-%d.aif;
+#X obj 23 104 bng 18 250 50 0 empty empty start 22 9 1 12 -90049 -1
+-1;
+#X symbolatom 61 358 0 0 0 0 - - -;
+#X obj 64 309 hsl 150 18 0 122 0 1 empty empty ASCII_range 2 9 1 12
+-262131 -1 -1 6800 0;
+#X floatatom 30 360 3 0 0 0 - - -;
+#X text 19 514 - only one printf pattern can be used at once;
+#X text 19 476 - This object does not provide advanced formatting and
+parsing abilities. For example \, you cannot use spaces or odd characters
+in the argument.;
+#X text 19 567 - non-printable ASCII characters show up as a little
+box.;
+#X symbolatom 264 358 0 0 0 0 - - -;
+#X obj 267 309 hsl 150 18 0 255 0 1 empty empty 0_to_FF 2 9 1 12 -262131
+-1 -1 5100 0;
+#X obj 264 338 makefilename hex=%X;
+#X floatatom 233 360 3 0 0 0 - - -;
+#X obj 61 338 makefilename ASCII=%c;
+#X text 29 381 Watch out! ASCII characters 123 and 125 (curly braces)
+lock up Pd. Also \, reserved characters that Pd uses show up with a
+backslash in front of them (comma \, semi-colon \, and backslash).
+;
+#X text 19 530 - currently \, floats are not supported via the printf
+%f pattern. You can only display the integer part of the float using
+%d or %X.;
+#X text 20 189 This file name could be used when saving the audio to
+disk.;
+#X text 20 251 The %c pattern allows you to convert ASCII numbers to
+the respective character. The %X converts the decimal number to hexadecimal.
+Both %c and %X only use integers. For floats \, everything to the right
+of the decimal is discarded.;
+#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 [makefilename] Common Uses;
+#X obj 2 216 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 8 216 Conversions;
+#X obj 2 442 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 8 442 Limitations;
+#X connect 1 0 3 0;
+#X connect 1 0 4 0;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 5 0 1 0;
+#X connect 7 0 16 0;
+#X connect 7 0 8 0;
+#X connect 13 0 14 0;
+#X connect 13 0 15 0;
+#X connect 14 0 12 0;
+#X connect 16 0 6 0;
+#X restore 100 506 pd More_Info;
+#N canvas 105 144 428 318 all_possible_patterns 0;
+#X text 33 86 %c;
+#X text 110 86 character;
+#X text 33 106 %d or %i;
+#X text 110 106 signed decimal integer;
+#X text 33 126 %e;
+#X text 110 126 scientific notation using "e" character;
+#X text 33 146 %E;
+#X text 110 146 scientific notation using "e" character;
+#X text 33 166 %f;
+#X text 33 186 %o;
+#X text 110 186 signed octal;
+#X text 33 206 %s;
+#X text 110 206 symbol;
+#X text 33 226 %u;
+#X text 110 226 unsigned integer;
+#X text 33 246 %x;
+#X text 110 246 unsigned hexadecimal in lowercase;
+#X text 33 266 %X;
+#X text 110 266 unsigned hexadecimal in CAPS;
+#X text 33 286 %p;
+#X text 110 286 unsigned hexadecimal in lowercase preceeded by "0x"
+;
+#X text 20 37 This is a listing of all possible printf patterns used
+in Pd's [makefilename]:;
+#X text 110 166 decimal floating point (currently broken);
+#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 [makefilename] All Possible Patterns;
+#X restore 100 474 pd all_possible_patterns;
+#N canvas 80 12 428 594 spaces_and_multiple_variables 0;
+#X obj 223 71 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 210 64 f;
-#X symbolatom 210 119 0 0 0 0 - - -;
-#X obj 243 64 + 1;
-#X obj 210 91 makefilename I_am_%d_years_old.;
-#X text 28 143 With careful planning \, multiple variables can be incorporated
+#X obj 223 90 f;
+#X symbolatom 223 135 0 0 0 0 - - -;
+#X obj 256 90 + 1;
+#X obj 223 112 makefilename I_am_%d_years_old.;
+#X text 20 197 With careful planning \, multiple variables can be incorporated
using a stack of [makefilename]s. In the example below \, let's assume
that this tool is used to generate file names for an audio loop recorder
which operates 24 hours per day \, every day.;
-#X obj 31 235 loadbang;
-#X obj 31 280 metro 200;
-#X obj 31 261 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 25 265 loadbang;
+#X obj 25 305 metro 200;
+#X obj 25 286 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
-#X obj 64 305 + 1;
-#X obj 209 349 route 0 1 2 3 4 5 6;
-#X obj 31 354 mod 24;
-#X floatatom 31 379 5 0 0 0 - - -;
-#X floatatom 31 329 0 0 0 0 - - -;
-#X obj 31 305 f;
-#X obj 53 405 sel 0;
-#X obj 218 269 f;
-#X obj 250 269 + 1;
-#X obj 218 294 mod 7;
-#X obj 218 322 pack f f;
-#X obj 230 498 makefilename Monday_%d.wav;
-#X symbolatom 65 548 0 0 0 0 - - -;
-#X obj 334 374 makefilename Saturday_%d.wav;
-#X obj 314 399 makefilename Friday_%d.wav;
-#X obj 290 326 t b f;
-#X obj 293 424 makefilename Thursday_%d.wav;
-#X obj 272 449 makefilename Wednesday_%d.wav;
-#X obj 251 474 makefilename Tuesday_%d.wav;
-#X obj 209 522 makefilename Sunday_%d.wav;
-#X text 81 377 hour of day;
-#X text 79 330 total hours;
-#X text 199 549 Crude...but effective.;
-#X obj 31 455 s dayHour;
-#X obj 53 430 s weekDay;
-#X obj 218 236 r weekDay;
-#X obj 290 300 r dayHour;
-#X text 284 271 loop through weekdays;
-#X connect 1 0 2 0;
-#X connect 2 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 2 1;
-#X connect 5 0 3 0;
-#X connect 7 0 9 0;
-#X connect 8 0 15 0;
-#X connect 9 0 8 0;
-#X connect 10 0 15 1;
-#X connect 11 0 29 0;
-#X connect 11 1 21 0;
-#X connect 11 2 28 0;
-#X connect 11 3 27 0;
-#X connect 11 4 26 0;
-#X connect 11 5 24 0;
-#X connect 11 6 23 0;
-#X connect 12 0 13 0;
-#X connect 13 0 16 0;
-#X connect 13 0 33 0;
-#X connect 14 0 12 0;
-#X connect 15 0 10 0;
-#X connect 15 0 14 0;
-#X connect 16 0 34 0;
-#X connect 17 0 18 0;
-#X connect 17 0 19 0;
-#X connect 18 0 17 1;
-#X connect 19 0 20 0;
-#X connect 20 0 11 0;
-#X connect 21 0 22 0;
-#X connect 23 0 22 0;
-#X connect 24 0 22 0;
-#X connect 25 0 20 0;
-#X connect 25 1 20 1;
-#X connect 26 0 22 0;
-#X connect 27 0 22 0;
-#X connect 28 0 22 0;
-#X connect 29 0 22 0;
-#X connect 35 0 17 0;
-#X connect 36 0 25 0;
-#X restore 47 605 pd spaces_and_multiple_variables;
-#X obj 53 90 bng 30 250 50 0 empty empty start 1 15 1 12 -90049 -1
+#X obj 58 330 + 1;
+#X obj 153 369 route 0 1 2 3 4 5 6;
+#X obj 25 379 mod 24;
+#X floatatom 25 404 5 0 0 0 - - -;
+#X floatatom 25 354 0 0 0 0 - - -;
+#X obj 25 330 f;
+#X obj 47 430 sel 0;
+#X obj 162 289 f;
+#X obj 194 289 + 1;
+#X obj 162 314 mod 7;
+#X obj 162 342 pack f f;
+#X obj 168 518 makefilename Monday_%d.wav;
+#X symbolatom 29 568 0 0 0 0 - - -;
+#X obj 248 394 makefilename Saturday_%d.wav;
+#X obj 232 419 makefilename Friday_%d.wav;
+#X obj 234 346 t b f;
+#X obj 216 444 makefilename Thursday_%d.wav;
+#X obj 200 469 makefilename Wednesday_%d.wav;
+#X obj 184 494 makefilename Tuesday_%d.wav;
+#X obj 153 542 makefilename Sunday_%d.wav;
+#X text 65 402 hour of day;
+#X text 63 355 total hours;
+#X text 153 569 Crude...but effective.;
+#X obj 25 480 s dayHour;
+#X obj 47 455 s weekDay;
+#X obj 162 266 r weekDay;
+#X obj 234 320 r dayHour;
+#X text 228 291 loop through weekdays;
+#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 [makefilename] Spaces and Multiple Variables;
+#X symbolatom 22 115 0 0 0 0 - - -;
+#X obj 22 93 makefilename one%ctwo;
+#X msg 22 71 32;
+#X text 51 70 ascii character 32 (space);
+#X text 19 37 A symbol that includes a space will not be saved. An
+underscore will often produce a tolerable compromise.;
+#X obj 22 151 route symbol;
+#X obj 22 172 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
-#N canvas 475 61 519 621 help_with_interfaces 0;
-#X text 17 16 Building user interfaces in Pd is a difficult balance
+#X text 72 115 this symbol won't load;
+#X text 72 130 properly if saved.;
+#X text 41 171 but it's a valid symbol;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 0 4 0;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 6 0 8 0;
+#X connect 7 0 14 0;
+#X connect 8 0 7 0;
+#X connect 9 0 14 1;
+#X connect 10 0 28 0;
+#X connect 10 1 20 0;
+#X connect 10 2 27 0;
+#X connect 10 3 26 0;
+#X connect 10 4 25 0;
+#X connect 10 5 23 0;
+#X connect 10 6 22 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 12 0 32 0;
+#X connect 13 0 11 0;
+#X connect 14 0 9 0;
+#X connect 14 0 13 0;
+#X connect 15 0 33 0;
+#X connect 16 0 17 0;
+#X connect 16 0 18 0;
+#X connect 17 0 16 1;
+#X connect 18 0 19 0;
+#X connect 19 0 10 0;
+#X connect 20 0 21 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 0;
+#X connect 24 0 19 0;
+#X connect 24 1 19 1;
+#X connect 25 0 21 0;
+#X connect 26 0 21 0;
+#X connect 27 0 21 0;
+#X connect 28 0 21 0;
+#X connect 34 0 16 0;
+#X connect 35 0 24 0;
+#X connect 39 0 44 0;
+#X connect 40 0 39 0;
+#X connect 41 0 40 0;
+#X connect 44 0 45 0;
+#X restore 100 529 pd spaces_and_multiple_variables;
+#N canvas 58 29 463 530 help_with_interfaces 0;
+#X text 21 32 Building user interfaces in Pd is a difficult balance
between usability and performance. Pd is not winning any awards for
usability - let's face it: it's powerful \, it's cool \, and that's
the way we like it. You're not here because you want a colourful \,
bevelled interface...you want the raw power that object oriented languages
provide mixed with a few of the conveniences that a graphic environment
affords.;
-#X obj 17 269 cnv 15 450 300 empty empty empty 20 12 0 14 -261681 -66577
+#X obj 6 221 cnv 15 450 300 empty empty empty 20 12 0 14 -261681 -66577
0;
-#X obj 45 379 tgl 15 0 s_dsp empty DSP 18 7 0 8 -262144 -1 -1 0 1;
-#X obj 45 424 vsl 15 128 0 127 0 0 v_slider empty Volume 18 7 0 8 -262144
+#X obj 34 331 tgl 15 0 s_dsp empty DSP 18 7 0 8 -262144 -1 -1 0 1;
+#X obj 34 376 vsl 15 128 0 127 0 0 v_slider empty Volume 18 7 0 8 -262144
-1 -1 0 1;
-#X obj 45 401 bng 15 250 50 0 b_panel empty Open_File 18 7 0 8 -262144
+#X obj 34 353 bng 15 250 50 0 b_panel empty Open_File 18 7 0 8 -262144
-1 -1;
-#X obj 40 280 cnv 15 400 20 empty d_canvas DSP:OFF 20 12 0 8 -233017
+#X obj 29 232 cnv 15 400 20 empty d_canvas DSP:OFF 20 12 0 8 -233017
-66577 0;
-#X obj 40 302 cnv 15 400 20 empty f_canvas FILE_OPEN:/Users/hans/cvs/pure-data/doc/pddp/all_about_lists_vs_anythings.pd
+#X obj 29 254 cnv 15 400 20 empty f_canvas FILE_OPEN:/Users/hans/cvs/pure-data/doc/pddp/all_about_lists_vs_anythings.pd
20 12 0 8 -233017 -66577 0;
-#X obj 40 324 cnv 15 400 20 empty v_canvas VOLUME:99/100 20 12 0 8
+#X obj 29 276 cnv 15 400 20 empty v_canvas VOLUME:42/100 20 12 0 8
-233017 -66577 0;
-#X text 187 361 The grey canvases above could;
-#X text 189 383 be used like "status bars" to;
-#X text 189 404 write relevant information to;
-#X text 186 460 [makefilename] helps to format;
-#X text 188 484 the information in a meaningful;
-#X text 189 505 way.;
-#X text 187 426 the screen.;
-#N canvas 217 22 478 328 look_inside 0;
+#X text 176 313 The grey canvases above could;
+#X text 178 335 be used like "status bars" to;
+#X text 178 356 write relevant information to;
+#X text 175 412 [makefilename] helps to format;
+#X text 177 436 the information in a meaningful;
+#X text 178 457 way.;
+#X text 176 378 the screen.;
+#N canvas 57 187 430 328 look_inside 0;
#X obj 199 14 r b_panel;
#X obj 235 166 r v_slider;
#X obj 36 236 s d_canvas;
@@ -169,133 +337,29 @@ affords.;
#X connect 16 0 4 0;
#X connect 17 0 18 0;
#X connect 18 0 16 0;
-#X restore 40 350 pd look_inside;
-#X text 18 156 However \, there are times when sacrifices must be made
+#X restore 29 302 pd look_inside;
+#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 [makefilename] Help with Interfaces;
+#X text 21 137 However \, there are times when sacrifices must be made
in the area of performance to provide users with on-screen reporting
\, record keeping \, and sometimes even a few 'pleasantries'. Consider
-the following examples - but always weight the pros and cons when incorporating
+the following examples - but always weigh the pros and cons when incorporating
these types of interfaces. Performance vs. Usability.;
-#X restore 298 605 pd help_with_interfaces;
-#X symbolatom 86 345 0 0 0 0 - - -;
-#X obj 90 296 hsl 150 18 0 122 0 1 empty empty ASCII_range 2 9 1 12
--262131 -1 -1 7400 0;
-#X floatatom 45 347 3 0 0 0 - - -;
-#X text 45 488 - only one printf pattern can be used at once;
-#X text 45 445 - This object does not provide advanced formatting and
-parsing abilities. For example \, you cannot use spaces or odd characters
-in the argument.;
-#X text 45 550 - non-printable ASCII characters show up as a little
-box.;
-#X text 22 209 CONVERSIONS;
-#X symbolatom 299 345 0 0 0 0 - - -;
-#X obj 303 296 hsl 150 18 0 255 0 1 empty empty 0_to_FF 2 9 1 12 -262131
--1 -1 6000 0;
-#X obj 299 325 makefilename hex=%X;
-#X floatatom 258 347 3 0 0 0 - - -;
-#X obj 86 325 makefilename ASCII=%c;
-#X text 44 378 Watch out! ASCII characters 123 and 125 (curly braces)
-lock up Pd. Also \, reserved characters that Pd uses show up with a
-backslash in front of them (comma \, semi-colon \, and backslash).
-;
-#X text 45 507 - currently \, floats are not supported via the printf
-%f pattern. You can only display the integer part of the float using
-%d or %X.;
-#X text 47 187 This file name could be used when saving the audio to
-disk.;
-#X text 35 222 The %c pattern allows you to convert ASCII numbers to
-the respective character. The %X converts the decimal number to hexadecimal.
-Both %c and %X only use integers. For floats \, everything to the right
-of the decimal is discarded.;
-#X connect 3 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 3 1;
-#X connect 6 0 4 0;
-#X connect 9 0 3 0;
-#X connect 12 0 22 0;
-#X connect 12 0 13 0;
-#X connect 19 0 20 0;
-#X connect 19 0 21 0;
-#X connect 20 0 18 0;
-#X connect 22 0 11 0;
-#X restore 106 507 pd More_Info;
-#N canvas 85 22 401 250 Related_Objects 0;
-#X text 25 8 Native Pd Objects;
-#X text 25 92 Externals and other object libraries;
-#X obj 42 46 symbol;
-#X obj 112 46 int;
-#X obj 156 46 openpanel;
-#X obj 31 126 strcat;
-#X obj 30 156 makesymbol;
-#X obj 30 211 ascseq;
-#X obj 30 183 sprintf;
-#X restore 379 507 pd Related_Objects;
-#X text 38 53 INLETS:;
-#X text 15 197 ARGUMENTS:;
-#X text 29 316 OUTLETS:;
-#X text 22 342 EXAMPLES:;
-#X text 21 482 SEE ALSO:;
-#X obj 10 18 makefilename;
-#X text 115 18 - FORMAT A STRING WITH A VARIABLE FIELD.;
-#X text 104 316 Symbol - The output is formatted like "symbol YOURSTRING".
-;
-#X floatatom 114 346 0 0 0 0 - - -;
-#X text 146 425 numbered filenames;
-#X obj 380 391 symbol;
-#X msg 353 343 dave;
-#X msg 412 341 drums;
-#X msg 479 344 Pd;
-#X msg 526 355 cool;
-#X obj 380 415 makefilename %s_PD.aif;
-#X text 109 115 Symbol - If a symbol is sent to the inlet \, the argument
-should be written with a "%s" which represent the location of the incoming
-variable symbol in the outgoing symbol. Lists will be truncated.;
-#X symbolatom 380 439 0 0 0 0 - - -;
-#X symbolatom 114 404 0 0 0 0 - - -;
-#X obj 115 373 makefilename soundfile%d.aif;
-#X text 392 551 updated for Pd 0.38-4;
-#X text 140 538 - Dave Sabine \, Hans-Christoph Steiner;
-#X text 107 198 This object generates symbols according to a format
-string (the argument) \, for use as a series of filenames \, table
-names \, or whatnot. You can plug in a variable number or symbol by
-putting "%s" \, "%c" \, "%d" \, or "%X" in the string. If you use"%s"
-\, be sure to send it a symbol \, the rest take numbers. there' no
-checking. Each [makefilename] object can have only one variable.;
-#X text 108 53 Integer - If a number is sent to the inlet \, the argument
-should be written with a "%c" \, "%d" \, or "%X" which represents the
-location of the incoming variable number in the outgoing symbol. Floats
-will be converted to integers.;
-#N canvas 325 212 532 324 all 0;
-#X text 37 59 %c;
-#X text 114 59 character;
-#X text 37 79 %d or %i;
-#X text 114 79 signed decimal integer;
-#X text 37 99 %e;
-#X text 114 99 scientific notation using "e" character;
-#X text 37 119 %E;
-#X text 114 119 scientific notation using "e" character;
-#X text 37 139 %f;
-#X text 37 159 %o;
-#X text 114 159 signed octal;
-#X text 37 179 %s;
-#X text 114 179 symbol;
-#X text 37 199 %u;
-#X text 114 199 unsigned integer;
-#X text 37 219 %x;
-#X text 114 219 unsigned hexadecimal in lowercase;
-#X text 37 239 %X;
-#X text 114 239 unsigned hexadecimal in CAPS;
-#X text 37 259 %p;
-#X text 114 259 unsigned hexadecimal in lowercase preceeded by "0x"
+#X restore 100 552 pd help_with_interfaces;
+#X text 11 23 format a string with a variable field;
+#X text 168 296 - if the first element of the list matches the variable
+type used \, then the list will be truncated.;
+#X text 168 345 - the output of [makefilename] is always a symbol.
;
-#X text 24 10 This is a listing of all possible printf patterns used
-in Pd's [makefilename]:;
-#X text 114 139 decimal floating point (currently broken);
-#X restore 201 507 pd all possible patterns;
-#X connect 13 0 24 0;
-#X connect 15 0 20 0;
+#X text 80 392 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 318 529 pddp/pddplink all_about_symbol_construction.pd;
+#X connect 13 0 16 0;
#X connect 16 0 15 0;
-#X connect 17 0 15 0;
-#X connect 18 0 15 0;
-#X connect 19 0 15 0;
-#X connect 20 0 22 0;
-#X connect 24 0 23 0;
+#X connect 17 0 22 0;
+#X connect 18 0 17 0;
+#X connect 19 0 17 0;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 23 0;
diff --git a/doc/pddp/makenote-help.pd b/doc/pddp/makenote-help.pd
new file mode 100644
index 00000000..717cd64d
--- /dev/null
+++ b/doc/pddp/makenote-help.pd
@@ -0,0 +1,133 @@
+#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 makenote 3 12 0
+18 -204280 -1 0;
+#X obj 0 281 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 246 494 367 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 225 LIBRARY internal;
+#X text 12 265 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 305 RELEASE_VERSION 0.41.4;
+#X text 12 285 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 245 AUTHOR Miller Puckette;
+#X text 12 325 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION send note-on messages and schedule note-off
+for later;
+#X text 12 25 NAME makenote;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 165 INLET_2 float;
+#X text 12 185 OUTLET_0 float;
+#X text 12 205 OUTLET_1 float;
+#X restore 500 597 pd META;
+#X obj 0 443 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 508 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 108 179 428 410 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 [makenote] Related Objects;
+#X obj 74 80 ctlin;
+#X obj 217 80 pgmin;
+#X obj 24 80 bendin;
+#X obj 79 107 touchin;
+#X obj 261 80 polytouchin;
+#X obj 118 80 midiin;
+#X obj 23 107 sysexin;
+#X obj 179 167 noteout;
+#X obj 76 167 ctlout;
+#X obj 24 167 bendout;
+#X obj 366 167 touchout;
+#X obj 280 167 polytouchout;
+#X obj 123 167 midiout;
+#X obj 231 167 pgmout;
+#X obj 24 221 makenote;
+#X text 21 198 MIDI note construction:;
+#X text 21 140 MIDI output:;
+#X text 21 57 MIDI input:;
+#X obj 184 221 stripnote;
+#X obj 168 80 notein;
+#X text 181 198 MIDI note deconstruction:;
+#X obj 24 33 stripnote;
+#X text 21 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 20 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 21 246 Externals;
+#X obj 21 295 pddp/helplink maxlib/pitch;
+#X obj 21 310 pddp/helplink maxlib/score;
+#X obj 21 325 pddp/helplink maxlib/chord;
+#X obj 21 360 pddp/helplink cyclone/midiformat;
+#X obj 21 375 pddp/helplink cyclone/midiparse;
+#X obj 21 390 pddp/helplink cyclone/midiflush;
+#X restore 101 597 pd Related_objects;
+#X obj 78 290 cnv 17 3 95 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 289 float;
+#X text 98 329 list;
+#X text 98 451 float;
+#X obj 78 452 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 391 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 390 float;
+#X obj 470 3 makenote;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/makenote -text
+pdpedia: makenote;
+#X text 80 59 Makenote makes MIDI-style note-on/note-off pairs \, which
+you can use for MIDI output or to drive note-like processes within
+Pd.;
+#X floatatom 276 163 0 0 0 0 - - -;
+#X floatatom 276 142 0 0 0 0 - - -;
+#X msg 194 119 60;
+#X obj 183 218 print x1;
+#X obj 276 218 print x2;
+#X floatatom 183 97 0 0 0 0 - - -;
+#X msg 234 123 60.5;
+#X text 302 142 "velocity";
+#X text 311 166 duration in milliseconds;
+#X obj 183 191 makenote 3.2 500;
+#X text 168 289 - numbers to the left inlet are "pitches" (MIDI pitch
+numbers) which may be integers or floating point numbers (for microtonal
+pitches).;
+#X msg 130 121 12 2;
+#X text 11 23 send note-on messages and schedule note-off for later
+;
+#X text 168 329 - a list with three elements (pitch \, velocity \,
+duration) will be distributed to the three inlets. You can also send
+a two-element list to use the last duration supplied to [makenote].
+Lists with more than three elements are truncated.;
+#X obj 78 415 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 414 float;
+#X text 158 544 - (optional) initial duration.;
+#X text 158 529 - (optional) initial velocity.;
+#X text 98 474 float;
+#X obj 78 475 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 168 474 - velocity (in milliseconds). After the specified duration
+\, a zero is output.;
+#X text 167 390 - velocity.;
+#X text 167 414 - duration (in milliseconds).;
+#X text 80 529 1) float;
+#X text 80 544 2) float;
+#X text 168 451 - pitch. (It is output again after the specified duration.)
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 18 0 27 2;
+#X connect 19 0 27 1;
+#X connect 20 0 27 0;
+#X connect 23 0 27 0;
+#X connect 24 0 27 0;
+#X connect 27 0 21 0;
+#X connect 27 1 22 0;
+#X connect 29 0 27 0;
diff --git a/doc/pddp/math-help.pd b/doc/pddp/math-help.pd
index 2ff9b793..8eaf0204 100644
--- a/doc/pddp/math-help.pd
+++ b/doc/pddp/math-help.pd
@@ -1,162 +1,104 @@
-#N canvas 3 1 906 656 10;
-#X floatatom 517 224 0 0 0;
-#X floatatom 440 309 0 0 0;
-#X floatatom 440 223 0 0 0;
-#X floatatom 559 464 0 0 0;
-#X floatatom 616 464 0 0 0;
-#X floatatom 710 464 0 0 0;
-#X floatatom 249 242 0 0 0;
-#X floatatom 249 203 0 0 0;
-#X floatatom 478 464 0 0 0;
-#X floatatom 478 414 0 0 0;
-#X floatatom 741 133 0 0 0;
-#X floatatom 648 134 0 0 0;
-#X obj 555 99 sin;
-#X floatatom 432 54 0 0 0;
-#X floatatom 555 133 0 0 0;
-#X obj 432 94 * 6.28319;
-#X obj 432 74 / 360;
-#X obj 648 100 cos;
-#X obj 741 99 tan;
-#X obj 478 444 sqrt;
-#X obj 249 222 atan;
-#X obj 710 445 log;
-#X obj 616 444 exp;
-#X obj 559 444 abs;
-#X obj 440 261 float;
-#X obj 517 261 t b f;
-#X obj 440 289 atan2;
-#X text 32 14 Higher math in Pd --;
-#X obj 162 14 sin;
-#X obj 188 14 cos;
-#X obj 214 14 tan;
-#X obj 241 14 atan;
-#X obj 274 14 atan2;
-#X obj 314 14 exp;
-#X obj 342 14 log;
-#X obj 369 14 abs;
-#X obj 397 14 sqrt;
-#X obj 432 14 pow;
-#X text 495 94 2 x Pi;
-#X text 21 46 Trigonometry functions take input in Radians. To find
-a radian \, simply divide a number by 360 (to make it a fraction of
-a circle) and multiply it by 2(Pi) where Pi is equal to approximately
-3.14159265.;
-#X floatatom 432 114 0 0 0;
-#X text 495 114 Radian;
-#X obj 432 134 s radians;
-#X obj 555 73 r radians;
-#X text 20 139 [tan] will produce a number which represents the tangent
-of an angle.;
-#X text 20 105 [sin] and [cos] will return numbers between -1 and 1:
-the sine and cosine of a number repectively.;
-#X text 20 186 The [atan] object produces the arctangent of a number
-as a numeric value between -Pi/2 and Pi/2.;
-#X text 71 284 The [atan2] object produces the arctangent of the quotient
-of its two arguments. The number produced is a value between Pi and
--Pi and represents the counterclockwise angle in radians (not degrees)
-between the positive X axis and the point (x \, y). Note that the X
-coordinate is passed to the right inlet and the Y coordinate is passed
-to the left inlet.;
-#X text 425 223 Y;
-#X text 506 223 X;
-#X floatatom 759 329 0 0 0;
-#X obj 759 289 /;
-#X obj 759 309 atan;
-#X obj 759 209 r X_Y;
-#X obj 517 309 s X_Y;
-#X obj 517 288 pack f f;
-#X obj 759 228 unpack f f;
-#X obj 759 247 swap;
-#X text 585 223 This example on the;
-#X text 584 239 right is an alternative;
-#X text 584 257 of finding the arctangent;
-#X text 584 274 of two coordinates \, but;
-#X text 585 291 it runs slightly slower;
-#X text 585 307 than [atan2].;
-#X text 782 290 Y;
-#X text 746 290 X;
-#X floatatom 795 268 0 0 0;
-#X floatatom 759 268 0 0 0;
-#X obj 6 169 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 846 184 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 8 368 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 848 383 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 782 463 0 0 0;
-#X text 19 392 [sqrt] will output the square root of a number. Negative
-numbers are ignored.;
-#X text 416 391 [abs] will output the absolute value of a number.;
-#X text 611 488 i;
-#X text 418 491 [exp] will output the value of E where E is Euler's
-constant and i is the value of the inlet.;
-#X text 18 427 [log] will output the natural logarithm (base E) of
-a number. The value of zero will produce "-1000" which represents "negative
-infinity".;
-#X obj 782 443 pow 2;
-#X floatatom 807 423 0 0 0;
-#X text 17 474 [pow] is used to exponentiate a number. 2 to the power
-of 2 = 4 The right inlet or creation argument is the exponent while
-the left inlet is the base.;
-#X obj 10 515 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 850 530 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 16 537 RELATED OBJECTS;
-#X obj 18 557 cos~;
-#X obj 50 557 osc~;
-#X obj 18 577 +;
-#X text 40 577 Other Math Objects;
-#X obj 18 597 <;
-#X text 41 597 Math/Binary operators;
-#X obj 84 557 expr;
-#X text 420 563 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 connect 0 0 25 0;
-#X connect 2 0 24 0;
-#X connect 7 0 20 0;
-#X connect 9 0 19 0;
-#X connect 9 0 23 0;
-#X connect 9 0 22 0;
-#X connect 9 0 21 0;
-#X connect 9 0 78 0;
-#X connect 12 0 14 0;
-#X connect 13 0 16 0;
-#X connect 15 0 40 0;
-#X connect 16 0 15 0;
-#X connect 17 0 11 0;
-#X connect 18 0 10 0;
-#X connect 19 0 8 0;
-#X connect 20 0 6 0;
-#X connect 21 0 5 0;
-#X connect 22 0 4 0;
-#X connect 23 0 3 0;
-#X connect 24 0 26 0;
-#X connect 24 0 55 0;
-#X connect 25 0 24 0;
-#X connect 25 1 26 1;
-#X connect 25 1 55 1;
-#X connect 26 0 1 0;
-#X connect 40 0 42 0;
-#X connect 43 0 12 0;
-#X connect 43 0 17 0;
-#X connect 43 0 18 0;
-#X connect 51 0 52 0;
-#X connect 52 0 50 0;
-#X connect 53 0 56 0;
-#X connect 55 0 54 0;
-#X connect 56 0 57 0;
-#X connect 56 1 57 1;
-#X connect 57 0 67 0;
-#X connect 57 1 66 0;
-#X connect 66 0 51 1;
-#X connect 67 0 51 0;
-#X connect 68 0 69 0;
-#X connect 70 0 71 0;
-#X connect 78 0 72 0;
-#X connect 79 0 78 1;
-#X connect 81 0 82 0;
+#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 (math_functions)
+3 12 0 18 -204280 -1 0;
+#X obj 0 325 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS 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. Revised by Jonathan Wilkes to conform to the PDDP template.;
+#X text 12 85 DESCRIPTION higher math in Pd;
+#X text 12 25 NAME sin cos tan atan atan2 exp log abs sqrt pow;
+#X text 12 5 GENRE help;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X text 12 45 KEYWORDS control trigonometry;
+#X restore 500 597 pd META;
+#X obj 0 448 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 484 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 532 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 (math) Related Objects;
+#X obj 22 42 osc~;
+#X obj 58 42 cos~;
+#X obj 96 42 exp~;
+#X obj 134 42 log~;
+#X obj 172 42 abs~;
+#X obj 210 42 sqrt~;
+#X obj 254 42 pow~;
+#X restore 102 598 pd Related_objects;
+#X obj 78 334 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 333 float;
+#X text 98 352 list;
+#X text 98 456 float;
+#X obj 78 457 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 higher math in Pd;
+#X obj 252 3 sin;
+#X obj 278 3 cos;
+#X obj 304 3 tan;
+#X obj 331 3 atan;
+#X obj 364 3 atan2;
+#X obj 404 3 exp;
+#X obj 432 3 log;
+#X obj 459 3 abs;
+#X obj 487 3 sqrt;
+#X obj 522 3 pow;
+#X obj 464 20 pddp/pddplink http://wiki.puredata.info/en/math -text
+pdpedia: math;
+#X text 123 139 For individual help patches \, follow the links below:
+;
+#X obj 252 87 sin;
+#X floatatom 252 61 5 0 0 0 - - -;
+#X floatatom 252 114 5 0 0 0 - - -;
+#X text 168 333 - the incoming value;
+#X text 168 352 - a list will be truncated.;
+#X obj 124 171 sin;
+#X obj 124 201 cos;
+#X obj 124 231 tan;
+#X obj 124 261 atan;
+#X obj 124 291 atan2;
+#X obj 314 171 exp;
+#X obj 314 201 log;
+#X obj 314 231 abs;
+#X obj 314 261 sqrt;
+#X obj 314 291 pow;
+#X obj 169 171 pddp/pddplink sin-help.pd;
+#X obj 169 201 pddp/pddplink cos-help.pd;
+#X obj 169 231 pddp/pddplink tan-help.pd;
+#X obj 169 261 pddp/pddplink atan-help.pd;
+#X obj 169 291 pddp/pddplink atan2-help.pd;
+#X obj 359 171 pddp/pddplink exp-help.pd;
+#X obj 359 201 pddp/pddplink log-help.pd;
+#X obj 359 231 pddp/pddplink abs-help.pd;
+#X obj 359 261 pddp/pddplink sqrt-help.pd;
+#X obj 359 291 pddp/pddplink pow-help.pd;
+#X text 168 456 - the outgoing value.;
+#X text 98 488 The [pow] object accepts one float argument to initialize
+the right inlet. All other math functions listed here take no arguments.
+;
+#X text 217 551 - binary arithmetic operators;
+#X obj 98 551 pddp/pddplink operators-help.pd;
+#X text 217 571 - relational and logical operators;
+#X obj 98 571 pddp/pddplink otherbinops-help.pd;
+#X text 98 369 (The [pow] object takes a bang \, which will output
+the previous value.);
+#X text 97 403 (Note: The [atan2] and [pow] objects have a right inlet.
+See their respective help patches (links above) for more info.);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 26 0 28 0;
+#X connect 27 0 26 0;
diff --git a/doc/pddp/max-help.pd b/doc/pddp/max-help.pd
new file mode 100644
index 00000000..7c107bde
--- /dev/null
+++ b/doc/pddp/max-help.pd
@@ -0,0 +1,81 @@
+#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 max 3 12 0 18 -204280
+-1 0;
+#X obj 0 364 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 246 494 368 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION choose the greater of two values;
+#X text 12 25 NAME max;
+#X text 12 125 INLET_0 float list bang;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 482 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 524 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 94 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 23 42 min;
+#X text 8 3 [max] Related Objects;
+#X obj 63 42 clip;
+#X restore 102 597 pd Related_objects;
+#X obj 78 373 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 426 list;
+#X text 98 490 float;
+#X obj 78 491 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 454 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 453 float;
+#X text 78 544 1) float;
+#X text 98 372 bang;
+#X text 98 397 float;
+#X text 168 544 - initializes the value of the right inlet.;
+#X floatatom 186 168 5 0 0 0 - - -;
+#X floatatom 186 222 5 0 0 0 - - -;
+#X floatatom 228 168 5 0 0 0 - - -;
+#X floatatom 316 168 5 0 0 0 - - -;
+#X floatatom 316 223 5 0 0 0 - - -;
+#X text 11 23 choose the greater of two values;
+#X obj 497 3 max;
+#X obj 469 20 pddp/pddplink http://wiki.puredata.info/en/max -text
+pdpedia: max;
+#X obj 159 168 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 168 372 - output the last value.;
+#X obj 186 195 max;
+#X obj 316 195 max 5;
+#X text 168 397 - the incoming value is output if it is greater than
+the value at the right inlet.;
+#X text 168 424 - a list will be distributed to the inlets.;
+#X text 168 453 - a float to the right inlet is stored.;
+#X text 168 490 - the two values at each inlet are compared \, and
+the greater value is output.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 18 0 28 0;
+#X connect 20 0 28 1;
+#X connect 21 0 29 0;
+#X connect 26 0 28 0;
+#X connect 28 0 19 0;
+#X connect 29 0 22 0;
diff --git a/doc/pddp/message-help.pd b/doc/pddp/message-help.pd
new file mode 100644
index 00000000..fbe8e0ca
--- /dev/null
+++ b/doc/pddp/message-help.pd
@@ -0,0 +1,266 @@
+#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 message_box 3 12
+0 18 -204280 -1 0;
+#X obj 0 191 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 244 494 344 META 0;
+#X text 12 95 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 55 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 115 INLET_0 anything set add add2 addcomma addsemi adddollar
+adddollsym;
+#X text 12 145 OUTLET_0 anything;
+#X text 12 75 DESCRIPTION clickable message box;
+#X text 12 25 KEYWORDS control GUI nonlocal symbol_op list_op anything_op
+bang_op;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 336 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 386 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 549 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 100 481 428 109 Related_objects 0;
+#X obj 116 43 list;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X msg 12 3;
+#X text 40 2 Related Objects;
+#X obj 22 43 symbol;
+#X obj 72 43 float;
+#X restore 102 597 pd Related_objects;
+#X obj 78 200 cnv 17 3 125 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 345 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X msg 482 3;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/message -text
+pdpedia: message;
+#X text 98 57 Message boxes hold one or more message. Anytime the message
+box receives any message at all \, the messages in the box are all
+sent to their destinations.;
+#X msg 101 141 walk the dog;
+#X obj 101 164 print;
+#N canvas 85 15 428 600 dollarsign_variables 0;
+#X obj 23 156 print;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X msg 12 3;
+#X text 40 2 Dollarsign Variables in Message Boxes;
+#X text 20 38 You can use "dollarsign variables" to make variable messages.
+Just use a dollarsign followed by a number-- "\$1" \, "\$2" \, etc.
+The numbers (starting from one) specify which element of the incoming
+message should replace the variable in the outgoing message.;
+#X msg 23 131 pitch \$3;
+#X text 115 106 a list with three numbers;
+#X msg 23 106 list 24 48 72;
+#X text 83 131 replace "\$3" with the third element;
+#X text 84 145 of the incoming message ("72");
+#X msg 23 235 24 48 72;
+#X text 83 235 implicit list with three numbers;
+#X msg 23 258 pitch \$3;
+#X obj 23 280 print;
+#X text 83 258 third element is still "72";
+#X text 20 303 It's important to note that you can't access the selector
+of the message using the dollarsign variables. (In the patch above
+\, "list" is the selector \, "24" is the first element \, and so on.)
+Keep this in mind when using custom selectors \, as in the following:
+;
+#X msg 23 368 melody 67 67 67 63;
+#X text 153 369 In this message \, "melody" is the selector \,;
+#X text 153 384 and there are four elements (not five).;
+#X msg 23 404 pitch \$4;
+#X obj 23 490 print;
+#X text 85 404 replace "\$4" with the fourth element ("63");
+#X msg 41 456 pitch \$5;
+#X msg 41 430 melody 65 65 65 62;
+#X text 163 435 this will output an error--;
+#X text 163 449 there is no 5th element!;
+#X text 20 180 Remember that the selectors "list" and "float" can be
+omitted when the first atom in a message is a float. For example \,
+the following still works exactly as the patch above:;
+#X text 21 514 Multiple dollarsign variables may be used together:
+;
+#X obj 25 576 print;
+#X msg 25 533 22 8 1791;
+#X msg 25 555 \$1-\$2-\$3.wav;
+#X connect 5 0 0 0;
+#X connect 7 0 5 0;
+#X connect 10 0 12 0;
+#X connect 12 0 13 0;
+#X connect 16 0 19 0;
+#X connect 19 0 20 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 29 0 30 0;
+#X connect 30 0 28 0;
+#X restore 171 457 pd dollarsign_variables;
+#X text 11 23 clickable message box;
+#X text 98 199 bang;
+#X text 98 213 float;
+#X text 98 227 symbol;
+#X text 98 241 pointer;
+#X text 98 256 anything;
+#X text 168 199 - these message types will cause the message box to
+send its message as output.;
+#N canvas 52 81 428 405 messages_for_changing_the_content_of_a_message_box
+0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X msg 12 3;
+#X text 40 2 Changing Messages;
+#X msg 23 76 set dog;
+#X msg 43 150 add monkey;
+#X msg 48 195 add2 bird;
+#X msg 37 124 set;
+#X msg 31 99 set 1 2 3 skidoo;
+#X text 71 124 "set" with no arguments clears it;
+#X text 85 77 "set" to set contents (numbers and/or symbols);
+#X msg 52 229 addcomma;
+#X msg 56 255 addsemi;
+#X msg 60 312 adddollsym 4-foo;
+#X msg 59 282 adddollar 3;
+#X text 118 229 add a comma;
+#X text 118 254 add a semicolon;
+#X text 137 282 add a dollar-sign argument;
+#X text 167 312 add a dollar-sign-plus-symbol argument;
+#X text 20 37 The following messages may be used to change contents
+of messages boxes:;
+#X text 118 165 plus a terminating semicolon;
+#X text 117 151 "add" to add numbers and/or symbols \,;
+#X text 118 209 the terminating semicolon;
+#X text 117 195 "add2" to add contents without;
+#X msg 23 357;
+#X connect 3 0 23 0;
+#X connect 4 0 23 0;
+#X connect 5 0 23 0;
+#X connect 6 0 23 0;
+#X connect 7 0 23 0;
+#X connect 10 0 23 0;
+#X connect 11 0 23 0;
+#X connect 12 0 23 0;
+#X connect 13 0 23 0;
+#X restore 101 308 pd messages_for_changing_the_content_of_a_message_box
+;
+#X text 98 344 anything;
+#X text 168 344 - a message box will output its message (replacing
+any dollar-sign variables with the relevant elements of the incoming
+message).;
+#X text 81 405 n) float;
+#X text 100 474 comma;
+#X text 100 508 semicolon;
+#N canvas 88 49 428 453 Using_Commas_in_Message_Boxes 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X msg 12 3;
+#X text 40 2 About Commas and Semicolons;
+#X obj 23 136 list length;
+#X floatatom 23 164 5 0 0 3 No_of_atoms - -;
+#X obj 23 94 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 23 114 list append one \, 3;
+#X text 141 115 This list actually contains three atoms:;
+#X text 141 135 1) The symbol "one";
+#X text 141 165 3) The float "3";
+#X text 20 37 Even though they are not be separated by whitespace \,
+semicolons and commas are actually atoms in Pd-- just like float- and
+symbol-atoms. You can see this clearly in the example below:;
+#X text 43 92 <- Click to test;
+#X msg 22 281 Because I do not hope to turn again \, Because I do not
+hope;
+#X obj 22 303 print from_Ash_Wednesday;
+#X text 20 210 In message boxes \, commas and semicolons are used to
+separate one message from another. For example \, there are two messages
+in the message box below. Each is sent separately to the [print] object
+(in the order they were written):;
+#X msg 23 376 1 \, 2 \, 3;
+#X obj 23 398 + 10;
+#X obj 23 422 print sum;
+#X text 20 329 Notice that the comma itself is not included as part
+of the message-- it simply tells Pd where one message ends \, and the
+next begins.;
+#X text 141 150 2) A comma;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 12 0 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X restore 172 490 pd Using_Commas_in_Message_Boxes;
+#N canvas 82 29 428 495 Using_Semicolons_In_Message_Boxes 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X msg 12 3;
+#X obj 24 362 print;
+#X obj 228 291 receive my-receiver-name;
+#X floatatom 228 315 0 0 0 0 - - -;
+#X floatatom 227 362 0 0 0 0 - - -;
+#X obj 227 338 receive another-receiver;
+#X obj 23 191 receive msg2r;
+#X obj 23 217 print after_semi;
+#X obj 23 159 print before_semi;
+#X msg 24 291 \; my-receiver-name 858 \; another-receiver -45;
+#X text 40 2 About Semicolons and Nonlocal Sends;
+#X msg 23 118 this msg comes out the outlet \; msg2r this msg comes
+out of [receive msg2r];
+#X msg 201 441 \; pd dsp 1;
+#X msg 25 441 dsp 1;
+#X obj 25 468 s dsp;
+#X text 85 451 is the same as;
+#X text 22 396 For messages to a single named-object \, however \,
+it is probably clearer to use a message box and a [send] object \,
+but you can judge for yourself:;
+#X text 20 37 Like commas \, semicolons may be used to send multiple
+messages from a single message box. When using a semicolon \, however
+\, the message following the semicolon is re-routed to a named object
+\, such as [receive] \, an array \, or a canvas. The named object is
+specified by the selector of the message ("msg2r" in this example):
+;
+#X text 22 246 To send messages to named objects without first sending
+a message to the outlet \, put an initial semicolon in the message
+box:;
+#X connect 3 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 10 0 2 0;
+#X connect 12 0 9 0;
+#X connect 14 0 15 0;
+#X restore 172 526 pd Using_Semicolons_In_Message_Boxes;
+#X text 168 256 - other messages will cause the message box to send
+its message as output \, except for the "special messages" that are
+used to change the content of a message box. Click the subpatch below
+to view these "special messages":;
+#X text 168 474 - a comma may be used to separate multiple messages:
+;
+#X text 178 508 - a semicolon may be used to send messages nonlocally:
+;
+#X text 168 405 - message boxes can contain any number of float and/or
+symbol arguments. Message boxes may also contain special "dollar-sign
+variables" \, used to grab data from an incoming message. Click the
+subpatch below for more info:;
+#X text 188 141 <- message;
+#X text 141 164 <- object (notice the different border);
+#X text 98 97 Clicking on a message also sends it \, so you can use
+messsage boxes as push buttons. For instance \, click here while watching
+the printout window:;
+#X text 100 420 symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 100 553 pddp/pddplink all_about_messages.pd -text all_about_messages
+;
+#X obj 100 568 pddp/pddplink all_about_symbol_construction.pd -text
+all_about_symbol_construction;
+#X obj 286 553 pddp/pddplink ../2.control.examples/04.messages.pd -text
+doc/2.control.examples/04.messages.pd;
+#X obj 286 568 pddp/pddplink ../2.control.examples/10.more.messages.pd
+-text doc/2.control.examples/10.more.messages.pd;
+#X connect 13 0 14 0;
diff --git a/doc/pddp/metro-help.pd b/doc/pddp/metro-help.pd
index a6ec7ec6..1a5d0337 100644
--- a/doc/pddp/metro-help.pd
+++ b/doc/pddp/metro-help.pd
@@ -1,50 +1,102 @@
-#N canvas 39 7 462 531 10;
-#X obj 22 294 metro 500;
-#X obj 37 13 metro;
-#X floatatom 71 271 4 0 0;
-#X msg 22 176 1;
-#X text 67 185 nonzero number or "bang" to start;
-#X msg 39 223 0;
-#X msg 28 199 bang;
-#X msg 39 245 stop;
-#X text 111 270 right inlet sets the rate in msec per tick.;
-#X text 76 13 -- send "bang" periodically ala metronome.;
-#X text 19 89 [metro]'s left inlet accepts four different messages:
-;
-#X text 22 105 - "bang": starts the metro/turns it on.;
-#X text 22 118 - "stop": stops the metro/turns it off.;
-#X obj 22 317 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 21 45 The metro object sends a series of bangs at a constant
-rate which is defined in milliseconds at the right inlet or in the
-creation argument.;
-#X text 22 131 - Non-Zero number: starts the metro/turns it on.;
-#X text 22 143 - 0 (zero): stops the metro/turns it off.;
-#X text 78 233 zero or "stop" to stop;
-#X text 90 293 optional creation argument initializes rate in msec
-;
-#X text 19 348 RELATED OBJECTS;
-#N canvas 0 0 454 304 related_objects_from_other_libraries 0;
-#X obj 35 27 metroplus;
-#X obj 102 27 t3_metro;
-#X obj 164 27 pulse;
-#X text 18 56 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 17 105 The best places to find information about Pd's libraries
-is:;
-#X text 14 127 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 15 143 or;
-#X text 16 157 iem.kug.ac.at/pdb/;
-#X obj 210 25 exciter;
-#X restore 23 372 pd related_objects_from_other_libraries;
-#X text 18 402 This document 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.;
-#X connect 0 0 13 0;
-#X connect 2 0 0 1;
-#X connect 3 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 5 GENRE help;
+#X text 12 85 DESCRIPTION send a bang periodically ala metronome;
+#X text 12 25 NAME metro;
+#X text 12 165 OUTLET_0 bang;
+#X text 12 145 INLET_1 float;
+#X text 12 125 INLET_0 float bang list stop;
+#X text 12 45 KEYWORDS control time bang_op;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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/doc/pddp/midi-help.pd b/doc/pddp/midi-help.pd
index d29ff215..567e4281 100644
--- a/doc/pddp/midi-help.pd
+++ b/doc/pddp/midi-help.pd
@@ -1,109 +1,103 @@
-#N canvas 52 84 884 477 10;
-#X text 718 77 off;
-#X floatatom 683 127 0 0 0 0 - - -;
-#X obj 683 232 noteout;
-#X obj 683 206 makenote 64 250;
-#X obj 683 153 metro 500;
-#X msg 683 100 1;
-#X msg 715 100 0;
-#X text 683 77 on;
-#X msg 683 180 60;
-#X text 31 14 MIDI I/O objects;
-#X floatatom 463 129 0 0 0 0 - - -;
-#X floatatom 426 129 0 0 0 0 - - -;
-#X floatatom 536 131 0 0 0 0 - - -;
-#X floatatom 497 129 0 0 0 0 - - -;
-#X floatatom 574 132 0 0 0 0 - - -;
-#X obj 426 102 touchin;
-#X obj 497 103 polytouchin;
-#X text 425 79 channel and poly aftertouch;
-#X floatatom 427 156 0 0 0 0 - - -;
-#X floatatom 498 156 0 0 0 0 - - -;
-#X obj 427 182 touchout;
-#X obj 498 182 polytouchout;
-#X floatatom 537 157 0 0 0 0 - - -;
-#X floatatom 575 157 0 0 0 0 - - -;
-#X obj 428 283 midiin;
-#X floatatom 428 314 0 0 0 0 - - -;
-#X floatatom 459 314 0 0 0 0 - - -;
-#X floatatom 501 312 0 0 0 0 - - -;
-#X floatatom 537 312 0 0 0 0 - - -;
-#X text 424 220 These two are always omni and;
-#X text 423 236 output the port number instead;
-#X obj 503 281 sysexin;
-#X obj 430 404 midiout;
-#X text 428 338 use this to output raw MIDI;
-#X text 423 358 (the second inlet is the port;
-#X text 676 424 updated for Pd release 0.35;
-#X obj 393 23 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 393 426 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 20 46 This document is currently under revision by the PDDP
-(Pure Data Documentation Project). Please stay posted for available
-updates.;
-#X text 20 101 DOCUMENTED MIDI OBJECTS;
-#X text 430 44 MIDI OBJECTS NOT YET DOCUMENTED;
-#X text 424 254 of the channel (Linux only):;
-#X text 426 376 number.) (Linux Only):;
-#X obj 647 23 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 647 426 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 676 44 THE [MAKENOTE] APPARATUS;
-#N canvas 0 22 466 316 window_controls 0;
-#X obj 149 29 inlet;
-#X msg 154 243 \; pd open \$1 \$2;
-#X obj 49 109 makefilename %s-help.pd;
-#X obj 149 49 symbol;
-#X obj 148 71 trigger symbol bang;
-#X obj 154 223 pack symbol symbol;
-#X obj 259 109 ggee/getdir;
-#X connect 0 0 3 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 2 0;
-#X connect 4 1 6 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 1;
-#X restore 40 433 pd window_controls;
-#X text 223 220 Click the object's name;
-#X text 223 235 to view its help document.;
-#X msg 143 325 pgmout;
-#X msg 142 299 pgmin;
-#X msg 142 274 noteout;
-#X msg 142 249 notein;
-#X msg 142 224 ctlout;
-#X msg 141 199 ctlin;
-#X msg 141 174 bendout;
-#X msg 141 150 bendin;
-#X connect 1 0 4 0;
-#X connect 3 0 2 0;
-#X connect 3 1 2 1;
-#X connect 4 0 8 0;
-#X connect 5 0 1 0;
-#X connect 6 0 1 0;
-#X connect 8 0 3 0;
-#X connect 15 0 11 0;
-#X connect 15 1 10 0;
-#X connect 16 0 13 0;
-#X connect 16 1 12 0;
-#X connect 16 2 14 0;
-#X connect 18 0 20 0;
-#X connect 19 0 21 0;
-#X connect 22 0 21 1;
-#X connect 23 0 21 2;
-#X connect 24 0 25 0;
-#X connect 24 1 26 0;
-#X connect 31 0 27 0;
-#X connect 31 1 28 0;
-#X connect 36 0 37 0;
-#X connect 43 0 44 0;
-#X connect 49 0 46 0;
-#X connect 50 0 46 0;
-#X connect 51 0 46 0;
-#X connect 52 0 46 0;
-#X connect 53 0 46 0;
-#X connect 54 0 46 0;
-#X connect 55 0 46 0;
-#X connect 56 0 46 0;
+#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 (MIDI) 3 12 0 18
+-204280 -1 0;
+#X obj 0 288 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 65 KEYWORDS control MIDI;
+#X text 12 105 DESCRIPTION MIDI input/output objects;
+#X text 12 25 NAME bendin ctlin midiin notein pgmin polytouchin sysexin
+touchin bendout ctlout midiout noteout pgmout polytouchout touchout
+;
+#X text 12 5 GENRE help;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 495 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 538 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 text 98 542 (none);
+#N canvas 54 478 428 109 Related_objects 0;
+#X obj 62 43 makenote;
+#X obj 22 43 poly;
+#X obj 123 43 list;
+#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 (MIDI) Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 79 297 cnv 17 3 130 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 296 float;
+#X text 98 353 list;
+#X text 98 503 float;
+#X obj 79 504 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 79 440 cnv 17 3 45 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 439 float;
+#X text 98 383 flush;
+#X text 98 413 clear;
+#X text 168 383 - output all values one by one \, in the order they
+were received \, and clear the collection.;
+#X text 168 503 - upon sending the "flush" message to the left inlet
+\, [bag] will output each value in the order it was received.;
+#X text 168 353 - a (value \, flag) pair is distributed to the two
+inlets. Lists with more than two elements will be truncated.;
+#X text 168 413 - clear the collection.;
+#X text 167 439 - a float to the right inlet sets the "flag": if zero
+\, values to the left inlet will not be added to the collection. If
+nonzero \, values to the right inlet will be added to the collection.
+;
+#X text 168 296 - a float to the left inlet will be added to the collection
+if the last value the right inlet received was nonzero. If the last
+value the right inlet received was zero \, the float sent to the right
+inlet will be removed from the collection.;
+#X text 11 23 MIDI input/output objects;
+#X obj 86 86 bendin;
+#X obj 86 123 bendout;
+#X obj 131 86 ctlin;
+#X obj 137 123 ctlout;
+#X obj 215 86 notein;
+#X obj 233 123 noteout;
+#X obj 260 86 pgmin;
+#X obj 284 123 pgmout;
+#X obj 425 86 touchin;
+#X obj 299 86 polytouchin;
+#X obj 170 86 midiin;
+#X obj 374 86 sysexin;
+#X obj 182 123 midiout;
+#X obj 329 123 polytouchout;
+#X obj 410 123 touchout;
+#X text 10 86 MIDI input:;
+#X text 10 123 MIDI output:;
+#X text 77 161 Follow the links below for help on these objects:;
+#X obj 320 185 pddp/pddplink touchin-help.pd;
+#X obj 243 185 touchin;
+#X obj 243 210 polytouchin;
+#X obj 320 210 pddp/pddplink polytouchin-help.pd;
+#X obj 243 235 touchout;
+#X obj 320 235 pddp/pddplink touchout-help.pd;
+#X obj 243 260 polytouchout;
+#X obj 320 260 pddp/pddplink polytouchout-help.pd;
+#X obj 80 185 midiin;
+#X obj 80 235 sysexin;
+#X obj 80 210 midiout;
+#X obj 135 185 pddp/pddplink midiin-help.pd;
+#X obj 135 235 pddp/pddplink sysexin-help.pd;
+#X obj 135 210 pddp/pddplink midiout-help.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/MIDI -text
+pdpedia: MIDI;
diff --git a/doc/pddp/midiin-help.pd b/doc/pddp/midiin-help.pd
new file mode 100644
index 00000000..eb12dc12
--- /dev/null
+++ b/doc/pddp/midiin-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 midiin 3 12 0 18
+-204280 -1 0;
+#X obj 0 441 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 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 225 RELEASE_VERSION 0.41.4;
+#X text 12 205 RELEASE_DATE 2009-06-12;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 85 PLATFORM gnulinux;
+#X text 12 245 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 5 GENRE help;
+#X text 12 25 KEYWORDS control MIDI needs_work;
+#X text 12 65 DESCRIPTION;
+#X text 12 105 OUTLET_0 float;
+#X text 12 125 OUTLET_1 float;
+#X restore 500 597 pd META;
+#X obj 0 469 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 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 90 178 441 414 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 83 107 touchin;
+#X obj 265 80 polytouchin;
+#X obj 122 80 midiin;
+#X obj 27 32 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 370 167 touchout;
+#X obj 284 167 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [midiin] Related Objects;
+#X text 26 260 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 25 339 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 26 241 Externals;
+#X obj 26 290 pddp/helplink maxlib/pitch;
+#X obj 26 305 pddp/helplink maxlib/score;
+#X obj 26 320 pddp/helplink maxlib/chord;
+#X obj 26 355 pddp/helplink cyclone/midiformat;
+#X obj 26 370 pddp/helplink cyclone/midiparse;
+#X obj 26 385 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 477 float;
+#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 445 (none);
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X obj 484 3 midiin;
+#X obj 454 20 pddp/pddplink http://wiki.puredata.info/en/midiin -text
+pdpedia: midiin;
+#X obj 225 153 midiin;
+#X floatatom 225 184 0 0 0 0 - - -;
+#X floatatom 258 184 0 0 0 0 - - -;
+#X text 164 230 This object is always omni and;
+#X text 163 246 outputs the port number instead;
+#X text 11 23 needs a description;
+#X text 168 477 - port number;
+#X text 98 502 ???;
+#X text 168 502 - ???;
+#X text 80 545 1) ???;
+#X text 168 545 - ???;
+#X text 164 264 of the channel (Linux only).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 17 0;
+#X connect 16 1 18 0;
diff --git a/doc/pddp/midiout-help.pd b/doc/pddp/midiout-help.pd
new file mode 100644
index 00000000..998e56c8
--- /dev/null
+++ b/doc/pddp/midiout-help.pd
@@ -0,0 +1,96 @@
+#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 midiout 3 12 0 18
+-204280 -1 0;
+#X obj 0 421 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 225 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This help patch was created for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE midi;
+#X text 12 45 KEYWORDS control MIDI needs_work;
+#X text 12 85 DESCRIPTION read incoming stream of MIDI notes;
+#X text 12 25 NAME midiout;
+#X text 12 125 INLET_0 float;
+#X text 12 145 INLET_1 float;
+#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 506 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 90 178 428 435 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 83 107 touchin;
+#X obj 265 80 polytouchin;
+#X obj 28 33 midiin;
+#X obj 77 33 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 370 167 touchout;
+#X obj 284 167 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [midiout] Related Objects;
+#X text 25 275 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 24 354 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 25 256 Externals;
+#X obj 25 305 pddp/helplink maxlib/pitch;
+#X obj 25 320 pddp/helplink maxlib/score;
+#X obj 25 335 pddp/helplink maxlib/chord;
+#X obj 25 370 pddp/helplink cyclone/midiformat;
+#X obj 25 385 pddp/helplink cyclone/midiparse;
+#X obj 25 400 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 457 float;
+#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 425 (none);
+#X text 98 482 float;
+#X obj 78 483 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X text 11 23 read incoming stream of MIDI notes;
+#X text 80 525 1) float;
+#X obj 220 244 midiout;
+#X text 168 268 use this to output raw MIDI;
+#X text 163 288 (the second inlet is the port;
+#X floatatom 220 212 5 0 0 0 - - -;
+#X floatatom 259 212 5 0 0 0 - - -;
+#X obj 477 3 midiout;
+#X obj 447 20 pddp/pddplink http://wiki.puredata.info/en/midiout -text
+pdpedia: midiout;
+#X text 168 482 - port number;
+#X text 168 457 - ???;
+#X text 168 525 - ???;
+#X text 166 306 number.) (Linux Only).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 20 0 17 0;
+#X connect 21 0 17 1;
diff --git a/doc/pddp/min-help.pd b/doc/pddp/min-help.pd
new file mode 100644
index 00000000..8e1319c5
--- /dev/null
+++ b/doc/pddp/min-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 min 3 12 0 18 -204280
+-1 0;
+#X obj 0 369 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 246 494 361 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION choose the lesser (minimum) of two values
+;
+#X text 12 25 NAME min;
+#X text 12 125 INLET_0 float bang list;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 487 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 524 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 94 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 [min] Related Objects;
+#X obj 23 43 max;
+#X obj 53 43 clip;
+#X restore 102 597 pd Related_objects;
+#X obj 78 378 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 431 list;
+#X text 98 495 float;
+#X obj 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 459 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 458 float;
+#X text 78 544 1) float;
+#X obj 497 3 min;
+#X text 98 377 bang;
+#X text 98 402 float;
+#X text 168 458 - a float to the right inlet is stored.;
+#X text 168 544 - initializes the value of the right inlet.;
+#X obj 469 20 pddp/pddplink http://wiki.puredata.info/en/min -text
+pdpedia: min;
+#X floatatom 186 168 5 0 0 0 - - -;
+#X floatatom 186 222 5 0 0 0 - - -;
+#X obj 186 195 min;
+#X floatatom 228 168 5 0 0 0 - - -;
+#X obj 316 195 min 5;
+#X floatatom 316 168 5 0 0 0 - - -;
+#X floatatom 316 223 5 0 0 0 - - -;
+#X text 168 377 - output the last value.;
+#X text 168 402 - the incoming float is compared to the value at the
+right inlet \, and the greater of the two is output.;
+#X text 168 429 - a pair of floats will be distributed to the inlets.
+;
+#X text 168 495 - the two values at the inlets are compared \, and
+the greater one is output.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 11 23 choose the lesser (minimum) of two values;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 1;
+#X connect 25 0 27 0;
+#X connect 26 0 25 0;
diff --git a/doc/pddp/moses-help.pd b/doc/pddp/moses-help.pd
index 01e8a590..a228fb13 100644
--- a/doc/pddp/moses-help.pd
+++ b/doc/pddp/moses-help.pd
@@ -1,57 +1,125 @@
-#N canvas 10 0 452 619 10;
-#X obj 29 141 moses 10;
-#X floatatom 29 121 4 0 0;
-#X floatatom 83 120 4 0 0;
-#X floatatom 29 166 4 0 0;
-#X floatatom 83 166 4 0 0;
-#X obj 30 15 moses;
-#X text 71 15 - part a stream of numbers;
-#X text 19 44 Moses takes numbers and outputs them at left if they're
-less than a control value \, and at right if they're greater or equal
-to it. The creation argument initializes the control value (10 in this
-example) and the right inlet changes it.;
-#X obj 27 301 moses 0;
-#X floatatom 27 325 5 0 0;
-#X floatatom 70 325 5 0 0;
-#X floatatom 27 279 5 0 0;
-#X text 17 189 One way to think of [moses] is as a filter. For the
-following example \, imagine that [moses] works as a low pass and high
-pass filter simoultaneously -- for non-audio signals. Below you will
-see that negative numbers will pass through the left outlet while positive
-numbers will pass through the right outlet.;
-#X text 17 348 Before the days of [moses] \, the same effect would
-require a completely different structure \, as in the example below:
-;
-#X floatatom 25 384 5 0 0;
-#X floatatom 25 433 5 0 0;
-#X obj 25 408 min -1;
-#X obj 74 409 max 0;
-#X floatatom 74 433 5 0 0;
-#X text 73 383 An ol'fashioned way of achieving a similar result.;
-#X text 16 474 RELATED OBJECTS;
-#N canvas 0 0 454 304 related_objects_from_other_libraries 0;
-#X obj 34 29 split;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X restore 22 494 pd related_objects_from_other_libraries;
-#X text 18 530 This document was updated for Pd version 0.35 test 26
-by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X connect 0 0 3 0;
-#X connect 0 1 4 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
-#X connect 8 0 9 0;
-#X connect 8 1 10 0;
-#X connect 11 0 8 0;
-#X connect 14 0 16 0;
-#X connect 14 0 17 0;
-#X connect 16 0 15 0;
-#X connect 17 0 18 0;
+#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 moses 3 12 0 18
+-204280 -1 0;
+#X obj 0 302 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 211 494 384 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 285 RELEASE_VERSION 0.41.4;
+#X text 12 265 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 45 KEYWORDS control filter;
+#X text 12 85 DESCRIPTION part a stream of numbers;
+#X text 12 25 NAME moses;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 185 OUTLET_1 float;
+#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 498 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;
+#N canvas 106 297 428 256 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 [moses] Related Objects;
+#X text 19 168 The best places to find information about Pd's libraries
+is:;
+#X text 19 190 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 20 206 or;
+#X text 19 221 iem.kug.ac.at/pdb/;
+#X text 20 119 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 obj 22 42 list split;
+#X text 20 80 Externals;
+#X obj 20 98 pddp/helplink cyclone/split;
+#X restore 102 597 pd Related_objects;
+#X obj 78 311 cnv 17 3 65 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 310 float;
+#X text 98 350 list;
+#X text 98 418 float;
+#X obj 78 419 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 382 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 381 float;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/moses -text
+pdpedia: moses;
+#X obj 483 3 moses;
+#X floatatom 68 143 4 0 0 0 - - -;
+#X floatatom 124 142 4 0 0 0 - - -;
+#X floatatom 68 196 4 0 0 0 - - -;
+#X floatatom 121 196 4 0 0 0 - - -;
+#X text 65 66 Moses takes numbers and outputs them at left if they're
+less than a control value \, and at right if they're greater or equal
+to it. The creation argument initializes the control value (10 in this
+example) and the right inlet changes it.;
+#N canvas 103 360 428 202 More_info 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 146 moses 0;
+#X floatatom 22 170 5 0 0 0 - - -;
+#X floatatom 65 170 5 0 0 0 - - -;
+#X floatatom 22 124 5 0 0 0 - - -;
+#X text 20 38 One way to think of [moses] is as a filter. For the following
+example \, imagine that [moses] works as a low pass and high pass filter
+simoultaneously -- for non-audio signals. Below you will see that negative
+numbers will pass through the left outlet while positive numbers will
+pass through the right outlet.;
+#X text 8 2 [moses] More Info;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 4 0 1 0;
+#X restore 102 548 pd More_info;
+#X text 167 381 - a float to the right inlet sets the control value.
+;
+#X text 98 453 float;
+#X obj 78 454 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 168 453 - incoming values (to the left inlet) will pass at
+the right outlet if they are greater than or equal to the control value.
+;
+#X obj 68 169 moses 10;
+#X text 224 179 The control value may be a float or integer. Try shift-scrolling:
+;
+#X floatatom 327 221 5 0 0 0 - - -;
+#X floatatom 327 267 5 0 0 0 - - -;
+#X obj 327 244 moses 1.5;
+#X floatatom 378 267 5 0 0 0 - - -;
+#X text 11 23 part a stream of numbers;
+#X text 168 350 - a two element list is distributed to the two inlets.
+Lists with more than two elements will be truncated.;
+#X text 168 516 - (optional) initializes the control value.;
+#X text 168 418 - incoming values (to the left inlet) will pass at
+the left outlet if they are less than the control value.;
+#X text 81 516 1) float;
+#X text 168 310 - if the float the left inlet is less than the control
+value \, it passes at the left inlet. If it is greater than or equal
+to the control value it passes at the right inlet.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 100 568 pddp/pddplink ../2.control.examples/18.conditional.pd
+-text doc/2.control.examples/18.conditional.pd;
+#X connect 17 0 27 0;
+#X connect 18 0 27 1;
+#X connect 27 0 19 0;
+#X connect 27 1 20 0;
+#X connect 29 0 31 0;
+#X connect 31 0 30 0;
+#X connect 31 1 32 0;
diff --git a/doc/pddp/mtof-help.pd b/doc/pddp/mtof-help.pd
new file mode 100644
index 00000000..c7caaf1a
--- /dev/null
+++ b/doc/pddp/mtof-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 mtof 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 50 246 495 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control conversion MIDI;
+#X text 12 85 DESCRIPTION MIDI to frequency conversion;
+#X text 12 25 NAME mtof;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 491 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 527 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 553 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 438 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 530 (none);
+#N canvas 107 405 428 182 Related_objects 0;
+#X text 21 38 Control objects for conversion:;
+#X obj 24 67 ftom;
+#X obj 71 67 dbtorms;
+#X obj 139 67 rmstodb;
+#X obj 208 67 dbtopow;
+#X obj 274 67 powtodb;
+#X obj 24 126 mtof~;
+#X obj 69 126 ftom~;
+#X obj 112 126 dbtorms~;
+#X obj 177 126 rmstodb~;
+#X obj 243 126 dbtopow~;
+#X obj 305 126 powtodb~;
+#X text 21 103 Signal 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 floatatom 239 196 0 0 0 0 - - -;
+#X floatatom 239 140 0 0 0 0 - - -;
+#X obj 78 500 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/mtof -text
+pdpedia: mtof;
+#X obj 489 3 mtof;
+#X text 99 235 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 239 169 mtof;
+#X text 98 437 float;
+#X text 98 457 list;
+#X text 98 500 float;
+#X text 11 23 MIDI to frequency conversion;
+#X text 158 457 - lists will be truncated \, and the first element
+used as input.;
+#X text 158 437 - the incoming value.;
+#X obj 98 557 pddp/pddplink all_about_acoustic_conversions.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/A06.frequency.pd -text
+doc/3.audio.examples/A06.frequency.pd;
+#X connect 11 0 16 0;
+#X connect 16 0 10 0;
diff --git a/doc/pddp/mtof~-help.pd b/doc/pddp/mtof~-help.pd
new file mode 100644
index 00000000..ebd506b5
--- /dev/null
+++ b/doc/pddp/mtof~-help.pd
@@ -0,0 +1,83 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion MIDI;
+#X text 12 85 DESCRIPTION MIDI to frequency conversion for audio signals
+;
+#X text 12 25 NAME mtof~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/my_canvas-help.pd b/doc/pddp/my_canvas-help.pd
new file mode 100644
index 00000000..1ede96ed
--- /dev/null
+++ b/doc/pddp/my_canvas-help.pd
@@ -0,0 +1,726 @@
+#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 125 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 165 AUTHOR Thomas Musil;
+#X text 12 185 WEBSITE;
+#X text 12 245 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 105 DESCRIPTION gui-rectangle;
+#X text 12 25 NAME my_canvas;
+#X text 12 45 ALIAS cnv;
+#X text 12 205 RELEASE_DATE 2002;
+#X text 12 225 RELEASE_VERSION;
+#X text 12 65 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 c 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 143 cnv 15 100 25 empty \$0-score Score:3 5 12 0 14 -233017
+-66577 0;
+#X obj 14 346 cnv 15 5 60 \$0-ps \$0-pr empty 20 12 0 14 -1 -66577
+0;
+#X obj 257 19 key;
+#X obj 257 140 s \$0-pr;
+#X msg 257 118 delta 0 \$1;
+#X msg 257 91 -5;
+#X obj 68 42 tgl 15 0 empty empty Go! 17 7 0 10 -4034 -1 -1 0 1;
+#X obj 337 165 r \$0-ps;
+#X obj 337 187 unpack;
+#X obj 370 214 v py;
+#X obj 337 214 v px;
+#X obj 68 121 t b b b;
+#X obj 68 15 r die;
+#X msg 107 165 \; \$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 87 237 expr if(bx<=20 \, if (py<=by && py+60>=by \, 0 \, 1)
+\, -1) \; if (bx>=415 \, 2 \, -1) \; if (by<=0 \, 4 \, if (by>=500
+\, 5 \, -1));
+#X obj 257 214 v bx;
+#X obj 321 362 cnv 10 10 10 \$0-bs \$0-br empty 20 12 0 14 -1 -66577
+0;
+#X obj 257 165 r \$0-bs;
+#X obj 257 187 unpack;
+#X obj 290 214 v by;
+#X obj 68 438 pack;
+#X msg 225 337 1;
+#X msg 261 337 -1;
+#X obj 68 482 s \$0-br;
+#X msg 68 460 delta \$1 \$2;
+#X obj 87 309 sel 0 1 2 3 4 5;
+#X obj 156 388 s die;
+#X msg 156 336 0;
+#X msg 87 336 1;
+#X msg 192 336 -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 96 67 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 93 118 + 1;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 13 0;
+#X connect 3 0 5 0;
+#X connect 3 0 14 0;
+#X connect 3 0 16 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 16 0 4 0;
+#X restore 95 409 pd drift;
+#X obj 68 383 t a b;
+#X obj 68 361 f 1;
+#X msg 294 91 5;
+#X obj 107 143 f \$0;
+#X msg 134 21 10 SLOW;
+#X msg 134 72 2 WTF;
+#X msg 134 55 4 FAST;
+#X msg 134 38 7 MEDIUM;
+#X obj 257 43 spigot;
+#X obj 77 65 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 108 361 pd score;
+#X text 147 95 a = up \; z = down \;;
+#X obj 68 89 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 67 select 97 122 32;
+#X msg 336 93 1;
+#X obj 336 117 s die;
+#X text 165 407 0 - richochet off left wall \; 1 - die at left wall
+\; 2 - richochet off right wall \; 3 - die at right wall (not yet)
+\; 4 - richochet off top \; 5 - richochet of bottom \;;
+#X obj 87 289 t a;
+#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 117 31 sel -1 1 3;
+#X obj 174 54 change;
+#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 15 0;
+#X connect 15 3 16 0;
+#X connect 16 0 13 0;
+#X restore 211 306 pd sfx;
+#X connect 2 0 40 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 41 0;
+#X connect 6 0 45 0;
+#X connect 7 0 8 0;
+#X connect 8 0 10 0;
+#X connect 8 1 9 0;
+#X connect 11 0 33 0;
+#X connect 11 1 15 0;
+#X connect 11 2 35 0;
+#X connect 12 0 6 0;
+#X connect 15 0 51 0;
+#X connect 15 1 51 0;
+#X connect 15 2 51 0;
+#X connect 18 0 19 0;
+#X connect 19 0 16 0;
+#X connect 19 1 20 0;
+#X connect 21 0 25 0;
+#X connect 22 0 31 2;
+#X connect 23 0 31 2;
+#X connect 25 0 24 0;
+#X connect 26 0 29 0;
+#X connect 26 1 28 0;
+#X connect 26 2 30 0;
+#X connect 26 3 28 0;
+#X connect 26 4 22 0;
+#X connect 26 5 23 0;
+#X connect 28 0 27 0;
+#X connect 29 0 31 1;
+#X connect 29 0 33 1;
+#X connect 29 0 43 0;
+#X connect 30 0 31 1;
+#X connect 30 0 33 1;
+#X connect 31 0 21 1;
+#X connect 32 0 21 0;
+#X connect 32 1 31 0;
+#X connect 33 0 32 0;
+#X connect 34 0 4 0;
+#X connect 35 0 13 0;
+#X connect 36 0 45 1;
+#X connect 37 0 45 1;
+#X connect 38 0 45 1;
+#X connect 39 0 45 1;
+#X connect 40 0 47 0;
+#X connect 42 0 46 0;
+#X connect 45 0 11 0;
+#X connect 46 0 40 1;
+#X connect 47 0 5 0;
+#X connect 47 1 34 0;
+#X connect 47 2 48 0;
+#X connect 48 0 49 0;
+#X connect 51 0 26 0;
+#X connect 51 0 52 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 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/doc/pddp/namecanvas-help.pd b/doc/pddp/namecanvas-help.pd
new file mode 100644
index 00000000..91f7121a
--- /dev/null
+++ b/doc/pddp/namecanvas-help.pd
@@ -0,0 +1,58 @@
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 GENRE help;
+#X text 12 85 DESCRIPTION attach a canvas to a name;
+#X text 12 25 NAME namecanvas;
+#X text 12 45 KEYWORDS control canvas_op;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#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/doc/pddp/netreceive-help.pd b/doc/pddp/netreceive-help.pd
index 5ee47823..a241bf11 100644
--- a/doc/pddp/netreceive-help.pd
+++ b/doc/pddp/netreceive-help.pd
@@ -1,40 +1,97 @@
-#N canvas 300 97 467 585 10;
-#X text 3 531 You can send and receive messages to Pd from the command
-line using 'pdsend' and 'pdreceive'.;
-#X obj 4 1 cnv 15 450 20 empty empty netreceive 20 10 1 18 -233017
--66577 0;
-#X obj 79 313 netreceive 3000;
-#X floatatom 179 334 0 0 0 0 - - -;
-#X obj 79 387 netreceive 3001 1;
-#X text 12 46 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 10 127 Incoming network messages appear on "receive" objects
-\; it's up to the sender to select which one. Here \, a "receive foo"
-fields messages sent from the Netsend help window \, q.v.;
-#X text 34 270 first argument: portnumber = 3000;
-#X text 34 286 second argument: 0 or none for TCP \, nonzero for UDP
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 217 312 <-- TCP \, port 3000;
-#X text 241 386 <-- UDP \, port 3001;
-#X text 213 335 <--- number of open connections;
-#X text 5 366 incoming messages;
-#X obj 79 334 print tcp;
-#X obj 79 408 print udp;
-#X text 11 178 There are some possibilities for intercommunication
-with other programs... see the help for "netsend.";
-#X text 19 26 [netreceive] -- listen for incoming messages from network
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control network;
+#X text 12 85 DESCRIPTION listen for incoming messages from a network
;
-#X text 9 216 SECURITY ALERT: the port that netreceive opens has no
+#X text 12 25 NAME netreceive;
+#X text 12 125 OUTLET_0 anything;
+#X text 12 145 OUTLET_1 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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.
-Be careful that;
-#X text 109 509 [netreceive 4567 0 old];
-#X text 7 431 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 connect 2 0 13 0;
-#X connect 2 1 3 0;
-#X connect 4 0 14 0;
+;
+#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/doc/pddp/netsend-help.pd b/doc/pddp/netsend-help.pd
new file mode 100644
index 00000000..1ff57b53
--- /dev/null
+++ b/doc/pddp/netsend-help.pd
@@ -0,0 +1,115 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control network;
+#X text 12 85 DESCRIPTION send Pd messages over a network;
+#X text 12 25 NAME netsend;
+#X text 12 125 INLET_0 connect disconnect send;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/noise~-help.pd b/doc/pddp/noise~-help.pd
new file mode 100644
index 00000000..ff813e57
--- /dev/null
+++ b/doc/pddp/noise~-help.pd
@@ -0,0 +1,67 @@
+#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 noise~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 466 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION uniformly distributed white noise;
+#X text 12 25 NAME noise~;
+#X text 12 125 INLET_0;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 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 107 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 text 8 2 [noise~] Related Objects;
+#X obj 22 43 random;
+#X restore 102 597 pd Related_objects;
+#X obj 78 475 cnv 17 3 17 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 noise~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/noise~ -text
+pdpedia: noise~;
+#X floatatom 218 284 4 0 0 0 - - -;
+#X obj 218 217 noise~;
+#X obj 284 256 print~;
+#X obj 218 256 env~ 4096;
+#X text 216 192 the output range is -1 to 1...;
+#X obj 152 256 snapshot~;
+#X floatatom 152 283 0 0 0 0 - - -;
+#X msg 152 229 bang;
+#X msg 284 229 bang;
+#X text 168 474 - the inlet to [noise~] is not used.;
+#X text 98 511 signal;
+#X text 11 23 uniformly distributed white noise;
+#X text 98 474 (inactive);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 14 0 15 0;
+#X connect 14 0 16 0;
+#X connect 14 0 18 0;
+#X connect 16 0 13 0;
+#X connect 18 0 19 0;
+#X connect 20 0 18 0;
+#X connect 21 0 15 0;
diff --git a/doc/pddp/notein-help.pd b/doc/pddp/notein-help.pd
index 4cab2d95..25a55112 100644
--- a/doc/pddp/notein-help.pd
+++ b/doc/pddp/notein-help.pd
@@ -1,85 +1,130 @@
-#N canvas 255 1 494 655 10;
-#X obj 32 12 notein;
-#X text 133 97 inlets : none;
-#X text 134 122 outlets:;
-#X text 134 142 left: MIDI note number;
-#X text 135 163 middle: velocity;
-#X text 133 187 right: MIDI channel number;
-#X obj 34 96 notein;
-#X floatatom 35 145 5 0 0;
-#X floatatom 52 166 5 0 0;
-#X floatatom 72 188 5 0 0;
-#X floatatom 42 383 5 0 0;
-#X floatatom 91 383 5 0 0;
-#X obj 42 350 notein 1;
-#X text 105 349 notein listening only to channel 1;
-#X text 7 396 note number;
-#X text 101 396 velocity;
-#N canvas 240 135 478 474 other_midi_objects 0;
-#X obj 7 29 ctlin;
-#X obj 49 29 pgmin;
-#X obj 92 28 bendin;
-#X obj 143 27 touchin;
-#X obj 204 27 polytouchin;
-#X obj 289 27 midiin;
-#X obj 340 26 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 160 84 bendout;
-#X obj 217 83 touchout;
-#X obj 281 82 polytouchout;
-#X obj 370 82 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X restore 144 497 pd other_midi_objects;
-#X obj 17 497 noteout;
-#X obj 13 286 stripnote;
-#X text 78 287 is one of the ways to deal with this situation;
-#X text 11 41 The [notein] object reads incoming MIDI notes and reports
-their note number \, velocity and channel number. Without the argument
-it reads from all MIDI channels (omni).;
-#X obj 280 526 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 14 526 for an explanation of MIDI usage in Pd see:;
-#X text 13 312 Arguments: the MIDI channel number from which to read
-(with no argument it listens to all channels):;
-#X text 80 13 - read incoming stream of MIDI notes.;
-#X text 11 207 Note: remember that a 'note-off' is a note with velocity=0.
-Therefore [notein] reports each note twice (note-on when a key on your
-keyboard is pressed and note-off when the key is released). This could
-be sometimes misleading when tracking notes.;
-#X text 14 480 related objects;
-#X floatatom 44 449 5 0 0;
-#X floatatom 93 449 5 0 0;
-#X text 9 462 note number;
-#X text 103 462 velocity;
-#X obj 44 416 notein 17;
-#X text 107 415 notein listening only to channel 1 on port 2;
-#X text 13 582 This document was created for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 6 0 7 0;
-#X connect 6 1 8 0;
-#X connect 6 2 9 0;
-#X connect 12 0 10 0;
-#X connect 12 1 11 0;
-#X connect 31 0 27 0;
-#X connect 31 1 28 0;
+#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 notein 3 12 0 18
+-204280 -1 0;
+#X obj 0 391 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 245 494 360 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was created for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION read incoming stream of MIDI notes;
+#X text 12 25 NAME notein;
+#X text 12 125 OUTLET_0 float;
+#X text 12 145 OUTLET_1 float;
+#X text 12 165 OUTLET_2 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 419 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 506 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 90 178 428 390 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 [notein] Related Objects;
+#X obj 78 60 ctlin;
+#X obj 221 60 pgmin;
+#X obj 28 60 bendin;
+#X obj 83 87 touchin;
+#X obj 265 60 polytouchin;
+#X obj 122 60 midiin;
+#X obj 27 87 sysexin;
+#X obj 183 147 noteout;
+#X obj 80 147 ctlout;
+#X obj 28 147 bendout;
+#X obj 370 147 touchout;
+#X obj 284 147 polytouchout;
+#X obj 127 147 midiout;
+#X obj 235 147 pgmout;
+#X obj 28 201 makenote;
+#X text 25 178 MIDI note construction:;
+#X text 25 120 MIDI output:;
+#X text 25 37 MIDI input:;
+#X obj 188 201 stripnote;
+#X obj 172 60 notein;
+#X text 185 178 MIDI note deconstruction:;
+#X text 25 245 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 24 324 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 25 226 Externals;
+#X obj 25 275 pddp/helplink maxlib/pitch;
+#X obj 25 290 pddp/helplink maxlib/score;
+#X obj 25 305 pddp/helplink maxlib/chord;
+#X obj 25 340 pddp/helplink cyclone/midiformat;
+#X obj 25 355 pddp/helplink cyclone/midiparse;
+#X obj 25 370 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 427 float;
+#X obj 78 428 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 484 3 notein;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/notein -text
+pdpedia: notein;
+#X obj 43 107 notein;
+#X floatatom 43 175 5 0 0 0 - - -;
+#X floatatom 59 154 5 0 0 0 - - -;
+#X floatatom 76 133 5 0 0 0 - - -;
+#X text 40 56 The [notein] object reads incoming MIDI notes and reports
+their note number \, velocity and channel number. Without the argument
+it reads from all MIDI channels (omni).;
+#X text 98 395 (none);
+#X text 98 452 float;
+#X obj 78 453 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 477 float;
+#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X floatatom 188 282 5 0 0 0 - - -;
+#X floatatom 233 282 5 0 0 0 - - -;
+#X obj 188 249 notein 1;
+#X text 251 248 notein listening only to channel 1;
+#X text 153 295 note number;
+#X text 243 295 velocity;
+#X obj 159 182 stripnote;
+#X text 224 182 is one of the ways to deal with this situation;
+#X text 159 211 Arguments: the MIDI channel number from which to read
+(with no argument it listens to all channels):;
+#X text 157 113 Note: remember that a 'note-off' is a note with velocity=0.
+Therefore [notein] reports each note twice (note-on when a key on your
+keyboard is pressed and note-off when the key is released). This could
+be sometimes misleading when tracking notes.;
+#X floatatom 190 355 5 0 0 0 - - -;
+#X floatatom 241 355 5 0 0 0 - - -;
+#X text 155 368 note number;
+#X text 251 368 velocity;
+#X obj 190 322 notein 17;
+#X text 253 321 notein listening only to channel 1 on port 2;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X text 11 23 read incoming stream of MIDI notes;
+#X text 168 427 - MIDI note number.;
+#X text 168 452 - velocity.;
+#X text 80 525 1) float;
+#X text 168 477 - MIDI channel number. This inlet is available only
+if no creation argument is specified.;
+#X text 168 525 - the MIDI channel number from which to read. If no
+argument is provided [notein] reads from all channels (and sprouts
+a third inlet).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 12 0 13 0;
+#X connect 12 1 14 0;
+#X connect 12 2 15 0;
+#X connect 24 0 22 0;
+#X connect 24 1 23 0;
+#X connect 36 0 32 0;
+#X connect 36 1 33 0;
diff --git a/doc/pddp/noteout-help.pd b/doc/pddp/noteout-help.pd
index 94a723cc..eb9d9d85 100644
--- a/doc/pddp/noteout-help.pd
+++ b/doc/pddp/noteout-help.pd
@@ -1,91 +1,121 @@
-#N canvas 233 2 471 650 10;
-#X obj 40 15 noteout;
-#X obj 41 343 noteout;
-#X obj 287 506 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 18 505 for an explanation of MIDI usage in Pd see:;
-#X text 13 43 The [noteout] objects writes a note-on MIDI message to
-the output port.;
-#X text 13 79 inlets:;
-#X text 65 106 list - 1st number is interpreted as MIDI note number
-\,;
-#X text 108 118 the second as velocity and the third (if present);
-#X text 110 129 as channel number;
-#X text 19 157 right:;
-#X text 13 141 middle:;
-#X text 66 141 int - velocity;
-#X text 21 96 left:;
-#X text 64 94 int - MIDI note number (0-127);
-#X text 66 155 int - channel number;
-#X text 6 175 outlets:;
-#X text 65 175 none;
-#X text 16 205 Arguments:;
-#X text 21 228 MIDI channel number to which a note-on message is to
-be sent. If no argument is provided [noteout] transmits on channel
-1 (default).;
-#X text 12 280 examples:;
-#X msg 42 322 60 100 2;
-#X text 20 372 (all three above) middle-c with velocity 100 sent to
-channel 2;
-#X obj 133 343 noteout 2;
-#X msg 134 322 60 100;
-#X obj 245 287 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 244 326 60;
-#X msg 278 324 100;
-#X obj 243 305 t b b b;
-#X obj 257 345 noteout;
-#X msg 308 325 2;
-#X text 22 406 See also:;
-#X obj 23 427 makenote;
-#X text 92 426 -- format a MIDI note (with a note-off message);
-#X text 21 452 related object;
-#X obj 24 467 notein;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 7 29 ctlin;
-#X obj 49 29 pgmin;
-#X obj 92 28 bendin;
-#X obj 143 27 touchin;
-#X obj 204 27 polytouchin;
-#X obj 289 27 midiin;
-#X obj 340 26 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 160 84 bendout;
-#X obj 217 83 touchout;
-#X obj 281 82 polytouchout;
-#X obj 370 82 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X restore 119 467 pd other_midi_objects;
-#X text 93 15 - transmit MIDI notes;
-#X text 19 543 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 20 0 1 0;
-#X connect 23 0 22 0;
-#X connect 24 0 27 0;
-#X connect 25 0 28 0;
-#X connect 26 0 28 1;
-#X connect 27 0 25 0;
-#X connect 27 1 26 0;
-#X connect 27 2 29 0;
-#X connect 29 0 28 2;
+#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 noteout 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 244 494 369 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION transmit MIDI notes;
+#X text 12 25 NAME noteout;
+#X text 12 125 INLET_0 float list;
+#X text 12 165 INLET_2 float;
+#X text 12 145 INLET_1 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 475 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 503 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;
+#N canvas 107 157 428 430 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 [noteout] Related Objects;
+#X obj 74 80 ctlin;
+#X obj 217 80 pgmin;
+#X obj 24 80 bendin;
+#X obj 79 107 touchin;
+#X obj 261 80 polytouchin;
+#X obj 118 80 midiin;
+#X obj 23 107 sysexin;
+#X obj 179 167 noteout;
+#X obj 76 167 ctlout;
+#X obj 24 167 bendout;
+#X obj 366 167 touchout;
+#X obj 280 167 polytouchout;
+#X obj 123 167 midiout;
+#X obj 231 167 pgmout;
+#X obj 24 221 makenote;
+#X text 21 198 MIDI note construction:;
+#X text 21 140 MIDI output:;
+#X text 21 57 MIDI input:;
+#X obj 184 221 stripnote;
+#X obj 24 33 notein;
+#X text 181 198 MIDI note deconstruction:;
+#X text 22 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 21 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 22 246 Externals;
+#X obj 22 295 pddp/helplink maxlib/pitch;
+#X obj 22 310 pddp/helplink maxlib/score;
+#X obj 22 325 pddp/helplink maxlib/chord;
+#X obj 22 360 pddp/helplink cyclone/midiformat;
+#X obj 22 375 pddp/helplink cyclone/midiparse;
+#X obj 22 390 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X obj 78 361 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 360 float;
+#X text 98 380 list;
+#X obj 78 422 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 421 float;
+#X obj 473 3 noteout;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/noteout -text
+pdpedia: noteout;
+#X obj 78 447 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 446 float;
+#X text 98 479 (none);
+#X obj 123 197 noteout;
+#X msg 123 176 60 100 2;
+#X obj 215 197 noteout 2;
+#X msg 215 176 60 100;
+#X obj 338 123 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 338 174 60;
+#X msg 372 174 100;
+#X obj 338 142 t b b b;
+#X obj 338 200 noteout;
+#X msg 405 174 2;
+#X text 108 228 (all three above) middle-c with velocity 100 sent to
+channel 2;
+#X obj 367 571 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 570 for an explanation of MIDI usage in Pd see:;
+#X text 11 23 transmit MIDI notes;
+#X text 168 380 - a three-element list (MIDI note \, velocity \, channel)
+is distributed among the three inlets. Lists with more than two elements
+will be truncated.;
+#X text 168 521 - the MIDI channel number to which a note-on message
+is to be sent. If no argument is provided [noteout] transmits on channel
+1 (default).;
+#X text 168 360 - (integer) MIDI note number (0-127).;
+#X text 167 421 - (integer) velocity.;
+#X text 167 446 - (integer) channel number.;
+#X text 80 521 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 22 0 25 0;
+#X connect 23 0 26 0;
+#X connect 24 0 26 1;
+#X connect 25 0 23 0;
+#X connect 25 1 24 0;
+#X connect 25 2 27 0;
+#X connect 27 0 26 2;
diff --git a/doc/pddp/nqpoly4-help.pd b/doc/pddp/nqpoly4-help.pd
new file mode 100644
index 00000000..4d83131b
--- /dev/null
+++ b/doc/pddp/nqpoly4-help.pd
@@ -0,0 +1,26 @@
+#N canvas 101 68 444 569 10;
+#X text 7 26 (not quite poly) is an abstraction that uses various voodoo
+to fake the functionality of the [poly~] object in max.;
+#X obj 10 6 nqpoly4;
+#X text 8 63 in short \, [nqpoly4] can take abstractions that obey
+certain requirements and can link them together to make a polyphonic
+instrument.;
+#X text 9 111 since it automates the normally painful task of making
+a patch polyphonic \, it is very easy to do things like 60-nite polyphonism
+\, which really starts becoming granular synthesis.;
+#X obj 18 459 nqpoly~;
+#X text 20 478 is the old version that was tied to audio. Right-click
+and select "Help" for more info.;
+#X obj 38 369 minimal-test;
+#X obj 38 389 petal-test;
+#X obj 38 409 tabgrain-test;
+#X text 22 346 Here are a few demos:;
+#X text 156 388 a simple GEM example;
+#X text 157 368 very simple demo;
+#X text 157 410 a granular synthesis patch;
+#X text 8 191 usage: nqpoly <number of objects> <abstraction name>
+<up to 4 creation args>;
+#X text 13 241 your abstraction is ultimately called with the parameters:
+<index> <number of objects> <arg1> <arg2> <arg3> <arg4>;
+#X text 13 280 For [loadbang] \, you need to use the bang from the
+right inlet on your objects that are written for [nqpoly4].;
diff --git a/doc/pddp/nqpoly~-help.pd b/doc/pddp/nqpoly~-help.pd
new file mode 100644
index 00000000..ffa1a2a5
--- /dev/null
+++ b/doc/pddp/nqpoly~-help.pd
@@ -0,0 +1,21 @@
+#N canvas 0 22 465 428 10;
+#X obj 206 18 nqpoly~;
+#X text 102 18 not-quite-poly;
+#X obj 205 398 nqpoly4;
+#X text 139 398 see also:;
+#X obj 177 247 nqpoly~-test;
+#X obj 177 267 tgrain~-test;
+#X text 101 230 examples:;
+#X text 35 304 The voice allocation is handled automatically \, provided
+that the patches for each voice is written properly. This patch should
+accept the control messages on its left inlet \, and when it completes
+its task and is available for reallocation \, it should send a bang
+out of its outlet.;
+#X text 29 72 (not quite poly) is an abstraction that uses various
+voodoo to fake the functionality of the [poly~] object in max.;
+#X text 30 109 in short \, [nqpoly4] can take abstractions that obey
+certain requirements and can link them together to make a polyphonic
+instrument.;
+#X text 31 157 since it automates the normally painful task of making
+a patch polyphonic \, it is very easy to do things like 60-nite polyphonism
+\, which really starts becoming granular synthesis.;
diff --git a/doc/pddp/numbox2-help.pd b/doc/pddp/numbox2-help.pd
new file mode 100644
index 00000000..833e8dde
--- /dev/null
+++ b/doc/pddp/numbox2-help.pd
@@ -0,0 +1,428 @@
+#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 nbx 3 12 0 18 -204280
+-1 0;
+#X obj 0 260 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 265 RELEASE_VERSION 0.41.4;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 205 AUTHOR Thomas Musil;
+#X text 12 225 WEBSITE;
+#X text 12 285 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control storage GUI nonlocal;
+#X text 12 105 DESCRIPTION gui-number box;
+#X text 12 25 NAME nbx;
+#X text 12 45 ALIAS my_numbox;
+#X text 12 165 OUTLET_0 float;
+#X text 12 145 INLET_0 float bang set size range log init log_height
+send receive label label_pos label_font color pos delta;
+#X text 12 245 RELEASE_DATE 2002;
+#X restore 500 597 pd META;
+#X obj 0 425 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 462 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;
+#N canvas 73 462 428 128 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 [nbx] Related Objects;
+#X floatatom 22 43 5 0 0 0 - - -;
+#X obj 62 43 float;
+#X obj 106 43 int;
+#X obj 20 90 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 18 66 All iem-gui objects:;
+#X restore 102 597 pd Related_objects;
+#X obj 78 269 cnv 17 3 140 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 268 float;
+#X text 98 338 list;
+#X text 98 433 float;
+#X obj 78 434 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 28 175 6 0 0 0 - - -;
+#X msg 57 94 set \$1;
+#X floatatom 48 49 6 0 0 0 - - -;
+#X obj 28 199 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 28 49 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 57 71 4 0 0 0 - - -;
+#X floatatom 108 49 6 0 0 0 - - -;
+#X floatatom 366 48 7 0 0 0 - - -;
+#X obj 241 159 ftom;
+#X floatatom 241 183 4 0 0 0 - - -;
+#X floatatom 287 159 9 0 0 0 - - -;
+#X floatatom 366 120 9 0 0 0 - - -;
+#X floatatom 241 63 4 0 0 0 - - -;
+#X obj 241 85 mtof;
+#X text 104 151 (0.01 pixels);
+#X msg 108 71 set \$1;
+#X text 106 120 shift-click & drag;
+#X text 107 135 for fine-tuning;
+#X obj 77 199 print;
+#N canvas 133 180 290 126 once 0;
+#X obj 38 24 inlet;
+#X obj 38 80 outlet;
+#X obj 38 53 spigot 1;
+#X msg 102 53 0;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 1;
+#X restore 77 175 pd once;
+#X obj 108 93 s foo13_rcv;
+#X obj 366 71 s goo14_rcv;
+#X obj 366 96 r goo14_snd;
+#X obj 28 135 nbx 6 15 -1e+37 1e+37 0 0 foo13_snd foo13_rcv empty 45
+7 0 10 -225280 -1109 -1 0 256;
+#X obj 241 128 nbx 5 18 55 3520 1 0 goo14_snd goo14_rcv log.freq. 10
+-10 0 14 -261234 -159808 -90881 55 72;
+#X text 363 157 and receive names. Right-;
+#X text 363 172 click and choose;
+#X text 362 141 [nbx] has settable send;
+#X obj 466 48 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/nbx -text
+pdpedia: nbx;
+#X text 168 268 - a float to the left inlet will be displayed \, stored
+\, and sent to the outlet.;
+#X text 168 338 - a list will be truncated to the first item.;
+#X text 98 311 set;
+#X text 168 311 - sending a set message followed by a value (e.g. \,
+"set 14") will display and store the value without outputting it.;
+#X text 97 360 see the following subpatch for messages that change
+the gui-properties of [nbx]:;
+#N canvas 49 27 446 599 Changing_GUI_Properties 0;
+#X text 17 152 log height;
+#X text 340 24 no init;
+#X msg 350 94 init 1;
+#X msg 340 43 init 0;
+#X msg 242 64 lin;
+#X msg 252 94 log;
+#X text 238 24 linear/;
+#X text 238 39 logarithmical;
+#X text 349 58 init value;
+#X text 350 73 on loadbang;
+#X obj 242 119 s nbx_rcv;
+#X obj 340 119 s nbx_rcv;
+#X msg 17 175 log_height 256;
+#X obj 17 245 s nbx_rcv;
+#X text 346 152 label;
+#X msg 346 172 label blabla;
+#X text 115 153 change send name;
+#X text 220 152 change receive name;
+#X obj 117 245 s nbx_rcv;
+#X obj 223 245 s nbx_rcv;
+#X obj 346 245 s nbx_rcv;
+#X msg 117 175 send nbx1_snd;
+#X msg 127 200 send nbx_snd;
+#X obj 231 222 s z_rcv;
+#X msg 223 174 receive z_rcv;
+#X msg 231 199 receive nbx_rcv;
+#N canvas 372 228 161 250 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-xpos 320 \; \$1-ypos 330 \; \$1-xlabel 0 \; \$1-ylabel
+-8 \; \$1-font-size 10 \; \$1-width 5 \; \$1-height 14 \; \$1-bg 0
+\; \$1-front 12 \; \$1-label 12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 360 400 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-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 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 124 44 pd flash-time;
+#X text 121 23 output-range;
+#X text 173 46 1.bottom;
+#X text 173 66 2.top;
+#X msg 124 94 range \$1 \$2;
+#X obj 124 118 s nbx_rcv;
+#X text 15 280 label position;
+#X text 137 280 font properties;
+#X msg 17 387 label_pos \$1 \$2;
+#X msg 139 387 label_font \$1 \$2;
+#X text 188 304 1.font(0-2);
+#X text 188 325 2.height;
+#X text 66 303 1.x-offset;
+#X text 66 324 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 17 302 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 139 302 pd flash-time;
+#X text 18 445 preset-colors;
+#X text 119 445 RGB-colors;
+#X msg 18 552 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 18 467 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 120 467 pd flash-time;
+#X text 67 469 1.bg;
+#X text 67 489 2.front;
+#X text 67 510 3.label;
+#X text 348 445 delta;
+#X text 236 445 position;
+#X msg 237 540 pos \$1 \$2;
+#X msg 349 540 delta \$1 \$2;
+#X obj 349 516 list;
+#X obj 349 467 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#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 320 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 330 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 237 467 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 378 467 pd flash-time;
+#X obj 304 291 cnv 15 92 92 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 305 292 cnv 15 90 90 empty empty empty 20 12 0 14 -261682 -66577
+0;
+#X obj 320 330 nbx 5 14 -1e+37 1e+37 0 0 nbx_snd nbx_rcv my_nbx 0 -8
+0 10 -262144 -33289 -33289 0 256;
+#X obj 17 412 s nbx_rcv;
+#X obj 139 412 s nbx_rcv;
+#X obj 18 577 s nbx_rcv;
+#X obj 349 577 s nbx_rcv;
+#X obj 237 577 s nbx_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 5 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 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 17 44 pd flash-time;
+#X obj 17 118 s nbx_rcv;
+#X text 66 46 1.width;
+#X text 66 66 2.height;
+#X text 14 23 dimensions;
+#X msg 17 94 size \$1 \$2;
+#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 [nbx] Changing GUI Properties through Messages;
+#X msg 356 197 label my_nbx;
+#X text 285 466 1.x-pos;
+#X text 285 488 2.y-pos;
+#X connect 2 0 11 0;
+#X connect 3 0 11 0;
+#X connect 4 0 10 0;
+#X connect 5 0 10 0;
+#X connect 12 0 13 0;
+#X connect 15 0 20 0;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 24 0 19 0;
+#X connect 25 0 23 0;
+#X connect 27 0 31 0;
+#X connect 31 0 32 0;
+#X connect 35 0 62 0;
+#X connect 36 0 63 0;
+#X connect 41 0 35 0;
+#X connect 42 0 36 0;
+#X connect 45 0 64 0;
+#X connect 46 0 45 0;
+#X connect 47 0 45 0;
+#X connect 53 0 66 0;
+#X connect 54 0 65 0;
+#X connect 55 0 54 0;
+#X connect 56 0 55 0;
+#X connect 57 0 53 0;
+#X connect 58 0 55 1;
+#X connect 67 0 72 0;
+#X connect 72 0 68 0;
+#X connect 75 0 20 0;
+#X restore 170 394 pd Changing_GUI_Properties;
+#N canvas 73 200 428 314 nbx-creation-arguments 0;
+#X text 21 37 "nbx" 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 171 For example \, click the msg-box to dynamically create
+an nbx:;
+#X obj 22 235 s pd-nbx-creation-arguments;
+#X text 22 97 nbx creation arguments: xSize ySize rangeBtm rangeTop
+Logarithmic Init sendName receiveName Label labelXOff labelYOff Font#
+fontsize bgColor foregroundColor lblColor initValue logHeight;
+#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 [nbx] Creation Arguments;
+#X msg 22 193 obj 150 280 nbx 5 14 0 127 0 1 send receive Maia 15 -8
+0 13 14 12 23 63 256;
+#X connect 6 0 2 0;
+#X restore 170 519 pd nbx-creation-arguments;
+#X text 168 465 - if you create an [nbx] object without arguments \,
+default values are chosen for the GUI-properties. See the subpatch
+below to learn how to dynamically instantiate a [nbx] with custom properties:
+;
+#X text 115 208 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 362 188 "Properties" to set them.;
+#X text 11 23 gui-number box;
+#X text 97 466 18;
+#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 425 4 [my_numbox] or [nbx];
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 295 bang;
+#X text 168 295 - output the current value;
+#X connect 13 0 16 0;
+#X connect 14 0 36 0;
+#X connect 15 0 36 0;
+#X connect 17 0 36 0;
+#X connect 18 0 14 0;
+#X connect 19 0 28 0;
+#X connect 20 0 34 0;
+#X connect 21 0 22 0;
+#X connect 25 0 26 0;
+#X connect 26 0 37 0;
+#X connect 28 0 33 0;
+#X connect 32 0 31 0;
+#X connect 35 0 24 0;
+#X connect 36 0 32 0;
+#X connect 36 0 13 0;
+#X connect 37 0 21 0;
+#X connect 37 0 23 0;
diff --git a/doc/pddp/openpanel-help.pd b/doc/pddp/openpanel-help.pd
new file mode 100644
index 00000000..5b7f13b5
--- /dev/null
+++ b/doc/pddp/openpanel-help.pd
@@ -0,0 +1,77 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control GUI;
+#X text 12 85 DESCRIPTION query the user for a filename;
+#X text 12 25 NAME openpanel;
+#X text 12 125 INLET_0 bang symbol;
+#X text 12 145 OUTLET_0 symbol;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/operators-help.pd b/doc/pddp/operators-help.pd
index f64e8c53..f7aee80b 100644
--- a/doc/pddp/operators-help.pd
+++ b/doc/pddp/operators-help.pd
@@ -1,283 +1,109 @@
-#N canvas 23 29 924 644 10;
-#X obj 637 350 +~;
-#X obj 641 499 trigger;
-#X text 25 8 ARITHMETIC;
-#X text 30 29 Pd's arithmetic objects include:;
-#X obj 231 30 +;
-#X obj 256 30 -;
-#X obj 282 30 *;
-#X obj 308 30 /;
-#X obj 334 30 pow;
-#X obj 359 30 max;
-#X obj 385 30 min;
-#X obj 32 276 +;
-#X floatatom 32 205 0 0 0 0 - - -;
-#X floatatom 32 297 0 0 0 0 - - -;
-#X floatatom 45 228 0 0 0 0 - - -;
-#X msg 63 254 bang;
-#X text 98 255 Bang outputs sum;
-#X text 70 204 Numbers in left inlet add and output sum;
-#X text 87 227 Numbers in right inlet only change the inlet's value
+#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 (binops1) 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 51 246 507 358 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 125 DATATYPE_IN bang float list;
+#X text 12 145 DATATYPE_OUT float;
+#X text 12 85 DESCRIPTION binary arithmetic operators;
+#X text 12 25 NAME + - * / pow max min;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control trigonometry;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 442 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 479 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 523 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 94 481 428 109 Related_objects 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 56 75 cos~;
+#X obj 88 75 osc~;
+#X obj 22 75 expr;
+#X obj 22 42 sin;
+#X obj 48 42 cos;
+#X obj 75 42 tan;
+#X obj 108 42 atan;
+#X obj 143 42 atan2;
+#X obj 181 42 exp;
+#X obj 208 42 log;
+#X obj 236 42 abs;
+#X obj 265 42 sqrt;
+#X text 7 1 (arithmetic_operators) Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 333 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 386 list;
+#X text 98 450 float;
+#X obj 78 451 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 414 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 413 float;
+#X text 78 499 1) float;
+#X obj 363 3 +;
+#X obj 388 3 -;
+#X obj 414 3 *;
+#X obj 440 3 /;
+#X obj 466 3 pow;
+#X obj 491 3 max;
+#X obj 517 3 min;
+#X obj 429 20 pddp/pddplink http://wiki.puredata.info/en/operators
+-text pdpedia: operators;
+#X obj 128 166 +;
+#X msg 94 124 3 4;
+#X floatatom 128 124 5 0 0 0 - - -;
+#X floatatom 169 124 5 0 0 0 - - -;
+#X floatatom 128 193 5 0 0 0 - - -;
+#X msg 54 124 bang;
+#X text 98 332 bang;
+#X text 98 357 float;
+#X text 168 413 - a float to the right inlet is stored.;
+#X text 168 332 - perform the operation using the last values stored
+at the inlets.;
+#X text 168 357 - store the incoming value at the left inlet and perform
+the operation.;
+#X text 168 384 - a pair of floats will be distributed to the two inlets.
;
-#X text 29 171 The example below performs basic addition with two numbers:
-i.e. a + b = c;
-#X text 28 54 All of these objects operate the same way. The right
-inlet sets or changes the numeric value of the object. Sending a number
-to the left inlet forces the object to perform the operation with the
-current numeric value of the object and output the result. A "bang"
-will output the result without changing the numeric values at either
-inlet. A creation argument can be used to define the initial numeric
-value of the right inlet.;
-#X text 29 325 The example below incorporates a creation argument:
-i.e. a + 42 = b;
-#X floatatom 29 357 0 0 0 0 - - -;
-#X floatatom 29 400 0 0 0 0 - - -;
-#X obj 29 379 + 42;
-#N canvas 38 134 637 241 basic_examples 0;
-#X obj 44 129 +;
-#X obj 113 129 -;
-#X obj 179 129 *;
-#X obj 244 129 /;
-#X obj 316 129 pow;
-#X obj 394 129 max;
-#X obj 482 129 min;
-#X floatatom 44 32 5 0 0 0 - - -;
-#X floatatom 44 150 0 0 0 0 - - -;
-#X floatatom 113 149 0 0 0 0 - - -;
-#X floatatom 179 149 0 0 0 0 - - -;
-#X floatatom 244 149 0 0 0 0 - - -;
-#X floatatom 316 149 0 0 0 0 - - -;
-#X floatatom 394 150 0 0 0 0 - - -;
-#X floatatom 482 149 0 0 0 0 - - -;
-#X floatatom 495 32 5 0 0 0 - - -;
-#X msg 360 32 bang;
-#X connect 0 0 8 0;
-#X connect 1 0 9 0;
-#X connect 2 0 10 0;
-#X connect 3 0 11 0;
-#X connect 4 0 12 0;
-#X connect 5 0 13 0;
-#X connect 6 0 14 0;
-#X connect 7 0 0 0;
-#X connect 7 0 1 0;
-#X connect 7 0 2 0;
-#X connect 7 0 3 0;
-#X connect 7 0 4 0;
-#X connect 7 0 5 0;
-#X connect 7 0 6 0;
-#X connect 15 0 6 1;
-#X connect 15 0 5 1;
-#X connect 15 0 4 1;
-#X connect 15 0 3 1;
-#X connect 15 0 2 1;
-#X connect 15 0 1 1;
-#X connect 15 0 0 1;
-#X connect 16 0 0 0;
-#X connect 16 0 1 0;
-#X connect 16 0 2 0;
-#X connect 16 0 3 0;
-#X connect 16 0 4 0;
-#X connect 16 0 5 0;
-#X connect 16 0 6 0;
-#X restore 28 542 pd basic_examples;
-#X text 29 425 + - * / are probably self-explanatory...if you are using
-PD \, then it is safe to say that you have passed third grade.;
-#X text 27 463 However \, [pow] \, [max] \, and [min] objects may need
-some explanation.;
-#N canvas 0 22 452 302 understanding_POW 0;
-#X text 12 25 [POW];
-#X obj 17 66 pow 2;
-#X floatatom 17 86 2 0 0 0 - - -;
-#X msg 17 46 2;
-#X text 61 115 - it is important to note that [pow] only works with
-NON-negative mantissas. That is to say that negative floating point
-fractions will be ignored.;
-#X obj 18 153 pow 2;
-#X floatatom 18 173 2 0 0 0 - - -;
-#X msg 13 111 -2;
-#X msg 24 132 -1.5;
-#X text 65 202 - however \, [pow] is capable of computing negative
-exponents!;
-#X floatatom 19 201 0 0 0 0 - - -;
-#X obj 19 221 pow -2;
-#X floatatom 19 242 0 0 0 0 - - -;
-#X text 57 39 - this object is used to exponentiate a number. The object
-returns the value at the left inlet to the power of the right inlet
-where the left inlet is the base and the right inlet is the exponent.
-For example: 2 to the power of 2 = 4 (i.e. 2 Squared);
-#X connect 1 0 2 0;
-#X connect 3 0 1 0;
-#X connect 5 0 6 0;
-#X connect 7 0 5 0;
-#X connect 8 0 5 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X restore 28 497 pd understanding_POW;
-#N canvas 0 22 474 341 understanding_MAX_and_MIN 0;
-#X text 34 9 [MAX];
-#X obj 32 51 max 10;
-#X floatatom 32 29 5 0 0 0 - - -;
-#X floatatom 32 76 5 0 0 0 - - -;
-#X text 87 26 - [max] returns the greater of the two numbers passed
-to its inlets. For example \, if the creation argument (or right inlet)
-is equal to 10 \, and you send 9 to the left inlet then the object
-will return 10 If you pass it an 11 \, then object returns 11;
-#X floatatom 33 116 5 0 0 0 - - -;
-#X floatatom 33 163 5 0 0 0 - - -;
-#X text 35 96 [MIN];
-#X text 88 113 - [min] returns the lesser of the two numbers passed
-to its inlets. For example \, if the creation argument (or right inlet)
-is equal to 10 \, and you send 9 to the left inlet then the object
-will return 9 If you pass it an 11 \, then object returns 10;
-#X obj 33 138 min 10;
-#X text 32 185 - It is important to note that [max] and [min] output
-a number with every number or "bang" that is sent to the left inlet.
-;
-#X floatatom 35 234 5 0 0 0 - - -;
-#X floatatom 35 282 5 0 0 0 - - -;
-#X obj 35 256 min 10;
-#X obj 76 281 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 80 232 Move this number box above 10;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 5 0 9 0;
-#X connect 9 0 6 0;
-#X connect 11 0 13 0;
-#X connect 13 0 12 0;
-#X connect 13 0 14 0;
-#X restore 28 519 pd understanding_MAX_and_MIN;
-#X obj 430 568 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 430 12 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 469 20 THE SUM OF MANY NUMBERS;
-#X text 473 40 Pd has wonderful object called [expr] which allows you
-to write mathematical expressions. I would suggest that you investigate
-the [expr] object to process basic mathematical equations with more
-than 2 separate values.;
-#X msg 481 151 bang;
-#X obj 481 203 random 10;
-#X obj 543 203 random 10;
-#X obj 605 203 random 10;
-#X text 509 222 a;
-#X text 571 223 b;
-#X text 632 222 c;
-#X text 512 288 d;
-#X floatatom 481 288 0 0 0 0 - - -;
-#X obj 481 172 t b b b;
-#X obj 481 245 +;
-#X obj 481 266 +;
-#X floatatom 481 223 0 0 0 0 - - -;
-#X floatatom 543 223 0 0 0 0 - - -;
-#X floatatom 605 223 0 0 0 0 - - -;
-#X text 474 102 Having said that \, it IS possible to build equations
-with multiple elements using these basic math objects \, as in the
-example below: (i.e. a + b + c = d);
-#X text 469 324 RELATED OBJECTS;
-#X obj 666 350 -~;
-#X obj 695 350 *~;
-#X obj 723 350 /~;
-#X obj 751 350 max~;
-#X obj 781 350 min~;
-#X text 540 350 Audio Math;
-#X obj 637 374 ==;
-#X obj 695 374 >;
-#X obj 751 374 <;
-#X obj 723 374 >=;
-#X obj 781 373 <=;
-#X obj 667 374 !=;
-#X text 504 375 Relational Tests;
-#X text 498 398 Logical Operators;
-#X obj 638 398 &;
-#X obj 667 398 |;
-#X obj 695 398 &&;
-#X obj 723 398 ||;
-#X obj 751 398 <<;
-#X obj 781 398 >>;
-#X obj 695 499 expr;
-#X obj 637 422 mtof;
-#X obj 668 422 ftom;
-#X obj 699 422 powtodb;
-#X obj 749 422 rmstodb;
-#X obj 799 422 dbtopow;
-#X obj 849 422 dbtorms;
-#X text 445 423 Acoustical Unit Conversion;
-#X text 537 450 Higher Math;
-#X obj 808 374 mod;
-#X obj 835 374 div;
-#X obj 641 449 sin;
-#X obj 667 449 cos;
-#X obj 694 449 tan;
-#X obj 721 449 atan;
-#X obj 640 473 atan2;
-#X obj 731 499 random;
-#X obj 678 473 sqrt;
-#X obj 709 473 log;
-#X obj 735 473 exp;
-#X obj 761 473 abs;
-#X text 570 499 Other;
-#N canvas 181 122 454 304 related_objects_from_other_libraries 0;
-#X obj 37 25 vector+;
-#X obj 37 45 vector-;
-#X obj 37 65 vector*;
-#X obj 85 25 vector/;
-#X obj 85 45 rgb2hsv;
-#X obj 85 65 hsv2rgb;
-#X obj 133 25 abs~;
-#X obj 133 45 db2v;
-#X obj 133 65 v2db;
-#X obj 163 25 avg~;
-#X obj 164 45 tavg~;
-#X obj 164 65 pdf~;
-#X obj 201 24 <~;
-#X obj 201 45 ==~;
-#X obj 201 67 >~;
-#X obj 228 25 &&~;
-#X obj 228 46 ||~;
-#X obj 228 67 matrix~;
-#X obj 280 25 mavg;
-#X obj 280 46 mean;
-#X obj 280 68 divide;
-#X obj 323 27 divmod;
-#X obj 324 47 minus;
-#X obj 324 67 plus;
-#X text 29 104 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 28 153 The best places to find information about Pd's libraries
-is:;
-#X text 25 175 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 27 190 or;
-#X text 27 205 iem.kug.ac.at/pdb/;
-#X obj 370 27 q8_rsqrt~;
-#X obj 370 51 q8_sqrt~;
-#X restore 520 537 pd related_objects_from_other_libraries;
-#X obj 778 499 f;
-#X obj 806 499 int;
-#X obj 809 398 %;
-#X obj 251 539 timer;
-#X text 292 584 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 obj 754 449 pow;
-#X connect 11 0 13 0;
-#X connect 12 0 11 0;
-#X connect 14 0 11 1;
-#X connect 15 0 11 0;
-#X connect 22 0 24 0;
+#X floatatom 259 124 5 0 0 0 - - -;
+#X floatatom 259 193 5 0 0 0 - - -;
+#X obj 259 168 * 2;
+#X text 118 239 All of these objects share the same behavior.;
+#X obj 364 170 pow 4;
+#X floatatom 364 193 0 0 0 0 - - -;
+#X floatatom 403 126 5 0 0 0 - - -;
+#X floatatom 364 126 5 0 0 0 - - -;
+#X obj 98 542 pddp/pddplink pow-help.pd;
+#X text 168 499 - initializes the value of the right inlet.;
+#X text 98 527 Click below for individual help patches:;
+#X obj 98 557 pddp/pddplink min-help.pd;
+#X obj 98 572 pddp/pddplink max-help.pd;
+#X text 11 23 binary arithmetic operators;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 23 0 27 0;
#X connect 24 0 23 0;
-#X connect 31 0 30 0;
-#X connect 34 0 43 0;
-#X connect 35 0 46 0;
-#X connect 36 0 47 0;
-#X connect 37 0 48 0;
-#X connect 43 0 35 0;
-#X connect 43 1 36 0;
-#X connect 43 2 37 0;
-#X connect 44 0 45 0;
-#X connect 45 0 42 0;
-#X connect 46 0 44 0;
-#X connect 47 0 44 1;
-#X connect 48 0 45 1;
+#X connect 25 0 23 0;
+#X connect 26 0 23 1;
+#X connect 28 0 23 0;
+#X connect 35 0 37 0;
+#X connect 37 0 36 0;
+#X connect 39 0 40 0;
+#X connect 41 0 39 1;
+#X connect 42 0 39 0;
diff --git a/doc/pddp/osc~-help.pd b/doc/pddp/osc~-help.pd
new file mode 100644
index 00000000..2b5873e1
--- /dev/null
+++ b/doc/pddp/osc~-help.pd
@@ -0,0 +1,102 @@
+#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 osc~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 358 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS signal trigonometry;
+#X text 12 85 DESCRIPTION cosine wave oscillator;
+#X text 12 25 NAME osc~;
+#X text 12 125 INLET_0 signal float;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 456 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 493 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 107 477 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 [osc~] Related Objects;
+#X obj 83 42 cos~;
+#X obj 127 42 tabread4~;
+#X obj 23 42 phasor~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 367 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 366 float;
+#X obj 78 465 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 410 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 409 float;
+#X obj 492 3 osc~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/osc~ -text
+pdpedia: osc~;
+#X obj 229 253 dac~ 1;
+#X obj 229 223 *~;
+#X floatatom 65 126 0 0 0 0 - - -;
+#X obj 243 195 line~;
+#X msg 243 139 0.1 100;
+#X msg 262 164 0 100;
+#X text 314 134 on;
+#X text 311 163 off;
+#X text 280 188 envelope;
+#X text 280 201 generator;
+#X text 227 114 amplitude controls:;
+#X text 226 270 audio output;
+#X obj 83 228 metro 500;
+#X text 65 270 graph the output;
+#X text 89 132 change frequency;
+#X text 91 120 incoming numbers;
+#X obj 65 155 osc~ 1000;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 100 float 0;
+#X coords 0 -1 100 1 150 100 1;
+#X restore 374 172 graph;
+#X text 98 386 signal;
+#X text 98 464 signal;
+#X obj 83 203 loadbang;
+#X text 98 429 list;
+#X text 11 23 cosine wave oscillator;
+#X text 168 511 - sets the initial frequency. If the argument is supplied
+\, [osc~] takes floating-point messages to change frequency. If no
+argument is supplied \, the input is taken to be an audio signal.;
+#X text 168 366 - an incoming float changes the frequency.;
+#X text 168 386 - an incoming signal changes the frequency.;
+#X text 167 409 - a float to the right inlet resets the phase.;
+#X text 167 429 - a list will be truncated to the first element.;
+#X text 80 511 1) float;
+#X text 167 464 - the outgoing cosine wave.;
+#X text 22 60 The [osc~] object outputs a cosine wave. With a floating-point
+argument \, [osc~] takes floating-point messages to change frequency.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 66 253 tabwrite~ \$0-array;
+#X connect 16 0 15 0;
+#X connect 17 0 31 0;
+#X connect 18 0 16 1;
+#X connect 19 0 18 0;
+#X connect 20 0 18 0;
+#X connect 27 0 48 0;
+#X connect 31 0 16 0;
+#X connect 31 0 48 0;
+#X connect 35 0 27 0;
+#X connect 35 0 27 0;
diff --git a/doc/pddp/otherbinops-help.pd b/doc/pddp/otherbinops-help.pd
index 6481cf15..09cd579e 100644
--- a/doc/pddp/otherbinops-help.pd
+++ b/doc/pddp/otherbinops-help.pd
@@ -1,124 +1,288 @@
-#N canvas 16 22 895 663 10;
-#X floatatom 217 438 0 0 0 0 - - -;
-#X floatatom 267 517 0 0 0 0 - - -;
-#X obj 466 28 &;
-#X obj 494 28 |;
-#X obj 574 28 &&;
-#X obj 601 28 ||;
-#X obj 7 25 >;
-#X obj 36 25 >=;
-#X obj 67 24 ==;
-#X obj 125 24 <=;
-#X obj 153 24 <;
-#X obj 217 417 >;
-#X obj 267 496 ==;
-#X obj 96 24 !=;
-#X obj 521 28 <<;
-#X obj 548 28 >>;
-#X obj 627 28 %;
-#X text 464 5 THE LOGICAL OPERATORS -- A.K.A. "Bit Twiddling";
-#X text 6 6 THE RELATIONAL OPERATORS;
-#N canvas 0 22 454 304 understanding_%_modulus 0;
-#X text 24 23 MODULUS - [%];
-#X floatatom 28 187 0 0 0 0 - - -;
-#X text 22 40 - this object has nothing to do with percentage!;
-#X text 20 54 - a modulus is a number by which two given numbers can
+#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 (binops2-3) 3 12
+0 18 -204280 -1 0;
+#X obj 0 178 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS This document 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. Revised by Jonathan Wilkes to conform to the PDDP template.;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION relational and logical operators;
+#X text 12 25 NAME > >= == != <= < mod div & | << >> && || %;
+#X text 12 5 GENRE help;
+#X text 12 205 RELEASE_VERSION;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 301 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 338 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 381 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 69 435 428 156 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 (binops2-3) Related Objects;
+#X text 138 57 - binary arithmetic operators;
+#X obj 19 57 pddp/pddplink operators-help.pd;
+#X obj 19 77 pddp/pddplink math-help.pd;
+#X text 138 77 - higher math in Pd;
+#X text 19 37 Links to other control operators;
+#X text 19 107 Links to signal operators;
+#X obj 19 127 pddp/pddplink sigbinops-help.pd;
+#X restore 102 598 pd Related_objects;
+#X obj 79 187 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 309 float;
+#X obj 79 310 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 79 273 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 272 float;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/bag -text
+pdpedia: bag;
+#X text 11 23 relational and logical operators;
+#X obj 127 4 >;
+#X obj 154 4 >=;
+#X obj 182 4 ==;
+#X obj 236 4 <=;
+#X obj 264 4 <;
+#X obj 209 4 !=;
+#X obj 290 4 mod;
+#X obj 317 4 div;
+#X obj 366 4 &;
+#X obj 394 4 |;
+#X obj 474 4 &&;
+#X obj 501 4 ||;
+#X obj 421 4 <<;
+#X obj 448 4 >>;
+#X obj 527 4 %;
+#X text 341 4 and;
+#X floatatom 254 51 5 0 0 0 - - -;
+#X floatatom 296 51 5 0 0 0 - - -;
+#X obj 254 88 >;
+#X floatatom 254 125 5 0 0 0 - - -;
+#X msg 219 51 bang;
+#X text 98 186 bang;
+#X text 168 186 - a bang outputs the last value computed by the object.
+;
+#X text 98 206 list;
+#X text 168 206 - a pair of floats is distributed to the two inlets.
+Lists with more than two elements will be truncated.;
+#X text 98 236 float;
+#X text 168 236 - a float will be stored at the left inlet and used
+to evaluate and output a value.;
+#X text 167 272 - a float to the right inlet will be stored.;
+#X text 168 309 - all relational and logical operators output a float
+value.;
+#X text 80 358 1) float;
+#X text 167 358 - (optional) initial value for the right inlet.;
+#X text 142 154 All these objects share similar behavior.;
+#X msg 183 51 2 1;
+#N canvas 48 6 428 611 understanding_MOD_and_DIV 0;
+#X text 24 35 [mod] and [div] are helpful objects to determine whether
+or not a fraction produces a remainder \, or to determine the value
+of the remainder.;
+#X floatatom 28 195 0 0 0 0 - - -;
+#X floatatom 28 237 0 0 0 0 - - -;
+#X floatatom 140 197 0 0 0 0 - - -;
+#X text 60 196 divided by;
+#X text 175 198 has a remainder of;
+#X floatatom 302 198 0 0 0 0 - - -;
+#X obj 28 216 mod;
+#X text 25 108 [mod] takes a number in its left inlet and will divide
+that number by either the creation argument or the number given at
+its left inlet and will produce the value of the remainder at its outlet.
+If no creation argument is given \, then the default value is 1;
+#X obj 80 178 loadbang;
+#X msg 140 178 1;
+#X text 25 260 [div] takes a number in its left inlet and will divide
+that number by either the creation argument or the number given at
+its left inlet and will produce the result without a remainder. If
+no creation argument is given \, then the default value is 1;
+#X floatatom 28 341 0 0 0 0 - - -;
+#X floatatom 28 383 0 0 0 0 - - -;
+#X floatatom 140 343 0 0 0 0 - - -;
+#X text 60 342 divided by;
+#X floatatom 256 344 0 0 0 0 - - -;
+#X obj 80 324 loadbang;
+#X msg 140 324 1;
+#X obj 28 362 div;
+#X text 176 343 is equal to;
+#X text 294 343 with no remainder.;
+#X obj 257 371 /;
+#X floatatom 257 391 0 0 0 0 - - -;
+#X text 227 389 or;
+#X text 297 392 with a remainder.;
+#X text 25 413 In the following example \, I've built a metronome which
+counts bar numbers and beat numbers: default time signature is 4/4
+(Common Time).;
+#X obj 28 474 metro 500;
+#X obj 28 455 tgl 15 0 empty empty Start-Stop 20 8 0 8 -262144 -1 -1
+0 1;
+#X obj 53 495 + 1;
+#X floatatom 28 515 0 0 0 0 - - -;
+#X text 57 513 Total Beat Count;
+#X obj 28 539 div 4;
+#X obj 139 540 mod 4;
+#X floatatom 224 581 0 0 0 0 - - -;
+#X floatatom 113 580 0 0 0 0 - - -;
+#X obj 28 495 f 1;
+#X msg 112 453 1;
+#X obj 28 559 + 1;
+#X obj 139 559 + 1;
+#X text 136 453 Reset;
+#X text 39 579 Bar number;
+#X text 152 581 Beat Count;
+#X floatatom 344 491 0 0 0 0 - - -;
+#X text 181 491 How many beats per bar?;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) [mod] and [div];
+#X text 25 76 For example \, 3 / 3 = 1 with a remainder of zero (i.e.
+no remainder) \, while \, 4 / 3 = 1 with a remainder of one.;
+#X connect 1 0 7 0;
+#X connect 2 0 6 0;
+#X connect 3 0 7 1;
+#X connect 7 0 2 0;
+#X connect 9 0 10 0;
+#X connect 10 0 3 0;
+#X connect 12 0 19 0;
+#X connect 12 0 22 0;
+#X connect 13 0 16 0;
+#X connect 14 0 19 1;
+#X connect 14 0 22 1;
+#X connect 17 0 18 0;
+#X connect 18 0 14 0;
+#X connect 19 0 13 0;
+#X connect 22 0 23 0;
+#X connect 27 0 36 0;
+#X connect 28 0 27 0;
+#X connect 29 0 36 1;
+#X connect 30 0 32 0;
+#X connect 30 0 33 0;
+#X connect 32 0 38 0;
+#X connect 33 0 39 0;
+#X connect 36 0 29 0;
+#X connect 36 0 30 0;
+#X connect 37 0 36 1;
+#X connect 38 0 35 0;
+#X connect 39 0 34 0;
+#X connect 43 0 33 1;
+#X connect 43 0 32 1;
+#X restore 101 430 pd understanding_MOD_and_DIV;
+#N canvas 60 308 428 254 understanding_%_modulus 0;
+#X floatatom 21 184 0 0 0 0 - - -;
+#X text 18 36 - this object has nothing to do with percentage!;
+#X text 18 56 - a modulus is a number by which two given numbers can
be divided and produce the same remainder.;
-#X text 21 81 - in the example below: 9 / 2 = 4.5 \, and 7 / 2 = 3.5.
+#X text 18 86 - in the example below: 9 / 2 = 4.5 \, and 7 / 2 = 3.5.
Hence if 7 and 9 are divided by 2 \, then the remainder of both equations
is .5. Therefore \, the modulus of 7 and 9 is "2".;
-#X msg 28 138 9;
-#X obj 28 166 % 7;
-#X floatatom 62 142 5 0 0 0 - - -;
-#X text 20 222 Note that the modulus operator is not a "bitwise" operator
+#X msg 21 135 9;
+#X obj 21 163 % 7;
+#X floatatom 55 135 5 0 0 0 - - -;
+#X text 18 214 Note that the modulus operator is not a "bitwise" operator
\, but a math function.;
-#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 6 0;
-#X restore 476 418 pd understanding_%_modulus;
-#X text 478 252 Below is a brief explanation of each of these logical
-operators.;
-#X text 473 53 These objects are adopted from the mother of all object
-oriented languages: C. They are "bitwise" operators which perform logical
-and shift operations on 32-bit numbers.;
-#X text 467 100 WHAT DOES "BITWISE" MEAN?;
-#X text 478 208 Hence \, performing "bitwise" relational tests means
-that Pd can compare "1101" to "1001" instead of operating with the
-integers that are represented by those binary codes.;
-#N canvas 81 197 456 306 understanding_&_AND 0;
-#X obj 33 216 &;
-#X floatatom 87 182 5 0 0 0 - - -;
-#X floatatom 129 183 5 0 0 0 - - -;
-#X msg 33 154 13;
-#X msg 62 155 9;
-#X text 18 18 [&] -- This is the bitwise AND operator which returns
-a "1" for each bit position where the corresponding bits of both its
-operands are "1". For example:;
-#X text 22 67 13 = "1101";
-#X text 28 79 9 = "1001";
-#X text 15 92 Hence:"1001";
-#X obj 33 114 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) Modulus [%];
+#X connect 4 0 5 0;
+#X connect 5 0 0 0;
+#X connect 6 0 5 0;
+#X restore 281 562 pd understanding_%_modulus;
+#N canvas 86 152 428 280 understanding_&_AND 0;
+#X obj 174 221 &;
+#X floatatom 228 187 5 0 0 0 - - -;
+#X floatatom 270 188 5 0 0 0 - - -;
+#X msg 174 164 13;
+#X msg 203 165 9;
+#X text 26 119 13 = "1101";
+#X text 32 131 9 = "1001";
+#X text 19 144 Hence:"1001";
+#X obj 174 124 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 33 132 t b b;
-#X text 101 66 When comparing the binary codes for 13 and 9 \, we can
-see that the first and fourth digits of both codes are 1 Hence the
-result will be "1001" -- in other words "9".;
-#X floatatom 33 238 0 0 0 0 - - -;
-#X connect 0 0 12 0;
+#X obj 174 142 t b b;
+#X floatatom 174 243 0 0 0 0 - - -;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 18 35 [&] -- This is the bitwise AND operator which returns
+a "1" for each bit position where the corresponding bits of both its
+operands are "1".;
+#X text 19 77 When comparing the binary codes for 13 and 9 (below)
+\, we can see that the first and fourth digits of both codes are "1".
+Hence the result will be "1001" -- in other words "9".;
+#X text 7 1 (binops2-3) The [&] Object;
+#X connect 0 0 10 0;
#X connect 1 0 0 0;
#X connect 2 0 0 1;
#X connect 3 0 0 0;
#X connect 4 0 0 1;
-#X connect 9 0 10 0;
-#X connect 10 0 3 0;
-#X connect 10 1 4 0;
-#X restore 478 286 pd understanding_&_AND;
-#N canvas 190 317 454 304 understanding_|_OR 0;
-#X floatatom 32 247 0 0 0 0 - - -;
-#X floatatom 86 191 5 0 0 0 - - -;
-#X floatatom 128 192 5 0 0 0 - - -;
-#X msg 32 163 13;
-#X msg 61 164 9;
-#X text 21 76 13 = "1101";
-#X text 27 88 9 = "1001";
-#X obj 32 123 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X connect 9 1 4 0;
+#X restore 281 430 pd understanding_&_AND;
+#N canvas 90 161 428 293 understanding_|_OR 0;
+#X floatatom 137 261 0 0 0 0 - - -;
+#X floatatom 191 205 5 0 0 0 - - -;
+#X floatatom 233 206 5 0 0 0 - - -;
+#X msg 137 177 13;
+#X msg 166 178 9;
+#X text 26 131 13 = "1101";
+#X text 32 143 9 = "1001";
+#X obj 137 137 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 32 141 t b b;
-#X text 18 18 [|] -- This is the bitwise OR operator which returns
+#X obj 137 155 t b b;
+#X text 19 156 Hence:"1101";
+#X obj 137 239 |;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) Related Objects;
+#X text 17 35 [|] -- This is the bitwise OR operator which returns
a "1" for each bit position where one OR both of the corresponding
-bits of both its operands is a "1". For example:;
-#X text 14 101 Hence:"1101";
-#X text 98 76 When comparing the binary codes for 13 and 9 \, we can
-see that the first and fourth digits of both codes are both 1 and the
-second position of 13 is a one. Hence the result will be "1101" --
-in other words "13".;
-#X obj 32 225 |;
-#X connect 1 0 12 0;
-#X connect 2 0 12 1;
-#X connect 3 0 12 0;
-#X connect 4 0 12 1;
+bits of both its operands is a "1".;
+#X text 18 77 When comparing the binary codes for 13 and 9 (below)
+\, we can see that the first and fourth digits of both codes are both
+1 and the second position of 13 is a one. Hence the result will be
+"1101" -- in other words "13".;
+#X connect 1 0 10 0;
+#X connect 2 0 10 1;
+#X connect 3 0 10 0;
+#X connect 4 0 10 1;
#X connect 7 0 8 0;
#X connect 8 0 3 0;
#X connect 8 1 4 0;
-#X connect 12 0 0 0;
-#X restore 478 307 pd understanding_|_OR;
-#N canvas 0 22 454 304 understanding_<<_LEFT-SHIFT 0;
-#X obj 46 142 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X connect 10 0 0 0;
+#X restore 281 452 pd understanding_|_OR;
+#N canvas 92 198 428 276 understanding_<<_LEFT-SHIFT 0;
+#X obj 21 142 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 46 160 t b b;
-#X msg 46 181 13;
-#X obj 46 222 <<;
-#X floatatom 46 244 5 0 0 0 - - -;
-#X msg 74 181 2;
-#X floatatom 112 193 5 0 0 0 - - -;
-#X floatatom 160 193 5 0 0 0 - - -;
-#X text 29 25 [<<] -- This is the left shift operator and it works
+#X obj 21 160 t b b;
+#X msg 21 181 13;
+#X obj 21 222 <<;
+#X floatatom 21 244 5 0 0 0 - - -;
+#X msg 49 181 2;
+#X floatatom 87 193 5 0 0 0 - - -;
+#X floatatom 135 193 5 0 0 0 - - -;
+#X text 18 35 [<<] -- This is the left shift operator and it works
by shifting the digits of the binary representation of the first operand
(left inlet) to the left by the number of places specified by the second
operand (right inlet). The spaces created to the right are filled by
zeros \, and any digits falling off the left are discarded. The following
code returns 52 as the binary of 13 ("1101") is shifted two places
to the left giving "110100":;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) Left-shift;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 5 0;
@@ -127,18 +291,18 @@ to the left giving "110100":;
#X connect 5 0 3 1;
#X connect 6 0 3 0;
#X connect 7 0 3 1;
-#X restore 477 328 pd understanding_<<_LEFT-SHIFT;
-#N canvas 0 22 456 380 understanding_>>_RIGHT-SHIFT 0;
-#X obj 41 155 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 281 474 pd understanding_<<_LEFT-SHIFT;
+#N canvas 81 177 428 320 understanding_>>_RIGHT-SHIFT 0;
+#X obj 21 145 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 41 173 t b b;
-#X floatatom 41 257 5 0 0 0 - - -;
-#X floatatom 107 206 5 0 0 0 - - -;
-#X floatatom 155 206 5 0 0 0 - - -;
-#X msg 41 194 13;
-#X obj 41 235 >>;
-#X msg 69 194 2;
-#X text 33 21 [>>] -- This is the sign-propagating right shift operator
+#X obj 21 163 t b b;
+#X floatatom 21 247 5 0 0 0 - - -;
+#X floatatom 87 196 5 0 0 0 - - -;
+#X floatatom 135 196 5 0 0 0 - - -;
+#X msg 21 184 13;
+#X obj 21 225 >>;
+#X msg 49 184 2;
+#X text 18 35 [>>] -- This is the sign-propagating right shift operator
which shifts the digits of the binary representation of the first operand
(left inlet) to the right by the number of places specified by the
second operand (right inlet) \, discarding any shifted off to the right.
@@ -146,8 +310,11 @@ The copies of the leftmost bit are added on from the left \, thereby
preserving the sign of the number. This next examples returns 3 ("11")
as the two right-most bits of 13 ("1101") are shifted off to the right
and discarded.;
-#X text 33 284 Note that this object preserves negative values for
+#X text 13 274 Note that this object preserves negative values for
negative operands. ("sign-propagating").;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) Right-shift;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 7 0;
@@ -156,35 +323,38 @@ negative operands. ("sign-propagating").;
#X connect 5 0 6 0;
#X connect 6 0 2 0;
#X connect 7 0 6 1;
-#X restore 477 350 pd understanding_>>_RIGHT-SHIFT;
-#N canvas 56 51 528 425 understanding_&&_LOGICAL-AND 0;
-#X msg 56 269 5;
-#X obj 25 319 &&;
-#X floatatom 25 339 5 0 0 0 - - -;
-#X floatatom 194 277 5 0 0 0 - - -;
-#X text 12 26 [&&] - This is the logical AND operator \, which returns
+#X restore 281 496 pd understanding_>>_RIGHT-SHIFT;
+#N canvas 91 135 428 384 understanding_&&_LOGICAL-AND 0;
+#X msg 52 249 5;
+#X obj 21 299 &&;
+#X floatatom 21 319 5 0 0 0 - - -;
+#X floatatom 190 257 5 0 0 0 - - -;
+#X text 18 36 [&&] - This is the logical AND operator \, which returns
a Boolean true (a one) if both operands are true. Logically it follows
that if the first operand is false \, then the whole expression is
false \, and this is how the objects works: It first evaluates the
left hand operand (left inlet) and if this returns false (zero) then
\, without going any further \, it returns a false (a zero). Otherwise
it returns the value of the second operand (right inlet).;
-#X floatatom 237 277 5 0 0 0 - - -;
-#X text 25 364 Note that this is not a bitwise operator. It compares
+#X floatatom 233 257 5 0 0 0 - - -;
+#X text 18 344 Note that this is not a bitwise operator. It compares
floats.;
-#X obj 25 227 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 21 207 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 25 245 t b b;
-#X msg 25 269 17;
-#X text 12 145 In other words \, IF the left inlet is zero \, THEN
+#X obj 21 225 t b b;
+#X msg 21 249 17;
+#X text 18 135 In other words \, IF the left inlet is zero \, THEN
output zero. ELSEIF the left inlet is non-zero AND the right inlet
is zero \, then output zero. ELSEIF the left inlet is non-zero AND
the right inlet is non-zero \, THEN output non-zero!;
-#X obj 91 227 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 87 207 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 91 245 t b b;
-#X msg 91 269 17;
-#X msg 122 269 0;
+#X obj 87 225 t b b;
+#X msg 87 249 17;
+#X msg 118 249 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) Logical-and;
#X connect 0 0 1 1;
#X connect 1 0 2 0;
#X connect 3 0 1 0;
@@ -198,35 +368,38 @@ the right inlet is non-zero \, THEN output non-zero!;
#X connect 12 1 14 0;
#X connect 13 0 1 0;
#X connect 14 0 1 1;
-#X restore 477 373 pd understanding_&&_LOGICAL-AND;
-#N canvas 244 51 530 427 understanding_||_LOGICAL-OR 0;
-#X msg 56 269 5;
-#X floatatom 25 339 5 0 0 0 - - -;
-#X floatatom 196 280 5 0 0 0 - - -;
-#X floatatom 239 280 5 0 0 0 - - -;
-#X text 25 364 Note that this is not a bitwise operator. It compares
+#X restore 281 518 pd understanding_&&_LOGICAL-AND;
+#N canvas 104 167 428 373 understanding_||_LOGICAL-OR 0;
+#X msg 52 240 5;
+#X floatatom 21 310 5 0 0 0 - - -;
+#X floatatom 192 251 5 0 0 0 - - -;
+#X floatatom 235 251 5 0 0 0 - - -;
+#X text 18 335 Note that this is not a bitwise operator. It compares
floats.;
-#X obj 25 227 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 21 198 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 25 245 t b b;
-#X msg 25 269 17;
-#X text 17 21 [||] -- This is the logical OR operator and it returns
+#X obj 21 216 t b b;
+#X msg 21 240 17;
+#X text 18 35 [||] -- This is the logical OR operator and it returns
a value of true (non-zero) if one or both of the operands is true.
It works by first evaluating the left-hand operand (left inlet) and
\, if this is true \, diregarding the right-hand operand (right inlet)
and returning a non-zero. If \, however \, the left-hand operand (left
inlet) is false \, then it returns the value of the right-hand operand
(right inlet).;
-#X text 12 145 In other words \, IF the left inlet is non-zero \, THEN
+#X text 18 136 In other words \, IF the left inlet is non-zero \, THEN
output non-zero. ELSEIF the left inlet is zero AND the right inlet
is zero \, then output zero. ELSEIF the left inlet is zero AND the
right inlet is non-zero \, THEN output non-zero!;
-#X obj 25 319 ||;
-#X obj 96 226 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 21 290 ||;
+#X obj 92 197 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 96 244 t b b;
-#X msg 96 268 0;
-#X msg 127 268 0;
+#X obj 92 215 t b b;
+#X msg 92 239 0;
+#X msg 123 239 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 (binops2-3) Logical-or;
#X connect 0 0 10 1;
#X connect 2 0 10 0;
#X connect 3 0 10 1;
@@ -240,196 +413,111 @@ right inlet is non-zero \, THEN output non-zero!;
#X connect 12 1 14 0;
#X connect 13 0 10 0;
#X connect 14 0 10 1;
-#X restore 477 395 pd understanding_||_LOGICAL-OR;
-#X obj 432 12 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 432 607 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 54 186 == 42;
-#X floatatom 54 165 5 0 0 0 - - -;
-#X floatatom 28 212 2 0 0 0 - - -;
-#X obj 53 211 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 281 540 pd understanding_||_LOGICAL-OR;
+#X text 98 385 Relational Operators;
+#X text 278 385 Logical Operators;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#N canvas 75 34 428 577 Relational_Operators 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X floatatom 227 354 0 0 0 0 - - -;
+#X floatatom 277 433 0 0 0 0 - - -;
+#X obj 227 333 >;
+#X obj 277 412 ==;
+#X obj 64 130 == 42;
+#X floatatom 64 109 5 0 0 0 - - -;
+#X floatatom 38 156 2 0 0 0 - - -;
+#X obj 63 155 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 24 161 42;
-#X text 9 143 For example: IF 42 is equal to x \, then "1" (True);
-#X text 73 203 Note that the object outputs 1 or 0 with every incoming
+#X msg 34 105 42;
+#X text 19 87 For example: IF 42 is equal to x \, then "1" (True);
+#X text 83 147 Note that the object outputs 1 or 0 with every incoming
message.;
-#X text 10 233 All of these objects operate the same way. The right
+#X text 20 179 All of these objects operate the same way. The right
inlet or creation argument sets the "condition" to which the incoming
messages are compared. The left inlet accepts numbers or a "bang" --
a number will reset the value and output a true or false (1 or 0) depending
on whether or not the incoming value meets the necessary condition.
A "bang" will force the object to output a true or false (1 or 0) based
on the value that is already stored in the left inlet.;
-#X floatatom 25 378 5 0 0 0 - - -;
-#X floatatom 98 345 5 0 0 0 - - -;
-#X text 10 376 a;
-#X text 138 344 b;
-#X text 63 439 Is a greater than b?;
-#X floatatom 242 478 0 0 0 0 - - -;
-#X text 17 478 Is a greater than or equal to b?;
-#X obj 242 457 >=;
-#X text 136 517 Is a equal to b?;
-#X obj 295 534 !=;
-#X floatatom 295 554 0 0 0 0 - - -;
-#X obj 325 367 r a_b;
-#X obj 325 386 unpack f f;
-#X obj 25 395 pack f f;
-#X obj 25 415 s a_b;
-#X obj 98 361 bang;
-#X text 142 555 Is a NOT equal to b?;
-#X floatatom 321 592 0 0 0 0 - - -;
-#X text 185 592 Is a less than b?;
-#X obj 321 572 <;
-#X floatatom 346 631 0 0 0 0 - - -;
-#X obj 346 611 <;
-#X text 138 631 Is a less than or equal to b?;
-#X text 464 583 This document 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.;
-#X text 461 460 RELATED OBJECTS;
-#X obj 853 477 +;
-#X text 460 477 Visit the Help document for MATH for more math objects:
-;
-#N canvas 0 22 452 302 related_objects_from_other_libraries 0;
-#X obj 47 34 strcomp;
-#X text 102 33 Relational tests for strings.;
-#X text 29 104 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 28 153 The best places to find information about Pd's libraries
-is:;
-#X text 25 175 www.puredata.org and click on "Downloads" then "Software"
+#X floatatom 35 280 5 0 0 0 - - -;
+#X floatatom 73 280 5 0 0 0 - - -;
+#X text 20 278 a;
+#X text 113 279 b;
+#X text 98 355 Is a greater than b?;
+#X floatatom 252 394 0 0 0 0 - - -;
+#X text 52 394 Is a greater than or equal to b?;
+#X obj 252 373 >=;
+#X text 171 433 Is a equal to b?;
+#X obj 305 450 !=;
+#X floatatom 305 470 0 0 0 0 - - -;
+#X obj 335 283 r a_b;
+#X obj 335 302 unpack f f;
+#X obj 35 334 pack f f;
+#X obj 35 354 s a_b;
+#X text 177 471 Is a NOT equal to b?;
+#X floatatom 331 508 0 0 0 0 - - -;
+#X text 220 508 Is a less than b?;
+#X obj 331 488 <;
+#X floatatom 356 547 0 0 0 0 - - -;
+#X obj 356 527 <;
+#X text 173 547 Is a less than or equal to b?;
+#X text 18 36 Most relational operators output a boolean value: true
+or false (1 or 0) depending on the relation between the input (left
+inlet) and the condition (right inlet or creation argument).;
+#X obj 73 306 t b a;
+#X text 7 1 (binops2-3) Relational Operators;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 7 0;
+#X connect 5 0 8 0;
+#X connect 6 0 5 0;
+#X connect 9 0 5 0;
+#X connect 13 0 26 0;
+#X connect 14 0 36 0;
+#X connect 20 0 18 0;
+#X connect 22 0 23 0;
+#X connect 24 0 25 0;
+#X connect 25 0 3 0;
+#X connect 25 0 20 0;
+#X connect 25 0 4 0;
+#X connect 25 0 22 0;
+#X connect 25 0 31 0;
+#X connect 25 0 33 0;
+#X connect 25 1 3 1;
+#X connect 25 1 20 1;
+#X connect 25 1 4 1;
+#X connect 25 1 22 1;
+#X connect 25 1 31 1;
+#X connect 25 1 33 1;
+#X connect 26 0 27 0;
+#X connect 31 0 29 0;
+#X connect 33 0 32 0;
+#X connect 36 0 26 0;
+#X connect 36 1 26 1;
+#X restore 101 408 pd Relational_Operators;
+#N canvas 78 160 428 247 Logical_Operators 0;
+#X obj -1 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 7 1 (binops2-3) Logical Operators-- a.k.a. "Bit Twiddling"
;
-#X text 27 190 or;
-#X text 27 205 iem.kug.ac.at/pdb/;
-#X restore 482 501 pd related_objects_from_other_libraries;
-#X text 478 120 Well \, these objects perform "relational" tests on
+#X text 24 26 These objects are adopted from the mother of all object
+oriented languages: C. They are "bitwise" operators which perform logical
+and shift operations on 32-bit numbers.;
+#X text 17 194 Hence \, performing "bitwise" relational tests means
+that Pd can compare "1101" to "1001" instead of operating with the
+integers that are represented by those binary codes.;
+#X text 17 116 Well \, these objects perform "relational" tests on
the binary forms of 32-bit numbers. For example \, the number 13 is
represented in your computer's operating system in binary code by "1101"
and the number 9 is "1001". Each of those binary digits is an 8-bit
word: 8 bits * 4 digits = 32-bits!;
-#X obj 179 24 mod;
-#X obj 206 24 div;
-#X text 8 84 Most relational operators output a boolean value: true
-or false (1 or 0) depending on the relation between the input (left
-inlet) and the condition (right inlet or creation argument).;
-#N canvas 7 22 514 656 understanding_MOD_and_DIV 0;
-#X text 24 5 [mod] and [div] are helpful objects to determine whether
-or not a fraction produces a remainder \, or to determine the value
-of the remainder.;
-#X text 24 80 while \, 4 / 3 = 1 with a remainder of 1;
-#X text 25 51 For example \, 3 / 3 = 1 with a remainder of zero (i.e.
-no remainder).;
-#X floatatom 26 190 0 0 0 0 - - -;
-#X floatatom 26 232 0 0 0 0 - - -;
-#X floatatom 138 192 0 0 0 0 - - -;
-#X text 58 191 divided by;
-#X text 173 193 has a remainder of;
-#X floatatom 300 193 0 0 0 0 - - -;
-#X obj 26 211 mod;
-#X text 22 103 [mod] takes a number in its left inlet and will divide
-that number by either the creation argument or the number given at
-its left inlet and will produce the value of the remainder at its outlet.
-If no creation argument is given \, then the default value is 1;
-#X obj 78 173 loadbang;
-#X msg 138 173 1;
-#X text 23 255 [div] takes a number in its left inlet and will divide
-that number by either the creation argument or the number given at
-its left inlet and will produce the result without a remainder. If
-no creation argument is given \, then the default value is 1;
-#X floatatom 28 341 0 0 0 0 - - -;
-#X floatatom 28 383 0 0 0 0 - - -;
-#X floatatom 140 343 0 0 0 0 - - -;
-#X text 60 342 divided by;
-#X floatatom 256 344 0 0 0 0 - - -;
-#X obj 80 324 loadbang;
-#X msg 140 324 1;
-#X obj 28 362 div;
-#X text 176 343 is equal to;
-#X text 294 343 with no remainder.;
-#X obj 257 371 /;
-#X floatatom 257 391 0 0 0 0 - - -;
-#X text 227 389 or;
-#X text 297 392 with a remainder.;
-#X text 23 408 In the following example \, I've built a metronome which
-counts bar numbers and beat numbers: default time signature is 4/4
-(Common Time).;
-#X obj 23 489 metro 500;
-#X obj 23 470 tgl 15 0 empty empty Start-Stop 0 -6 0 8 -262144 -1 -1
-0 1;
-#X obj 48 510 + 1;
-#X floatatom 23 530 0 0 0 0 - - -;
-#X text 52 532 Total Beat Count;
-#X obj 23 559 div 4;
-#X obj 134 560 mod 4;
-#X floatatom 219 601 0 0 0 0 - - -;
-#X floatatom 108 600 0 0 0 0 - - -;
-#X obj 23 510 f 1;
-#X msg 107 468 1;
-#X obj 23 579 + 1;
-#X obj 134 579 + 1;
-#X text 131 468 Reset;
-#X text 34 599 Bar number;
-#X text 147 601 Beat Count;
-#X floatatom 339 511 0 0 0 0 - - -;
-#X text 176 511 How many beats per bar?;
-#X connect 3 0 9 0;
-#X connect 4 0 8 0;
-#X connect 5 0 9 1;
-#X connect 9 0 4 0;
-#X connect 11 0 12 0;
-#X connect 12 0 5 0;
-#X connect 14 0 21 0;
-#X connect 14 0 24 0;
-#X connect 15 0 18 0;
-#X connect 16 0 21 1;
-#X connect 16 0 24 1;
-#X connect 19 0 20 0;
-#X connect 20 0 16 0;
-#X connect 21 0 15 0;
-#X connect 24 0 25 0;
-#X connect 29 0 38 0;
-#X connect 30 0 29 0;
-#X connect 31 0 38 1;
-#X connect 32 0 34 0;
-#X connect 32 0 35 0;
-#X connect 34 0 40 0;
-#X connect 35 0 41 0;
-#X connect 38 0 31 0;
-#X connect 38 0 32 0;
-#X connect 39 0 38 1;
-#X connect 40 0 37 0;
-#X connect 41 0 36 0;
-#X connect 45 0 35 1;
-#X connect 45 0 34 1;
-#X restore 9 58 pd understanding_MOD_and_DIV;
-#X connect 11 0 0 0;
-#X connect 12 0 1 0;
-#X connect 30 0 31 0;
-#X connect 32 0 34 0;
-#X connect 32 0 35 0;
-#X connect 33 0 32 0;
-#X connect 36 0 32 0;
-#X connect 40 0 53 0;
-#X connect 41 0 53 1;
-#X connect 41 0 55 0;
-#X connect 47 0 45 0;
-#X connect 49 0 50 0;
-#X connect 51 0 52 0;
-#X connect 52 0 11 0;
-#X connect 52 0 47 0;
-#X connect 52 0 12 0;
-#X connect 52 0 49 0;
-#X connect 52 0 59 0;
-#X connect 52 0 61 0;
-#X connect 52 1 11 1;
-#X connect 52 1 47 1;
-#X connect 52 1 12 1;
-#X connect 52 1 49 1;
-#X connect 52 1 59 1;
-#X connect 52 1 61 1;
-#X connect 53 0 54 0;
-#X connect 55 0 40 0;
-#X connect 59 0 57 0;
-#X connect 61 0 60 0;
+#X obj -1 80 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 7 81 What does "bitwise" mean?;
+#X restore 281 408 pd Logical_Operators;
+#X connect 31 0 33 0;
+#X connect 32 0 33 1;
+#X connect 33 0 34 0;
+#X connect 35 0 33 0;
+#X connect 47 0 33 0;
diff --git a/doc/pddp/outlet-help.pd b/doc/pddp/outlet-help.pd
new file mode 100644
index 00000000..586c6512
--- /dev/null
+++ b/doc/pddp/outlet-help.pd
@@ -0,0 +1,100 @@
+#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 outlet 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 46 242 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 85 DESCRIPTION control outlet for a subpatch;
+#X text 12 125 INLET_0 anything;
+#X text 12 25 NAME outlet;
+#X text 12 45 KEYWORDS control nonlocal canvas_op;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 489 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 517 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;
+#N canvas 54 478 428 109 Related_objects 0;
+#X obj 1 2 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 44 inlet;
+#X obj 67 44 outlet;
+#X obj 118 44 inlet~;
+#X obj 168 44 outlet;
+#X obj 216 44 block~;
+#X text 266 44 [switch~];
+#X text 8 3 [outlet] Related Objects;
+#X restore 102 598 pd Related_objects;
+#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 422 anything;
+#X text 98 493 (none);
+#X text 98 521 (none);
+#X text 11 23 control outlet for a subpatch;
+#X obj 477 3 outlet;
+#X obj 451 20 pddp/pddplink http://wiki.puredata.info/en/outlet -text
+pdpedia: outlet;
+#X text 167 521 - a symbolic argument to an [outlet] object which will
+be ignored. However \, [outlet] will not create if you give it an initial
+float argument.;
+#X obj 373 259 print~;
+#X obj 373 199 sig~ 12;
+#X floatatom 130 203 0 0 0 0 - - -;
+#X floatatom 130 255 0 0 0 0 - - -;
+#X text 100 182 messages in and out;
+#X text 343 176 audio in and out;
+#X obj 373 237 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 50 247 428 293 subpatch-with-inlets-and-outlets 0;
+#X obj 67 68 inlet;
+#X text 19 38 control inlet for receiving messages;
+#X floatatom 67 96 0 0 0 0 - - -;
+#X floatatom 67 218 0 0 0 0 - - -;
+#X obj 67 250 outlet;
+#X text 19 188 control outlet for sending message;
+#X obj 339 84 inlet~;
+#X obj 339 135 print~;
+#X msg 354 109 bang;
+#X obj 339 243 outlet~;
+#X obj 339 217 sig~ 34;
+#X text 332 38 same for;
+#X text 333 57 signals.;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [outlet] Creating Inlets/Outlets on Subpatches;
+#X connect 0 0 2 0;
+#X connect 3 0 4 0;
+#X connect 6 0 7 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X restore 130 229 pd subpatch-with-inlets-and-outlets;
+#X text 98 127 The subpatch below shows how to use [inlet] \, [inlet~]
+\, [outlet] \, and [outlet~] objects to get data into and out of a
+subpatch:;
+#X text 98 77 The [outlet] object allows messages to be sent from objects
+in a subpatch to objects on the parent canvas.;
+#X text 168 422 - the inlet passes any message sent to [outlet] to
+the outlet of canvas in which it is contained. When multiple [outlet~]
+and/or [outlet] objects are in one subpatch \, their horizontal order
+determines which outlet on the subpatch corresponds to which [outlet~]/[outlet]
+object.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 23 1;
+#X connect 18 0 23 0;
+#X connect 22 0 16 0;
+#X connect 23 0 19 0;
+#X connect 23 1 16 0;
diff --git a/doc/pddp/outlet~-help.pd b/doc/pddp/outlet~-help.pd
new file mode 100644
index 00000000..99b9b6f3
--- /dev/null
+++ b/doc/pddp/outlet~-help.pd
@@ -0,0 +1,184 @@
+#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 outlet~ 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 46 242 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 85 DESCRIPTION signal outlet for a subpatch;
+#X text 12 25 NAME outlet~;
+#X text 12 125 INLET_0 signal;
+#X text 12 45 KEYWORDS signal nonlocal canvas_op;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 434 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 566 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 obj 22 43 inlet;
+#X obj 67 43 outlet;
+#X obj 118 43 inlet~;
+#X obj 168 43 outlet;
+#X obj 225 43 block~;
+#X text 8 2 [outlet~] Related Objects;
+#X text 274 43 [switch~];
+#X restore 102 598 pd Related_objects;
+#X text 98 441 (none);
+#X text 11 23 signal outlet for a subpatch;
+#X obj 477 3 outlet~;
+#X obj 446 20 pddp/pddplink http://wiki.puredata.info/en/outlet~ -text
+pdpedia: outlet~;
+#X obj 369 259 print~;
+#X obj 369 199 sig~ 12;
+#X floatatom 126 203 0 0 0 0 - - -;
+#X floatatom 126 255 0 0 0 0 - - -;
+#X text 96 182 messages in and out;
+#X text 339 176 audio in and out;
+#X obj 369 237 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 50 247 428 293 subpatch-with-inlets-and-outlets 0;
+#X obj 67 68 inlet;
+#X text 19 38 control inlet for receiving messages;
+#X floatatom 67 96 0 0 0 0 - - -;
+#X floatatom 67 218 0 0 0 0 - - -;
+#X obj 67 250 outlet;
+#X text 19 188 control outlet for sending message;
+#X obj 339 84 inlet~;
+#X obj 339 135 print~;
+#X msg 354 109 bang;
+#X obj 339 243 outlet~;
+#X obj 339 217 sig~ 34;
+#X text 332 38 same for;
+#X text 333 57 signals.;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [outlet~] Creating Inlets/Outlets on Subpatches;
+#X connect 0 0 2 0;
+#X connect 3 0 4 0;
+#X connect 6 0 7 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X restore 126 229 pd subpatch-with-inlets-and-outlets;
+#X text 98 127 The subpatch below shows how to use [inlet] \, [inlet~]
+\, [outlet] \, and [outlet~] objects to get data into and out of a
+subpatch:;
+#X obj 78 366 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 365 signal;
+#X text 168 365 - the [outlet~] object passes a signal to the outlet
+of the subpatch in the parent canvas. When multiple [outlet~] and/or
+[outlet] objects are in one subpatch \, their horizontal order determines
+which outlet on the subpatch corresponds to which [outlet~]/[outlet]
+object.;
+#X text 98 77 The [outlet~] object allows signals to be sent from a
+subpatch to objects on the parent canvas.;
+#N canvas 60 123 428 466 up/downsampling 0;
+#X obj 30 396 print~;
+#X obj 48 370 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 112 396 print~;
+#X obj 130 372 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 195 396 print~;
+#X obj 213 370 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-tab 64 float 3;
+#A 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 1 64 -1 200 140 1;
+#X restore 216 181 graph;
+#X obj 274 368 s \$0-tab;
+#X msg 274 341 const 0 \, 0 0 1;
+#X obj 145 233 print~;
+#X obj 145 208 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 23 181 tabreceive~ \$0-tab;
+#N canvas 81 269 585 267 test-subpatch-upsampled 0;
+#X obj 40 17 block~ 128 1 2;
+#X obj 209 149 inlet~ hold;
+#X obj 367 153 inlet~ lin;
+#X obj 23 202 print~;
+#X obj 41 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 209 209 print~;
+#X obj 227 183 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 366 213 print~;
+#X obj 383 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 42 49 Upsampling methods:;
+#X text 206 114 sample/hold;
+#X text 337 111 linear interpolation;
+#X text 16 114 interleaved zeros;
+#X obj 23 146 inlet~;
+#X connect 1 0 5 0;
+#X connect 2 0 7 0;
+#X connect 4 0 3 0;
+#X connect 6 0 5 0;
+#X connect 8 0 7 0;
+#X connect 13 0 3 0;
+#X restore 23 285 pd test-subpatch-upsampled;
+#N canvas 46 43 585 267 test-subpatch-downsampled 0;
+#X obj 23 146 outlet~;
+#X obj 209 149 outlet~ hold;
+#X obj 367 153 outlet~ lin;
+#X text 206 173 sample/hold;
+#X text 364 177 linear interpolation;
+#X text 197 19 upsampling methods:;
+#X obj 40 17 block~ 32 1 0.5;
+#X text 18 169 interleaved zeros;
+#X obj 21 83 tabreceive~ \$0-tab;
+#X connect 8 0 0 0;
+#X connect 8 0 1 0;
+#X connect 8 0 2 0;
+#X restore 29 340 pd test-subpatch-downsampled;
+#X text 20 38 When a subpatch is reblocked to a higher or lower sample
+rate \, the inlet~ and outlet~ objects offer a choice of three upsampling
+methods. (The inlet~ upsamples when entering a subpatch with a higher
+sample rate \; the outlet~ upsamples when leaving a subpatch of _lower_
+sample rate \, as demonstrated below.) There is no corresponding choice
+of downsampling method - downsampling is done simply by dropping the
+extra samples.;
+#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 [outlet~] Up/downsampling;
+#X connect 1 0 0 0;
+#X connect 3 0 2 0;
+#X connect 5 0 4 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 1;
+#X connect 11 0 12 2;
+#X connect 11 0 9 0;
+#X connect 11 0 12 0;
+#X connect 13 0 0 0;
+#X connect 13 1 2 0;
+#X connect 13 2 4 0;
+#X restore 171 538 pd up/downsampling;
+#X text 80 482 1) symbol atom;
+#X text 168 482 - (optional) The word "hold" will cause sample/hold
+upsampling/downsampling \, and the word "lin" will cause linear upsampling/downsampling.
+See the subpatch below for more details:;
+#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 18 0 12 0;
+#X connect 19 0 15 0;
+#X connect 19 1 12 0;
diff --git a/doc/pddp/output~-help.pd b/doc/pddp/output~-help.pd
new file mode 100644
index 00000000..2efb7fc2
--- /dev/null
+++ b/doc/pddp/output~-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 output~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 307 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 246 494 368 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 245 LIBRARY internal;
+#X text 12 285 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 345 HELP_PATCH_AUTHORS Jonathan Wilkes;
+#X text 12 265 AUTHOR Hans Christoph Steiner;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal abstraction;
+#X text 12 65 LICENSE GPL;
+#X text 12 85 DESCRIPTION gui volume and DSP control;
+#X text 12 25 NAME output~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 INLET_1 signal;
+#X text 12 165 INLET_2 float;
+#X text 12 185 OUTLET_0 signal;
+#X text 12 205 OUTLET_1 signal;
+#X text 12 225 OUTLET_2 float;
+#X text 12 305 RELEASE_DATE 2009;
+#X text 12 325 RELEASE_VERSION;
+#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 498 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 502 (none);
+#N canvas 103 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 29 38 dac~;
+#X text 8 2 [output~] Related Objects;
+#X obj 25 81 pddp/helplink rradical/ezdac~.pd;
+#X obj 26 61 pddp/helplink pddp/dsp;
+#X restore 102 597 pd Related_objects;
+#X obj 78 316 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 410 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 342 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/output~ -text
+pdpedia: output~;
+#X obj 107 167 osc~ 200;
+#X obj 377 170 noise~;
+#X obj 106 205 output~;
+#X obj 376 205 output~;
+#X text 174 227 <- mute;
+#X text 176 208 <- dsp toggle (green = on );
+#X text 98 315 signal;
+#X text 98 341 signal;
+#X obj 78 367 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 366 float;
+#X text 167 366 - the right inlet can be used to set the volume (range
+is 0-1).;
+#X text 98 409 signal;
+#X obj 78 440 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 439 signal;
+#X obj 78 470 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 469 float;
+#X text 90 101 The [output~] abstraction is a user-friendly GUI substitute
+for [dac~] \, with controls for "compute audio" \, volume \, and a
+mute button.;
+#X text 99 530 This object is used in the audio tutorials \, and can
+be used in any patch to quickly hear and control the level of an audio
+signal.;
+#X text 11 23 GUI- volume and DSP control;
+#X text 168 315 - incoming signal which will be routed to the left
+channel.;
+#X text 167 341 - incoming signal which will be routed to the right
+channel.;
+#X text 168 469 - current volume level (range is from 0-1).;
+#X text 168 439 - the incoming signal from the middle inlet filtered
+and passed unchanged to this outlet.;
+#X text 168 409 - the incoming signal from the leftmost inlet is filtered
+and passed to this outlet.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 99 572 pddp/pddplink ../3.audio.examples/A05.output.subpatch.pd
+-text doc/3.audio.examples/A05.output.subpatch.pd;
+#X connect 13 0 15 0;
+#X connect 13 0 15 1;
+#X connect 14 0 16 1;
+#X connect 14 0 16 0;
diff --git a/doc/pddp/pack-help.pd b/doc/pddp/pack-help.pd
index ff1cc16c..064f3963 100644
--- a/doc/pddp/pack-help.pd
+++ b/doc/pddp/pack-help.pd
@@ -1,128 +1,213 @@
-#N canvas 13 -7 937 656 10;
-#X obj 25 11 pack;
-#X text 60 11 - combine several atoms into one message;
-#X msg 24 190 bang;
-#X obj 24 210 pack 100 0 s 42;
-#X text 24 249 In the same example \, this [pack] object will recognize
-floats in the first \, second \, and fourth inlet \; it will recognize
-symbols in the third inlet. If it receives anything else \, then you'll
-see the "no method for ___" error message in the terminal window.;
-#X obj 25 366 pack 100 0 s 42;
-#X msg 25 328 400 1 cat 38;
-#X text 110 328 This works.;
-#X msg 37 347 cat dog 42 earth;
-#X obj 30 534 pack cat;
-#X text 24 419 So \, if [pack] understands that "100" is a float and
-can therefore understand all incoming numbers to that inlet...then
-you might assume that the word "cat" could be written as a creation
-argument and [pack] should understand all incoming symbols. But that's
-NOT the case. If you try to define a [pack] symbol with the word "cat"
-in a creation argument \, you'll get a "bad type" error.;
-#X text 38 516 WRONG;
-#X obj 142 538 pack symbol;
-#X text 222 528 CORRECT;
-#X obj 142 559 print this_package;
-#X msg 142 517 cat;
-#X text 40 382 Note that the "s" above is an abbreviation for "symbol".
-;
-#X obj 30 611 pack bang;
-#X text 29 578 Same problem with bangs! This [pack] object creates
-an error.;
-#X obj 416 14 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 416 604 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 448 106 [pack] can be created with any number of creation arguments.
-There will be one inlet created for each argument and the values of
-each [pack]ed element can be updated at any time using the separate
-inlets \; or they can be updated simoultaneously with a LIST of messages
-to its first inlet.;
-#X text 609 75 is the same as;
-#X obj 24 231 print package_1;
-#X obj 25 399 print package_2;
-#X obj 444 489 print my_package;
-#X msg 467 271 1 2 dog;
-#X text 518 266 This list doesn't contain enough elements \; so it
-resets only the first three elements and then outputs the entire package
-- the undefined elements will simply output their previous values.
-;
-#X obj 444 197 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 476 376 5 0 0;
-#X floatatom 474 329 5 0 0;
-#X msg 537 423 100 earth me 42;
-#X text 548 441 Lists can only be sent to the first inlet -- this list
-will cause an error.;
-#X text 520 326 A new value for the first element will reset the first
-element and force [pack] to output the entire package of stored values.
-;
-#X text 451 16 Perhaps the best way to build creation arguments is
-to define the data types that [pack] should expect at each inlet: (i.e.
-floats \, symbols \, or pointers -- or their abbreviations f \, s \,
-or p);
-#X obj 450 75 pack float symbol pointer;
-#X obj 704 76 pack f s p;
-#X msg 457 247 42 24 dog cat 1 2;
-#X obj 444 469 pack f f s s f f;
-#X text 572 247 This list contains new values for each element.;
-#X text 19 127 In the example below \, the creation arguments are "100
-\, 0 \, a symbol \, 42". Hence \, when [pack] receives a bang \, it
-will send that information to its outlet as a list - or 'package' -
-which will be printed in your terminal window.;
-#X text 144 348 This doesn't work - the data types;
-#X text 143 362 don't correspond with the arguments.;
-#X text 17 33 The pack object takes a series of inputs and then outputs
-a concatenated list. The number of creation arguments determines the
-number of inlets while the type of creation arguments determines the
-types of messages that [pack] should expect to receive at each inlet
-- although with some peculiarities described below.;
-#X text 463 191 Any message to the first inlet will force [pack] to
-output its package - its list of values. A bang to the first inlet
-will force [pack] to output the current values without resetting any
-of them.;
-#X text 522 366 This number box will update each of the 'float' values
-and will NOT output the package - because the first inlet is not receiving
-a message - to change this behavior \, you should explore the [trigger]
-object.;
-#X text 443 523 RELATED OBJECTS;
-#X obj 442 546 trigger;
-#X obj 495 546 unpack;
-#N canvas 0 0 452 302 related_objects_from_other_libraries 0;
-#X obj 21 16 pack~;
-#X obj 61 16 unpack~;
-#X obj 113 16 tabdump;
-#X obj 169 16 niagara;
-#X obj 224 16 packel;
-#X obj 21 42 repack;
-#X obj 70 42 drip;
-#X obj 107 42 sort;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X restore 440 571 pd related_objects_from_other_libraries;
-#X text 443 601 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X connect 2 0 3 0;
-#X connect 3 0 23 0;
-#X connect 5 0 24 0;
-#X connect 6 0 5 0;
-#X connect 8 0 5 0;
-#X connect 12 0 14 0;
-#X connect 15 0 12 0;
-#X connect 19 0 20 0;
-#X connect 26 0 38 0;
-#X connect 28 0 38 0;
-#X connect 29 0 38 1;
-#X connect 29 0 38 4;
-#X connect 29 0 38 5;
-#X connect 30 0 38 0;
-#X connect 31 0 38 1;
-#X connect 37 0 38 0;
-#X connect 38 0 25 0;
+#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 pack 3 12 0 18 -204280
+-1 0;
+#X obj 0 113 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 245 494 370 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 85 DESCRIPTION combine several atoms into one message;
+#X text 12 25 NAME pack;
+#X text 12 125 INLET_0 anything;
+#X text 12 145 INLET_N float symbol pointer;
+#X text 12 165 OUTLET_0 list symbol pointer float;
+#X text 12 45 KEYWORDS control needs_work list_op;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 396 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 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 98 318 428 296 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 [pack] Related Objects;
+#X text 20 163 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 212 The best places to find information about Pd's libraries
+is:;
+#X text 16 234 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 17 250 or;
+#X text 18 264 iem.kug.ac.at/pdb/;
+#X obj 20 36 pddp/helplink zexy/pack~;
+#X obj 20 51 pddp/helplink zexy/unpack~;
+#X obj 20 66 pddp/helplink zexy/tabdump;
+#X obj 20 81 pddp/helplink zexy/niagara;
+#X obj 20 96 pddp/helplink zexy/packel;
+#X obj 20 111 pddp/helplink zexy/repack;
+#X obj 20 126 pddp/helplink zexy/drip;
+#X obj 20 141 pddp/helplink zexy/sort;
+#X restore 102 597 pd Related_objects;
+#X obj 78 120 cnv 17 3 225 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 303 list;
+#X obj 78 403 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 354 cnv 17 3 37 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 493 3 pack;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/pack -text
+pdpedia: pack;
+#X text 98 198 symbol;
+#X text 98 119 bang;
+#X text 98 159 float;
+#X text 168 119 - a "bang" to the first inlet will force [pack] to
+output the current package (i.e. \, the list of values) without resetting
+any of them.;
+#X text 98 263 pointer;
+#X text 98 402 list;
+#N canvas 82 45 428 551 pack_peculiarities 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X msg 25 103 bang;
+#X obj 25 123 pack 100 0 s 42;
+#X text 25 162 In the same example \, this [pack] object will recognize
+floats in the first \, second \, and fourth inlet \; it will recognize
+symbols in the third inlet. If it receives anything else \, then you'll
+see the "no method for ___" error message in the terminal window.;
+#X obj 26 282 pack 100 0 s 42;
+#X msg 26 238 400 1 cat 38;
+#X text 111 238 This works.;
+#X msg 38 260 cat dog 42 earth;
+#X obj 31 448 pack cat;
+#X text 25 333 So \, if [pack] understands that "100" is a float and
+can therefore understand all incoming numbers to that inlet...then
+you might assume that the word "cat" could be written as a creation
+argument and [pack] should understand all incoming symbols. But that's
+NOT the case. If you try to define a [pack] symbol with the word "cat"
+in a creation argument \, you'll get a "bad type" error.;
+#X text 39 430 WRONG;
+#X obj 143 452 pack symbol;
+#X text 223 442 CORRECT;
+#X obj 143 473 print this_package;
+#X msg 143 431 cat;
+#X text 41 298 Note that the "s" above is an abbreviation for "symbol".
+;
+#X obj 31 525 pack bang;
+#X text 30 492 Same problem with bangs! This [pack] object creates
+an error.;
+#X obj 25 144 print package_1;
+#X obj 26 315 print package_2;
+#X text 145 261 This doesn't work - the data types;
+#X text 144 278 don't correspond with the arguments.;
+#X text 20 32 In the example below \, the creation arguments are "100"
+\, "0" \, a "symbol" \, and "42". Hence \, when [pack] receives a bang
+\, it will send that information to its outlet as a list - or 'package'
+- which will be printed in your terminal window.;
+#X text 8 2 [pack] Peculiarities;
+#X connect 1 0 2 0;
+#X connect 2 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 4 0;
+#X connect 7 0 4 0;
+#X connect 11 0 13 0;
+#X connect 14 0 11 0;
+#X restore 171 546 pd pack_peculiarities;
+#X text 168 402 - [pack] will output its package (i.e. \, the list
+of values) when it receives a message to its left inlet.;
+#N canvas 72 44 466 546 Another_example_using_pack 0;
+#X text 181 97 is the same as;
+#X obj 23 517 print my_package;
+#X msg 46 285 1 2 dog;
+#X obj 23 211 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 55 390 5 0 0 0 - - -;
+#X floatatom 53 343 5 0 0 0 - - -;
+#X msg 129 450 100 earth me 42;
+#X text 19 38 Perhaps the best way to build creation arguments is to
+define the data types that [pack] should expect at each inlet: (i.e.
+floats \, symbols \, or pointers -- or their abbreviations f \, s \,
+or p);
+#X obj 22 97 pack float symbol pointer;
+#X obj 276 98 pack f s p;
+#X msg 36 261 42 24 dog cat 1 2;
+#X obj 23 497 pack f f s s f f;
+#X text 42 205 Any message to the first inlet will force [pack] to
+output its package - its list of values. A bang to the first inlet
+will force [pack] to output the current values without resetting any
+of them.;
+#X text 101 380 This number box will update each of the 'float' values
+and will NOT output the package - because the first inlet is not receiving
+a message - to change this behavior \, you should explore the [trigger]
+object.;
+#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 [pack] Another Example;
+#X text 20 124 [pack] can be created with any number of creation arguments.
+There will be one inlet created for each argument and the values of
+each [pack]ed element can be updated at any time using the separate
+inlets \; or they can be updated simoultaneously with a list of messages
+to its first inlet.;
+#X text 151 261 This list contains new values for each item.;
+#X text 97 280 This list doesn't contain enough items \; so it resets
+only the first three items \, uses the previous values for the other
+three items \, and then outputs the entire package.;
+#X text 99 340 A new value for the first item will reset the it and
+force [pack] to output the entire package of stored values.;
+#X text 129 481 this list will cause an error.;
+#X text 128 467 Lists can only be sent to the first inlet --;
+#X connect 2 0 11 0;
+#X connect 3 0 11 0;
+#X connect 4 0 11 1;
+#X connect 4 0 11 4;
+#X connect 4 0 11 5;
+#X connect 5 0 11 0;
+#X connect 6 0 11 1;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X restore 101 573 pd Another_example_using_pack;
+#X obj 394 69 pack;
+#X obj 394 91 print;
+#X text 98 353 An inlet is created for each argument given to [pack].
+Each may store a float \, symbol \, or pointer \, depending on the
+argument given. Only the leftmost inlet will accept a list.;
+#X msg 432 46 2;
+#X floatatom 394 46 5 0 0 0 - - -;
+#X text 98 429 Note: [pack] may output a float \, symbol \, or pointer
+if only one argument is specified.;
+#X text 11 23 combine several atoms into one message;
+#X text 23 46 The [pack] object takes a series of inputs and then outputs
+a concatenated list. By default \, [pack] has two inlets \, each of
+which will accept a float.;
+#X text 168 159 - if the first argument is "float" \, "f" \, or a numeric
+value (e.g. \, "12" \, "3.4") the first element in the list will be
+set to the incoming value \, and [pack] will output its list.;
+#X text 168 303 - a list is distributed to among the inlets of [pack].
+Each element must match the atom-type specified by the creation arguments.
+Lists with more items than the total number of inlets will be truncated.
+;
+#X text 168 263 - if the first argument is "pointer" or "p" \, an incoming
+pointer will be set to the first item in the list \, and [pack] will
+output its list.;
+#X text 168 198 - if the first argument is "symbol" or "s" \, an incoming
+symbol will be set to the first item in the list \, and [pack] will
+output its list. Symbol-atoms (like "foo") that lack the selector "symbol"
+are also accepted (but will be rejected for all additional inlets).
+;
+#X text 98 493 float;
+#X text 168 478 - the number of arguments determines the number of
+inlets (default is two). The symbols described under the "inlets" heading
+specify the atom-type of each inlet. You can also use a float to specify
+float-type while also initializing that inlet's value. Some peculiarities
+described below:;
+#X text 80 478 n) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 23 0 24 0;
+#X connect 26 0 23 1;
+#X connect 27 0 23 0;
diff --git a/doc/pddp/parazit-help.pd b/doc/pddp/parazit-help.pd
new file mode 100644
index 00000000..44219d9c
--- /dev/null
+++ b/doc/pddp/parazit-help.pd
@@ -0,0 +1,5 @@
+#N canvas 365 216 454 304 12;
+#X obj 17 35 parazit;
+#X obj 17 64 s pd-name_of_your_patch.pd;
+#X text 15 6 Turned on from inside for maximum stealth;
+#X connect 0 0 1 0;
diff --git a/doc/pddp/pd-help.pd b/doc/pddp/pd-help.pd
new file mode 100644
index 00000000..29a5c398
--- /dev/null
+++ b/doc/pddp/pd-help.pd
@@ -0,0 +1,158 @@
+#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 pd 3 12 0 18 -204280
+-1 0;
+#X obj 0 175 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 265 RELEASE_VERSION 0.41.4;
+#X text 12 245 RELEASE_DATE 2009-06-12;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 25 NAME pd;
+#X text 12 45 ALIAS page;
+#X text 12 145 INLET_N anything signal;
+#X text 12 165 OUTLET_N anything signal;
+#X text 12 105 DESCRIPTION subwindow (subpatch);
+#X text 12 65 KEYWORDS signal canvas_op;
+#X restore 500 597 pd META;
+#X obj 0 314 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 539 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 [pd] Related Objects;
+#X obj 22 43 inlet;
+#X obj 22 73 outlet;
+#X obj 68 43 inlet~;
+#X obj 68 73 outlet;
+#X restore 102 598 pd Related_objects;
+#X obj 78 184 cnv 17 3 110 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X restore 394 3 pd;
+#X obj 431 20 pddp/pddplink http://wiki.puredata.info/en/pd -text pdpedia:
+pd;
+#X text 11 23 subwindow (subpatch);
+#X text 98 183 anything;
+#X text 98 247 signal;
+#X text 80 483 1) symbol atom;
+#X obj 78 323 cnv 17 3 110 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 322 anything;
+#X text 98 397 signal;
+#X text 168 183 - by default \, [pd] has no inlets. For sending control
+messages \, you can create one by placing an [inlet] object inside
+the subpatch. One inlet is created for each [inlet] object \, with
+horizontal order corresponding between the inlets and the [inlet] objects
+inside the subpatch.;
+#X text 168 322 - by default \, [pd] has no outlets. For sending control
+messages you can create one by placing an [outlet] object inside the
+subpatch. One outlet is created for each [outlet] object \, with horizontal
+order corresponding between the outlets and the [outlet] objects inside
+the subpatch.;
+#X text 168 397 - you can create a signal outlet by placing an [outlet~]
+object inside the subpatch. One outlet is created for each [outlet~]
+object \, with horizontal order corresponding between the outlets and
+the [outlet~] objects inside the subpatch.;
+#X text 168 247 - you can create a signal inlet by placing an [inlet~]
+object inside the subpatch. One inlet is created for each [inlet~]
+object \, with horizontal order corresponding between the inlets and
+the [inlet~] objects inside the subpatch.;
+#X obj 101 543 pddp/pddplink all_about_canvas_properties.pd -text all_about_canvas_properties
+;
+#X text 97 42 The [pd] object provides a way to nest canvases. You
+can clik on the object to open the subwindow and see the objects inside.
+;
+#X text 97 130 You can also change the graphical properties of the
+object so that part of the subwindow is visible on the parent (referred
+to as "graph on parent" or "gop").;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X restore 513 3 page;
+#X text 167 483 - (optional) specify a name for the subwindow. You
+can then use this name with the prefix "pd-" to send messages to the
+subpatch itself. Duplicate names are allowed (named messages will be
+passed to both subpatches).;
+#X text 419 3 or (deprecated);
+#N canvas 0 0 450 300 with_inlets_and_outlets 0;
+#X obj 26 50 inlet;
+#X obj 26 209 outlet;
+#X text 47 109 Use the [inlet] and [outlet] objects to add inlets and
+outlets to your subpatch.;
+#X obj 341 52 inlet;
+#X floatatom 341 79 5 0 0 0 - - -;
+#X text 46 147 The horizontal order of the [inlet]/[outlet] objects
+corresponds to the placement of the inlets/outlets on the [pd] object
+itself. I.e. \, the leftmost inlet -> leftmost [inlet] \, rightmost
+inlet -> rightmost [inlet] \, and so on.;
+#X obj 342 205 outlet;
+#X connect 0 0 1 0;
+#X connect 3 0 4 0;
+#X restore 137 107 pd with_inlets_and_outlets;
+#X floatatom 290 86 5 0 0 0 - - -;
+#X text 339 78 For help on inlets/outlets \, see:;
+#X obj 338 93 pddp/pddplink inlet-help.pd -text inlet-help;
+#X obj 338 108 pddp/pddplink inlet~-help.pd -text inlet~-help;
+#X obj 428 93 pddp/pddplink outlet-help.pd -text outlet-help;
+#X obj 428 108 pddp/pddplink outlet~-help.pd -text outlet~-help;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 100 560 pddp/pddplink ../2.control.examples/12.PART2.subpatch.pd
+-text doc/2.control.examples/12.PART2.subpatch.pd;
+#X obj 100 575 pddp/pddplink ../3.audio.examples/G05.execution.order.pd
+-text doc/3.audio.examples/G05.execution.order.pd;
+#N canvas 253 436 296 107 with_no_name 0;
+#X text 19 8 You don't have to name subpatches.;
+#X text 19 23 If you're in a hurry you can just;
+#N canvas 256 287 264 105 (subpatch) 0;
+#N canvas 257 112 240 113 (subpatch) 0;
+#N canvas 244 234 309 126 (subpatch) 0;
+#X text 44 34 Ok that's enough. Remember \,;
+#X text 44 49 these windows will all go away;
+#N canvas 255 362 264 118 thats-enough 0;
+#X text 84 38 Ok \, that's it.;
+#X text 70 53 For real this time.;
+#N canvas 2 532 272 64 Really? 0;
+#X text 2 27 Seriously \,;
+#X text 2 41 you need...;
+#N canvas 6 384 266 81 What? 0;
+#X text 3 48 You keep insigating;
+#X text 4 62 pointless ...;
+#N canvas 8 249 450 72 Why? 0;
+#X text 2 39 Because your real frustrations;
+#X text 2 54 have no ...;
+#N canvas 9 129 341 101 Oh. 0;
+#X text 16 16 Also \, you're a bit obsessive/compulsive.;
+#X restore 5 5 pd Oh.;
+#X restore 7 4 pd Why?;
+#X restore 7 0 pd What?;
+#X restore 197 98 pd Really?;
+#X restore 2 102 pd thats-enough;
+#X text 44 63 when you close the parent window.;
+#X restore 138 46 pd;
+#X text 70 46 Or this:;
+#X restore 105 60 pd;
+#X text 91 33 Or this:;
+#X restore 101 65 pd;
+#X text 19 38 type "pd" in an object \, like this:;
+#X restore 382 548 pd with_no_name;
+#N canvas 0 0 450 300 click_me 0;
+#X text 110 92 This is the inside of the subpatch.;
+#X msg 172 122 1;
+#X obj 172 149 + 41;
+#X obj 172 176 print The_Answer;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X restore 50 107 pd click_me;
+#X connect 29 0 28 1;
diff --git a/doc/pddp/pddp-style-guide.pd b/doc/pddp/pddp-style-guide.pd
index bc791873..63f13eb9 100644
--- a/doc/pddp/pddp-style-guide.pd
+++ b/doc/pddp/pddp-style-guide.pd
@@ -1,36 +1,36 @@
-#N canvas 102 76 462 561 10;
-#X text 15 30 design principles;
-#X text 50 50 - Make states visible and visibly distinguished;
-#X text 50 65 - Teach by example \, not by formalism;
-#X text 50 80 - Communicate visually;
-#X text 50 95 - Offer informative feedback;
-#X text 50 110 - Strive for consistency;
-#X text 50 125 - Avoid arbitrary syntax;
-#X text 50 140 - Use standard language;
-#X text 50 155 - Use the application's terminology;
-#X text 50 170 - Support clear conceptual models for documentation
-;
-#X text 50 185 - Respect the rules of human conversation;
-#X text 50 200 - Respond with an appropriate amount of information
-;
-#X obj 2 2 cnv 15 450 20 empty empty pddp-style-guide 2 11 1 18 -233017
--66577 0;
-#X obj 418 3 pddp/pddplink http://puredata.info/dev/pddp -text pddp
-;
-#X obj 101 522 pddp/pddplink standard_gui_elements.pd -text standard_gui_elements
-;
-#X text 15 230 Here are various text conventions for discussing various
-aspects of Pd in text:;
-#X text 30 300 "anything" \, "bang" \, "float" \, "list" \, "pointer"
-\, "symbol";
-#X text 15 330 objects:;
-#X text 30 349 [route] \, [set] \, [float] \, [symbol] \, [trigger]
-\, etc.;
-#X text 15 383 messages:;
-#X text 30 406 [send 1( \, [set 0( \,;
-#X text 17 280 reserved words:;
-#X text 15 441 Though an old term in the realm of the Max family of
-languages \, "abstraction" is a misleading term. Pd patches are either
-applications or objects. If a Pd patch is meant to be reused in other
-patches \, it is an object just like any other.;
-#X text 12 521 For more info:;
+#N canvas 102 76 462 561 10;
+#X text 15 30 design principles;
+#X text 50 50 - Make states visible and visibly distinguished;
+#X text 50 65 - Teach by example \, not by formalism;
+#X text 50 80 - Communicate visually;
+#X text 50 95 - Offer informative feedback;
+#X text 50 110 - Strive for consistency;
+#X text 50 125 - Avoid arbitrary syntax;
+#X text 50 140 - Use standard language;
+#X text 50 155 - Use the application's terminology;
+#X text 50 170 - Support clear conceptual models for documentation
+;
+#X text 50 185 - Respect the rules of human conversation;
+#X text 50 200 - Respond with an appropriate amount of information
+;
+#X obj 2 2 cnv 15 450 20 empty empty pddp-style-guide 2 11 1 18 -233017
+-66577 0;
+#X obj 418 3 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 101 522 pddp/pddplink standard_gui_elements.pd -text standard_gui_elements
+;
+#X text 15 230 Here are various text conventions for discussing various
+aspects of Pd in text:;
+#X text 30 300 "anything" \, "bang" \, "float" \, "list" \, "pointer"
+\, "symbol";
+#X text 15 330 objects:;
+#X text 30 349 [route] \, [set] \, [float] \, [symbol] \, [trigger]
+\, etc.;
+#X text 15 383 messages:;
+#X text 30 406 [send 1( \, [set 0( \,;
+#X text 17 280 reserved words:;
+#X text 15 441 Though an old term in the realm of the Max family of
+languages \, "abstraction" is a misleading term. Pd patches are either
+applications or objects. If a Pd patch is meant to be reused in other
+patches \, it is an object just like any other.;
+#X text 12 521 For more info:;
diff --git a/doc/pddp/pgmin-help.pd b/doc/pddp/pgmin-help.pd
index 72ac04a4..2cadebc2 100644
--- a/doc/pddp/pgmin-help.pd
+++ b/doc/pddp/pgmin-help.pd
@@ -1,67 +1,105 @@
-#N canvas 290 -2 492 552 10;
-#X obj 27 16 pgmin;
-#X text 26 47 The [pgmin] object reads incoming program change messages.
-;
-#X text 26 69 Arguments: (optional) int represents the channel number
-to ilsten to. With no argument \, [pgmin] accepts all channels.;
-#X text 26 105 Inlets: none. Receives directly from the MIDI port.
-;
-#X obj 27 142 pgmin;
-#X floatatom 27 182 5 0 0;
-#X floatatom 57 164 5 0 0;
-#X text 101 139 Outlets:;
-#X text 119 156 Right - channel number;
-#X text 28 308 See also:;
-#X obj 29 335 pgmout;
-#X obj 26 215 pgmin 2;
-#X floatatom 26 237 5 0 0;
-#X text 25 258 With one argument (the MIDI channel number) [pgmin]
-creates only one outlet (for program change number received). The channel
-cannot be changed dynamically.;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 7 29 ctlin;
-#X obj 49 29 pgmin;
-#X obj 92 28 bendin;
-#X obj 143 27 touchin;
-#X obj 204 27 polytouchin;
-#X obj 289 27 midiin;
-#X obj 340 26 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 160 84 bendout;
-#X obj 217 83 touchout;
-#X obj 281 82 polytouchout;
-#X obj 370 82 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X restore 105 333 pd other_midi_objects;
-#X obj 298 380 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 25 379 for an explanation of MIDI usage in Pd see:;
-#X text 120 180 Left - program change number;
-#X text 66 17 - read incoming program change messages from the MIDI
-port;
-#X text 22 453 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 4 0 5 0;
-#X connect 4 1 6 0;
-#X connect 11 0 12 0;
+#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 pgmin 3 12 0 18
+-204280 -1 0;
+#X obj 0 402 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 245 507 371 META 0;
+#X text 12 115 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION read incoming program change messages from
+the MIDI port;
+#X text 12 25 NAME pgmin;
+#X text 12 135 OUTLET_0 float;
+#X text 12 155 OUTLET_1 float;
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 431 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 493 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 109 170 428 419 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 [pgmin] Related Objects;
+#X obj 74 80 ctlin;
+#X obj 217 80 pgmin;
+#X obj 24 80 bendin;
+#X obj 79 107 touchin;
+#X obj 261 80 polytouchin;
+#X obj 118 80 midiin;
+#X obj 23 107 sysexin;
+#X obj 179 167 noteout;
+#X obj 76 167 ctlout;
+#X obj 24 167 bendout;
+#X obj 366 167 touchout;
+#X obj 280 167 polytouchout;
+#X obj 123 167 midiout;
+#X obj 24 33 pgmout;
+#X obj 24 221 makenote;
+#X text 21 198 MIDI note construction:;
+#X text 21 140 MIDI output:;
+#X text 21 57 MIDI input:;
+#X obj 184 221 stripnote;
+#X obj 168 80 notein;
+#X text 181 198 MIDI note deconstruction:;
+#X text 21 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 20 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 21 246 Externals;
+#X obj 21 295 pddp/helplink maxlib/pitch;
+#X obj 21 310 pddp/helplink maxlib/score;
+#X obj 21 325 pddp/helplink maxlib/chord;
+#X obj 21 360 pddp/helplink cyclone/midiformat;
+#X obj 21 375 pddp/helplink cyclone/midiparse;
+#X obj 21 390 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X obj 78 440 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 483 3 pgmin;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/pgmin -text
+pdpedia: pgmin;
+#X text 95 134 The [pgmin] object reads incoming program change messages.
+;
+#X obj 231 162 pgmin;
+#X floatatom 231 212 5 0 0 0 - - -;
+#X floatatom 258 189 5 0 0 0 - - -;
+#X obj 230 245 pgmin 2;
+#X floatatom 230 267 5 0 0 0 - - -;
+#X text 98 407 (none);
+#X text 98 439 float;
+#X obj 78 465 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 464 float;
+#X text 168 407 - [pgmin] receives data directly from the MIDI port.
+;
+#X obj 371 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 571 for an explanation of MIDI usage in Pd see:;
+#X text 11 23 read incoming program change messages from the MIDI port
+;
+#X text 168 511 - with one (optional) argument (the MIDI channel number)
+[pgmin] creates only one outlet (for program change number received).
+The channel cannot be changed dynamically. With no argument \, [pgmin]
+accepts all channels.;
+#X text 168 439 (integer) program change number.;
+#X text 168 464 (integer) channel number.;
+#X text 80 511 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 12 0 13 0;
+#X connect 12 1 14 0;
+#X connect 15 0 16 0;
diff --git a/doc/pddp/pgmout-help.pd b/doc/pddp/pgmout-help.pd
index 5ec7129e..3c770bd8 100644
--- a/doc/pddp/pgmout-help.pd
+++ b/doc/pddp/pgmout-help.pd
@@ -1,68 +1,107 @@
-#N canvas 293 25 488 486 10;
-#X obj 19 12 pgmout;
-#X obj 19 134 pgmout;
-#X floatatom 19 100 5 0 0;
-#X floatatom 55 116 5 0 0;
-#X text 93 96 Inlets:;
-#X text 105 113 Left: int \, program change value;
-#X text 105 135 Right: int \, MIDI channel to send the program change
-message on.;
-#X obj 25 233 pgmout 2;
-#X text 30 289 See also:;
-#N canvas 240 135 476 472 other_midi_objects 0;
-#X obj 7 29 ctlin;
-#X obj 49 29 pgmin;
-#X obj 92 28 bendin;
-#X obj 143 27 touchin;
-#X obj 204 27 polytouchin;
-#X obj 289 27 midiin;
-#X obj 340 26 sysexin;
-#X obj 6 85 noteout;
-#X obj 63 84 ctlout;
-#X obj 160 84 bendout;
-#X obj 217 83 touchout;
-#X obj 281 82 polytouchout;
-#X obj 370 82 midiout;
-#X obj 113 84 pgmout;
-#X obj 11 153 makenote;
-#X text 10 194 MIDI notes deconstruction:;
-#X text 8 128 MIDI note construction:;
-#X text 8 58 MIDI output:;
-#X text 8 2 MIDI input:;
-#X obj 15 226 stripnote;
-#X text 11 266 Additional useful objects for MIDI processing (Maxlib
-by Olaf Matthes);
-#X obj 148 297 chord;
-#X obj 109 296 borax;
-#X obj 54 296 score o;
-#X obj 13 296 pitch;
-#X text 15 336 Also \, from cyclone (alpha) by Krzysztof Czaja:;
-#X obj 16 359 midiformat;
-#X obj 172 359 midiflush;
-#X obj 98 359 midiparse;
-#X text 15 386 and xeq \, from the same developer;
-#X obj 16 411 xeq;
-#X text 41 402 an experimental MIDI sequencer;
-#X restore 109 316 pd other_midi_objects;
-#X obj 295 354 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags;
-#X text 25 353 for an explanation of MIDI usage in Pd see:;
-#X text 92 166 Outlets: None. Sends directly to the MIDI port;
-#X floatatom 25 205 5 0 0;
-#X obj 31 316 pgmin;
-#X text 16 40 Arguments: (optional) and int representing the MIDI channel
-to which the program change should be sent. Without an argument it
-will send on channel 1 by default.;
-#X text 24 262 Send program change message on MIDI channel 2;
-#X floatatom 193 205 5 0 0;
-#X msg 238 204 2;
-#X obj 193 233 pgmout;
-#X text 70 12 - send program change messages to the MIDI port;
-#X text 23 393 This document was updated for Pd version 0.35 by Michal
-Seta as part of a project called pddp proposed by Krzysztof Czaja \,
-managed and edited by Dave Sabine \, to build comprehensive documentation
-for Pd.;
-#X connect 2 0 1 0;
-#X connect 3 0 1 1;
-#X connect 13 0 7 0;
-#X connect 17 0 19 0;
-#X connect 18 0 19 1;
+#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 pgmout 3 12 0 18
+-204280 -1 0;
+#X obj 0 410 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION send program change messages to the MIDI
+port;
+#X text 12 25 NAME pgmout;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 477 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 504 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 110 171 428 419 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 [pgmout] Related Objects;
+#X obj 74 80 ctlin;
+#X obj 24 33 pgmin;
+#X obj 24 80 bendin;
+#X obj 79 107 touchin;
+#X obj 261 80 polytouchin;
+#X obj 118 80 midiin;
+#X obj 23 107 sysexin;
+#X obj 179 167 noteout;
+#X obj 76 167 ctlout;
+#X obj 24 167 bendout;
+#X obj 366 167 touchout;
+#X obj 280 167 polytouchout;
+#X obj 123 167 midiout;
+#X obj 231 167 pgmout;
+#X obj 24 221 makenote;
+#X text 21 198 MIDI note construction:;
+#X text 21 140 MIDI output:;
+#X text 21 57 MIDI input:;
+#X obj 184 221 stripnote;
+#X obj 168 80 notein;
+#X text 181 198 MIDI note deconstruction:;
+#X text 22 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 21 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 22 246 Externals;
+#X obj 22 295 pddp/helplink maxlib/pitch;
+#X obj 22 310 pddp/helplink maxlib/score;
+#X obj 22 325 pddp/helplink maxlib/chord;
+#X obj 22 360 pddp/helplink cyclone/midiformat;
+#X obj 22 375 pddp/helplink cyclone/midiparse;
+#X obj 22 390 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X obj 78 419 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 481 (none);
+#X text 98 418 float;
+#X obj 78 444 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 443 float;
+#X obj 371 571 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 570 for an explanation of MIDI usage in Pd see:;
+#X obj 477 3 pgmout;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/pgmout -text
+pdpedia: pgmout;
+#X obj 215 148 pgmout;
+#X floatatom 215 105 5 0 0 0 - - -;
+#X floatatom 248 126 5 0 0 0 - - -;
+#X obj 145 251 pgmout 2;
+#X floatatom 145 223 5 0 0 0 - - -;
+#X text 144 280 Send program change message on MIDI channel 2;
+#X floatatom 313 223 5 0 0 0 - - -;
+#X msg 358 222 2;
+#X obj 313 251 pgmout;
+#X text 11 23 send program change messages to the MIDI port;
+#X text 168 481 - [pgmin] sends data directly to the MIDI port.;
+#X text 80 522 1) float;
+#X text 168 418 - (integer) program change value.;
+#X text 168 443 - (integer) MIDI channel to send the program change
+message on.;
+#X text 168 522 - (optional) integer representing the MIDI channel
+to which the program change should be sent. Without an argument it
+will send on channel 1 by default.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 18 0 17 0;
+#X connect 19 0 17 1;
+#X connect 21 0 20 0;
+#X connect 23 0 25 0;
+#X connect 24 0 25 1;
diff --git a/doc/pddp/phasor~-help.pd b/doc/pddp/phasor~-help.pd
new file mode 100644
index 00000000..5e8cf6a0
--- /dev/null
+++ b/doc/pddp/phasor~-help.pd
@@ -0,0 +1,90 @@
+#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 phasor~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 339 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION sawtooth generator;
+#X text 12 25 NAME phasor~;
+#X text 12 125 INLET_0 float signal;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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 474 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;
+#N canvas 109 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 osc~;
+#X obj 62 43 cos~;
+#X obj 103 43 tabread4~;
+#X text 8 2 [phasor~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 348 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 447 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 392 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 391 float;
+#X obj 471 3 phasor~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/phasor~ -text
+pdpedia: phasor~;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 100 float 0;
+#X coords 0 1 100 -1 200 100 1;
+#X restore 279 200 graph;
+#X obj 84 197 metro 500;
+#X floatatom 68 114 0 0 0 0 - - -;
+#X text 86 238 graph the output;
+#X text 97 114 <- specify frequency;
+#X obj 68 142 phasor~ 440;
+#X text 145 136 invoked with argument for non-signal input. Incoming
+messages override the initial value.;
+#X obj 84 172 loadbang;
+#X text 98 347 float;
+#X text 98 367 signal;
+#X text 98 411 list;
+#X text 98 446 signal;
+#X text 11 23 sawtooth generator;
+#X text 168 347 - a float sets the frequency of the sawtooth.;
+#X text 168 367 - incoming signal sets the frequency of the sawtooth.
+;
+#X text 167 391 - resets the phase (range is 0 to 1).;
+#X text 167 411 - a list will be truncated to the first element.;
+#X text 80 492 1) float;
+#X text 63 66 The [phasor~] object outputs a sawtooth signal \, traditionally
+used for table lookup via [cos~] or [tabread4~].;
+#X text 168 492 - (optional) with a floating-point argument \, [phasor~]
+takes floating-point messages to change frequency. If no argument is
+supplied \, the input is taken to be an audio signal.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 551 pddp/pddplink ../3.audio.examples/C02.sawtooth-foldover.pd
+-text doc/3.audio.exampmles/C02.sawtooth-foldover.pd;
+#X obj 98 566 pddp/pddplink ../3.audio.examples/J09.bandlimited.pd
+-text doc/3.audio.exampmles/J09.bandlimited.pd;
+#X obj 68 221 tabwrite~ \$0-array;
+#X connect 15 0 38 0;
+#X connect 16 0 19 0;
+#X connect 19 0 38 0;
+#X connect 21 0 15 0;
+#X connect 21 0 15 0;
diff --git a/doc/pddp/pipe-help.pd b/doc/pddp/pipe-help.pd
index 5e527fcb..f2658c08 100644
--- a/doc/pddp/pipe-help.pd
+++ b/doc/pddp/pipe-help.pd
@@ -1,117 +1,228 @@
-#N canvas 1 2 924 627 10;
-#X floatatom 435 307 0 0 0;
-#X floatatom 432 68 0 0 0;
-#X floatatom 432 176 0 0 0;
-#X obj 432 94 t f f f;
-#X obj 460 125 + 1;
-#X obj 488 125 + 2;
-#X floatatom 474 175 0 0 0;
-#X floatatom 517 176 0 0 0;
-#X obj 435 400 pipe 2000;
-#X text 474 305 numbers to store and output later;
-#X text 500 328 output all stored messages immediately;
-#X msg 446 332 flush;
-#X msg 463 378 clear;
-#X text 511 378 forget all stored messages;
-#X obj 436 538 delay;
-#X obj 473 538 timer;
-#X text 81 13 -- delay a message -- a message "delay line";
-#X obj 49 13 pipe;
-#X text 21 40 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 20 102 BASIC USAGE;
-#X text 20 161 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 27 206 5 0 0;
-#X obj 27 227 pipe 20;
-#X floatatom 27 249 5 0 0;
-#X text 21 116 The left inlet accepts numbers \, symbols \, pointers
-\, messages \, and lists. The right inlet adjusts the delay time (the
-length of the pipe).;
-#X floatatom 93 210 5 0 0;
-#X text 135 209 Adjust the length of the pipe.;
-#X text 435 192 METHODS OF CONTROL;
-#X text 19 270 Creation arguments can be used to define the data type
-to be expected at the left inlet and to define the initial length of
-delay.;
-#X text 17 314 1 If only one creation argument is used \, it must be
-a number and it defines the initial length of delay.;
-#X obj 22 345 pipe 1000;
-#X text 16 366 2 If a second or third creation argument is used \,
-then they will define the data type to be expected at the inlet. Multiple
-messages can be sent to [pipe] (similar to [pack] in this case) and
-the delay time is the LAST creation argument and can be changed by
-the last inlet.;
-#X obj 19 468 pipe s 1000;
-#X text 92 468 A pipe for symbols.;
-#X obj 19 568 pipe f s 1000;
-#X text 104 568 A pipe for one float \, and one symbol.;
-#X msg 18 438 symbol cat;
-#X msg 90 438 symbol dog;
-#X symbolatom 19 489 10 0 0;
-#X symbolatom 92 589 10 0 0;
-#X floatatom 19 589 5 0 0;
-#X msg 30 547 100 dog;
-#X msg 20 526 42 cat;
-#X text 72 523 messages can be sent as lists like this example.;
-#X obj 432 151 pipe f f f 1000;
-#X text 431 218 [pipe] accepts two very important methods.;
-#X text 434 238 1 "flush": forces [pipe] to output all stored messages
-immediately.;
-#X text 434 267 2 "clear": forces [pipe] to forget all stored messages.
-;
-#X obj 435 421 print;
-#X msg 456 353 bang;
-#X text 492 353 output the most recently stored message;
-#X text 434 286 3 "bang": repeat the most recently stored message again.
-;
-#X text 431 443 RESCHEDULING;
-#X text 437 458 [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 text 430 11 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 432 518 RELATED OBJECTS;
-#N canvas 0 0 454 304 related_objects_from_other_libraries 0;
-#X obj 45 31 t3_delay;
-#X text 26 77 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 25 126 The best places to find information about Pd's libraries
-is:;
-#X text 22 148 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 24 163 or;
-#X text 24 178 iem.kug.ac.at/pdb/;
-#X restore 437 561 pd related_objects_from_other_libraries;
-#X text 439 579 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 connect 0 0 8 0;
-#X connect 1 0 3 0;
-#X connect 3 0 44 0;
-#X connect 3 1 4 0;
-#X connect 3 2 5 0;
-#X connect 4 0 44 1;
-#X connect 5 0 44 2;
-#X connect 8 0 48 0;
-#X connect 11 0 8 0;
-#X connect 12 0 8 0;
-#X connect 21 0 22 0;
-#X connect 22 0 23 0;
-#X connect 25 0 22 1;
-#X connect 32 0 38 0;
-#X connect 34 0 40 0;
-#X connect 34 1 39 0;
-#X connect 36 0 32 0;
-#X connect 37 0 32 0;
-#X connect 41 0 34 0;
-#X connect 42 0 34 0;
-#X connect 44 0 2 0;
-#X connect 44 1 6 0;
-#X connect 44 2 7 0;
-#X connect 49 0 8 0;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 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 GENRE help;
+#X text 12 45 KEYWORDS control time;
+#X text 12 85 DESCRIPTION delay a message - a message "delay line"
+;
+#X text 12 25 NAME pipe;
+#X text 12 125 INLET_0 float list symbol pointer bang flush clear;
+#X text 12 165 INLET_R float;
+#X text 12 145 INLET_N float list symbol pointer bang;
+#X text 12 185 OUTLET_N float symbol pointer;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#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/doc/pddp/pique-help.pd b/doc/pddp/pique-help.pd
new file mode 100644
index 00000000..51388df7
--- /dev/null
+++ b/doc/pddp/pique-help.pd
@@ -0,0 +1,89 @@
+#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 pique 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 50 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 245 RELEASE_VERSION 0.41.4;
+#X text 12 225 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd 0.31. Jonathan Wilkes
+revised the patch to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control analysis;
+#X text 12 85 DESCRIPTION find peaks in an FFT spectrum;
+#X text 12 25 NAME pique;
+#X text 12 125 INLET_0 list;
+#X text 12 145 OUTLET_0 list;
+#X restore 500 597 pd META;
+#X obj 0 487 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;
+#N canvas 108 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 [pique] Related Objects;
+#X obj 23 43 fft~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 431 cnv 17 3 50 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 482 3 pique;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/pique -text
+pdpedia: pique;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-fft-real 64 float 0;
+#X coords 0 64 63 -64 200 140 1;
+#X restore 21 85 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-fft-imag 64 float 0;
+#X coords 0 64 63 -64 200 140 1;
+#X restore 21 250 graph;
+#X text 98 495 list;
+#X obj 316 252 rfft~;
+#X obj 315 210 osc~ 2000;
+#X obj 368 265 metro 1000;
+#X obj 368 243 loadbang;
+#X obj 389 210 osc~ 5000;
+#X obj 244 171 pique;
+#X obj 244 198 print;
+#X text 98 430 list;
+#X text 168 430 - [pique] takes unwindowed FFT analyses as input. The
+message is made up of the following four items: the number of FFT points
+\, FFT real part (array name) \, FFT imaginary part (array name) \,
+and the maximum number of peaks to report;
+#X text 98 543 (none);
+#X text 11 23 find peaks in an FFT spectrum;
+#X text 168 495 - [pique] outputs a list of peaks \, giving their peak
+number \, frequency \, amplitude \, and phase (as a cosine/sine pair).
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 316 303 tabwrite~ \$0-fft-real;
+#X obj 344 338 tabwrite~ \$0-fft-imag;
+#X obj 244 117 f \$0;
+#X obj 244 92 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X msg 244 144 64 \$1-fft-real \$1-fft-imag 10;
+#X connect 15 0 29 0;
+#X connect 15 1 30 0;
+#X connect 16 0 15 0;
+#X connect 17 0 29 0;
+#X connect 17 0 30 0;
+#X connect 18 0 17 0;
+#X connect 19 0 15 0;
+#X connect 20 0 21 0;
+#X connect 31 0 33 0;
+#X connect 32 0 31 0;
+#X connect 33 0 20 0;
diff --git a/doc/pddp/plot-help.pd b/doc/pddp/plot-help.pd
new file mode 100644
index 00000000..61e8df16
--- /dev/null
+++ b/doc/pddp/plot-help.pd
@@ -0,0 +1,187 @@
+#N struct plot-help-template float x float y array array1 plot-help-array1-template
+array array2 plot-help-array2-template array array3 plot-help-array3-template
+;
+#N struct plot-help-array1-template float y;
+#N struct plot-help-array2-template float x float y;
+#N struct plot-help-array3-template float y float w;
+#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 plot 3 12 0 18 -204280
+-1 0;
+#X obj 0 121 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 5 GENRE help;
+#X text 12 45 KEYWORDS control GUI data_structure array;
+#X text 12 85 DESCRIPTION draw array elements of scalars;
+#X text 12 25 NAME plot;
+#X text 12 125 INLET_0 float;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 205 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 229 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 525 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 109 428 428 163 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 [plot] Related Objects;
+#X obj 172 53 struct;
+#X obj 222 53 drawpolygon;
+#X obj 97 53 drawsymbol;
+#X obj 302 53 drawcurve;
+#X text 17 89 Other Data Structure Objects;
+#X obj 255 123 element;
+#X obj 86 123 get;
+#X obj 117 123 set;
+#X obj 146 123 getsize;
+#X obj 200 123 setsize;
+#X obj 32 123 pointer;
+#X obj 26 53 drawnumber;
+#X restore 102 597 pd Related_objects;
+#X obj 78 130 cnv 17 3 65 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 129 float;
+#X text 98 183 list;
+#X obj 491 3 plot;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/plot -text
+pdpedia: plot;
+#N canvas 119 152 428 287 plot-help-data 0;
+#X scalar plot-help-template 32 98 \; 2 \; -32 \; 12 \; -54 \; -9 \;
+\; 0 0 \; 7 14 \; 27 -10 \; 0 -30 \; -40 0 \; 0 50 \; 60 0 \; \; 11
+7 \; 20 5 \; 22 14 \; -20 5 \; 20 11 \; -11 8 \; -17 16 \; \;;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 19 206 Above is a scalar defined by "plot-help-template". It
+contains three arrays \, each of which has an associated [plot] object
+that determines how they will be displayed.;
+#X text 7 1 [plot] Window to Display Data Structures;
+#X text 19 248 To see the data itself \, select "properties" for the
+scalar by right clicking on the purple square.;
+#X restore 371 58 pd plot-help-data;
+#N canvas 110 167 428 402 plot-help-template 0;
+#X obj 22 42 plot array1 500 1 10 15 20;
+#X text 19 67 This first example plots the red trace (500) \, width
+1 \, at point (10 \, 15) \, with horizontal spacing 20 The black diamonds
+come from the template of the array1 element itself.;
+#X text 19 228 If a "w" variable is present in the template as for
+array3 \, it is added to the line width.;
+#X obj 21 365 filledpolygon 509 509 0 -10 -10 10 -10 10 10 -10 10;
+#X obj 22 292 struct plot-help-template float x float y array array1
+plot-help-array1-template array array2 plot-help-array2-template array
+array3 plot-help-array3-template;
+#X obj 22 127 plot curve array2 70 3 100 0;
+#X obj 22 208 plot curve array3 9 1 120 50 20;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [plot] plot-help-template;
+#X text 19 269 Here is the [struct] for all this:;
+#X text 19 149 This is the green spiral (color 70 \, line width 3 \,
+location (100 \, 0). Since the template for array2 contains an "x"
+variable \, play ignores x spacing requests and takes x from the data
+itself.;
+#X restore 371 81 pd plot-help-template;
+#N canvas 18 119 428 228 plot-help-array1-template 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [plot] Element of "array1" in "plot-help-template";
+#X obj 24 188 filledpolygon 0 0 0 -5 0 0 5 5 0 0 -5;
+#X obj 23 158 struct plot-help-array1-template float y;
+#X text 20 38 The following data structure is defined as an element
+of "array1" in the data structure "plot-help-template". It defines
+one "y" field \, which is a reserved field that controls the y-value
+of GUI objects associated with this template. Notice there is no "x"
+field defined-- this means that when the array is plotted \, you can
+click on one of the elements (i.e. \, the small black squares defined
+by [filledpolygon]) and drag horizontally to change the y-value for
+other elements as well.;
+#X restore 12 51 pd plot-help-array1-template;
+#N canvas 17 141 428 146 plot-help-array2-template 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [plot] Element of "array2" in "plot-help-template";
+#X obj 22 114 struct plot-help-array2-template float x float y;
+#X text 20 36 This data structure is defined as an element for "array2"
+in "plot-help-template". No drawing instructions are associated with
+this [struct]. The only graphic visible in the "plot-help-data" subwindow
+is the trace itself. The thickness and color of the line are defined
+solely using the 2nd [plot] object in the "plot-help-template" subwindow.
+;
+#X restore 12 73 pd plot-help-array2-template;
+#N canvas 17 164 428 235 plot-help-array3-template 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [plot] Element of "array3" in "plot-help-template";
+#X obj 22 193 struct plot-help-array3-template float y float w;
+#X text 19 36 This data structure is defined as the element for "array3"
+in "plot-help-template". Since the reserved "w" field is defined here
+\, you can adjust the width of the line at each element (the mouse
+pointer will change to two vertical arrows when you hover over an area
+that allows you to change the width). The graphical result is the wavy
+blue line in the "plot-help-data" window. For both width and y-value
+\, you can click an element and drag horizontally to select and adjust
+other elements.;
+#X text 19 144 For both width and y-value \, you can click an element
+and drag horizontally to select and adjust other elements.;
+#X restore 12 94 pd plot-help-array3-template;
+#X text 202 82 explanation is in here-->;
+#X text 168 129 - sending a zero to the inlet of [plot] will turn off
+visibility for the drawing. A nonzero value will turn it back on. By
+default the drawing is visible \, unless the -v flag is given as an
+argument.;
+#X text 98 210 (none);
+#X text 11 23 draw array elements of scalars;
+#X text 168 183 - a list will be truncated to the first element.;
+#X text 80 414 2) float;
+#X text 80 442 3) float;
+#X text 80 459 4) float;
+#X text 80 477 5) float;
+#X text 80 493 6) float;
+#X text 168 397 - the field to plot.;
+#X text 168 414 - RGB color for the trace (0=black \, 999=white \,
+900=red \, 90=green \, 9=blue \, 555=grey \, etc.).;
+#X text 168 442 - line width of the trace.;
+#X text 168 459 - relative x location.;
+#X text 168 477 - relative y location.;
+#X text 168 493 - x spacing (ignored if the template for the array
+contains an "x" variable).;
+#X text 80 247 0-6 flags;
+#X text 168 248 - "-n" flag to make the drawing invisible initially.
+;
+#X text 168 264 - "-v [variable]" flag to assign a variable to make
+the number visible/invisible.;
+#X text 168 292 - "-vs [constant or variable]" flag to set visibility
+of scalars along the path of the plot.;
+#X text 168 319 - "-x [variable]" flag to use a different x variable.
+;
+#X text 168 339 - "-y [variable]" flag to use a different y variable.
+;
+#X text 168 359 - "-w [variable]" flag to use a different w variable.
+;
+#X text 168 376 - word "curve" to specify bezier.;
+#X text 80 397 1) symbol atom;
+#X text 79 263 (symbols atoms);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 545 pddp/pddplink all_about_arrays.pd;
+#X obj 98 575 pddp/pddplink ../4.data.structures/05.array.pd -text
+doc/4.data.structures/05.array.pd;
+#X obj 288 530 pddp/pddplink ../4.data.structures/09.scaling.pd -text
+doc/4.data.structure/09.scaling.pd;
+#X obj 288 545 pddp/pddplink ../4.data.structures/10.onoff.pd -text
+doc/4.data.structures/10.onoff.pd;
+#X obj 288 560 pddp/pddplink ../4.data.structures/11.array.controls.pd
+-text doc/4.data.structures/11.array.controls.pd;
+#X obj 98 530 pddp/pddplink all_about_z_order.pd;
+#X obj 98 560 pddp/pddplink scalar-help.pd;
diff --git a/doc/pddp/pointer-help.pd b/doc/pddp/pointer-help.pd
new file mode 100644
index 00000000..582e9e1c
--- /dev/null
+++ b/doc/pddp/pointer-help.pd
@@ -0,0 +1,190 @@
+#N struct template2 float x float y float z float q float zz;
+#N struct template1 float x float y float z float q;
+#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 pointer 3 12 0 18
+-204280 -1 0;
+#X obj 0 142 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 245 496 366 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 225 LIBRARY internal;
+#X text 12 265 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 245 AUTHOR Miller Puckette;
+#X text 12 325 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 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure storage nonlocal;
+#X text 12 85 DESCRIPTION remember the location of a scalar in a list
+;
+#X text 12 25 NAME pointer;
+#X text 12 145 INLET_1 pointer;
+#X text 12 165 OUTLET_0 bang pointer;
+#X text 12 185 OUTLET_N pointer;
+#X text 12 205 OUTLET_R bang;
+#X text 12 125 INLET_0 bang pointer traverse next vnext rewind send-window
+;
+#X text 12 285 RELEASE_DATE 1997;
+#X text 12 305 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 355 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 491 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 54 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 [pointer] Related Objects;
+#X obj 12 34 get;
+#X obj 45 34 set;
+#X obj 80 34 append;
+#X obj 130 34 getsize;
+#X obj 186 34 setsize;
+#X obj 246 34 element;
+#X obj 12 59 sublist;
+#X obj 70 59 struct;
+#X restore 102 597 pd Related_objects;
+#X obj 78 150 cnv 17 3 175 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.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 336 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 469 3 pointer;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/pointer -text
+pdpedia: pointer;
+#X text 98 149 bang;
+#X text 98 176 traverse;
+#X text 98 227 next;
+#X text 98 252 vnext;
+#X text 98 335 pointer;
+#X text 98 303 rewind;
+#X text 98 163 pointer;
+#X obj 78 398 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 359 pointer;
+#X text 98 473 bang;
+#X obj 78 471 cnv 17 3 17 empty \$0-pddp.cnv.let.r r 5 9 0 16 -228856
+-162280 0;
+#X text 98 397 pointer;
+#X text 168 397 - an additional outlet is created for each argument
+(a template name) provided to [pointer]. This makes it possible to
+route outgoing pointers to different outlets according to the class
+of the scalar being output. Pointers to objects that do not match any
+of the specified templates are sent to the second to last outlet.;
+#X text 168 303 - reset the pointer to the head of the list.;
+#X text 167 335 - stores the value of the pointer without outputting
+it.;
+#X text 168 163 - an incoming pointer is stored and send to the left
+outlet.;
+#X text 168 252 - the message "vnext 0" behaves exactly as the "next"
+message. "vnext 1" will move to the next selected object. The window
+must be visible for the "selection" to make sense (i.e. \, you will
+get an error if it is not visible).;
+#X text 168 359 - the current value of the pointer. If one or more
+arguments are provided \, the first outlet will only output a pointer
+to the template specified by the first argument.;
+#X obj 78 99 pointer;
+#X msg 87 66 bang;
+#X msg 126 66 next;
+#X obj 78 121 print out1;
+#X msg 165 66 vnext 1;
+#X msg 224 66 rewind;
+#X obj 181 121 print out2:end_of_list;
+#N canvas 86 344 428 221 More_on_pointers 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 [pointer] More info;
+#X text 20 38 [pointer] is a storage object like [float] \, except
+that the thing stored is the location of a scalar somewhere. You can
+send a pointer a value (perhaps from another [pointer] object). The
+right inlet takes pointers and simply stores them. A bang in the left
+outputs the [pointer] \, and a [pointer] in the left both sets and
+outputs the value.;
+#X text 20 120 The value of a [pointer] can either indicate a real
+scalar \, or else the "head" (before the first element) of the list.
+This allows you to point to an empty list \, and also \, to "append"
+a scalar to the beginning of the list.;
+#X text 21 175 Pointers are "safe": if you delete a scalar \, pointers
+to it are marked invalid.;
+#X restore 101 575 pd More_on_pointers;
+#N canvas 103 349 428 192 Arguments_with_pointer 0;
+#X text 20 38 Optional arguments to pointer allow you to select according
+to the class of the scalar being output:;
+#X msg 37 102 next;
+#X obj 23 130 pointer help-pointer-template1 help-pointer-template2
+;
+#X obj 23 156 print template1;
+#X obj 128 156 print template2;
+#X obj 233 156 print other;
+#X obj 338 156 print bangout;
+#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 [pointer] Specifying Creation Arguments;
+#X msg 23 79 traverse pd-pointer-help-data;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 2 5 0;
+#X connect 2 3 6 0;
+#X connect 9 0 2 0;
+#X restore 171 549 pd Arguments_with_pointer;
+#N canvas 114 187 428 210 pointer-help-data 0;
+#X scalar template2 48 120 -32 0 0 \;;
+#X scalar template1 163 36 90 0 \;;
+#X scalar template1 248 147 9 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 [pointer] Window to Display Scalars;
+#X restore 395 81 pd pointer-help-data;
+#X msg 78 44 traverse pd-pointer-help-data;
+#N canvas 118 187 428 109 pointer-help-template1 0;
+#X obj 24 58 filledpolygon z 0 1 0 0 20 0 20 30 0 30;
+#X obj 11 32 struct template1 float x float y float z;
+#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 [pointer] template1;
+#X restore 365 101 pd pointer-help-template1;
+#N canvas 107 187 428 106 pointer-help-template2 0;
+#X obj 45 65 filledcurve 909 0 0 0 0 30 30 60 0 30 -30 0 0;
+#X obj 24 35 struct template2 float x float y;
+#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 [pointer] template2;
+#X restore 365 121 pd pointer-help-template2;
+#X text 11 23 remember the location of a scalar in a list;
+#X text 168 227 - move forward one element and output the pointer.
+When the end of the list is reached \, a bang goes to the right outlet.
+;
+#X text 168 176 - "traverse" \, followed by a subwindow name (or patch
+filename) sets the value of [pointer] to the "head" of the list. The
+"pd-" prefix must be used with the subwindow name \, e.g. \, "traverse
+pd-pointer-help-data".;
+#X text 98 318 send-window;
+#X text 168 473 - a bang at the right outlet signals the end of the
+list.;
+#X text 168 495 - [pointer] takes (optional) arguments \, each of which
+is the name of a template. An additional outlet is created for each
+argument \, so that pointers are routed to different outlets based
+on the class of scalar being output.;
+#X msg 273 65 send-window vis 1;
+#X text 168 318 - send a message to the canvas that contains the scalar.
+;
+#X text 168 149 - outputs the current value of the pointer.;
+#X text 98 495 n) float;
+#X text 93 510 symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 245 575 pddp/pddplink scalar-help.pd;
+#X connect 31 0 34 0;
+#X connect 31 1 37 0;
+#X connect 32 0 31 0;
+#X connect 33 0 31 0;
+#X connect 35 0 31 0;
+#X connect 36 0 31 0;
+#X connect 41 0 31 0;
+#X connect 50 0 31 0;
diff --git a/doc/pddp/poly-help.pd b/doc/pddp/poly-help.pd
new file mode 100644
index 00000000..4eb2475b
--- /dev/null
+++ b/doc/pddp/poly-help.pd
@@ -0,0 +1,106 @@
+#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 poly 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 52 187 494 405 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 225 LIBRARY internal;
+#X text 12 265 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 245 AUTHOR Miller Puckette;
+#X text 12 325 HELP_PATCH_AUTHORS Updated for Pd version 0.25. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION MIDI-style polyphonic voice allocator;
+#X text 12 25 NAME poly;
+#X text 12 145 INLET_1 float;
+#X text 12 185 OUTLET_1 float;
+#X text 12 205 OUTLET_2 float;
+#X text 12 125 INLET_0 float list stop clear;
+#X text 12 165 OUTLET_0 float;
+#X text 12 285 RELEASE_DATE 1997;
+#X text 12 305 RELEASE_VERSION;
+#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 512 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 107 480 428 109 Related_objects 0;
+#X obj 62 43 makenote;
+#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 route;
+#X obj 122 43 pack;
+#X text 8 2 [poly] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 296 cnv 17 3 100 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 295 float;
+#X text 98 323 list;
+#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 407 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 406 float;
+#X text 98 381 clear;
+#X obj 491 3 poly;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/poly -text
+pdpedia: poly;
+#X obj 102 190 poly 4 1;
+#X msg 153 144 60 0;
+#X msg 197 144 62 64;
+#X msg 244 144 62 0;
+#X obj 102 216 pack 0 0 0;
+#X obj 102 242 print;
+#X text 147 241 Output is in the printout window.;
+#X msg 304 145 stop;
+#X msg 346 145 clear;
+#X msg 102 144 60 64;
+#X text 98 353 stop;
+#X text 168 353 - output all values one by one \, ordered according
+to voice number \, and clear the memory of [poly].;
+#X text 168 381 - clear all stored values.;
+#X text 167 406 - the right inlet stores the velocity.;
+#X text 11 23 MIDI-style polyphonic voice allocator;
+#X text 168 323 - a (pitch \, velocity) pair is distributed to the
+two inlets. Lists with more than two elements will be truncated.;
+#X text 168 545 - a "1" sets voice stealing \, which is off by default.
+;
+#X text 168 530 - the first argument sets the number of voices.;
+#X text 80 530 1) float;
+#X text 80 545 2) float;
+#X text 48 56 The [poly] object takes a stream of pitch/velocity pairs
+and outputs triples containing voice number \, pitch and velocity.
+You can pack the output and use the route object to route messages
+among a bank of voices depending on the first outlet. [poly] can be
+configured to do voice stealing or not (the default.);
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 78 467 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 78 490 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 443 float;
+#X text 98 466 float;
+#X text 98 489 float;
+#X text 168 295 - a float to the left inlet sets the pitch and triggers
+the output.;
+#X text 168 443 - voice number;
+#X text 168 466 - pitch;
+#X text 168 489 - velocity;
+#X connect 17 0 21 0;
+#X connect 17 1 21 1;
+#X connect 17 2 21 2;
+#X connect 18 0 17 0;
+#X connect 19 0 17 0;
+#X connect 20 0 17 0;
+#X connect 21 0 22 0;
+#X connect 24 0 17 0;
+#X connect 25 0 17 0;
+#X connect 26 0 17 0;
diff --git a/doc/pddp/polytouch-out.pd b/doc/pddp/polytouch-out.pd
new file mode 100644
index 00000000..245ac327
--- /dev/null
+++ b/doc/pddp/polytouch-out.pd
@@ -0,0 +1,100 @@
+#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 polytouchout 3 12
+0 18 -204280 -1 0;
+#X obj 0 412 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 245 494 367 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was created for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI unfinished orphan;
+#X text 12 25 NAME polytouchout;
+#X text 12 125 INLET_0 float;
+#X text 12 145 INLET_1;
+#X text 12 165 INLET_2;
+#X text 12 85 DESCRIPTION needs a description;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 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 90 178 428 421 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 167 33 touchin;
+#X obj 27 33 polytouchin;
+#X obj 122 80 midiin;
+#X obj 27 107 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 106 33 touchout;
+#X obj 283 167 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [polytouchout] Related Objects;
+#X text 25 270 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 24 349 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 25 251 Externals;
+#X obj 25 300 pddp/helplink maxlib/pitch;
+#X obj 25 315 pddp/helplink maxlib/score;
+#X obj 25 330 pddp/helplink maxlib/chord;
+#X obj 25 365 pddp/helplink cyclone/midiformat;
+#X obj 25 380 pddp/helplink cyclone/midiparse;
+#X obj 25 395 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 420 float;
+#X obj 78 421 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 503 (none);
+#X text 98 445 float;
+#X obj 78 446 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X text 80 545 1) float;
+#X text 11 23 needs a description;
+#X text 168 420 - MIDI channel.;
+#X text 168 445 - ???;
+#X text 168 545 - ???;
+#X floatatom 226 173 5 0 0 0 - - -;
+#X floatatom 270 173 5 0 0 0 - - -;
+#X obj 226 202 polytouchout;
+#X floatatom 312 173 5 0 0 0 - - -;
+#X obj 452 3 polytouchout;
+#X obj 419 20 pddp/pddplink http://wiki.puredata.info/en/polytouchout
+-text pdpedia: polytouchout;
+#X text 98 470 float;
+#X obj 78 471 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 168 470 - ???;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 20 0 22 0;
+#X connect 21 0 22 1;
+#X connect 23 0 22 2;
diff --git a/doc/pddp/polytouchin-help.pd b/doc/pddp/polytouchin-help.pd
new file mode 100644
index 00000000..53f07bf3
--- /dev/null
+++ b/doc/pddp/polytouchin-help.pd
@@ -0,0 +1,100 @@
+#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 polytouchin 3 12
+0 18 -204280 -1 0;
+#X obj 0 411 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 215 494 375 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was created for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 25 NAME polytouchin;
+#X text 12 125 OUTLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X text 12 85 DESCRIPTION needs a description;
+#X restore 500 597 pd META;
+#X obj 0 439 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 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 90 178 428 421 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 113 33 touchin;
+#X obj 265 80 polytouchin;
+#X obj 122 80 midiin;
+#X obj 27 107 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 170 33 touchout;
+#X obj 28 33 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [polytouchin] Related Objects;
+#X text 26 275 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 25 354 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 26 256 Externals;
+#X obj 26 305 pddp/helplink maxlib/pitch;
+#X obj 26 320 pddp/helplink maxlib/score;
+#X obj 26 335 pddp/helplink maxlib/chord;
+#X obj 26 370 pddp/helplink cyclone/midiformat;
+#X obj 26 385 pddp/helplink cyclone/midiparse;
+#X obj 26 400 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 447 float;
+#X obj 78 448 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 415 (none);
+#X text 98 472 float;
+#X obj 78 473 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 497 float;
+#X obj 78 498 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X text 80 545 1) float;
+#X obj 455 3 polytouchin;
+#X obj 423 20 pddp/pddplink http://wiki.puredata.info/en/polytouchin
+-text pdpedia: polytouchin;
+#X text 11 23 needs a description;
+#X floatatom 257 208 0 0 0 0 - - -;
+#X floatatom 226 208 0 0 0 0 - - -;
+#X floatatom 289 208 0 0 0 0 - - -;
+#X obj 226 182 polytouchin;
+#X text 168 447 - MIDI channel.;
+#X text 168 472 - ???;
+#X text 168 497 - ???;
+#X text 168 545 - ???;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 24 0 22 0;
+#X connect 24 1 21 0;
+#X connect 24 2 23 0;
diff --git a/doc/pddp/pow-help.pd b/doc/pddp/pow-help.pd
new file mode 100644
index 00000000..17b3f161
--- /dev/null
+++ b/doc/pddp/pow-help.pd
@@ -0,0 +1,89 @@
+#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 pow 3 12 0 18 -204280
+-1 0;
+#X obj 0 401 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 246 494 368 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION exponential function;
+#X text 12 25 NAME pow;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 487 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 524 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 94 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 57 76 cos~;
+#X obj 89 76 osc~;
+#X obj 23 76 expr;
+#X obj 23 43 sin;
+#X obj 49 43 cos;
+#X obj 76 43 tan;
+#X obj 109 43 atan;
+#X obj 144 43 atan2;
+#X obj 182 43 exp;
+#X obj 209 43 log;
+#X obj 237 43 abs;
+#X text 8 2 [pow] Related Objects;
+#X obj 266 43 sqrt;
+#X restore 102 597 pd Related_objects;
+#X obj 78 410 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 409 float;
+#X text 98 429 list;
+#X text 98 495 float;
+#X obj 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 179 187 0 0 0 0 - - -;
+#X floatatom 179 130 0 0 0 0 - - -;
+#X obj 179 160 pow;
+#X text 103 221 [pow] is used to exponentiate a number. 2 to the power
+of 2 = 4 . The right inlet or creation argument is the exponent while
+the left inlet is the base.;
+#X obj 78 460 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 459 float;
+#X obj 495 3 pow;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/pow -text
+pdpedia: pow;
+#X text 11 23 exponential function;
+#X text 168 407 - base.;
+#X text 168 459 - exponent.;
+#X text 78 544 1) float;
+#X text 168 544 - initializes the right inlet (exponent).;
+#X text 168 427 - a (base \, exponent) pair will be distributed to
+the two inlets.;
+#X floatatom 229 130 0 0 0 0 - - -;
+#X obj 332 161 pow 3;
+#X msg 332 130 3;
+#X floatatom 332 188 5 0 0 0 - - -;
+#X floatatom 367 131 5 0 0 0 - - -;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 15 0;
+#X connect 15 0 13 0;
+#X connect 27 0 15 1;
+#X connect 28 0 30 0;
+#X connect 29 0 28 0;
+#X connect 31 0 28 0;
diff --git a/doc/pddp/powtodb-help.pd b/doc/pddp/powtodb-help.pd
new file mode 100644
index 00000000..2ff84bf2
--- /dev/null
+++ b/doc/pddp/powtodb-help.pd
@@ -0,0 +1,72 @@
+#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 428 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control conversion acoustic_units;
+#X text 12 85 DESCRIPTION convert from power units to dB;
+#X text 12 25 NAME powtodb;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 497 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 534 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 562 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 437 cnv 17 3 53 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 538 (none);
+#N canvas 98 440 428 151 Related_objects 0;
+#X text 11 28 Control objects for conversion:;
+#X obj 23 116 mtof~;
+#X obj 68 116 ftom~;
+#X obj 111 116 dbtorms~;
+#X obj 176 116 rmstodb~;
+#X obj 242 116 dbtopow~;
+#X obj 304 116 powtodb~;
+#X text 20 93 Signal objects for conversion:;
+#X obj 23 57 mtof;
+#X obj 70 57 ftom;
+#X obj 108 57 dbtorms;
+#X obj 167 57 rmstodb;
+#X obj 233 57 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 101 597 pd Related_objects;
+#X floatatom 239 216 0 0 0 0 - - -;
+#X floatatom 239 160 0 0 0 0 - - -;
+#X obj 78 506 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 436 float;
+#X text 98 463 list;
+#X text 98 506 float;
+#X obj 474 3 powtodb;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/powtodb -text
+pdpedia: powtodb;
+#X text 11 23 convert from power units to dB;
+#X text 158 463 - lists will be truncated \, and the first element
+used as input.;
+#X obj 239 189 powtodb;
+#X text 109 252 The [powtodb] object converts power units \, equal
+to the square of the "RMS" amplitude \, to decibels.;
+#X obj 98 566 pddp/pddplink all_about_acoustic_conversions.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 11 0 20 0;
+#X connect 20 0 10 0;
diff --git a/doc/pddp/powtodb~-help.pd b/doc/pddp/powtodb~-help.pd
new file mode 100644
index 00000000..964a0726
--- /dev/null
+++ b/doc/pddp/powtodb~-help.pd
@@ -0,0 +1,82 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion acoustic_units;
+#X text 12 85 DESCRIPTION convert power units to dB for audio signals
+;
+#X text 12 25 NAME powtodb~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/print-help.pd b/doc/pddp/print-help.pd
index 9208cb6d..5f5ba48b 100644
--- a/doc/pddp/print-help.pd
+++ b/doc/pddp/print-help.pd
@@ -1,91 +1,158 @@
-#N canvas 190 76 886 627 10;
-#X msg 93 173 walk the dog;
-#X msg 19 173 bang;
-#X msg 60 173 234;
-#X obj 21 10 print;
-#X obj 19 208 print;
-#X text 20 44 The print object is used in Pd to send messages to the
-'terminal window'. When the print object receives a message \, its
-output will appear in the terminal 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 msg 92 240 walk the dog;
-#X msg 19 240 bang;
-#X msg 59 240 234;
-#X obj 19 267 print myPrintObject;
-#X text 181 268 A print object with a name.;
-#X text 17 309 When the print object receives a list \, it will output
-the entire list as a single message. Like below:;
-#X obj 17 369 print print_this_list;
-#X msg 17 346 10 20 30 foo;
-#X msg 17 461 10 20 30 foo;
-#X obj 17 514 unpack f f f s;
-#X obj 17 547 print unpack_this_list;
-#X text 66 201 A print object without a name. Be sure you can see the
-terminal window as you click on these messages.;
-#X text 74 9 -- print messages to the terminal window;
-#X obj 153 588 print~;
-#X text 40 588 RELATED OBJECTS;
-#X text 17 408 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 28 481 The arguments here are used to tell Pd what type of
-atom to expect: (f = float \, s = symbol).;
-#X obj 477 252 print;
-#X msg 497 87 1;
-#X msg 506 108 float 1;
-#X text 464 52 "floats" are interpreted (i.e. it doesn't show the word
-"float" before the number):;
-#X obj 531 210 symbol test;
-#X msg 526 169 symbol this;
-#X obj 531 191 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION print messages to the terminal window;
+#X text 12 25 NAME print;
+#X text 12 125 INLET_0 anything;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#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 568 383 one 2 three;
-#X obj 500 467 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -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 568 468 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 121 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 586 443 print STRAIGHT;
-#X msg 552 363 list 1 two 3;
-#X msg 535 343 1 two 3;
-#X msg 577 404 list one 2 three;
-#X obj 503 444 route list;
-#X text 467 295 [print] only interprets the "list" selector when the
+#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 452 551 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 454 28 [print]'S ODDITIES;
-#X text 509 139 "symbols" are not interpreted (i.e. "symbol" is also
-printed:;
-#X connect 0 0 4 0;
-#X connect 1 0 4 0;
-#X connect 2 0 4 0;
-#X connect 6 0 9 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 0;
-#X connect 13 0 12 0;
+#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 16 0;
-#X connect 15 1 16 0;
-#X connect 15 2 16 0;
-#X connect 15 3 16 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 0;
-#X connect 27 0 23 0;
-#X connect 28 0 23 0;
-#X connect 29 0 27 0;
-#X connect 30 0 33 0;
-#X connect 30 0 37 0;
-#X connect 34 0 33 0;
-#X connect 34 0 37 0;
-#X connect 35 0 33 0;
-#X connect 35 0 37 0;
-#X connect 36 0 33 0;
-#X connect 36 0 37 0;
-#X connect 37 0 31 0;
-#X connect 37 1 32 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/doc/pddp/print~-help.pd b/doc/pddp/print~-help.pd
new file mode 100644
index 00000000..0fed9605
--- /dev/null
+++ b/doc/pddp/print~-help.pd
@@ -0,0 +1,68 @@
+#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 427 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION print out raw values of a signal;
+#X text 12 25 NAME print~;
+#X text 12 125 INLET_0 float bang signal;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 512 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 105 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 print;
+#X obj 62 43 bang~;
+#X text 8 2 [print~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 436 cnv 17 3 65 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 477 3 print~;
+#X obj 452 20 pddp/pddplink http://wiki.puredata.info/en/print~ -text
+pdpedia: print~;
+#X obj 138 274 print~;
+#X msg 150 215 bang;
+#X obj 138 189 phasor~ 1000;
+#X text 198 216 bang prints one vector;
+#X text 190 239 print two or more successive vectors;
+#X msg 155 240 2;
+#X text 98 435 signal;
+#X text 98 456 bang;
+#X text 98 476 float;
+#X text 168 476 - sending a value of "2" or greater to [print~] will
+print the specified number of vectors to the console.;
+#X text 98 516 (none);
+#X text 11 23 print out raw values of a signal;
+#X text 168 435 - an incoming signal.;
+#X text 168 456 - outputs one vector to the console.;
+#X text 95 141 The [print~] object takes a signal input and prints
+one or more vectors out when you send it a bang or a number. By default
+a vector is 64 samples.;
+#X text 168 516 - [print~] sends its output to the console window.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
+#X connect 17 0 12 0;
diff --git a/doc/pddp/qlist-help.pd b/doc/pddp/qlist-help.pd
new file mode 100644
index 00000000..b46d4599
--- /dev/null
+++ b/doc/pddp/qlist-help.pd
@@ -0,0 +1,150 @@
+#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 195 LIBRARY internal;
+#X text 12 235 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 215 AUTHOR Miller Puckette;
+#X text 12 295 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 5 GENRE help;
+#X text 12 85 DESCRIPTION text-based sequencer;
+#X text 12 25 NAME qlist;
+#X text 12 125 INLET_0 bang print tempo rewind next clear add add2
+read write;
+#X text 12 155 OUTLET_0 list;
+#X text 12 175 OUTLET_1 bang;
+#X text 12 45 KEYWORDS control storage nonlocal filesystem list_op
+;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 255 RELEASE_DATE 1997;
+#X text 12 275 RELEASE_VERSION;
+#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/doc/pddp/random-help.pd b/doc/pddp/random-help.pd
index 6f74d6f7..23b9e4b1 100644
--- a/doc/pddp/random-help.pd
+++ b/doc/pddp/random-help.pd
@@ -1,182 +1,580 @@
-#N canvas 14 -1 978 651 10;
-#X obj 20 11 random;
-#X text 70 11 - pseudorandom integer generator;
-#X text 20 47 [random] outputs pseudorandom integers between 0 and
-N-1 where N is the creation argument or the value of the right inlet.
-;
-#X obj 28 117 random 100;
-#X obj 28 98 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 28 138 3 0 0;
-#X text 98 117 Generates random numbers between 0 and 99;
-#X obj 28 178 random 100;
-#X obj 28 159 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 28 199 3 0 0;
-#X floatatom 83 161 5 0 0;
-#X text 124 159 Changes the 'range' of random numbers.;
-#X text 17 223 SEEDS;
-#X text 21 240 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] objects are contained
-within a single patch \, they each get a different "seed".;
-#X text 21 363 However \, "seeds" can be inputted into [random] by
-sending a message \, like below:;
-#X msg 13 420 seed 42;
-#X obj 67 427 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 67 445 random 1000;
-#X floatatom 67 465 3 0 0;
-#X obj 13 400 loadbang;
-#X text 22 490 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 162 556 seed 42;
-#X obj 76 559 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 76 591 random 1000;
-#X floatatom 76 611 3 0 0;
-#X obj 162 536 loadbang;
-#X obj 150 591 random 1000;
-#X floatatom 150 611 3 0 0;
-#X obj 385 12 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 385 620 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 425 18 FERTILE SEEDS!;
-#X text 416 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 415 144 Here are some ideas that may improve the implementation
-of [random]:;
-#X floatatom 593 241 0 0 0;
-#X obj 435 182 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 593 221 / 100;
-#X floatatom 435 238 0 0 0;
-#X text 455 181 Both methods here produce random numbers between 0
-and 5;
-#X obj 593 201 random 501;
-#X obj 435 218 random 6;
-#X text 660 201 0 - 500;
-#X text 631 221 divide by 100 to keep output within range.;
-#X text 631 242 produces fractional results between 0 and 5;
-#X text 432 269 between 0 and 5;
-#X text 432 256 Produces whole numbers;
-#X text 401 179 1;
-#X text 405 306 2;
-#X text 416 94 As well \, there are many ways that [random] can be
-incorporated into other structures that change the qualities of the
-results.;
-#X obj 436 315 loadbang;
-#X obj 436 337 timer;
-#X obj 518 318 bng 15 250 50 0 empty empty Click_to_seed 0 -6 0 7 -262144
--1 -1;
-#X msg 436 357 seed \$1;
-#X obj 497 360 bng 15 250 50 0 empty empty Click_for_output 0 -6 0
-7 -262144 -1 -1;
-#X floatatom 497 400 5 0 0;
-#X obj 497 379 random 42;
-#X text 598 317 "Time is on your side". Using the [timer] object here
-(which is started via loadbang) is an interesting trick.;
-#X text 407 432 3;
-#N canvas 0 0 462 404 weighted_random_numbers 0;
-#X msg 38 77 bang;
-#X text 24 20 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 38 103 random 100;
-#X obj 37 156 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 104 156 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 140 130 3 0 100;
-#X text 185 130 <-- change probablilty;
-#X obj 38 131 moses 80;
-#X text 87 75 <-- click to test;
-#X text 35 184 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 42 247 bang;
-#X obj 42 273 random 100;
-#X obj 42 326 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 132 327 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 91 245 <-- click to test;
-#X obj 42 301 moses 10;
-#X obj 132 302 moses 30;
-#X obj 200 327 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 40 342 10%;
-#X text 130 343 20%;
-#X text 202 342 70%;
-#X connect 0 0 2 0;
-#X connect 2 0 7 0;
-#X connect 5 0 7 1;
-#X connect 7 0 3 0;
-#X connect 7 1 4 0;
-#X connect 10 0 11 0;
-#X connect 11 0 15 0;
-#X connect 15 0 12 0;
-#X connect 15 1 16 0;
-#X connect 16 0 13 0;
-#X connect 16 1 17 0;
-#X restore 443 432 pd weighted_random_numbers;
-#X text 215 556 Click again to repeat output.;
-#X text 409 474 RELATED OBJECTS;
-#N canvas 0 0 454 304 related_objects_from_other_libraries 0;
-#X obj 25 23 randomF;
-#X obj 77 23 tripleRand;
-#X obj 146 23 shuffle;
-#X obj 197 23 mtx_rand;
-#X obj 149 47 pin~;
-#X obj 25 47 randomblock~;
-#X obj 109 47 utime;
-#X text 29 104 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 28 153 The best places to find information about Pd's libraries
-is:;
-#X text 25 175 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 27 190 or;
-#X text 27 205 iem.kug.ac.at/pdb/;
-#X restore 408 494 pd related_objects_from_other_libraries;
-#X text 416 592 This document 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.;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 0;
-#X connect 10 0 7 1;
-#X connect 15 0 17 0;
-#X connect 16 0 17 0;
-#X connect 17 0 18 0;
-#X connect 19 0 15 0;
-#X connect 21 0 23 0;
-#X connect 21 0 26 0;
-#X connect 22 0 23 0;
-#X connect 22 0 26 0;
-#X connect 23 0 24 0;
-#X connect 25 0 21 0;
-#X connect 26 0 27 0;
-#X connect 28 0 29 0;
-#X connect 34 0 38 0;
-#X connect 34 0 39 0;
-#X connect 35 0 33 0;
-#X connect 38 0 35 0;
-#X connect 39 0 36 0;
-#X connect 48 0 49 0;
-#X connect 49 0 51 0;
-#X connect 50 0 49 1;
-#X connect 51 0 54 0;
-#X connect 52 0 54 0;
-#X connect 54 0 53 0;
+#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 85 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 5 GENRE help;
+#X text 12 65 DESCRIPTION pseudorandom integer generator;
+#X text 12 25 KEYWORDS control random;
+#X text 12 125 INLET_1 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 105 INLET_0 bang seed;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/readsf~-help.pd b/doc/pddp/readsf~-help.pd
new file mode 100644
index 00000000..78687e14
--- /dev/null
+++ b/doc/pddp/readsf~-help.pd
@@ -0,0 +1,130 @@
+#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 readsf~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 283 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for version 0.42-4. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION read a soundfile;
+#X text 12 25 NAME readsf~;
+#X text 12 125 INLET_0 float open start stop print;
+#X text 12 145 INLET_N signal;
+#X text 12 165 OUTLET_R bang;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 428 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 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 76 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 23 44 soundfiler;
+#X obj 103 44 writesf~;
+#X text 8 2 [readsf~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 292 cnv 17 3 125 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 437 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 readsf~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/readsf~ -text
+pdpedia: readsf~;
+#X text 165 149 The wave \, aiff \, and nextstep formats are parsed
+automatically \, although only 2- 3- and 4- byte samples are accepted
+(4 bytes implies floating point and is not available in aiff format.)
+;
+#X text 98 318 open;
+#X text 168 318 - the open message is followed by a filename \, an
+onset in sample frames \, and \, as an override \, you may also supply
+a header size to skip \, a number of channels \, bytes per channel
+\, and endianness (see example above).;
+#X text 98 367 start;
+#X text 98 385 stop;
+#X text 98 402 print;
+#X text 168 402 - send statistics to the console for debugging.;
+#X obj 78 477 cnv 17 3 17 empty \$0-pddp.cnv.let.r r 5 9 0 16 -228856
+-162280 0;
+#X text 98 476 bang;
+#X text 98 436 signal;
+#X text 168 436 - [readsf~] defaults to one signal outlet for a single
+channel of audio output. An additional inlet is added for each channel
+specified by the first creation argument.;
+#X text 168 476 - the rightmost inlet sends a bang when the soundfile
+is done.;
+#X msg 80 124 0;
+#X obj 446 231 print didit;
+#X obj 120 233 env~ 16384;
+#X floatatom 120 252 0 0 0 0 - - -;
+#X msg 81 146 print;
+#X obj 11 260 dac~;
+#X obj 204 232 env~ 16384;
+#X floatatom 204 251 0 0 0 0 - - -;
+#X obj 11 176 readsf~ 4 1e+06;
+#X obj 283 231 env~ 16384;
+#X floatatom 283 250 0 0 0 0 - - -;
+#X obj 367 231 env~ 16384;
+#X floatatom 367 251 0 0 0 0 - - -;
+#X msg 11 80 open ../sound/bell.aiff 0 200 4 2 b;
+#X obj 71 234 *~ 0.1;
+#X obj 12 235 *~ 0.1;
+#X msg 11 59 open ../sound/bell.aiff;
+#X msg 20 102 start;
+#X msg 20 125 stop;
+#X text 207 107 The object immediately starts reading from the file
+\, but output will only appear after you send a "1" to start playback.
+A "0" stops it.;
+#X text 109 101 start playback;
+#X text 109 123 stop it;
+#X text 11 23 read a soundfile;
+#X text 168 545 - buffer size per channel in bytes.;
+#X text 168 528 - an integer that specifies the number of channels.
+;
+#X text 79 528 1) float;
+#X text 79 545 2) float;
+#X msg 80 103 1;
+#X text 168 367 - start playback.;
+#X text 168 385 - stop playback.;
+#X text 98 292 float;
+#X text 168 292 - "1" (or any nonzero value) has the same effect as
+"start" \, and "0" has the same effect as "stop".;
+#X text 195 41 The [readsf~] object reads a soundfile into its signal
+outputs. You must open the soundfile in advance (a couple of seconds
+before you'll need it) using the "open" message.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 24 0 32 0;
+#X connect 26 0 27 0;
+#X connect 28 0 32 0;
+#X connect 30 0 31 0;
+#X connect 32 0 26 0;
+#X connect 32 0 39 0;
+#X connect 32 1 30 0;
+#X connect 32 1 38 0;
+#X connect 32 2 33 0;
+#X connect 32 2 38 0;
+#X connect 32 3 35 0;
+#X connect 32 3 39 0;
+#X connect 32 4 25 0;
+#X connect 33 0 34 0;
+#X connect 35 0 36 0;
+#X connect 37 0 32 0;
+#X connect 38 0 29 1;
+#X connect 39 0 29 0;
+#X connect 40 0 32 0;
+#X connect 41 0 32 0;
+#X connect 42 0 32 0;
+#X connect 51 0 32 0;
diff --git a/doc/pddp/realtime-help.pd b/doc/pddp/realtime-help.pd
index 7cbd0290..4993be1d 100644
--- a/doc/pddp/realtime-help.pd
+++ b/doc/pddp/realtime-help.pd
@@ -1,108 +1,164 @@
-#N canvas 64 358 939 645 10;
-#X msg 43 113 bang;
-#X msg 18 91 bang;
-#X floatatom 18 157 0 0 0;
-#X text 90 159 Output is in milliseconds;
-#X text 53 91 Click here to start or reset;
-#X obj 52 545 time_measurements;
-#X obj 52 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 17 572 0 0 0;
-#X floatatom 108 585 0 0 0;
-#X floatatom 175 573 0 0 0;
-#X text 9 357 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 15 587 Logical Time;
-#X text 173 587 Real Time;
-#X text 107 601 CPU Time;
-#X obj 67 477 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 72 435 1 Measures elapsed time between two "bangs" from a [trigger]
-object.;
-#X text 87 469 2 Measures the amount of time Pd requires to turn on
-DSP and start an oscillator.;
-#X obj 445 484 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 445 17 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 472 36 WHY THE DISCREPANCIES BETWEEN CLOCKS?;
-#X text 475 59 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 obj 111 509 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 476 144 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 477 204 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 478 368 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.;
-#N canvas 0 0 454 304 related_objects_from_other_libraries 0;
-#X text 27 63 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 26 112 The best places to find information about Pd's libraries
-is:;
-#X text 23 134 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 25 149 or;
-#X text 25 164 iem.kug.ac.at/pdb/;
-#X obj 44 24 t3_timer;
-#X text 469 589 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X restore 505 476 pd related_objects_from_other_libraries;
-#X text 309 580 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 obj 607 445 metro;
-#X text 504 422 RELATED OBJECTS;
-#X obj 504 446 cputime;
-#X text 132 501 3 Measures the amount of time Pd requires count to
-three...please wait for approximately 3 seconds.;
-#X obj 25 15 realtime;
-#X text 83 15 -- ask Operating System for elasped real time;
-#X text 13 44 The [realtime] object measures elapsed "real" time as
-measured by your operating system.;
-#X obj 18 135 realtime;
-#X text 81 114 Click here to get elapsed real time. Click again...and
-again...to see periodic measurements from the start or reset time.
-;
-#X text 11 185 [realtime] works like essentially like a stop-watch.
-Once it starts \, you can continue to "poll" [realtime] to view the
-elapsed time.;
-#X text 11 232 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.;
-#X text 9 282 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 obj 562 445 timer;
-#X connect 0 0 34 1;
-#X connect 1 0 34 0;
-#X connect 5 0 7 0;
-#X connect 5 1 8 0;
-#X connect 5 2 9 0;
-#X connect 6 0 5 0;
-#X connect 14 0 5 1;
-#X connect 18 0 17 0;
-#X connect 21 0 5 2;
-#X connect 34 0 2 0;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 265 RELEASE_VERSION 0.41.4;
+#X text 12 245 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control time;
+#X text 12 85 DESCRIPTION ask operating system for elapsed real time
+;
+#X text 12 25 NAME realtime;
+#X text 12 125 INLET_0 bang;
+#X text 12 145 INLET_1 bang;
+#X text 12 165 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/doc/pddp/receive-help.pd b/doc/pddp/receive-help.pd
index 371c82e6..e1a51ed6 100644
--- a/doc/pddp/receive-help.pd
+++ b/doc/pddp/receive-help.pd
@@ -1,147 +1,190 @@
-#N canvas 1 2 636 634 12;
-#X obj 117 554 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 37 44 INLETS:;
-#X text 29 170 OUTLETS:;
-#X text 14 115 ARGUMENTS:;
-#X text 19 213 EXAMPLES:;
-#X text 23 369 SEE ALSO:;
-#N canvas 109 3 415 264 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 22 148 Externals and other object libraries;
-#X obj 25 53 receive~;
-#X obj 109 54 send~;
-#X obj 171 54 send;
-#X obj 220 54 throw~;
-#X obj 285 54 catch~;
-#X obj 21 103 tabreceive~;
-#X obj 129 103 tabsend~;
-#X obj 211 103 netsend;
-#X obj 287 103 netreceive;
-#X text 28 175 [streamin~];
-#X text 29 197 [receivelocal];
-#X text 29 219 [shoutamp~];
-#X text 188 177 [receive13~];
-#X text 189 199 [dist];
-#X text 191 221 [netdist];
-#X text 309 177 [remote];
-#X text 287 200 [receiveOSC];
-#X obj 350 54 value;
-#X restore 117 499 pd Related_Objects;
-#N canvas 57 0 649 630 More_Info 0;
-#X obj 44 576 pddp/pddplink all_about_send_n_receive.pd -text all_about_send_n_receive;
-#X text 25 18 MESSAGES AND DATA TYPES;
-#X text 40 41 Pd's [send] and [receive] objects can communicate any
-data type that is supported by Pd: floats \, anythings \, lists \,
-symbols \, and bangs. However \, you will need to plan ahead in your
-patch to ensure that a symbol doesn't accidently arrive at a [float]
-object \, or that a list doesn't arrive at a [symbol] object. Consider
-the following I have been very careful to keep [send] and [receive]
-groups isolated to specific data types - and in the last case \, I
-have incorporated a [route] object to properly receive the various
-data types at a single [receive] object.;
-#X floatatom 32 221 5 0 0 0 - - -;
-#X floatatom 73 332 5 0 0 0 - - -;
-#X obj 74 278 s a_float;
-#X obj 73 306 r a_float;
-#X obj 74 249 s whatever;
-#X obj 263 248 s whatever;
-#X obj 264 277 s a_symbol;
-#X obj 264 311 r a_symbol;
-#X symbolatom 197 220 10 0 0 0 - - -;
-#X text 75 220 click-n-drag;
-#X text 282 220 type something;
-#X text 473 217 click this;
-#X obj 475 324 s whatever;
-#X obj 452 294 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#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 receive 3 12 0 18
+-204280 -1 0;
+#X obj 0 271 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Dave Sabine \, September 9 \, 2003
+. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control nonlocal;
+#X text 12 105 DESCRIPTION receive messages without patch cords;
+#X text 12 25 NAME receive;
+#X text 12 145 OUTLET_0 anything;
+#X text 12 45 ALIAS r;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 331 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 373 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 434 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 93 310 428 292 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 [receive] Related Objects;
+#X text 20 109 Externals and other object libraries;
+#X obj 115 43 receive~;
+#X obj 177 43 send~;
+#X obj 23 43 send;
+#X obj 278 43 throw~;
+#X obj 333 43 catch~;
+#X obj 23 73 tabreceive~;
+#X obj 121 73 tabsend~;
+#X obj 193 73 netsend;
+#X obj 259 73 netreceive;
+#X obj 225 43 value;
+#X obj 70 43 qlist;
+#X obj 20 128 pddp/helplink ggee/streamin~;
+#X obj 20 148 pddp/helplink ext13/receive13~;
+#X obj 20 168 pddp/helplink maxlib/remote;
+#X obj 20 188 pddp/helplink receivelocal;
+#X obj 20 208 pddp/helplink maxlib/dist;
+#X text 106 188 <- which library? (No help patch exists);
+#X obj 20 228 pddp/helplink receiveOSC;
+#X text 106 227 <- which library?;
+#X text 106 247 <- which library?;
+#X obj 20 248 pddp/helplink shoutamp~;
+#X obj 20 268 pddp/helplink maxlib/netdist;
+#X restore 102 597 pd Related_objects;
+#X obj 78 340 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 516 3 r;
+#X obj 442 3 receive;
+#X text 492 3 or;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/receive -text
+pdpedia: receive;
+#X obj 47 107 s;
+#X floatatom 47 83 5 0 0 0 - - -;
+#X floatatom 149 112 5 0 0 0 - - -;
+#X obj 149 83 r;
+#X floatatom 204 112 5 0 0 0 - - -;
+#X obj 204 83 r;
+#X floatatom 255 112 5 0 0 0 - - -;
+#X obj 255 83 r;
+#X floatatom 51 166 5 0 0 0 - - -;
+#X floatatom 306 192 5 0 0 0 - - -;
+#X floatatom 377 192 5 0 0 0 - - -;
+#X floatatom 452 192 5 0 0 0 - - -;
+#X text 50 146 with creation argument;
+#X obj 51 190 s dave;
+#X obj 306 163 r dave;
+#X obj 377 163 r dave;
+#X floatatom 151 167 5 0 0 0 - - -;
+#X floatatom 383 82 5 0 0 0 - - -;
+#X msg 383 105 \; dave \$1;
+#X floatatom 461 80 5 0 0 0 - - -;
+#X msg 461 105 \; hans \$1;
+#X obj 452 163 r hans;
+#X obj 151 191 s hans;
+#X text 98 275 (none);
+#X text 98 339 anything;
+#X text 168 339 - [receive] outputs the message(s) sent from a corresponding
+[send] of the same name.;
+#N canvas 100 55 428 469 Messages_and_Data_Types 0;
+#X floatatom 23 177 5 0 0 0 - - -;
+#X floatatom 22 288 5 0 0 0 - - -;
+#X obj 23 234 s a_float;
+#X obj 22 262 r a_float;
+#X obj 33 205 s whatever;
+#X obj 170 204 s whatever;
+#X obj 158 233 s a_symbol;
+#X obj 158 262 r a_symbol;
+#X symbolatom 158 176 10 0 0 0 - - -;
+#X text 62 176 click-n-drag;
+#X text 228 176 type something;
+#X text 318 200 click this;
+#X obj 305 307 s whatever;
+#X obj 295 277 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 476 353 s a_bang;
-#X text 494 296 click this too;
-#X obj 476 387 r a_bang;
-#X obj 476 415 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 295 336 s a_bang;
+#X text 317 275 click this too;
+#X obj 295 379 r a_bang;
+#X obj 295 407 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 153 345 r whatever;
-#X floatatom 153 481 5 0 0 0 - - -;
-#X symbolatom 207 459 10 0 0 0 - - -;
-#X obj 269 416 print;
-#X obj 317 398 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 72 313 r whatever;
+#X floatatom 72 443 5 0 0 0 - - -;
+#X symbolatom 113 424 10 0 0 0 - - -;
+#X obj 161 381 print;
+#X obj 195 363 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X symbolatom 264 340 10 0 0 0 - - -;
-#X obj 262 439 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X symbolatom 158 291 10 0 0 0 - - -;
+#X obj 154 404 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X text 27 511 There is a lot of information available about [send]
-and [receive] \, but that means there's lots to know! Open the abstraction
-below to learn more...;
-#X msg 450 234 \; whatever 1 2 3 4 \;;
-#X obj 153 370 route float symbol list bang;
-#X connect 3 0 5 0;
-#X connect 3 0 7 0;
-#X connect 6 0 4 0;
-#X connect 10 0 26 0;
-#X connect 11 0 9 0;
-#X connect 11 0 8 0;
-#X connect 16 0 15 0;
+#X msg 295 217 \; whatever 1 2 3 4 \;;
+#X obj 72 338 route float symbol list bang;
+#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 [receive] More Info;
+#X text 20 38 Pd's [send] and [receive] objects can communicate any
+message that is supported by Pd: floats \, anythings \, lists \, symbols
+\, and bangs. However \, you will need to plan ahead in your patch
+to ensure that a symbol doesn't accidently arrive at a [float] object
+\, or that a list doesn't arrive at a [symbol] object. Consider the
+following: I have been very careful to keep [send] and [receive] groups
+isolated to specific data types - and in the last case \, I have incorporated
+a [route] object to properly receive the various data types at a single
+[receive] object.;
+#X connect 0 0 2 0;
+#X connect 0 0 4 0;
+#X connect 3 0 1 0;
+#X connect 7 0 23 0;
+#X connect 8 0 6 0;
+#X connect 8 0 5 0;
+#X connect 13 0 12 0;
+#X connect 13 0 14 0;
#X connect 16 0 17 0;
-#X connect 19 0 20 0;
-#X connect 21 0 30 0;
-#X connect 30 0 22 0;
-#X connect 30 1 23 0;
-#X connect 30 2 24 0;
-#X connect 30 2 27 0;
-#X connect 30 3 25 0;
-#X restore 117 528 pd More_Info;
-#X obj 30 18 receive;
-#X obj 551 18 r;
-#X obj 116 250 s;
-#X floatatom 116 226 5 0 0 0 - - -;
-#X floatatom 218 255 5 0 0 0 - - -;
-#X obj 218 226 r;
-#X floatatom 273 255 5 0 0 0 - - -;
-#X obj 273 226 r;
-#X floatatom 324 255 5 0 0 0 - - -;
-#X obj 324 226 r;
-#X floatatom 120 309 5 0 0 0 - - -;
-#X floatatom 375 335 5 0 0 0 - - -;
-#X floatatom 446 335 5 0 0 0 - - -;
-#X floatatom 521 335 5 0 0 0 - - -;
-#X text 119 289 with creation argument;
-#X obj 120 333 s dave;
-#X obj 375 306 r dave;
-#X obj 446 306 r dave;
-#X text 105 115 One - [receive] accepts a single argument (text \,
-not numbers) which is a 'name'. All [receive]s of the same name correspond
-to a [send] object of that name.;
-#X floatatom 220 310 5 0 0 0 - - -;
-#X text 107 171 One - outputs the message(s) that are sent from a corresponding
-[send] of the same name.;
-#X text 109 18 - RECEIVE MESSAGES WITHOUT PATCH CORDS - abbreviation:
+#X connect 18 0 26 0;
+#X connect 26 0 19 0;
+#X connect 26 1 20 0;
+#X connect 26 2 21 0;
+#X connect 26 2 24 0;
+#X connect 26 3 22 0;
+#X restore 101 569 pd Messages_and_Data_Types;
+#X text 11 23 receive messages without patch cords;
+#X text 168 391 - [receive] accepts a single argument which is a 'name'.
+All [receive]s of the same name correspond to a [send] object of that
+name.;
+#X text 168 275 - data can be inputted to the [receive] object using
+the [send] object or by using the nonlocal send functionality of a
+message box. The [receive] object accepts any message as input.;
+#X text 334 99 Using;
+#X text 334 110 message;
+#X text 334 122 boxes;
+#X text 80 391 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 439 pddp/pddplink all_about_send_n_receive.pd -text all_about_send_n_receive
+;
+#X obj 98 454 pddp/pddplink all_about_scope_and_locality.pd -text all_about_scope_and_locality
+;
+#X obj 97 512 pddp/pddplink ../2.control.examples/09.send_receive.pd
+-text doc/2.control.examples/09.send_receive.pd;
+#X obj 97 527 pddp/pddplink ../2.control.examples/10.more.messages.pd
+-text doc/2.control.examples/10.more.messages.pd;
+#X obj 97 542 pddp/pddplink ../2.control.examples/13.locality.pd -text
+doc/2.control.examples/13.locality.pd;
+#X obj 98 475 pddp/pddplink ../1.manual/x2.htm -text doc/1.manual/x2.htm
+;
+#X obj 98 490 pddp/pddplink ../1.manual/x5.htm -text doc/1.manual/x5.htm
;
-#X text 104 45 None. Data can be inputted to the [receive] object using
-the [send] object or by creating a Pd 'send' command in a message box.
-The [receive] object accepts any atom type as input.;
-#X floatatom 442 235 5 0 0 0 - - -;
-#X msg 442 258 \; dave \$1;
-#X floatatom 520 233 5 0 0 0 - - -;
-#X msg 520 258 \; hans \$1;
-#X obj 521 306 r hans;
-#X obj 220 334 s hans;
-#X text 114 386 doc/1.manual/x5.htm;
-#X text 114 369 doc/1.manual/x2.htm;
-#X text 114 403 doc/2.control.examples/09.send_receive.pd;
-#X text 114 419 doc/2.control.examples/10.more.messages.pd;
-#X text 115 435 doc/2.control.examples/11.review.pd;
-#X text 115 452 doc/2.control.examples/13.locality.pd;
-#X text 115 470 doc/5.reference/help-message.pd;
-#X text 161 555 - Dave Sabine \, September 9 \, 2003;
-#X connect 12 0 11 0;
#X connect 14 0 13 0;
#X connect 16 0 15 0;
#X connect 18 0 17 0;
-#X connect 19 0 24 0;
-#X connect 25 0 20 0;
-#X connect 26 0 21 0;
-#X connect 28 0 37 0;
+#X connect 20 0 19 0;
+#X connect 21 0 26 0;
+#X connect 27 0 22 0;
+#X connect 28 0 23 0;
+#X connect 29 0 35 0;
+#X connect 30 0 31 0;
#X connect 32 0 33 0;
-#X connect 34 0 35 0;
-#X connect 36 0 22 0;
+#X connect 34 0 24 0;
diff --git a/doc/pddp/rev1~-help.pd b/doc/pddp/rev1~-help.pd
new file mode 100644
index 00000000..a4416a15
--- /dev/null
+++ b/doc/pddp/rev1~-help.pd
@@ -0,0 +1,120 @@
+#N canvas 16 21 1008 526 12;
+#X obj 148 439 dac~;
+#X obj 58 72 line~;
+#X msg 58 49 0 \, 10000 5;
+#X obj 58 118 cos~;
+#X msg 146 70 1;
+#X obj 146 47 loadbang;
+#X obj 58 95 clip~ 0 0.25;
+#X floatatom 173 264 0 0 0 0 - - -;
+#X obj 251 134 line~;
+#X obj 251 157 cos~;
+#X msg 324 54 -0.25 \, 0.25 100;
+#X obj 251 8 loadbang;
+#X msg 251 31 -0.25;
+#X obj 251 203 *~;
+#X obj 58 140 hip~ 5;
+#X floatatom 162 328 0 0 0 0 - - -;
+#X obj 162 373 pack 0 100;
+#X obj 162 396 line~;
+#X obj 148 416 *~;
+#X obj 162 350 dbtorms;
+#X msg 324 77 -0.25 \, 0.25 400;
+#X floatatom 324 145 0 0 0 0 - - -;
+#X obj 324 191 osc~ 440;
+#X obj 324 168 mtof;
+#X msg 324 31 -0.25 \, 0.25 20;
+#X obj 251 180 *~ 0.1;
+#X msg 324 100 -0.25 \, 0.25 1000;
+#X msg 324 122 -0.25 \, 0.25 2000;
+#X obj 324 226 *~;
+#X obj 342 252 *~;
+#X obj 58 439 dac~;
+#X floatatom 68 323 0 0 0 0 - - -;
+#X obj 68 368 pack 0 100;
+#X obj 68 391 line~;
+#X obj 58 416 *~;
+#X obj 68 346 dbtorms;
+#X msg 324 8 0;
+#X obj 308 257 *~;
+#X obj 58 26 metro 2000;
+#X floatatom 58 4 0 0 0 0 - - -;
+#X msg 220 265 bang;
+#X obj 284 322 env~ 32768;
+#X floatatom 284 344 0 0 0 0 - - -;
+#X text 166 244 1 sec;
+#X text 143 226 dB after;
+#X text 220 245 clear;
+#X text 1 51 impulse;
+#X text 362 7 tone;
+#X text 484 31 beeps;
+#X text 428 147 This is an experimental reverberator design composed
+of a series of allpass filters with exponentially growing delay times.
+Each allpass filter has a gain of 0.7. The reverb time is adjusted
+by adjusting the input gains of the allpass filters. The last unit
+is modified so that its first two "echos" mimic those of an allpass
+but its loop gain depends on reverb time.;
+#X text 430 279 Reverb time is controlled by specifying the dB gain
+(100 normal) after one second \, so that 100 corresponds to infinite
+reverb time \, 70 to two seconds \, 40 to one second \, and 0 to 0
+;
+#X text 671 499 modified for Pd version 0.30.;
+#X msg 560 34 \; pd dsp 1;
+#X text 427 455 The rev1~ module eats about 18% of my 300mHz P2 machine.
+;
+#X obj 148 289 rev1~;
+#X text 428 361 The "clear" button impolitely clears out all the delay
+lines \, You may immediately resume pumping the reverberator \, but
+the input signal should be cleanly enveloped. The output \, too \,
+must be enveloped and may not be opened until 5 msec after the "clear"
+message is sent.;
+#X text 670 482 KEYWORDS unfinished;
+#X connect 1 0 6 0;
+#X connect 2 0 1 0;
+#X connect 3 0 14 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
+#X connect 7 0 54 1;
+#X connect 8 0 9 0;
+#X connect 9 0 25 0;
+#X connect 10 0 8 0;
+#X connect 11 0 12 0;
+#X connect 12 0 8 0;
+#X connect 13 0 14 0;
+#X connect 14 0 34 0;
+#X connect 14 0 54 0;
+#X connect 15 0 19 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 0 0;
+#X connect 19 0 16 0;
+#X connect 20 0 8 0;
+#X connect 21 0 23 0;
+#X connect 22 0 13 1;
+#X connect 22 0 28 0;
+#X connect 22 0 28 1;
+#X connect 22 0 29 0;
+#X connect 23 0 22 0;
+#X connect 24 0 8 0;
+#X connect 25 0 13 0;
+#X connect 26 0 8 0;
+#X connect 27 0 8 0;
+#X connect 28 0 29 1;
+#X connect 28 0 13 1;
+#X connect 28 0 37 0;
+#X connect 28 0 37 1;
+#X connect 29 0 13 1;
+#X connect 31 0 35 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 1;
+#X connect 34 0 30 0;
+#X connect 35 0 32 0;
+#X connect 36 0 8 0;
+#X connect 37 0 13 1;
+#X connect 38 0 2 0;
+#X connect 39 0 38 0;
+#X connect 40 0 54 2;
+#X connect 41 0 42 0;
+#X connect 54 0 18 0;
+#X connect 54 0 41 0;
diff --git a/doc/pddp/rev2~-help.pd b/doc/pddp/rev2~-help.pd
new file mode 100644
index 00000000..f7b1e6d6
--- /dev/null
+++ b/doc/pddp/rev2~-help.pd
@@ -0,0 +1,135 @@
+#N canvas 167 160 766 354 12;
+#X floatatom 73 185 0 0 120 0 - - -;
+#X floatatom 106 323 0 0 120 0 - - -;
+#N canvas 0 0 539 448 tests 0;
+#X obj 67 33 inlet;
+#X obj 309 189 inlet;
+#X obj 235 207 line~;
+#X obj 235 230 cos~;
+#X obj 235 68 loadbang;
+#X msg 235 91 -0.25;
+#X obj 235 276 *~;
+#X obj 186 309 hip~ 5;
+#X floatatom 308 218 0 0 0 0 - - -;
+#X obj 308 264 osc~ 440;
+#X obj 308 241 mtof;
+#X obj 235 253 *~ 0.1;
+#X obj 308 299 *~;
+#X obj 326 325 *~;
+#X obj 292 330 *~;
+#X msg 279 150 -0.25 \, 0.25 \$1;
+#X obj 41 148 biquad~ 0 0 1 -1 0;
+#X obj 63 70 t b;
+#X obj 104 72 del 3;
+#X obj 57 101 1;
+#X obj 96 101 0;
+#X obj 41 355 outlet~;
+#X obj 279 126 inlet;
+#X obj 40 175 *~;
+#X connect 0 0 17 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 6 0 7 0;
+#X connect 7 0 21 0;
+#X connect 8 0 10 0;
+#X connect 9 0 6 1;
+#X connect 9 0 12 0;
+#X connect 9 0 12 1;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 6 0;
+#X connect 12 0 13 1;
+#X connect 12 0 6 1;
+#X connect 12 0 14 0;
+#X connect 12 0 14 1;
+#X connect 13 0 6 1;
+#X connect 14 0 6 1;
+#X connect 15 0 2 0;
+#X connect 16 0 23 0;
+#X connect 17 0 18 0;
+#X connect 17 0 19 0;
+#X connect 18 0 20 0;
+#X connect 19 0 16 0;
+#X connect 19 0 23 1;
+#X connect 20 0 16 0;
+#X connect 20 0 23 1;
+#X connect 22 0 15 0;
+#X connect 23 0 21 0;
+#X restore 17 154 pd tests;
+#X msg 56 35 10;
+#X msg 54 62 20;
+#X msg 53 90 100;
+#X msg 52 115 500;
+#X obj 17 15 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 37 9 impulse;
+#N canvas 0 0 450 300 output 0;
+#X obj 54 202 dac~;
+#X obj 132 119 pack 0 100;
+#X obj 132 142 line~;
+#X obj 54 165 *~;
+#X obj 132 97 dbtorms;
+#X obj 33 42 inlet~;
+#X obj 177 42 inlet;
+#X obj 177 74 clip 0 120;
+#X msg 257 133 \; pd dsp 1;
+#X obj 98 42 inlet~;
+#X obj 94 168 *~;
+#X connect 1 0 2 0;
+#X connect 2 0 3 1;
+#X connect 2 0 10 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 0 1;
+#X restore 18 324 pd output;
+#X floatatom 97 127 0 0 0 0 - - -;
+#X text 136 96 tone;
+#X text 135 112 pitch;
+#X text 114 185 level \, dB;
+#X floatatom 117 209 0 0 100 0 - - -;
+#X text 158 209 liveness \, 0-100;
+#X text 505 330 modified for Pd version 0.37;
+#X floatatom 161 235 0 0 120 0 - - -;
+#X floatatom 205 259 0 0 120 0 - - -;
+#X text 192 235 crossover frequency \, Hz.;
+#X text 238 260 HF damping \, percent;
+#X obj 30 290 rev2~ 100 90 3000 20;
+#X text 141 324 output level \, dB;
+#X text 281 8 REV2~ - a simple 1-in \, 4-out reverberator;
+#X text 95 35 tone;
+#X text 96 52 bursts;
+#X text 231 37 The creation arguments (level \, liveness \, crossover
+frequency \, HF damping) may also be supplied in four inlets as shown.
+The "liveness" (actually the internal feedback percentage) should be
+100 for infinite reverb \, 90 for longish \, and 80 for short. The
+crossover frequency and HF damping work together: at frequencies above
+crossover \, the feedback is diminished by the "damping" as a percentage.
+So zero HF damping means equal reverb time at all frequencies \, and
+100% damping means almost nothing above the crossover frequency gets
+through.;
+#X text 132 130 (60 for;
+#X text 115 150 middle C);
+#X text 504 313 KEYWORDS unfinished;
+#X connect 0 0 21 1;
+#X connect 1 0 9 2;
+#X connect 2 0 9 0;
+#X connect 2 0 21 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 1;
+#X connect 5 0 2 1;
+#X connect 6 0 2 1;
+#X connect 7 0 2 0;
+#X connect 10 0 2 2;
+#X connect 14 0 21 2;
+#X connect 17 0 21 3;
+#X connect 18 0 21 4;
+#X connect 21 0 9 0;
+#X connect 21 1 9 1;
diff --git a/doc/pddp/rev3~-help.pd b/doc/pddp/rev3~-help.pd
new file mode 100644
index 00000000..9f1e30ce
--- /dev/null
+++ b/doc/pddp/rev3~-help.pd
@@ -0,0 +1,137 @@
+#N canvas 70 263 765 380 12;
+#X floatatom 99 212 0 0 120 0 - - -;
+#X floatatom 105 340 0 0 120 0 - - -;
+#N canvas 0 0 539 448 tests 0;
+#X obj 67 33 inlet;
+#X obj 309 189 inlet;
+#X obj 235 207 line~;
+#X obj 235 230 cos~;
+#X obj 235 68 loadbang;
+#X msg 235 91 -0.25;
+#X obj 235 276 *~;
+#X obj 186 309 hip~ 5;
+#X floatatom 308 218 0 0 0 0 - - -;
+#X obj 308 264 osc~ 440;
+#X obj 308 241 mtof;
+#X obj 235 253 *~ 0.1;
+#X obj 308 299 *~;
+#X obj 326 325 *~;
+#X obj 292 330 *~;
+#X msg 279 150 -0.25 \, 0.25 \$1;
+#X obj 41 148 biquad~ 0 0 1 -1 0;
+#X obj 63 70 t b;
+#X obj 104 72 del 3;
+#X obj 57 101 1;
+#X obj 96 101 0;
+#X obj 41 355 outlet~;
+#X obj 279 126 inlet;
+#X obj 51 192 *~;
+#X connect 0 0 17 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 6 0 7 0;
+#X connect 7 0 21 0;
+#X connect 8 0 10 0;
+#X connect 9 0 6 1;
+#X connect 9 0 12 0;
+#X connect 9 0 12 1;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 6 0;
+#X connect 12 0 13 1;
+#X connect 12 0 6 1;
+#X connect 12 0 14 0;
+#X connect 12 0 14 1;
+#X connect 13 0 6 1;
+#X connect 14 0 6 1;
+#X connect 15 0 2 0;
+#X connect 16 0 23 0;
+#X connect 17 0 18 0;
+#X connect 17 0 19 0;
+#X connect 18 0 20 0;
+#X connect 19 0 16 0;
+#X connect 19 0 23 1;
+#X connect 20 0 16 0;
+#X connect 20 0 23 1;
+#X connect 22 0 15 0;
+#X connect 23 0 21 0;
+#X restore 16 171 pd tests;
+#X msg 55 52 10;
+#X msg 53 79 20;
+#X msg 52 107 100;
+#X msg 51 132 500;
+#X obj 16 32 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 36 26 impulse;
+#N canvas 0 0 450 300 output 0;
+#X obj 54 202 dac~;
+#X obj 132 119 pack 0 100;
+#X obj 132 142 line~;
+#X obj 54 165 *~;
+#X obj 132 97 dbtorms;
+#X obj 33 42 inlet~;
+#X obj 177 42 inlet;
+#X obj 177 74 clip 0 120;
+#X msg 257 133 \; pd dsp 1;
+#X obj 98 42 inlet~;
+#X obj 94 168 *~;
+#X connect 1 0 2 0;
+#X connect 2 0 3 1;
+#X connect 2 0 10 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 0 1;
+#X restore 17 340 pd output;
+#X floatatom 96 144 0 0 0 0 - - -;
+#X text 135 113 tone;
+#X text 134 129 pitch;
+#X text 140 212 level \, dB;
+#X floatatom 134 234 0 0 100 0 - - -;
+#X text 175 234 liveness \, 0-100;
+#X floatatom 169 258 4 0 5000 0 - - -;
+#X floatatom 204 281 0 0 100 0 - - -;
+#X text 217 256 crossover frequency \, Hz.;
+#X text 240 283 HF damping \, percent;
+#X text 140 341 output level \, dB;
+#X text 94 52 tone;
+#X text 95 69 bursts;
+#X text 131 147 (60 for;
+#X text 114 167 middle C);
+#X obj 29 307 rev3~ 100 90 3000 20;
+#X text 263 4 REV3~ - hard-core \, 2-in \, 4-out reverberator;
+#X text 236 56 The creation arguments (level \, liveness \, crossover
+frequency \, HF damping) may also be supplied in four inlets as shown.
+The "liveness" (actually the internal feedback percentage) should be
+100 for infinite reverb \, 90 for longish \, and 80 for short. The
+crossover frequency and HF damping work together: at frequencies above
+crossover \, the feedback is diminished by the "damping" as a percentage.
+So zero HF damping means equal reverb time at all frequencies \, and
+100% damping means almost nothing above the crossover frequency gets
+through.;
+#X text 236 29 (A more expensive \, presumably better \, one than rev2~.)
+;
+#X text 470 352 modified for Pd version 0.37-1;
+#X text 470 335 KEYWORDS abstraction unfinished;
+#X connect 0 0 25 2;
+#X connect 1 0 9 2;
+#X connect 2 0 9 0;
+#X connect 2 0 25 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 1;
+#X connect 5 0 2 1;
+#X connect 6 0 2 1;
+#X connect 7 0 2 0;
+#X connect 10 0 2 2;
+#X connect 14 0 25 3;
+#X connect 16 0 25 4;
+#X connect 17 0 25 5;
+#X connect 25 0 9 0;
+#X connect 25 1 9 1;
diff --git a/doc/pddp/rmstodb-help.pd b/doc/pddp/rmstodb-help.pd
new file mode 100644
index 00000000..124e15f7
--- /dev/null
+++ b/doc/pddp/rmstodb-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 rmstodb 3 12 0 18
+-204280 -1 0;
+#X obj 0 430 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control conversion acoustical_units;
+#X text 12 85 DESCRIPTION convert linear amplitude to dB;
+#X text 12 25 NAME rmstodb;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 538 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 439 cnv 17 3 53 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 542 (none);
+#N canvas 76 440 428 149 Related_objects 0;
+#X text 11 28 Control objects for conversion:;
+#X obj 167 57 dbtopow;
+#X obj 233 57 powtodb;
+#X obj 23 116 mtof~;
+#X obj 68 116 ftom~;
+#X obj 111 116 dbtorms~;
+#X obj 176 116 rmstodb~;
+#X obj 242 116 dbtopow~;
+#X obj 304 116 powtodb~;
+#X text 20 93 Signal objects for conversion:;
+#X obj 23 57 mtof;
+#X obj 70 57 ftom;
+#X obj 108 57 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 floatatom 239 216 0 0 0 0 - - -;
+#X floatatom 239 160 0 0 0 0 - - -;
+#X obj 78 510 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 438 float;
+#X text 98 465 list;
+#X text 98 510 float;
+#X obj 474 3 rmstodb;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/rmstodb -text
+pdpedia: rmstodb;
+#X obj 239 189 rmstodb;
+#X text 109 241 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 11 23 convert linear amplitude to dB;
+#X text 158 465 - lists will be truncated \, and the first element
+used as input.;
+#X obj 98 569 pddp/pddplink all_about_acoustic_conversions.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 11 0 18 0;
+#X connect 18 0 10 0;
diff --git a/doc/pddp/rmstodb~-help.pd b/doc/pddp/rmstodb~-help.pd
new file mode 100644
index 00000000..5a1c3371
--- /dev/null
+++ b/doc/pddp/rmstodb~-help.pd
@@ -0,0 +1,83 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion acoustical_units;
+#X text 12 85 DESCRIPTION linear amplitude to dB for audio signals
+;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 25 NAME rmstodb~;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/route-help.pd b/doc/pddp/route-help.pd
index b4dcca5f..627734dc 100644
--- a/doc/pddp/route-help.pd
+++ b/doc/pddp/route-help.pd
@@ -1,289 +1,259 @@
-#N canvas 190 100 1023 661 10;
-#X obj 82 273 route 23 54 1;
-#X msg 170 239 54 43;
-#X msg 212 239 1 foo bar;
-#X obj 141 418 route big apple;
-#X msg 351 376 1 2 3;
-#X msg 248 376 big apple pie;
-#X msg 320 238 walk the dog;
-#X text 8 217 numeric arguments:;
-#X text 16 356 symbolic arguments:;
-#X msg 590 287 bang;
-#X msg 621 380 list;
-#X msg 622 413 list 5;
-#X msg 593 307 symbol pie;
-#X msg 596 327 pie;
-#X msg 584 248 1 2 3;
-#X obj 26 13 route;
-#X text 67 13 - route messages according to their first element;
-#X text 25 108 If a match is found \, and the message contains only
-ONE element \, then a bang is sent out the corresponding outlet. If
-a match if found \, and the message contains multiple elements (a list)
-\, then all the list elements except the first element is sent out
-the corresponding outlet. If no match is found \, then the entire message
-is sent out the right-most outlet - the "rejection" outlet. The number
-of outlets is the number of arguments plus one.;
-#X msg 18 239 23 345 456;
-#X msg 96 239 420 34 45;
-#X msg 32 376 apple pie;
-#X msg 105 376 impeach ringo starr;
-#X text 34 490 In this case \, the data type 'symbol' is implied by
-the creation arguments and therefore this [route] object will match
-symbols only. Symbolic messages that do not match any of the arguments
-\, and all numbers \, will be output through the right-most outlet.
+#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 route 3 12 0 18
+-204280 -1 0;
+#X obj 0 240 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 220 494 392 META 0;
+#X text 12 115 PLATFORM windows macosx gnulinux;
+#X text 12 195 LIBRARY internal;
+#X text 12 235 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 75 LICENSE SIBSD;
+#X text 12 215 AUTHOR Miller Puckette;
+#X text 12 295 HELP_PATCH_AUTHORS This help patch 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 GENRE help;
+#X text 12 95 DESCRIPTION route message according to their first element
;
-#X text 565 21 If necessary \, messages of different data types can
-be matched by the [route] object if the data type is explictly defined
-in the creation arguments.;
-#X text 564 71 In the example below \, instead of matching the 'value'
-of a message \, the [route] object will match 'data type': i.e. lists
-will be sent through the first outlet \, floats will be sent through
-the second outlet \, symbols through the third outlet \, bangs through
-the fourth outlet. The fifth outlet will then output anything that
-does not match one of the previously defined data types (i.e. the "pie"
-message below is a text message that hasn't been defined as a 'symbol'
-- hence \, Pd cannot determine which data type it is and it will be
-output through the right-most outlet).;
-#X text 608 208 a float;
-#X text 632 247 a list (of floats);
-#X text 627 287 a bang;
-#X text 672 307 a symbol;
-#X text 630 328 none of the above!;
-#X text 702 268 a list of symbols;
-#X text 599 349 SPECIAL CASES OF LISTS.;
-#X text 17 583 RELATED OBJECTS;
-#X obj 21 604 select;
-#X obj 68 604 trigger;
-#X obj 122 604 moses;
-#X text 26 36 Route checks the first element of a message against each
-of its creation arguments \, which may be numbers or symbols (but not
-a mixture of the two unless the data types are defined explicitly)
-\, then sends the messages through the appropriate outlets.;
-#N canvas 0 22 466 316 related_objects_from_other_libraries 0;
-#X obj 26 33 segregate;
-#X obj 104 34 multiselect;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.pure-data.org and click on "Downloads" then "Software"
-;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X obj 193 34 demux;
-#X obj 245 34 gate;
-#X restore 21 627 pd related_objects_from_other_libraries;
-#X floatatom 625 498 5 0 0 0 - - -;
-#X symbolatom 673 497 10 0 0 0 - - -;
-#X obj 578 518 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144
+#X text 12 25 NAME route;
+#X text 12 135 INLET_0 anything;
+#X text 12 155 OUTLET_N anything;
+#X text 12 175 OUTLET_R anything;
+#X text 12 45 KEYWORDS control needs_work list_op symbol_op list_op
+anything_op;
+#X text 12 255 RELEASE_DATE 1997;
+#X text 12 275 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 362 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 471 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 74 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 [route] Related Objects;
+#X obj 22 43 select;
+#X obj 72 43 spigot;
+#X obj 123 43 moses;
+#X restore 102 597 pd Related_objects;
+#X obj 78 249 cnv 17 3 105 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 371 cnv 17 3 17 empty \$0-pddp.cnv.let.0 n 5 9 0 16 -228856
+-162280 0;
+#X obj 482 3 route;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/route -text
+pdpedia: route;
+#X obj 187 113 route 0 1;
+#X msg 187 61 0 12;
+#X msg 225 61 1 13;
+#X msg 263 61 2 14;
+#X obj 238 156 print rejection_outlet;
+#X obj 187 200 print left_outlet;
+#X obj 238 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 212 178 print middle_outlet;
+#X obj 212 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X msg 622 450 list not-a-list;
-#X msg 578 208 89;
-#X msg 581 228 float 7;
-#X obj 578 474 route bang float symbol list;
-#X obj 625 518 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
+#X obj 187 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X obj 673 518 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
+#X msg 300 61 7 17;
+#X text 11 23 route messages according to their first element;
+#N canvas 11 63 516 509 float_mode 0;
+#X text 89 271 float;
+#X text 89 365 list;
+#X text 89 325 symbol;
+#X text 89 455 pointer;
+#X text 139 455 - a pointer is always sent to the rightmost outlet.
+;
+#X text 89 438 bang;
+#X text 139 271 - the incoming value is compared to the creation argument(s).
+If there is a match \, a bang is sent to the outlet corresponding to
+the matching creation argument. If there is no match the input is sent
+to the rightmost 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 [route] Message Handling in "Float Mode";
+#X obj 1 261 cnv 3 500 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 70 270 cnv 17 3 225 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 138 438 - a bang will be sent to the rightmost inlet.;
+#X text 88 481 All other messages will be sent to the rightmost outlet.
+;
+#X msg 141 50 2;
+#X msg 148 72 1 2 3;
+#X obj 141 167 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X obj 721 518 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
+#X obj 162 167 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X obj 769 518 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
+#X msg 169 116 something else;
+#X obj 204 167 print rejection_outlet;
+#X obj 141 233 print out0;
+#X obj 162 211 print out1;
+#X text 50 26 For "float mode" \, the first argument must be a float.
+;
+#X obj 141 142 route 1 2 3;
+#X obj 183 189 print out2;
+#X obj 183 167 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X msg 587 268 list moon earth;
-#X text 636 228 definitely a float!;
-#X text 620 366 An empty list is translated into a bang;
-#X text 620 399 A list with only one float is translated to a float
+#X msg 158 94 3 dog night;
+#X text 139 325 - the symbol is compared to the creation arguments
+\, and a bang is sent to the corresponding outlet if there is a match.
;
-#X text 620 435 A list with only one symbol is translated to a symbol
+#X text 139 365 - the first element of the list is compared to the
+creation argument(s). If there is a match \, the first element is removed
+from the list \, and the remaining list is sent to the outlet corresponding
+to the matching creation argument. If there is no match the input is
+sent to the rightmost outlet.;
+#X connect 13 0 22 0;
+#X connect 14 0 22 0;
+#X connect 17 0 22 0;
+#X connect 22 0 15 0;
+#X connect 22 0 19 0;
+#X connect 22 1 16 0;
+#X connect 22 1 20 0;
+#X connect 22 2 23 0;
+#X connect 22 2 24 0;
+#X connect 22 3 18 0;
+#X connect 25 0 22 0;
+#X restore 171 306 pd float_mode;
+#X text 98 249 anything;
+#X text 168 249 - [route] handles its input in 3 different "modes"
+\, depending on what the creation arguments are. Click the subpatches
+below to see how message types are handled under each mode.;
+#X text 261 306 match float arguments;
+#N canvas 15 11 516 599 selector_mode 0;
+#X text 88 548 pointer;
+#X text 138 548 - a pointer is always sent to the rightmost outlet.
;
-#X obj 141 439 bng 15 250 50 0 empty empty big -4 23 1 12 -262144 -1
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 0 389 cnv 3 500 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 69 398 cnv 17 3 255 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 68 244 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
-#X obj 189 439 bng 15 250 50 0 empty empty apple -7 23 1 12 -262144
+#X obj 101 244 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X obj 237 439 bng 15 250 50 0 empty empty everything_else -2 23 1
-12 -262144 -1 -1;
-#X obj 129 469 print x1;
-#X obj 189 469 print x2;
-#X obj 249 469 print x3;
-#X text 565 555 [trigger]-style shortcuts don't work:;
-#X text 678 574 !=;
-#X obj 579 575 route b f s l;
-#X obj 700 575 route bang float symbol list;
-#X obj 7 331 print x23;
-#X obj 75 331 print x54;
-#X obj 143 331 print x1;
-#X obj 204 331 print other;
-#X obj 82 293 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 109 293 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 137 293 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 161 293 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 176 265 In this case \, the creation arguments are all numbers
-and [route] will therefore assume that it should attempt to match messages
-that are data type "float". All messages that are not numbers will
-be output through the right-most outlet.;
-#N canvas 0 22 466 633 routing_data_types 0;
-#X obj 334 314 route symbol;
-#X obj 336 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 413 335 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 331 361 route symbol;
-#X obj 333 381 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 410 382 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 318 269 test;
-#X msg 357 269 symbol test;
-#X obj 58 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 135 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 55 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 132 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 89 266 bang;
-#X obj 56 311 route bang;
-#X obj 53 358 route bang;
-#X text 14 5 routing based on reserved words:;
-#X obj 188 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 265 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 185 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 262 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 186 311 route float;
-#X obj 183 358 route float;
-#X msg 170 266 1;
-#X msg 209 266 float 12;
-#X obj 181 542 route list;
-#X obj 181 561 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 249 562 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 168 580 route list;
-#X obj 168 599 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 236 600 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 184 493 list 1 two 3;
-#X msg 167 473 1 two 3;
-#X msg 200 513 list one 2 three;
-#X msg 365 289 symbol;
-#X msg 113 484 list;
-#X msg 224 287 float test;
-#X text 26 245 These all output the as same atom type that is routed:
+#X obj 203 262 print rejection_outlet;
+#X msg 68 59 der;
+#X obj 68 349 print out0;
+#X obj 101 327 print out1;
+#X text 7 1 [route] Message Handling in "Selector Mode";
+#X msg 92 690 foo;
+#X msg 101 718 symbol foo;
+#X obj 169 283 print out3;
+#X obj 92 840 print out0;
+#X obj 133 818 print out1;
+#X text 120 690 the selector "foo" matches the first argument;
+#X text 171 718 the selector "symbol" matches the second argument;
+#X text 88 398 bang;
+#X text 138 398 - if one of the creation arguments is "bang" \, then
+a bang will be sent out the corresponding outlet.;
+#X text 138 428 - if one of the creation arguments is "float" \, then
+an incoming float will be sent out the corresponding outlet.;
+#X text 88 428 float;
+#X text 88 458 list;
+#X text 138 458 - if one of the creation arguments is "list" \, then
+two behaviors are possible:;
+#X text 138 484 a) if the first element is a float \, the list is sent
+out the corresponding outlet.;
+#X text 138 509 b) if the first element is a symbol \, the "list" selector
+is removed \, and the remaining message is sent out the corresponding
+outlet.;
+#X text 88 568 symbol;
+#X text 138 568 - if one of the creation arguments is "symbol" \, then
+an incoming symbol will be sent out the corresponding outlet.;
+#X text 87 596 All other messages - the selector of the incoming message
+is compared to the creation argument(s). If there is a match \, the
+selector is stripped and the remaining message is sent to the corresponding
+outlet. If there is no match the input is sent to the rightmost outlet.
;
-#X msg 15 266 bang test;
-#X obj 71 131 route 1;
-#X msg 71 183 2 3 4;
-#X obj 71 164 prepend set;
-#X msg 71 100 1 2 3 4;
-#X msg 218 183 is not a list;
-#X obj 218 164 prepend set;
-#X obj 218 131 route this;
-#X msg 218 100 this is not a list;
-#X text 21 50 [route] has three modes \, first is float \, second is
-symbol \, and third is data type. In the first two modes \, the first
-element of the set is stripped off by [route].;
-#X text 26 206 In the third mode \, [route] outputs the same atom type
-(bang->bang \, float->float \, symbol->symbol).;
-#X text 26 419 Lists do not behave the same with [route list] even
-though it is interpreting incoming lists \, not just routing by keyword
-\, as in the second symbol mode.;
-#X msg 174 164 set;
-#X text 157 164 re;
-#X text 164 24 "bang" \, "float" \, "symbol" \, and "list";
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 1 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 12 0 13 0;
-#X connect 13 0 8 0;
-#X connect 13 0 14 0;
-#X connect 13 1 9 0;
-#X connect 14 0 10 0;
-#X connect 14 1 11 0;
-#X connect 20 0 16 0;
-#X connect 20 0 21 0;
-#X connect 20 1 17 0;
-#X connect 21 0 18 0;
-#X connect 21 1 19 0;
-#X connect 22 0 20 0;
-#X connect 23 0 20 0;
-#X connect 24 0 25 0;
-#X connect 24 0 27 0;
-#X connect 24 1 26 0;
-#X connect 27 0 28 0;
-#X connect 27 1 29 0;
-#X connect 30 0 24 0;
-#X connect 31 0 24 0;
-#X connect 32 0 24 0;
-#X connect 33 0 0 0;
-#X connect 34 0 24 0;
-#X connect 35 0 20 0;
-#X connect 37 0 13 0;
-#X connect 38 0 40 0;
-#X connect 40 0 39 0;
-#X connect 41 0 38 0;
-#X connect 43 0 42 0;
-#X connect 44 0 43 0;
-#X connect 45 0 44 0;
-#X connect 49 0 42 0;
-#X connect 49 0 39 0;
-#X restore 838 496 pd routing_data_types;
-#X text 580 601 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 832 475 More info:;
-#X connect 0 0 64 0;
-#X connect 0 0 68 0;
-#X connect 0 1 65 0;
-#X connect 0 1 69 0;
-#X connect 0 2 66 0;
-#X connect 0 2 70 0;
-#X connect 0 3 67 0;
-#X connect 0 3 71 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 54 0;
-#X connect 3 0 57 0;
-#X connect 3 1 55 0;
-#X connect 3 1 58 0;
-#X connect 3 2 56 0;
-#X connect 3 2 59 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 0 0;
-#X connect 9 0 44 0;
-#X connect 10 0 44 0;
-#X connect 11 0 44 0;
+#X text 91 667 Beware! All this can be confusing at times...;
+#X msg 84 103 das;
+#X obj 135 305 print out2;
+#X obj 135 244 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 169 244 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 108 182 doh;
+#X obj 203 244 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 74 81 die 41;
+#X text 49 36 In selector mode \, all creation arguments should be
+symbols.;
+#X obj 68 221 route der die das float;
+#X msg 93 125 float 41;
+#X msg 103 153 41;
+#X text 135 147 (Remember: a single float "n" in a message or object
+box is shorthand for "float n");
+#X text 134 181 sent to the rightmost outlet (the "rejection outlet")
+;
+#X obj 92 774 route foo symbol list;
+#X obj 174 796 print out2;
+#X msg 128 744 2 3 four;
+#X text 189 744 an implicit list-- matches the third argument;
+#X connect 8 0 39 0;
#X connect 12 0 44 0;
#X connect 13 0 44 0;
-#X connect 14 0 44 0;
-#X connect 18 0 0 0;
-#X connect 19 0 0 0;
-#X connect 20 0 3 0;
-#X connect 21 0 3 0;
-#X connect 38 0 45 0;
-#X connect 39 0 46 0;
-#X connect 41 0 44 0;
-#X connect 42 0 44 0;
-#X connect 43 0 44 0;
-#X connect 44 0 40 0;
-#X connect 44 1 38 0;
-#X connect 44 2 39 0;
-#X connect 44 3 47 0;
-#X connect 44 4 48 0;
-#X connect 49 0 44 0;
+#X connect 31 0 39 0;
+#X connect 35 0 39 0;
+#X connect 37 0 39 0;
+#X connect 39 0 5 0;
+#X connect 39 0 9 0;
+#X connect 39 1 6 0;
+#X connect 39 1 10 0;
+#X connect 39 2 32 0;
+#X connect 39 2 33 0;
+#X connect 39 3 14 0;
+#X connect 39 3 34 0;
+#X connect 39 4 7 0;
+#X connect 39 4 36 0;
+#X connect 40 0 39 0;
+#X connect 41 0 39 0;
+#X connect 44 0 15 0;
+#X connect 44 1 16 0;
+#X connect 44 2 45 0;
+#X connect 46 0 44 0;
+#X restore 171 334 pd selector_mode;
+#X text 277 334 match the selector of the message;
+#X obj 78 397 cnv 17 3 17 empty \$0-pddp.cnv.let.0 r 5 9 0 16 -228856
+-162280 0;
+#X text 98 398 anything;
+#X text 168 398 - the rightmost outlet of [route] is always the "rejection
+outlet." That is \, incoming messages which do not match any of the
+creation arguments are sent to the rightmost outlet.;
+#X text 168 372 - an outlet is added for each creation argument specified.
+;
+#X text 82 437 * An incoming pointer will never match and so will always
+be sent to the rejection outlet.;
+#X text 98 372 anything *;
+#X text 80 489 1) float;
+#X text 97 503 symbol atom;
+#X text 168 489 - [route] can take symbols or floats as arguments.
+(Note: the first argument determines which "mode" below.) If floats
+are used \, [route] operates in "float mode"-- if symbols are used
+\, float operates in "selector mode." See the subpatches above to see
+how incoming data is handled in each mode.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 100 572 pddp/pddplink ../2.control.examples/18.conditional.pd
+-text doc/2.control.examples/18.conditional.pd;
+#X msg 300 85 Grizabella;
+#X connect 12 0 17 0;
+#X connect 12 0 21 0;
+#X connect 12 1 19 0;
+#X connect 12 1 20 0;
+#X connect 12 2 16 0;
+#X connect 12 2 18 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
+#X connect 15 0 12 0;
+#X connect 22 0 12 0;
+#X connect 41 0 12 0;
diff --git a/doc/pddp/rpole~-help.pd b/doc/pddp/rpole~-help.pd
new file mode 100644
index 00000000..a9452c53
--- /dev/null
+++ b/doc/pddp/rpole~-help.pd
@@ -0,0 +1,146 @@
+#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 rpole~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 338 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION real one-pole (recursive) filter \, raw;
+#X text 12 25 NAME rpole~;
+#X text 12 145 INLET_1 float signal;
+#X text 12 125 INLET_0 signal clear set;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 454 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 528 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 347 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 463 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 413 cnv 17 3 30 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 479 3 rpole~;
+#X obj 452 20 pddp/pddplink http://wiki.puredata.info/en/rpole~ -text
+pdpedia: rpole~;
+#X floatatom 152 194 0 0 0 0 - - -;
+#X obj 96 107 osc~ 100;
+#X msg 111 139 clear;
+#X msg 113 165 set 1;
+#X text 163 165 <-- set internal state;
+#X text 163 108 <-- signal to filter;
+#X text 182 195 <-- filter coefficient (may be a signal);
+#X text 182 217 <-- creation argument initializes filter coefficient
+;
+#X text 163 139 <-- clear internal state to zero;
+#X obj 95 217 rpole~ 0.9;
+#N canvas 93 273 326 287 test 0;
+#X obj 76 78 osc~;
+#X floatatom 76 55 5 0 0 0 - - -;
+#X obj 77 219 env~ 16384;
+#X floatatom 77 243 5 0 0 0 - - -;
+#X obj 76 168 rpole~;
+#X obj 104 107 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 76 105 *~;
+#X msg 97 137 set 1;
+#X floatatom 172 157 4 -100 100 0 - - -;
+#X obj 172 182 / 100;
+#X obj 214 256 dac~;
+#X obj 228 177 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 214 220 *~;
+#X obj 230 197 / 10;
+#X text 80 18 Stuff to test it:;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
+#X connect 4 0 12 0;
+#X connect 5 0 6 1;
+#X connect 6 0 4 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 4 1;
+#X connect 11 0 13 0;
+#X connect 12 0 10 0;
+#X connect 12 0 10 1;
+#X connect 13 0 12 1;
+#X restore 101 537 pd test;
+#X text 11 23 real one-pole (recursive) filter \, raw;
+#X text 50 58 [rpole~] filters an audio signal (left inlet) via a one-pole
+real filter \, whose coefficient is controlled by a creation argument
+or by an audio signal (right inlet).;
+#X text 98 346 signal;
+#X text 168 346 - the incoming signal to filter.;
+#X text 98 366 clear;
+#X text 168 366 - clear internal state to zero.;
+#X text 98 386 set;
+#X text 168 386 - set internal state (e.g. \, "set 1").;
+#X text 98 412 float;
+#X text 98 462 signal;
+#X text 168 462 - the outgoing \, filtered signal.;
+#X text 108 264 y[n] = y[n-1] + a[n] * x[n];
+#X text 49 316 The transfer function is H(Z) = 1/(1 - aZ^-1).;
+#X text 49 284 where y[n] is the output \, x[n] the input \, and a[n]
+the filter coefficient. The filter is unstable if/when |a[n]|>1.;
+#X text 80 505 1) float;
+#N canvas 27 280 428 309 Related_objects 0;
+#X obj 74 60 rzero~;
+#X obj 25 80 cpole~;
+#X obj 25 60 rpole~;
+#X obj 123 60 rzero_rev~;
+#X obj 74 80 czero~;
+#X obj 123 80 czero_rev~;
+#X text 201 60 real;
+#X text 200 81 complex;
+#X text 22 44 1-pole;
+#X text 71 44 1-zero;
+#X text 121 44 1-zero \, reversed;
+#X text 47 29 summary of raw filters:;
+#X text 18 184 User-friendly Filters;
+#X obj 21 213 lop~;
+#X obj 72 212 hip~;
+#X obj 124 213 bp~;
+#X obj 169 214 vcf~;
+#X obj 22 274 biquad~;
+#X text 18 250 Other Objects;
+#X text 18 113 Pd also provides a suite of user-friendly filters. This
+and other raw filters are provided for situations which the user-friendly
+ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
+for an introduction to the necessary theory.;
+#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 [rpole~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 98 430 signal;
+#X text 167 430 - filter coefficient.;
+#X text 167 412 - filter coefficient.;
+#X text 167 505 - (optional) initializes filter coefficient.;
+#X text 49 242 The action of [rpole~] is:;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 557 pddp/pddplink ../3.audio.examples/H11.shelving.pd -text
+doc/3.audio.examples/H11.shelving.pd;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/H14.all.pass.pd -text
+doc/3.audio.examples/H14.all.pass.pd;
+#X connect 12 0 21 1;
+#X connect 13 0 21 0;
+#X connect 14 0 21 0;
+#X connect 15 0 21 0;
diff --git a/doc/pddp/rsqrt~-help.pd b/doc/pddp/rsqrt~-help.pd
new file mode 100644
index 00000000..18baf8f3
--- /dev/null
+++ b/doc/pddp/rsqrt~-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 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 85 DESCRIPTION signal reciprocal square root;
+#X text 12 25 NAME rsqrt~;
+#X text 12 45 KEYWORDS signal;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/rzero_rev~-help.pd b/doc/pddp/rzero_rev~-help.pd
new file mode 100644
index 00000000..2d07d381
--- /dev/null
+++ b/doc/pddp/rzero_rev~-help.pd
@@ -0,0 +1,141 @@
+#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 rzero_rev~ 3 12
+0 18 -204280 -1 0;
+#X obj 0 335 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 247 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION real one-zero (non-recursive) "reverse" filter
+\, raw;
+#X text 12 25 NAME rzero_rev~;
+#X text 12 125 INLET_0 signal clear set;
+#X text 12 145 INLET_1 float signal;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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 502 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 543 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 344 cnv 17 3 65 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 419 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 418 float;
+#X obj 459 3 rzero_rev~;
+#X obj 431 20 pddp/pddplink http://wiki.puredata.info/en/rzero_rev~
+-text pdpedia: rzero_rev~;
+#X floatatom 283 190 0 0 0 0 - - -;
+#X obj 215 106 osc~ 100;
+#X msg 230 138 clear;
+#X msg 232 164 set 1;
+#X obj 214 216 rzero_rev~ 1;
+#X text 11 23 real one-zero (non-recursive) "reverse" filter \, raw
+;
+#X text 98 343 signal;
+#X text 98 363 clear;
+#X text 98 393 set;
+#X text 168 363 - clear internal state to zero.;
+#X text 168 343 - the incoming signal to be filtered.;
+#X text 168 393 - set internal state.;
+#X text 167 418 - filter coefficient.;
+#X text 167 438 - filter coefficient.;
+#X text 98 473 signal;
+#X text 168 473 - the outgoing \, filtered signal.;
+#X text 80 520 1) float;
+#X text 167 520 - (optional) initializes the filter coefficient.;
+#X text 69 49 [rzero_rev~] filters an audio signal (left inlet) via
+a one-zero real filter \, whose coefficient is controlled by a creation
+argument or by an audio signal (right inlet). The impulse response
+is that of "rzero" reversed in time.;
+#N canvas 27 280 428 309 Related_objects 0;
+#X obj 74 60 rzero~;
+#X obj 25 80 cpole~;
+#X obj 25 60 rpole~;
+#X obj 123 60 rzero_rev~;
+#X obj 74 80 czero~;
+#X obj 123 80 czero_rev~;
+#X text 201 60 real;
+#X text 200 81 complex;
+#X text 22 44 1-pole;
+#X text 71 44 1-zero;
+#X text 121 44 1-zero \, reversed;
+#X text 47 29 summary of raw filters:;
+#X text 18 184 User-friendly Filters;
+#X obj 21 213 lop~;
+#X obj 72 212 hip~;
+#X obj 124 213 bp~;
+#X obj 169 214 vcf~;
+#X obj 22 274 biquad~;
+#X text 18 250 Other Objects;
+#X text 18 113 Pd also provides a suite of user-friendly filters. This
+and other raw filters are provided for situations which the user-friendly
+ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
+for an introduction to the necessary theory.;
+#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 [rzero_rev~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#N canvas 80 271 326 287 test 0;
+#X obj 76 78 osc~;
+#X floatatom 76 55 5 0 0 0 - - -;
+#X obj 77 219 env~ 16384;
+#X floatatom 77 243 5 0 0 0 - - -;
+#X obj 104 107 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 76 105 *~;
+#X msg 97 137 set 1;
+#X floatatom 172 157 4 -100 100 0 - - -;
+#X obj 172 182 / 100;
+#X obj 214 256 dac~;
+#X obj 228 177 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 214 220 *~;
+#X obj 230 197 / 10;
+#X text 80 18 Stuff to test it:;
+#X obj 76 168 rzero_rev~;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 1;
+#X connect 5 0 14 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 0;
+#X connect 8 0 14 1;
+#X connect 10 0 12 0;
+#X connect 11 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 11 1;
+#X connect 14 0 2 0;
+#X connect 14 0 11 0;
+#X restore 102 552 pd test;
+#X text 70 281 where y[n] is the output \, x[n] the input \, and a[n]
+the filter coefficient. The filter is always stable.;
+#X text 126 261 y[n] = -a[n] * x[n] + x[n-1];
+#X text 70 312 The transfer function is H(Z) = -a + Z^-1.;
+#X text 69 240 The action of [rzero_rev~] is:;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 99 572 pddp/pddplink ../3.audio.examples/H14.all.pass.pd -text
+doc/3.audio.examples/H14.all.pass.pd;
+#X text 98 438 signal;
+#X connect 13 0 17 1;
+#X connect 14 0 17 0;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
diff --git a/doc/pddp/rzero~-help.pd b/doc/pddp/rzero~-help.pd
new file mode 100644
index 00000000..608fd583
--- /dev/null
+++ b/doc/pddp/rzero~-help.pd
@@ -0,0 +1,139 @@
+#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 rzero~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 349 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 247 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version-0.38. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION real one-zero (non-recursive) filter \, raw
+;
+#X text 12 25 NAME rzero~;
+#X text 12 125 INLET_0 signal clear set;
+#X text 12 145 INLET_1 float signal;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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 502 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 358 cnv 17 3 55 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 424 cnv 17 3 30 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 423 float;
+#X obj 479 3 rzero~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/rzero~ -text
+pdpedia: rzero~;
+#X floatatom 241 193 0 0 0 0 - - -;
+#X obj 197 108 osc~ 100;
+#X msg 212 140 clear;
+#X msg 214 166 set 1;
+#X obj 196 218 rzero~ 1;
+#X text 11 23 real one-zero (non-recursive) filter \, raw;
+#X text 98 357 signal;
+#X text 168 357 - the incoming signal to filter.;
+#X text 74 52 [rzero~] filters an audio signal (left inlet) via a one-zero
+real filter \, whose coefficient is controlled by a creation argument
+or by an audio signal (right inlet).;
+#X text 98 377 clear;
+#X text 168 377 - clear internal state to zero.;
+#X text 98 397 set;
+#X text 168 397 - set internal state (e.g. \, "set 1").;
+#X text 167 423 - filter coefficient.;
+#X text 167 438 - filter coefficient.;
+#X text 98 438 signal;
+#X text 80 521 1) float;
+#X text 167 521 - (optional) initializes the filter coefficient.;
+#X text 98 473 signal;
+#X text 168 473 - the outgoing \, filtered signal.;
+#N canvas 74 275 326 287 test 0;
+#X obj 76 78 osc~;
+#X floatatom 76 55 5 0 0 0 - - -;
+#X obj 77 219 env~ 16384;
+#X floatatom 77 243 5 0 0 0 - - -;
+#X obj 104 107 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 76 105 *~;
+#X msg 97 137 set 1;
+#X floatatom 172 157 4 -100 100 0 - - -;
+#X obj 172 182 / 100;
+#X obj 214 256 dac~;
+#X obj 228 177 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 214 220 *~;
+#X obj 230 197 / 10;
+#X text 80 18 Stuff to test it:;
+#X obj 76 168 rzero~;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 1;
+#X connect 5 0 14 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 0;
+#X connect 8 0 14 1;
+#X connect 10 0 12 0;
+#X connect 11 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 11 1;
+#X connect 14 0 2 0;
+#X connect 14 0 11 0;
+#X restore 101 553 pd test;
+#N canvas 27 280 428 309 Related_objects 0;
+#X obj 74 60 rzero~;
+#X obj 25 80 cpole~;
+#X obj 25 60 rpole~;
+#X obj 123 60 rzero_rev~;
+#X obj 74 80 czero~;
+#X obj 123 80 czero_rev~;
+#X text 201 60 real;
+#X text 200 81 complex;
+#X text 22 44 1-pole;
+#X text 71 44 1-zero;
+#X text 121 44 1-zero \, reversed;
+#X text 47 29 summary of raw filters:;
+#X text 18 184 User-friendly Filters;
+#X obj 21 213 lop~;
+#X obj 72 212 hip~;
+#X obj 124 213 bp~;
+#X obj 169 214 vcf~;
+#X obj 22 274 biquad~;
+#X text 18 250 Other Objects;
+#X text 18 113 Pd also provides a suite of user-friendly filters. This
+and other raw filters are provided for situations which the user-friendly
+ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
+for an introduction to the necessary theory.;
+#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 [rzero~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 74 290 where y[n] is the output \, x[n] the input \, and a[n]
+the filter coefficient. The filter is always stable.;
+#X text 74 320 The transfer function is H(Z) = 1 - aZ^-1.;
+#X text 128 269 y[n] = x[n] - a[n] * x[n-1];
+#X text 74 249 The action of [rzero~] is:;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 573 pddp/pddplink ../3.audio.examples/H11.shelving.pd -text
+doc/3.audio.examples/H11.shelving.pd;
+#X connect 13 0 17 1;
+#X connect 14 0 17 0;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
diff --git a/doc/pddp/samphold~-help.pd b/doc/pddp/samphold~-help.pd
new file mode 100644
index 00000000..d762a308
--- /dev/null
+++ b/doc/pddp/samphold~-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 samphold~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 244 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 248 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for version 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION sample and hold unit;
+#X text 12 25 NAME samphold~;
+#X text 12 125 INLET_0 signal set reset;
+#X text 12 145 INLET_1 signal float;
+#X text 12 165 OUTLET signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 507 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 544 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 569 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 547 (none);
+#N canvas 91 479 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 [samphold~] Related Objects;
+#X obj 22 43 phasor~;
+#X obj 79 43 threshold~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 253 cnv 17 3 175 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 516 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 441 cnv 17 3 60 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 464 3 samphold~;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/samphold~
+-text pdpedia: samphold~;
+#X obj 180 197 snapshot~;
+#X floatatom 180 219 5 0 0 0 - - -;
+#X obj 180 151 samphold~;
+#X obj 207 118 sig~;
+#X obj 252 140 sig~;
+#X floatatom 207 97 3 0 0 0 - - -;
+#X floatatom 252 119 3 0 0 0 - - -;
+#X msg 130 48 set 34;
+#X msg 192 71 reset;
+#X text 232 96 sample signal;
+#X text 277 117 control signal;
+#X msg 180 48 reset 10;
+#X text 238 77 to force the next sample;
+#X text 237 63 reset to default 1e+20;
+#X text 98 252 signal;
+#X text 98 292 set;
+#X text 98 322 reset;
+#X text 98 399 float;
+#X text 168 252 - incoming signal \, which is sampled whenever the
+right input decreases in value (as [phasor~] does each period \, for
+example).;
+#X text 98 440 signal;
+#X text 98 464 float;
+#X text 167 464 - floats are accepted (and lists truncated) without
+error. They are ignored \, however \, if there is a signal connection
+to the same inlet.;
+#X text 98 515 signal;
+#X text 168 515 - the outgoing signal;
+#X text 168 292 - the "set" message sets the output value \, which
+continues to be updated as normal afterward (e.g. \, "set 34").;
+#X text 167 440 - the right inlet is the "control signal". When it
+decreases in value \, the left input is sampled.;
+#N canvas 291 150 170 145 metro 0;
+#X obj 19 18 loadbang;
+#X obj 19 42 metro 100;
+#X obj 19 65 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 192 174 pd metro;
+#X text 11 23 sample and hold unit;
+#X text 168 399 - floats are accepted (and lists truncated) without
+error. They are ignored \, however \, if there is a signal connection
+to the same inlet.;
+#X text 168 322 - the "reset" message causes [samphold~] to act as
+if the specified value were the most recent value of the control input
+(e.g. \, "reset 10"). Use this \, for example \, if you reset the incoming
+phasor but don't want the jump reflected in the output. Plain "reset"
+is equivalent to "reset infinity" which forces the next input to be
+sampled.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 573 pddp/pddplink ../3.audio.examples/C09.sample.hold.pd
+-text doc/3.audio.examples/C09.sample.hold.pd;
+#X connect 14 0 15 0;
+#X connect 16 0 14 0;
+#X connect 17 0 16 0;
+#X connect 18 0 16 1;
+#X connect 19 0 17 0;
+#X connect 20 0 18 0;
+#X connect 21 0 16 0;
+#X connect 22 0 16 0;
+#X connect 25 0 16 0;
+#X connect 40 0 14 0;
diff --git a/doc/pddp/samplerate~-help.pd b/doc/pddp/samplerate~-help.pd
index b2a17e50..d8f12f09 100644
--- a/doc/pddp/samplerate~-help.pd
+++ b/doc/pddp/samplerate~-help.pd
@@ -1,11 +1,59 @@
-#N canvas 174 423 524 307 12;
-#X obj 211 123 samplerate~;
-#X floatatom 211 166 8 0 0 0 - - -;
-#X obj 211 80 bng 30 250 50 0 empty empty empty 0 -6 0 8 -260818 -1
--1;
-#X text 14 25 When banged \, samplerate~ outputs the sample rate that
-Pd is currently running at.;
-#X text 31 217 Pd's sample rate can be changed using the command line
-flag: -r <n>. For example: pd -r 22050;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
+#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 samplerate~ 3 12
+0 18 -204280 -1 0;
+#X obj 0 431 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 85 PLATFORM windows macosx gnulinux;
+#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 245 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION get the current sample rate;
+#X text 12 105 INLET_0 bang;
+#X text 12 125 OUTLET_0 float;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#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 511 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 538 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 515 (none);
+#N canvas 102 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 [samplerate~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 440 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 482 float;
+#X obj 78 483 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 455 3 samplerate~;
+#X obj 425 20 pddp/pddplink http://wiki.puredata.info/en/samplerate~
+-text pdpedia: samplerate~;
+#X obj 225 197 samplerate~;
+#X floatatom 225 240 8 0 0 0 - - -;
+#X obj 225 154 bng 30 250 50 0 empty empty empty 0 -6 0 8 -260818 -1
+-1;
+#X text 98 439 bang;
+#X text 168 439 - when sent a bang message \, [samplerate~] outputs
+the sample rate that Pd is currently running at.;
+#X text 99 542 Pd's sample rate can be changed using the command line
+flag: -r <n>. For example: pd -r 22050;
+#X text 11 23 get the current sample rate;
+#X text 99 573 DSP does not need to be turned on for [samplerate~]
+to work;
+#X text 168 482 - the sample rate.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 15 0;
+#X connect 16 0 14 0;
diff --git a/doc/pddp/savepanel-help.pd b/doc/pddp/savepanel-help.pd
new file mode 100644
index 00000000..ffc3af64
--- /dev/null
+++ b/doc/pddp/savepanel-help.pd
@@ -0,0 +1,74 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control GUI;
+#X text 12 85 DESCRIPTION query the user for the name of a file to
+create;
+#X text 12 145 DATATYPE_OUT symbol;
+#X text 12 25 NAME savevpanel;
+#X text 12 125 INLET_0 bang symbol;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/scalar-help.pd b/doc/pddp/scalar-help.pd
index a91971ca..8f9fe585 100644
--- a/doc/pddp/scalar-help.pd
+++ b/doc/pddp/scalar-help.pd
@@ -1,37 +1,425 @@
-#N canvas 50 213 470 550 10;
-#N canvas 0 22 462 312 scalar-window 0;
-#X restore 164 67 pd scalar-window;
-#X obj 2 2 cnv 15 450 20 empty empty "scalar" 2 11 1 18 -233017 -66577
-0;
-#X obj 418 3 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+#N struct Pd-logo float x float y symbol Pd float obj1-c float wire-c
+float obj2-c float Pd-c float lightning-vis symbol adc float adc-c
+;
+#N struct red-box float x float y float bottom;
+#N struct box float x float y float w0 float p;
+#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 (scalar) 3 12 0
+18 -204280 -1 0;
+#X obj 0 442 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 GENRE help;
+#X text 12 45 KEYWORDS control data-structure needs_work;
+#X text 12 85 DESCRIPTION graphical instance of a data structure;
+#X text 12 25 NAME scalar;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 469 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 497 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 525 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 501 (none);
+#N canvas 54 478 428 109 Related_objects 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [scalar] Related Objects;
+#X obj 21 42 struct;
+#X obj 71 42 drawpolygon;
+#X obj 152 42 drawnumber;
+#X obj 228 42 plot;
+#X obj 21 72 append;
+#X obj 71 72 get;
+#X obj 101 72 set;
+#X obj 131 72 getsize;
+#X obj 183 72 setsize;
+#X obj 237 72 element;
+#X restore 102 597 pd Related_objects;
+#N canvas 84 74 428 477 Pd-logo-template 0;
+#N canvas 236 304 450 300 init 0;
+#X obj 108 109 loadbang;
+#X msg 108 136 traverse pd-scalar-help.pd \, next;
+#X obj 108 163 pointer;
+#X obj 108 217 set Pd-logo obj1-c wire-c obj2-c adc-c Pd-c;
+#X msg 108 190 list 999 0 999 0 0 \$1;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X restore 21 41 pd init;
+#X obj 21 145 unpack p;
+#X obj 21 167 t b a;
+#X obj 360 210 t a;
+#X obj 21 68 struct Pd-logo float x float y symbol Pd float obj1-c
+float wire-c float obj2-c float Pd-c float lightning-vis symbol adc
+float adc-c;
+#X obj 21 241 set Pd-logo obj1-c adc-c wire-c obj2-c Pd-c lightning-vis
;
-#X text 29 227 - You can cut \, copy \, paste \, and duplicate "scalars".
+#X obj 21 439 filledpolygon 777 666 1 -12 -14 40 -14 40 55 -12 55;
+#X obj 21 325 filledpolygon obj1-c adc-c 1 0 9 7 9 0 9 0 10 30 10 30
+-7 0 -7 0 -6 7 -6 0 -6;
+#X obj 21 268 drawsymbol adc 3 -3 adc-c;
+#X obj 21 382 filledpolygon obj2-c Pd-c 1 7 29 0 29 0 28 25 28 25 29
+18 29 25 29 25 45 0 45 0 44 7 44 0 44 0 28;
+#X obj 21 417 drawsymbol Pd 3 32 Pd-c;
+#X obj 21 360 drawpolygon wire-c 1 3 10 3 28 4 28 4 10;
+#X obj 21 290 filledpolygon -v lightning-vis 990 0 1 4 11 -2 20 3 20
+1 28 9 17 4 17 5 12;
+#X obj 21 118 route select click;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#N canvas 108 55 380 398 animation 0;
+#X obj 27 18 inlet;
+#X obj 27 343 outlet;
+#X msg 27 45 0 999 0 999 0 0;
+#X msg 49 95 999 0 0 999 0 0;
+#X obj 82 171 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 82 194 sel 0 1;
+#X obj 223 171 0;
+#X msg 223 218 999 0 0 0 999 0;
+#X msg 243 277 999 0 0 999 0 0;
+#X obj 49 73 del 250;
+#X obj 82 122 del 100;
+#X obj 243 254 del 300;
+#X msg 101 218 999 0 777 999 0 1;
+#X obj 82 149 metro 200;
+#X obj 223 149 del 1200;
+#X msg 82 245 999 0 0 999 0 0;
+#X obj 223 194 del 50;
+#X connect 0 0 2 0;
+#X connect 0 0 9 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 15 0;
+#X connect 5 1 12 0;
+#X connect 6 0 15 0;
+#X connect 6 0 13 0;
+#X connect 7 0 1 0;
+#X connect 8 0 1 0;
+#X connect 9 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 13 0;
+#X connect 10 0 14 0;
+#X connect 11 0 8 0;
+#X connect 12 0 1 0;
+#X connect 13 0 4 0;
+#X connect 14 0 6 0;
+#X connect 14 0 16 0;
+#X connect 15 0 1 0;
+#X connect 16 0 7 0;
+#X connect 16 0 11 0;
+#X restore 21 197 pd animation;
+#X text 8 2 [scalar] A Scalar with Lots of Drawing Instructions;
+#X connect 1 0 2 0;
+#X connect 2 0 15 0;
+#X connect 2 1 3 0;
+#X connect 3 0 5 6;
+#X connect 4 0 13 0;
+#X connect 13 0 1 0;
+#X connect 13 1 1 0;
+#X connect 15 0 5 0;
+#X restore 79 210 pd Pd-logo-template;
+#X scalar Pd-logo 29 172 Pd~ 999 0 999 0 0 adc~ 0 \;;
+#X obj 451 20 pddp/pddplink http://wiki.puredata.info/en/scalar -text
+pdpedia: scalar;
+#X text 11 23 graphical instance of a data structure;
+#X text 98 446 (none);
+#X text 98 474 (none);
+#X obj 209 364 *~;
+#X floatatom 172 312 5 0 100 1 Volume_(dB) - -;
+#X obj 172 334 dbtorms;
+#X obj 208 392 dac~;
+#N canvas 107 82 428 452 box-face-template 0;
+#X obj 22 67 route click;
+#X obj 22 92 unpack p;
+#X obj 22 228 line;
+#X obj 22 117 t b a;
+#X obj 22 264 set box w0;
+#X msg 22 167 10 100;
+#X obj 97 167 del 500;
+#X msg 97 193 0 100;
+#X obj 22 325 drawpolygon 0 1 w0(0:10)(-4:-10) w0(0:10)(-4:-10) w0(0:10)(4:10)
+w0(0:10)(-4:-10) w0(0:10)(4:10) w0(0:10)(4:10) w0(0:10)(-4:-10) w0(0:10)(4:10)
+w0(0:10)(-4:-10) w0(0:10)(-4:-10);
+#X obj 22 391 drawpolygon 0 w0 -5 w0(0:10)(-14:-18) -5 w0(0:10)(-13:-17)
;
-#X text 29 136 - You can edit the contents of a "scalar" within the
-Properties panel. When you select 'Properties' \, Pd will open a text
-editor with the contents of that "scalar". When you are done editing
-it \, hit "OK" and your changes will take effect.;
-#X text 18 208 In edit mode:;
-#X text 29 243 - You can move "scalars" by clicking and dragging.;
-#X text 20 120 In any mode:;
-#X text 18 266 In run mode:;
-#X text 20 32 "scalar" is the basic graphical component of Pd's data
-structures.;
-#X text 305 532 updated for Pd 0.37.1;
-#X text 4 104 There are numerous ways to manually edit "scalars":;
-#X text 30 311 - Move breakpoints: Click near the breakpoint at the
-center of the width of the array \, but not so close that the mouse
-cursor changes to the resize cursor. The mouse cursor will change to
-an inverse arrow.;
-#X text 30 280 - Resize breakpoints: The mouse cursor will change to
-an up-down arrow when you can resize that breakpoint.;
-#X text 30 367 - Add breakpoints: Hold down the Alt key and click to
-the right of the breakpoint at the center of the width of the array.
-The mouse cursor will change to an outline of a + (plus symbol).;
-#X text 30 423 - Delete breakpoints: Hold down the Alt key and click
-to the left of the breakpoint at the center of the width of the array.
-The mouse cursor will change to same black X as when deleting cords.
+#X obj 22 418 drawpolygon 0 w0 5 w0(0:10)(-14:-18) 5 w0(0:10)(-13:-17)
;
-#X text 15 483 for more info see 4.data.structures and the related
-docs:;
-#X obj 49 502 pddp/pddplink ../1.manual/x2.htm;
+#N canvas 366 92 332 503 make-noise 0;
+#X obj 43 446 *~;
+#X obj 42 141 line~;
+#X obj 43 473 outlet~;
+#X obj 147 424 osc~;
+#X obj 160 255 osc~;
+#X obj 146 373 *~;
+#X obj 42 41 inlet;
+#X obj 256 7 inlet;
+#X obj 147 397 +~ 0;
+#X obj 161 193 *~ 0;
+#X obj 256 133 mtof;
+#X obj 256 246 s tempo;
+#X obj 256 219 -;
+#X obj 256 166 * 0.16;
+#X obj 222 166 log;
+#X obj 256 61 + 55;
+#X msg 256 193 190 \$1;
+#X obj 256 39 mod 21;
+#X obj 66 213 *~ 50;
+#X obj 65 336 +~;
+#X obj 160 233 +~;
+#X obj 222 210 *~ 5;
+#X obj 222 188 osc~;
+#X obj 79 262 +~ 1;
+#X obj 182 166 * 0.1;
+#X obj 79 311 *~ 250;
+#X obj 79 289 *~;
+#X msg 123 213 0.7;
+#X obj 78 239 osc~ 1.1;
+#X obj 256 85 sel 60;
+#X obj 256 107 8;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 0 9 0;
+#X connect 1 0 18 0;
+#X connect 3 0 0 1;
+#X connect 4 0 5 1;
+#X connect 5 0 8 0;
+#X connect 6 0 1 0;
+#X connect 7 0 17 0;
+#X connect 7 0 27 0;
+#X connect 8 0 3 0;
+#X connect 9 0 20 0;
+#X connect 10 0 13 0;
+#X connect 10 0 8 1;
+#X connect 10 0 14 0;
+#X connect 10 0 24 0;
+#X connect 12 0 11 0;
+#X connect 13 0 16 0;
+#X connect 14 0 22 0;
+#X connect 15 0 29 0;
+#X connect 16 0 12 0;
+#X connect 17 0 15 0;
+#X connect 18 0 19 0;
+#X connect 19 0 5 0;
+#X connect 20 0 4 0;
+#X connect 21 0 20 1;
+#X connect 22 0 21 0;
+#X connect 23 0 26 0;
+#X connect 23 0 26 1;
+#X connect 24 0 9 1;
+#X connect 25 0 19 1;
+#X connect 26 0 25 0;
+#X connect 27 0 28 1;
+#X connect 28 0 23 0;
+#X connect 29 0 30 0;
+#X connect 29 1 10 0;
+#X connect 30 0 10 0;
+#X restore 97 264 pd make-noise;
+#X obj 96 291 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 [scalar] Scalar with Complex Drawing Instructions;
+#X obj 172 193 % 80;
+#X obj 172 167 get box y;
+#X obj 22 42 struct box float x float y float w0;
+#N canvas 513 6 428 642 move 0;
+#X obj 107 42 inlet;
+#X obj 27 42 inlet;
+#X obj 48 444 pointer;
+#X obj 93 77 b;
+#X msg 93 105 stop;
+#X obj 48 190 0;
+#X obj 48 489 get box x y;
+#X obj 48 538 set box x y;
+#X obj 48 464 t a a;
+#X obj 48 516 +;
+#X obj 79 516 +;
+#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 [scalar] Subpatch to Move the Boxheads Around;
+#X obj 48 244 t b b;
+#X obj 48 169 del 2000;
+#X obj 184 155 random 2;
+#X obj 184 182 sel 0 1;
+#X obj 116 213 0;
+#X obj 146 213 1;
+#X obj 75 271 t b b;
+#X obj 102 317 == 0;
+#X obj 75 376 *;
+#X obj 102 294 f;
+#X obj 75 294 3;
+#X obj 75 405 spigot;
+#X obj 127 405 spigot;
+#X obj 160 383 == 0;
+#X obj 154 277 t a;
+#X obj 48 212 metro 100;
+#X obj 184 222 random 2;
+#X obj 249 222 random 2;
+#X obj 249 244 - 0.5;
+#X obj 184 244 - 0.5;
+#X obj 249 266 * 2;
+#X obj 249 288 div -1;
+#X obj 184 266 * 2;
+#X obj 184 288 div -1;
+#X obj 103 346 *;
+#X obj 309 222 random 2;
+#X obj 309 244 - 0.5;
+#X obj 309 266 * 2;
+#X obj 309 288 div -1;
+#X obj 109 168 r tempo;
+#X obj 27 139 del 350;
+#X connect 0 0 2 1;
+#X connect 0 0 3 0;
+#X connect 1 0 43 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 3 0 15 0;
+#X connect 3 0 38 0;
+#X connect 4 0 14 0;
+#X connect 4 0 28 0;
+#X connect 4 0 43 0;
+#X connect 5 0 28 0;
+#X connect 6 0 9 0;
+#X connect 6 1 10 0;
+#X connect 8 0 6 0;
+#X connect 8 1 7 2;
+#X connect 9 0 7 0;
+#X connect 10 0 7 1;
+#X connect 13 0 2 0;
+#X connect 13 1 19 0;
+#X connect 14 0 5 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 16 0 29 0;
+#X connect 16 1 18 0;
+#X connect 16 1 30 0;
+#X connect 17 0 27 0;
+#X connect 18 0 27 0;
+#X connect 19 0 23 0;
+#X connect 19 1 22 0;
+#X connect 20 0 22 1;
+#X connect 20 0 37 0;
+#X connect 21 0 24 0;
+#X connect 21 0 25 0;
+#X connect 22 0 20 0;
+#X connect 23 0 21 0;
+#X connect 24 0 9 1;
+#X connect 25 0 10 1;
+#X connect 26 0 25 1;
+#X connect 27 0 26 0;
+#X connect 27 0 24 1;
+#X connect 28 0 13 0;
+#X connect 29 0 32 0;
+#X connect 30 0 31 0;
+#X connect 31 0 33 0;
+#X connect 32 0 35 0;
+#X connect 33 0 34 0;
+#X connect 34 0 10 1;
+#X connect 35 0 36 0;
+#X connect 36 0 9 1;
+#X connect 37 0 21 1;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 41 0 37 1;
+#X connect 42 0 28 1;
+#X connect 43 0 14 0;
+#X connect 43 0 28 0;
+#X restore 118 224 pd move;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 3 1 4 1;
+#X connect 3 1 16 0;
+#X connect 3 1 18 1;
+#X connect 5 0 2 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 6 0 18 0;
+#X connect 7 0 2 0;
+#X connect 7 0 11 0;
+#X connect 11 0 12 0;
+#X connect 15 0 11 1;
+#X connect 16 0 15 0;
+#X connect 17 0 0 0;
+#X restore 225 334 pd box-face-template;
+#X text 245 358 The drawing instructions for the three;
+#X text 245 373 scalars to the left are a bit more complex \,;
+#X text 245 388 and allow us to associate one field-- "w0"--;
+#X text 244 403 with the size of the square. Click each little;
+#X text 244 418 "scalar creature" in runmode to trigger a note.;
+#X text 13 230 Above is a scalar with more drawing instructions-- it's
+made to look like two Pd object boxes connected together. Here it's
+used to exemplify data flow in Pd-- if you click or select the scalar
+\, it will trigger a simple animation. Open the subpatch "Pd-logo-template"
+to see how it works.;
+#N canvas 144 264 428 300 red-box-template 0;
+#X obj 22 42 struct red-box float x float y float bottom;
+#X obj 22 135 filledpolygon 900 0 1 0 0 20 0 20 bottom 0 bottom;
+#X text 19 69 Explain (or link to explanation) about x and y variables.
+;
+#X obj 22 162 drawnumber bottom -12 -15 250 bottom=;
+#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 [scalar] A Simple Scalar;
+#X restore 420 202 pd red-box-template;
+#X scalar red-box 369 199 20 \;;
+#X text 190 119 Below is a simple scalar-- it consists of a red box
+\, and a number with a label. The field "bottom" is associated with
+the two of the y-values of the box. If you click and drag the number
+\, you can change the placement of the bottom of the box.;
+#N canvas 50 456 428 105 Interacting_with_Scalars 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 [scalar] Interacting with Scalars;
+#X text 19 37 When you interact with the scalar in a patch with the
+mouse \, some of those mouse actions are captured and sent to the outlet
+of the [struct] object. See the help patch for [struct] for a complete
+list of these actions.;
+#X restore 102 556 pd Interacting_with_Scalars;
+#N canvas 50 456 428 129 Appending_Scalars_to_a_Canvas 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 [scalar] Appending Scalars;
+#X text 19 37 Blurb about the fact that these scalars were appended
+to the canvas when the patch was created (and they persist after you
+save them and their values are remembered). For more on how to instantiate
+a scalar \, see the help patch for [append].;
+#X obj 21 101 pddp/pddplink ../4.data.structures/04.append.pd -text
+doc/4.data.structures/04.append.pd;
+#X restore 102 534 pd Appending_Scalars_to_a_Canvas;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 385 291 pddp/dsp-reminder;
+#X obj 99 576 pddp/pddplink ../4.data.structures/01.scalars.pd -text
+doc/4.data.structures/01.scalars.pd;
+#X text 303 534 <-- needs work;
+#X text 70 56 Scalars are graphical instances of data structures. Their
+behavior is similar to other objects in Pd-- you can click them \,
+select them \, change their values \, delete them \, and so on.;
+#X obj 23 357 cnv 15 100 60 empty empty WOW 20 12 0 40 -262144 -232952
+0;
+#X scalar box 58 349 0 0 \;;
+#X scalar box 91 373 0 69 \;;
+#X scalar box 123 348 0 75 \;;
+#X connect 15 0 18 0;
+#X connect 15 0 18 1;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 19 0 15 1;
diff --git a/doc/pddp/select-help.pd b/doc/pddp/select-help.pd
index f9fd5169..30d6e206 100644
--- a/doc/pddp/select-help.pd
+++ b/doc/pddp/select-help.pd
@@ -1,227 +1,322 @@
-#N canvas 44 74 1007 677 10;
-#X floatatom 19 530 0 0 0 0 - - -;
-#X msg 83 488 1;
-#X msg 49 488 54;
-#X msg 19 488 23;
-#X msg 52 126 6;
-#X obj 19 165 select 6;
-#X msg 19 125 234;
-#X floatatom 19 147 0 0 0 0 - - -;
-#X obj 19 560 select 23 54 1;
-#X obj 46 10 select;
-#X text 91 9 - compare numbers or symbols;
-#X text 19 38 This object can be abbreviated as;
-#X obj 271 37 sel;
-#X text 19 55 In its simplest form shown below \, [select] checks its
-input agains the constant "6" (which is defined by the creation argument).
-If they match \, the first outlet gives "bang" \; otherwise the input
-is simply sent through to the second outlet.;
-#X obj 19 187 print match;
-#X obj 98 187 print NO_match;
-#X text 21 217 Note that when the input to [select] matches one of
+#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 select 3 12 0 18
+-204280 -1 0;
+#X obj 0 163 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 171 494 420 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 225 LIBRARY internal;
+#X text 12 265 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 245 AUTHOR Miller Puckette;
+#X text 12 325 HELP_PATCH_AUTHORS This help patch 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. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 105 DESCRIPTION compare numbers or symbols;
+#X text 12 25 NAME select;
+#X text 12 45 ALIAS sel;
+#X text 12 145 INLET_0 float symbol list;
+#X text 12 165 INLET_1 float symbol;
+#X text 12 185 OUTLET_N bang;
+#X text 12 205 OUTLET_R float symbol;
+#X text 12 65 KEYWORDS control symbol_op;
+#X text 12 285 RELEASE_DATE 1997;
+#X text 12 305 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 359 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 458 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 540 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 100 340 428 250 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 [select] Related Objects;
+#X obj 22 43 route;
+#X obj 62 43 spigot;
+#X obj 107 43 symbol;
+#X obj 155 43 float;
+#X text 18 123 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 17 165 The best places to find information about Pd's libraries
+is:;
+#X text 18 185 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 18 200 or;
+#X text 18 215 iem.kug.ac.at/pdb/;
+#X text 19 83 Externals;
+#X obj 19 103 pddp/helplink markex/multiselect;
+#X restore 102 597 pd Related_objects;
+#X obj 78 172 cnv 17 3 115 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 171 float;
+#X text 98 210 list;
+#X obj 78 368 cnv 17 3 40 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 306 cnv 17 3 45 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 305 float;
+#X obj 446 3 select;
+#X text 493 3 or;
+#X obj 518 3 sel;
+#X obj 448 20 pddp/pddplink http://wiki.puredata.info/en/select -text
+pdpedia: select;
+#X msg 62 50 6;
+#X obj 29 99 select 6;
+#X msg 29 49 234;
+#X floatatom 29 76 0 0 0 0 - - -;
+#X obj 29 127 print match;
+#X obj 108 127 print NO_match;
+#X text 202 115 Note that when the input to [select] matches one of
its creation arguments \, then a "bang" is sent to the outlet \, NOT
the original message.;
-#X obj 19 579 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X text 11 23 compare numbers or symbols;
+#N canvas 57 54 428 548 A_Word_About_Conditional_Objects 0;
+#X text 20 38 Using the [select] object \, and others listed below
+\, Pd users can emulate the "conditional" statements of other programming
+environments.;
+#X text 20 79 Consider the following: (Visual Basic Script);
+#X text 59 97 IF input = 1 THEN;
+#X text 58 108 response.write("Hello");
+#X text 58 121 ELSEIF input = 2 THEN;
+#X text 58 133 response.write("GoodBye");
+#X text 58 170 ELSE;
+#X text 57 194 END IF;
+#X text 22 217 Now the Pd equivalent:;
+#X msg 60 242 1;
+#X msg 92 242 2;
+#X floatatom 138 242 5 0 0 0 - - -;
+#X obj 60 280 sel 1 2;
+#X msg 60 426 symbol Hello;
+#X msg 79 399 symbol GoodBye;
+#X symbolatom 181 452 21 0 0 0 - - -;
+#X obj 27 517 ==;
+#X obj 55 517 !=;
+#X obj 82 517 >;
+#X obj 108 517 <;
+#X obj 135 517 >=;
+#X obj 162 517 <=;
+#X text 22 494 OTHER CONDITIONAL/RELATIONAL OBJECTS IN Pd;
+#X text 57 181 response.write("No_match_for_me..."& input);
+#X text 58 159 response.write("This_is_cool.");
+#X obj 99 303 moses 3;
+#X msg 136 371 symbol This_is_cool.;
+#X obj 136 322 moses 10;
+#X obj 181 344 makefilename No_match_for_me...%d;
+#X text 58 147 ELSEIF (input < 3 AND input < 10) THEN;
+#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 [select] Conditional Statements in Pd;
+#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 12 1 14 0;
+#X connect 12 2 25 0;
+#X connect 13 0 15 0;
+#X connect 14 0 15 0;
+#X connect 25 1 27 0;
+#X connect 26 0 15 0;
+#X connect 27 0 26 0;
+#X connect 27 1 28 0;
+#X connect 28 0 15 0;
+#X restore 102 549 pd A_Word_About_Conditional_Objects;
+#N canvas 79 52 428 289 second_inlet 0;
+#X obj 23 154 sel 42;
+#X msg 23 108 42;
+#X obj 23 176 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 45 579 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X floatatom 56 176 5 0 0 0 - - -;
+#X floatatom 31 130 5 0 0 0 - - -;
+#X floatatom 80 132 5 0 0 0 - - -;
+#X obj 197 195 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 71 579 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X msg 183 110 symbol word;
+#X msg 197 132 symbol other;
+#X msg 295 134 symbol other;
+#X obj 197 170 select word;
+#X obj 260 195 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X floatatom 98 579 5 0 0 0 - - -;
-#X text 53 516 If you click-n-drag this number box \, you'll notice
-how all numbers except "23" \, "54" \, and "1" are simply sent through
-to the rightmost outlet.;
-#X text 23 416 Several creation arguments can be defined. In effect
-you can use [select] to test the input for many different values. You
-will see an outlet for each test value and finally an outlet for values
-which match none of them (the rightmost outlet).;
-#X obj 601 303 print NO_match;
-#X obj 474 302 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X msg 292 110 symbol word;
+#X text 20 38 The right inlet is used to reset the argument's value
+as in the patch below. This feature is available only on [select] objects
+with only ONE creation argument (or no creation arguments). In the
+other examples with multiple creation arguments \, you'll notice that
+this second inlet is absent.;
+#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 [select] The Second Inlet;
+#X text 20 226 Note: A given [select] object will match floats or symbols
+\, but not both. See the subpatch titled "matching_symbols" for more
+details.;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 1 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 1;
+#X connect 7 0 10 0;
+#X connect 8 0 10 0;
+#X connect 9 0 10 1;
+#X connect 10 0 6 0;
+#X connect 10 1 11 0;
+#X connect 12 0 10 1;
+#X restore 171 335 pd second_inlet;
+#N canvas 52 20 491 603 matching_symbols 0;
+#X obj 151 304 print NO_match;
+#X obj 22 304 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 505 303 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 54 304 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 537 303 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 86 304 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 569 303 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 118 304 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 477 92 symbol dog;
-#X msg 482 111 symbol cat;
-#X msg 490 129 symbol foo;
-#X msg 497 149 symbol earth;
-#X msg 506 168 symbol 400;
-#X obj 474 282 select dog cat foo 400;
-#X msg 502 218 400;
-#X obj 605 580 print NO_match;
-#X obj 478 579 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X msg 22 102 symbol dog;
+#X msg 30 124 symbol cat;
+#X msg 38 146 symbol foo;
+#X msg 45 168 symbol earth;
+#X msg 54 190 symbol 400;
+#X obj 22 282 select dog cat foo 400;
+#X msg 50 233 400;
+#X obj 152 571 print NO_match;
+#X obj 23 571 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 509 580 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 55 571 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 541 580 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 87 571 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 573 580 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 119 571 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 474 377 symbol dog;
-#X msg 486 404 symbol cat;
-#X msg 494 423 symbol foo;
-#X msg 501 442 symbol earth;
-#X msg 509 463 symbol 400;
-#X msg 530 496 400;
-#X obj 478 560 select 400 dog cat foo;
-#X text 578 160 Notice that "400" here is defined as a symbol data
+#X msg 23 385 symbol dog;
+#X msg 31 407 symbol cat;
+#X msg 39 429 symbol foo;
+#X msg 46 451 symbol earth;
+#X msg 54 473 symbol 400;
+#X msg 75 506 400;
+#X obj 23 549 select 400 dog cat foo;
+#X text 126 182 Notice that "400" here is defined as a symbol data
type and the [select] object can successfully match it to the creation
argment.;
-#X text 529 206 Notice that "400" here is a number and the [select]
+#X text 77 221 Notice that "400" here is a number and the [select]
object cannot successfully match it to the creation argument. That
is because this [select] expects symbols - not numbers.;
-#X obj 460 631 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 460 14 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 474 320 However \, in this case below \, you'll notice that
-the FIRST creation argument is a number. Therefore \, this [select]
-object expects numbers and will ignore the "symbol" data type.;
-#X text 513 264 FIRST CREATION ARGUMENT IS A SYMBOL;
-#X text 521 543 FIRST CREATION ARGUMENT IS A NUMBER;
-#X text 477 9 [select] can also be used to match symbols like the example
-in the upper-right of this patch. It important to note that the FIRST
-creation argument indicates to the [select] object which data type
-to expect. If your first creation argument is a symbol \, like "dog"
-\, then the object will test only symbols and numbers will be ignored!
-;
-#X text 558 490 Notice that "400" here is a number and the [select]
+#X text 61 264 FIRST CREATION ARGUMENT IS A SYMBOL;
+#X text 66 532 FIRST CREATION ARGUMENT IS A NUMBER;
+#X text 103 500 Notice that "400" here is a number and the [select]
object can successfully match it to the creation argument.;
-#X text 578 457 Notice that "400" here is a symbol and the [select]
+#X text 123 467 Notice that "400" here is a symbol and the [select]
object cannot successfully match it to the creation argument.;
-#X obj 23 373 sel 42;
-#X msg 23 330 42;
-#X obj 23 392 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#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 [select] Matching Symbols;
+#X text 19 329 However \, in the case below \, you'll notice that the
+FIRST creation argument is a number. Therefore \, this [select] object
+expects numbers and will ignore the "symbol" data type.;
+#X text 19 38 [select] can be used to match symbols. It important to
+note that the FIRST creation argument indicates to the [select] object
+which data type to expect. If your first creation argument is a symbol
+\, like "dog" \, then the object will test only symbols \, and numbers
+will be ignored!;
+#X connect 5 0 10 0;
+#X connect 6 0 10 0;
+#X connect 7 0 10 0;
+#X connect 8 0 10 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X connect 10 1 2 0;
+#X connect 10 2 3 0;
+#X connect 10 3 4 0;
+#X connect 10 4 0 0;
+#X connect 11 0 10 0;
+#X connect 17 0 23 0;
+#X connect 18 0 23 0;
+#X connect 19 0 23 0;
+#X connect 20 0 23 0;
+#X connect 21 0 23 0;
+#X connect 22 0 23 0;
+#X connect 23 0 13 0;
+#X connect 23 1 14 0;
+#X connect 23 2 15 0;
+#X connect 23 3 16 0;
+#X connect 23 4 12 0;
+#X restore 102 571 pd matching_symbols;
+#X text 98 265 symbol;
+#X text 98 319 symbol;
+#X text 98 367 bang;
+#X text 168 367 - for each creation argument \, a corresponding outlet
+is created. When the value at the left inlet matches a creation argument
+\, a bang is sent to the corresponding outlet.;
+#X text 168 171 - if an incoming float matches a creation argument
+\, a bang is sent to the corresponding outlet. If it does not match
+\, the float is sent to the rightmost outlet.;
+#X obj 78 421 cnv 17 3 30 empty \$0-pddp.cnv.let.r r 5 9 0 16 -228856
+-162280 0;
+#X text 98 420 float;
+#X text 98 435 symbol;
+#X text 168 420 - if there is no match \, the float or symbol is sent
+to the rightmost outlet.;
+#X text 168 476 - [select] creates an outlet for each creation argument
+(plus one outlet at the right). Floats and symbols may not be mixed.
+See the subpatch below for more details:;
+#N canvas 105 267 428 240 creation_arguments 0;
+#X floatatom 23 152 0 0 0 0 - - -;
+#X msg 87 110 1;
+#X msg 53 110 54;
+#X msg 23 110 23;
+#X obj 23 182 select 23 54 1;
+#X obj 23 209 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X floatatom 54 392 5 0 0 0 - - -;
-#X floatatom 31 349 5 0 0 0 - - -;
-#X floatatom 80 351 5 0 0 0 - - -;
-#X text 325 686 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 480 639 route;
-#X text 479 618 RELATED OBJECTS;
-#X text 22 614 A WORD ABOUT CONDITIONAL OBJECTS;
-#N canvas 245 41 580 582 more 0;
-#X text 22 16 Using the [select] object \, and others listed below
-\, Pd users can emulate the "conditional" statements of other programming
-environments.;
-#X text 21 62 Consider the following: (Visual Basic Script);
-#X text 60 80 IF input = 1 THEN;
-#X text 59 91 response.write("Hello");
-#X text 59 104 ELSEIF input = 2 THEN;
-#X text 59 116 response.write("GoodBye");
-#X text 59 130 ELSEIF (input = 3 AND input < 10) THEN;
-#X text 59 153 ELSE;
-#X text 58 177 END IF;
-#X text 23 195 Now the Pd equivalent:;
-#X msg 37 218 1;
-#X msg 67 218 2;
-#X floatatom 123 221 5 0 0 0 - - -;
-#X obj 37 286 sel 1 2;
-#X msg 27 418 symbol Hello;
-#X msg 48 388 symbol GoodBye;
-#X symbolatom 288 428 20 0 0 0 - - -;
-#X obj 33 505 ==;
-#X obj 61 505 !=;
-#X obj 88 505 >;
-#X obj 114 505 <;
-#X obj 141 505 >=;
-#X obj 168 505 <=;
-#X text 28 482 OTHER CONDITIONAL/RELATIONAL OBJECTS IN Pd;
-#X text 58 164 response.write("No_match_for_me..."& input);
-#X text 59 142 response.write("This_is_cool.");
-#X obj 74 309 moses 3;
-#X msg 84 351 symbol This_is_cool.;
-#X obj 111 328 moses 10;
-#X obj 220 349 makefilename No_match_for_me...%d;
-#X connect 10 0 13 0;
-#X connect 11 0 13 0;
-#X connect 12 0 13 0;
-#X connect 13 0 14 0;
-#X connect 13 1 15 0;
-#X connect 13 2 26 0;
-#X connect 14 0 16 0;
-#X connect 15 0 16 0;
-#X connect 26 1 28 0;
-#X connect 27 0 16 0;
-#X connect 28 0 27 0;
-#X connect 28 1 29 0;
-#X connect 29 0 16 0;
-#X restore 24 632 pd more;
-#N canvas 0 22 456 306 related_objects_from_other_libraries 0;
-#X obj 28 15 pddplink ../../extra/markex/multiselect-help.pd -text markex/multiselect;
-#X text 19 53 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 18 102 The best places to find information about Pd's libraries
-is:;
-#X text 15 124 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 16 140 or;
-#X text 17 154 iem.kug.ac.at/pdb/;
-#X restore 521 639 pd related_objects_from_other_libraries;
-#X obj 233 397 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 50 209 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 196 332 symbol word;
-#X msg 196 351 symbol other;
-#X msg 313 350 symbol other;
-#X obj 233 377 select word;
-#X obj 305 397 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 77 209 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 305 332 symbol word;
-#X text 21 260 Also note that in the example above \, there is a second
-inlet. This is used to reset the argument's value like below. This
-feature is available only on [select] objects with only ONE creation
-argument -- in other example in this patch you'll notice that this
-second inlet is absent.;
-#X connect 0 0 8 0;
+#X floatatom 104 209 5 0 0 0 - - -;
+#X text 61 139 If you click-n-drag this number box \, you'll notice
+how all numbers except "23" \, "54" \, and "1" are simply sent through
+to the rightmost outlet.;
+#X text 20 38 Several creation arguments can be defined. In effect
+you can use [select] to test the input for many different values. You
+will see an outlet for each test value and finally an outlet for values
+which match none of them (the rightmost 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 [select] Creation Arguments;
+#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 3 0 0 0;
-#X connect 4 0 7 0;
-#X connect 5 0 14 0;
-#X connect 5 1 15 0;
-#X connect 6 0 7 0;
-#X connect 7 0 5 0;
-#X connect 8 0 17 0;
-#X connect 8 1 18 0;
-#X connect 8 2 19 0;
-#X connect 8 3 20 0;
-#X connect 28 0 33 0;
-#X connect 29 0 33 0;
-#X connect 30 0 33 0;
-#X connect 31 0 33 0;
-#X connect 32 0 33 0;
-#X connect 33 0 24 0;
-#X connect 33 1 25 0;
-#X connect 33 2 26 0;
-#X connect 33 3 27 0;
-#X connect 33 4 23 0;
-#X connect 34 0 33 0;
-#X connect 40 0 46 0;
-#X connect 41 0 46 0;
-#X connect 42 0 46 0;
-#X connect 43 0 46 0;
-#X connect 44 0 46 0;
-#X connect 45 0 46 0;
-#X connect 46 0 36 0;
-#X connect 46 1 37 0;
-#X connect 46 2 38 0;
-#X connect 46 3 39 0;
-#X connect 46 4 35 0;
-#X connect 50 0 49 0;
-#X connect 57 0 59 0;
-#X connect 57 1 60 0;
-#X connect 58 0 57 0;
-#X connect 61 0 57 0;
-#X connect 62 0 57 1;
-#X connect 70 0 73 0;
-#X connect 71 0 73 0;
-#X connect 72 0 73 1;
-#X connect 73 0 69 0;
-#X connect 73 1 74 0;
-#X connect 75 0 73 1;
+#X connect 4 0 5 0;
+#X connect 4 1 6 0;
+#X connect 4 2 7 0;
+#X connect 4 3 8 0;
+#X restore 171 517 pd creation_arguments;
+#X text 97 47 In its simplest form shown here \, [select] checks its
+input against the constant "6" (which is defined by the creation argument).
+If they match \, the first outlet gives "bang" \; otherwise the input
+is simply sent through to the second outlet.;
+#X text 168 262 - if an incoming symbol matches a creation argument
+\, a bang is sent to the corresponding outlet. If it does not match
+\, the symbol is sent to the rightmost outlet.;
+#X text 168 210 - if there is only one creation argument (or none)
+\, the first and second element of the list will be distributed to
+the two inlets of [select]. If there is more than one creation argument
+the list will be truncated.;
+#X text 167 305 - the right inlet is available if there is only one
+creation argument. See the subpatch below for details:;
+#X text 80 476 n) float;
+#X text 98 491 symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 296 572 pddp/pddplink ../2.control.examples/18.conditional.pd
+-text doc/2.control.examples/18.conditional.pd;
+#X connect 18 0 21 0;
+#X connect 19 0 22 0;
+#X connect 19 1 23 0;
+#X connect 20 0 21 0;
+#X connect 21 0 19 0;
diff --git a/doc/pddp/send-help.pd b/doc/pddp/send-help.pd
index 30bba837..2323eb7b 100644
--- a/doc/pddp/send-help.pd
+++ b/doc/pddp/send-help.pd
@@ -1,132 +1,190 @@
-#N canvas 1 2 640 638 12;
-#X obj 117 554 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 37 44 INLETS:;
-#X text 29 170 OUTLETS:;
-#X text 14 115 ARGUMENTS:;
-#X text 19 213 EXAMPLES:;
-#X text 23 369 SEE ALSO:;
-#N canvas 109 3 419 268 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 22 148 Externals and other object libraries;
-#X obj 11 53 receive~;
-#X obj 95 54 send~;
-#X obj 220 54 throw~;
-#X obj 285 54 catch~;
-#X obj 21 103 tabreceive~;
-#X obj 129 103 tabsend~;
-#X obj 211 103 netsend;
-#X obj 287 103 netreceive;
-#X text 189 199 [dist];
-#X text 191 221 [netdist];
-#X text 309 177 [remote];
-#X obj 350 54 value;
-#X obj 150 53 receive;
-#X text 28 175 [streamout~];
-#X text 29 197 [sendlocal];
-#X text 290 227 [system];
-#X text 29 219 [shoutcast~];
-#X text 287 200 [sendOSC];
-#X text 188 177 [send13~];
-#X restore 117 499 pd Related_Objects;
-#N canvas 90 1 655 636 More_Info 0;
-#X obj 44 576 pddp/pddplink all_about_send_n_receive.pd -text all_about_send_n_receive;
-#X text 27 511 There is a lot of information available about [send]
-and [receive] \, but that means there's lots to know! Open the abstraction
-below to learn more...;
-#X text 34 18 SEND USING [SEND] OR MESSAGE? DYNAMIC SEND?;
-#X text 42 52 Consider this:;
-#X floatatom 172 53 5 0 0 0 - - -;
-#X floatatom 237 53 5 0 0 0 - - -;
-#X obj 172 79 s dave;
-#X obj 237 79 s hans;
-#X obj 371 57 r dave;
-#X obj 447 56 r hans;
-#X floatatom 371 84 5 0 0 0 - - -;
-#X floatatom 447 85 5 0 0 0 - - -;
-#X text 41 136 Now consider this:;
-#X floatatom 200 138 5 0 0 0 - - -;
-#X floatatom 269 139 5 0 0 0 - - -;
-#X msg 200 166 \; dave \$1;
-#X msg 269 166 \; hans \$1;
-#X text 43 278 And to complicate things a little more \, and offer
+#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 send 3 12 0 18 -204280
+-1 0;
+#X obj 0 240 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 125 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Dave Sabine \, September 12 \, 2003
+. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control nonlocal;
+#X text 12 105 DESCRIPTION send messages without patch cords;
+#X text 12 25 NAME send;
+#X text 12 45 ALIAS s;
+#X text 12 145 INLET_0 anything;
+#X text 12 165 INLET_1 symbol;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 333 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 375 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 438 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 95 291 428 315 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 [send] Related Objects;
+#X obj 23 43 receive~;
+#X obj 88 43 send~;
+#X obj 194 43 throw~;
+#X obj 249 43 catch~;
+#X obj 23 74 tabreceive~;
+#X obj 111 74 tabsend~;
+#X obj 180 74 netsend;
+#X obj 247 74 netreceive;
+#X obj 304 43 value;
+#X obj 134 43 receive;
+#X text 20 109 Externals and other object libraries;
+#X obj 20 168 pddp/helplink maxlib/remote;
+#X obj 20 208 pddp/helplink maxlib/dist;
+#X text 106 188 <- which library? (No help patch exists);
+#X text 106 227 <- which library?;
+#X text 106 247 <- which library?;
+#X obj 20 268 pddp/helplink maxlib/netdist;
+#X obj 20 128 pddp/helplink ggee/streamout~;
+#X obj 20 148 pddp/helplink ext13/send13~;
+#X obj 20 188 pddp/helplink sendlocal;
+#X obj 20 228 pddp/helplink sendOSC;
+#X obj 20 248 pddp/helplink shoutcast~;
+#X obj 20 288 pddp/helplink motex/system;
+#X restore 102 597 pd Related_objects;
+#X obj 78 342 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 send;
+#X text 498 3 or;
+#X obj 521 3 s;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/send -text
+pdpedia: send;
+#X obj 52 124 s;
+#X floatatom 52 100 5 0 0 0 - - -;
+#X floatatom 284 95 5 0 0 0 - - -;
+#X obj 284 66 r;
+#X floatatom 339 95 5 0 0 0 - - -;
+#X obj 339 66 r;
+#X floatatom 390 95 5 0 0 0 - - -;
+#X obj 390 66 r;
+#X floatatom 52 167 5 0 0 0 - - -;
+#X floatatom 277 177 5 0 0 0 - - -;
+#X floatatom 348 177 5 0 0 0 - - -;
+#X floatatom 423 177 5 0 0 0 - - -;
+#X text 51 147 with creation argument;
+#X obj 52 191 s dave;
+#X obj 277 148 r dave;
+#X obj 348 148 r dave;
+#X floatatom 152 168 5 0 0 0 - - -;
+#X obj 423 148 r hans;
+#X obj 152 192 s hans;
+#X obj 78 249 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 247 anything;
+#X obj 78 291 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 289 symbol;
+#X text 168 289 - if [send] is created without an argument \, the right
+inlet can be used to dynamically change the send/receive name. (See
+example above).;
+#X obj 112 124 s;
+#X floatatom 112 66 5 0 0 0 - - -;
+#X msg 157 66 symbol dave;
+#X msg 157 94 symbol hans;
+#X text 98 341 (none);
+#X text 168 341 - all messages are sent to a corresponding [receive]
+object with the same name.;
+#X obj 98 442 pddp/pddplink all_about_send_n_receive.pd -text all_about_send_n_receive
+;
+#N canvas 64 68 428 493 Dynamic_send_vs_messages 0;
+#X text 20 42 Consider this:;
+#X floatatom 115 43 5 0 0 0 - - -;
+#X floatatom 171 43 5 0 0 0 - - -;
+#X obj 115 69 s dave;
+#X obj 171 69 s hans;
+#X obj 264 43 r dave;
+#X obj 320 43 r hans;
+#X floatatom 264 67 5 0 0 0 - - -;
+#X floatatom 320 67 5 0 0 0 - - -;
+#X text 20 112 Now consider this:;
+#X floatatom 139 114 5 0 0 0 - - -;
+#X floatatom 208 115 5 0 0 0 - - -;
+#X msg 139 142 \; dave \$1;
+#X msg 208 142 \; hans \$1;
+#X text 20 232 And to complicate things a little more \, and offer
some interesting functionality \, consider the following:;
-#X obj 371 107 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 447 107 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 64 322 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 264 90 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 188 321 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 320 90 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 64 346 symbol dave;
-#X obj 188 345 symbol hans;
-#X msg 67 394 \; \$1 42;
-#X text 143 384 In this example \, I have created a single routine
-which acts as a 'dynamic' send object. The variable ($1) in this message
-box is replaced by the incoming 'symbol'.;
-#X text 135 213 In this example \, the message box contains a Pd command
-which effectively sends the value of the variable ($1) to either 'dave'
+#X msg 23 312 \; \$1 42;
+#X text 20 184 In this example \, the message box contains a Pd command
+which effectively sends the value of the variable (\$1) to either 'dave'
or 'hans'.;
-#X connect 4 0 6 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 [send] Send using [send] of message? Dynamic [send]?;
+#X msg 23 274 symbol dave;
+#X msg 107 274 symbol hans;
+#X text 66 302 In this example \, I have created a single routine which
+acts as a 'dynamic' send object. The variable (\$1) in this message
+box is replaced by the incoming symbol. The two patches below do the
+same thing but with the [send] object:;
+#X msg 162 364 symbol dave;
+#X msg 171 386 symbol hans;
+#X obj 162 467 send;
+#X obj 162 440 42;
+#X obj 162 413 t b a;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
#X connect 5 0 7 0;
-#X connect 8 0 10 0;
-#X connect 9 0 11 0;
-#X connect 10 0 18 0;
-#X connect 11 0 19 0;
-#X connect 13 0 15 0;
-#X connect 14 0 16 0;
-#X connect 20 0 22 0;
-#X connect 21 0 23 0;
-#X connect 22 0 24 0;
-#X connect 23 0 24 0;
-#X restore 117 528 pd More_Info;
-#X obj 116 250 s;
-#X floatatom 116 226 5 0 0 0 - - -;
-#X floatatom 218 255 5 0 0 0 - - -;
-#X obj 218 226 r;
-#X floatatom 273 255 5 0 0 0 - - -;
-#X obj 273 226 r;
-#X floatatom 324 255 5 0 0 0 - - -;
-#X obj 324 226 r;
-#X floatatom 120 309 5 0 0 0 - - -;
-#X floatatom 375 335 5 0 0 0 - - -;
-#X floatatom 446 335 5 0 0 0 - - -;
-#X floatatom 521 335 5 0 0 0 - - -;
-#X text 119 289 with creation argument;
-#X obj 120 333 s dave;
-#X obj 375 306 r dave;
-#X obj 446 306 r dave;
-#X floatatom 220 310 5 0 0 0 - - -;
-#X text 104 45 None. Data can be inputted to the [receive] object using
-the [send] object or by creating a Pd 'send' command in a message box.
-The [receive] object accepts any atom type as input.;
-#X obj 521 306 r hans;
-#X obj 220 334 s hans;
-#X text 114 386 doc/1.manual/x5.htm;
-#X text 114 369 doc/1.manual/x2.htm;
-#X text 114 403 doc/2.control.examples/09.send_receive.pd;
-#X text 114 419 doc/2.control.examples/10.more.messages.pd;
-#X text 115 435 doc/2.control.examples/11.review.pd;
-#X text 115 452 doc/2.control.examples/13.locality.pd;
-#X text 115 470 doc/5.reference/help-message.pd;
-#X obj 56 18 send;
-#X text 109 18 - SEND MESSAGES WITHOUT PATCH CORDS - abbreviation:
+#X connect 6 0 8 0;
+#X connect 7 0 15 0;
+#X connect 8 0 16 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 21 0 17 0;
+#X connect 22 0 17 0;
+#X connect 24 0 28 0;
+#X connect 25 0 28 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 1 26 1;
+#X restore 101 567 pd Dynamic_send_vs_messages;
+#X text 11 23 send messages without patch cords;
+#X text 168 393 - specifies the send/receive name. If no arguments
+are provided \, an extra inlet is available to dynamically set the
+send/receive name.;
+#X text 168 247 - when [send] is created with an argument \, it has
+a single inlet which accepts any message as input. The input is sent
+to all [receive] objects with the same name (argument).;
+#X text 80 393 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 457 pddp/pddplink all_about_scope_and_locality.pd -text all_about_scope_and_locality
;
-#X obj 551 18 s;
-#X text 107 171 None - sends messages to a corresponding [receive]
-of the same name.;
-#X text 105 115 One - [send] accepts a single argument (text \, not
-numbers) which is a 'name'. A [send] object corresponds to all [receive]
-objects of the same name.;
-#X text 161 555 - Dave Sabine \, September 12 \, 2003;
-#X connect 10 0 9 0;
-#X connect 12 0 11 0;
+#X text 98 493 doc/1.manual/x5.htm;
+#X text 98 478 doc/1.manual/x2.htm;
+#X obj 97 515 pddp/pddplink ../2.control.examples/09.send_receive.pd
+-text doc/2.control.examples/09.send_receive.pd;
+#X obj 97 530 pddp/pddplink ../2.control.examples/10.more.messages.pd
+-text doc/2.control.examples/10.more.messages.pd;
+#X obj 97 545 pddp/pddplink ../2.control.examples/13.locality.pd -text
+doc/2.control.examples/13.locality.pd;
#X connect 14 0 13 0;
#X connect 16 0 15 0;
-#X connect 17 0 22 0;
-#X connect 23 0 18 0;
-#X connect 24 0 19 0;
-#X connect 25 0 28 0;
-#X connect 27 0 20 0;
+#X connect 18 0 17 0;
+#X connect 20 0 19 0;
+#X connect 21 0 26 0;
+#X connect 27 0 22 0;
+#X connect 28 0 23 0;
+#X connect 29 0 31 0;
+#X connect 30 0 24 0;
+#X connect 38 0 37 0;
+#X connect 39 0 37 1;
+#X connect 40 0 37 1;
diff --git a/doc/pddp/send~-help.pd b/doc/pddp/send~-help.pd
new file mode 100644
index 00000000..ea30f829
--- /dev/null
+++ b/doc/pddp/send~-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 send~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 355 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 218 494 323 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 65 KEYWORDS signal nonlocal;
+#X text 12 105 DESCRIPTION one-to-many nonlocal signal connections
+;
+#X text 12 25 NAME send~;
+#X text 12 45 ALIAS s~;
+#X text 12 145 INLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 397 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 539 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 85 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 obj 22 43 tabreceive~;
+#X obj 102 43 throw~;
+#X obj 152 43 catch~;
+#X text 8 2 [send~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 364 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 452 3 send~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/send~ -text
+pdpedia: send~;
+#X obj 157 236 send~ signal1;
+#X obj 157 213 sig~ 50;
+#X floatatom 157 189 4 0 0 0 - - -;
+#X text 98 363 signal;
+#X text 98 401 (none);
+#X text 168 363 - a [send~] object copies its input to a local buffer
+which all receive~ objects of the same name read from.;
+#X text 168 401 - the incoming signal is sent to all [receive~] objects
+that share the same name as the [send~] object. These objects may be
+in different windows or even different patches. Any number of [receive~]'s
+may be associated with one [send~] \, but it is an error to have two
+[send~] objects of the same name.;
+#X obj 284 147 receive~ signal1;
+#X obj 284 236 snapshot~;
+#X obj 304 176 loadbang;
+#X obj 304 199 metro 150;
+#X text 11 23 one-to-many nonlocal signal connections;
+#X floatatom 284 263 5 0 0 0 - - -;
+#X text 98 572 See also: 3.audio.examples/G05.execution.order.pd;
+#X text 168 508 - [send~] takes a single argument which is the name
+associated with this particular [send~] object.;
+#X text 80 508 1) symbol atom;
+#X text 98 542 [send~]/[receive~] only work for the default block size
+(64).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X text 495 3 or [s~];
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 18 0 19 0;
+#X connect 19 0 23 0;
+#X connect 20 0 21 0;
+#X connect 21 0 19 0;
diff --git a/doc/pddp/set-help.pd b/doc/pddp/set-help.pd
index aa991903..8654c7cb 100644
--- a/doc/pddp/set-help.pd
+++ b/doc/pddp/set-help.pd
@@ -1,40 +1,202 @@
-#N struct help-set-template1 float x float y;
-#N canvas 346 46 655 535 12;
-#X msg 272 235 next;
-#X floatatom 19 265 5 0 0 2 X_value - -;
-#X floatatom 106 265 5 0 0 2 Y_value - -;
-#X obj 258 260 pointer;
-#X text 261 189 output first scalar in list;
-#X text 318 235 output next item;
-#X text 282 332 First argument selects template.;
-#X text 282 347 Remaining args are names of fields.;
-#X msg 258 211 traverse pd-help-set-data \, next;
-#N canvas 0 22 288 134 help-set-data 1;
-#X scalar help-set-template1 44 50 \;;
-#X scalar help-set-template1 99 73 \;;
-#X restore 377 409 pd help-set-data;
-#N canvas 164 72 425 146 help-set-template1 0;
-#X obj 41 87 filledpolygon 9 0 1 0 0 20 0 20 30 0 30;
-#X obj 60 21 template float x float y;
-#X restore 377 431 pd help-set-template1;
-#X text 86 10 -- set values in a scalar;
-#X obj 19 338 set help-set-template1 x y;
-#X text 359 497 updated for Pd version 0.35;
-#X text 6 72 [set] takes a pointer to a scalar in its rightmost inlet
-\; the remaining inlets set numeric values of fields. Only the leftmost
-inlet is "hot". You can't [set] "arrays" or "sublists". Instead \,
-you can get pointers into them using [element] and [sublist] (probably
+#N struct set-help-template float x float y float a float b symbol
+desc;
+#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 set 3 12 0 18 -204280
+-1 0;
+#X obj 0 230 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Revised
+by Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure;
+#X text 12 85 DESCRIPTION set values in a scalar;
+#X text 12 25 NAME set;
+#X text 12 125 INLET_0 float list symbol bang;
+#X text 12 145 INLET_N float symbol;
+#X text 12 165 INLET_R pointer;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 402 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 425 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 505 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 76 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 [set] Related Objects;
+#X obj 23 44 get;
+#X obj 55 44 append;
+#X obj 105 44 getsize;
+#X obj 161 44 setsize;
+#X obj 221 44 element;
+#X obj 23 69 sublist;
+#X obj 81 69 struct;
+#X obj 133 69 pointer;
+#X restore 102 598 pd Related_objects;
+#X obj 78 332 cnv 17 3 35 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 237 float;
+#X text 98 265 list;
+#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 set;
+#X obj 466 20 pddp/pddplink http://wiki.puredata.info/en/set -text
+pdpedia: set;
+#X text 11 23 set values in a scalar;
+#N canvas 114 251 428 334 set-help-template 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 [set] Data Structure Template;
+#X obj 23 43 struct set-help-template float x float y float a float
+b symbol desc;
+#X obj 23 124 drawcurve 0 1 60 50 70 50 70 60 60 60 60 50;
+#X obj 23 244 drawcurve 0 1 25 85 50 a 75 85;
+#N canvas 128 146 428 443 poll 0;
+#X obj 22 95 metro 500;
+#X msg 22 117 traverse pd-set-help.pd \, next;
+#X msg 22 172 next;
+#X obj 111 173 pointer;
+#X obj 22 195 pointer;
+#X obj 22 142 t b a;
+#X obj 111 217 get set-help-template a;
+#X obj 22 262 get set-help-template a;
+#X obj 111 239 moses 87;
+#X msg 156 285 symbol Comedy;
+#X obj 111 336 set -symbol set-help-template desc;
+#X obj 111 195 t a a;
+#X obj 22 217 t a a;
+#X msg 111 307 symbol Tragedy;
+#X msg 22 386 symbol Tragedy;
+#X msg 67 364 symbol Comedy;
+#X obj 22 408 set -symbol set-help-template desc;
+#X obj 22 73 loadbang;
+#X obj 22 337 moses 88;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [set] Subpatch;
+#X text 19 29 This subpatch just makes the help patch a little more
+interactive by changing the text depending on whether there is a frown
+or a smile.;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 3 0 11 0;
+#X connect 4 0 12 0;
+#X connect 5 0 2 0;
+#X connect 5 1 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 18 0;
+#X connect 8 0 13 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 11 0 6 0;
+#X connect 11 1 10 1;
+#X connect 12 0 7 0;
+#X connect 12 1 16 1;
+#X connect 13 0 10 0;
+#X connect 14 0 16 0;
+#X connect 15 0 16 0;
+#X connect 17 0 0 0;
+#X connect 18 0 14 0;
+#X connect 18 1 15 0;
+#X restore 25 307 pd poll;
+#X text 25 272 The following subpatch is used to change the symbol
+"desc" depending on whether each face is smiling or frowning.;
+#X obj 23 80 drawcurve 0 1 0 20 100 20 100 120 0 120 0 20;
+#X text 298 79 <- Head;
+#X obj 23 102 drawcurve 0 1 30 50 40 50 40 60 30 60 30 50;
+#X text 298 102 <- Left eye;
+#X text 298 124 <- Right eye;
+#X text 25 198 The following drawing instruction associates the field
+"a" with the midpoint of a curve. Thus you can set the value of a and
+change the arc/direction of the curve.;
+#X text 217 244 <- Mouth;
+#X text 187 152 <- Text;
+#X obj 25 152 drawsymbol desc 30 b 0 b=;
+#X text 187 175 <- Text;
+#X obj 25 175 drawnumber a 40 a 0 a=;
+#X restore 415 193 pd set-help-template;
+#X scalar set-help-template 2 65 107 0 Comedy \;;
+#X obj 357 166 pointer;
+#X msg 357 113 traverse pd-set-help.pd \, next;
+#X floatatom 210 167 5 0 0 0 - - -;
+#X text 364 96 output first scalar in list;
+#X scalar set-help-template 107 42 63 127 Tragedy \;;
+#X msg 368 138 next;
+#X text 403 137 output next item;
+#X text 98 373 pointer;
+#X text 168 265 - a list is distributed among the inlets.;
+#X text 98 405 (none);
+#X obj 210 193 set set-help-template a b;
+#X floatatom 256 144 5 0 0 0 - - -;
+#X obj 78 238 cnv 17 3 85 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 332 float;
+#X text 98 283 bang;
+#X obj 256 166 t b a;
+#X text 98 346 symbol;
+#X text 98 310 symbol;
+#X text 354 72 Click here first:;
+#X text 168 464 - all subsequent arguments are names of fields. There
+is one inlet created per field (plus the rightmost inlet for the pointer).
+;
+#X text 167 373 - a pointer to a scalar.;
+#X text 168 446 - the template of a scalar.;
+#X text 168 283 - a bang to the leftmost inlet sets the field(s) of
+the scalar with the last stored field value(s).;
+#X text 168 237 - a float to the leftmost inlet updates the value(s)
+for the field(s) specified in the creation arguments.;
+#X text 168 332 - an inlet is added for each additional field specified
+by the creation arguments. All fields must be the same type (i.e. \,
+floats or symbols \, but not a mixture of the two).;
+#X text 98 509 You can't [set] "arrays" or "sublists". Instead \, you
+can get pointers into them using [element] and [sublist] (Note: [sublist]
not working yet) and set individual items.;
-#X obj 29 432 all_about_data_structures;
-#X text 13 408 for more info \, open this patch:;
-#X obj 106 298 t b f;
-#X text 273 474 Miller's help patch:;
-#X obj 474 474 help-set;
-#X obj 21 10 set;
-#X connect 0 0 3 0;
-#X connect 1 0 12 0;
-#X connect 2 0 17 0;
-#X connect 3 0 12 2;
-#X connect 8 0 3 0;
-#X connect 17 0 1 0;
-#X connect 17 1 12 1;
+#X text 168 310 - see the subpatch "Setting_Symbolic_Fields" below.
+;
+#N canvas 98 376 428 215 Setting_Symbolic_Fields 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 [set] Setting symbolic fields;
+#X obj 224 124 pointer;
+#X msg 224 71 traverse pd-set-help.pd \, next;
+#X msg 235 96 next;
+#X obj 23 151 set -symbol set-help-template desc;
+#X msg 23 84 symbol Trauermarsch;
+#X msg 48 109 symbol Scherzo;
+#X text 20 37 To set symbolic fields of a scalar \, the "-symbol" flag
+must be used as follows:;
+#X text 20 178 You cannot set symbols and floats using the same [set]
+object.;
+#X connect 2 0 5 1;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 0;
+#X restore 101 552 pd Setting_Symbolic_Fields;
+#X text 80 446 1) symbol atom;
+#X text 80 464 n) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 572 pddp/pddplink ../4.data.structures/03.setting.data.pd
+-text doc/4.data.structures/03.setting.data.pd;
+#X obj 353 552 pddp/pddplink scalar-help.pd;
+#X connect 17 0 27 2;
+#X connect 18 0 17 0;
+#X connect 19 0 27 0;
+#X connect 22 0 17 0;
+#X connect 28 0 32 0;
+#X connect 32 0 27 0;
+#X connect 32 1 27 1;
diff --git a/doc/pddp/setsize-help.pd b/doc/pddp/setsize-help.pd
new file mode 100644
index 00000000..b68e93a5
--- /dev/null
+++ b/doc/pddp/setsize-help.pd
@@ -0,0 +1,112 @@
+#N struct string_of_dolls float x float y array dolls doll symbol label
+;
+#N struct doll float y;
+#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 setsize 3 12 0 18
+-204280 -1 0;
+#X obj 0 304 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 247 494 328 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Revised
+by Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure array;
+#X text 12 85 DESCRIPTION resize an array;
+#X text 12 25 NAME setsize;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 pointer;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 397 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 425 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 485 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 46 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 23 44 get;
+#X obj 83 44 append;
+#X obj 133 44 getsize;
+#X obj 189 44 element;
+#X obj 23 69 sublist;
+#X obj 81 69 struct;
+#X obj 133 69 pointer;
+#X text 8 2 [setsize] Related Objects;
+#X obj 51 44 set;
+#X restore 102 598 pd Related_objects;
+#X obj 78 313 cnv 17 3 50 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 312 float;
+#X text 98 337 list;
+#X obj 78 369 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 resize an array;
+#X obj 473 3 setsize;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/setsize -text
+pdpedia: setsize;
+#X scalar string_of_dolls 32 110 A_string_of_paper_dolls... \; -3 \;
+0 \; 0 \; 0 \; 0 \; \;;
+#X msg 204 171 traverse pd-setsize-help.pd \, next;
+#X obj 204 196 pointer;
+#X floatatom 33 237 5 0 0 0 - - -;
+#N canvas 90 353 428 173 doll-template 0;
+#X obj 23 43 struct doll float y;
+#X obj 23 65 filledcurve 999 0 1 -10 -1 -10 -1 0 -1 0 -1 0 -4 0 -4
+-5 -9 3 -14 8 -9 5 -4 5 -4 5 -1 5 -1 15 -1 15 -1 15 3 15 3 5 3 5 3
+15 19 15 19 -10 19 -10 19 0 3 0 3 -10 3 -10 3;
+#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 [setsize] Data Structure;
+#X text 20 118 These are the drawing instructions for the paper doll.
+This template is used as the element of the array "dolls" in the template
+"string_of_dolls".;
+#X restore 380 241 pd doll-template;
+#N canvas 81 360 428 167 string_of_dolls 0;
+#X obj 23 78 plot dolls 0 1 0 0 30;
+#X obj 23 43 struct string_of_dolls float x float y array dolls doll
+symbol label;
+#X obj 23 101 drawsymbol label -15 -35 145;
+#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 [setsize] Template for string_of_dolls;
+#X text 20 124 Here we simply plot the array and give it a label by
+using the [drawsymbol] object;
+#X restore 380 263 pd string_of_dolls;
+#X obj 33 263 setsize string_of_dolls dolls;
+#X text 178 337 - a (float \, pointer) pair is distributed to the two
+inlets. Lists with more than two elements will be truncated.;
+#X text 98 368 pointer;
+#X text 98 400 (none);
+#X text 178 462 - the name of an array contained within the scalar.
+;
+#X text 178 312 - sending a float sets the number of elements of the
+array specified by the 2nd creation argument.;
+#X text 98 489 Sending values smaller than one to [setsize] will resize
+the array to one \, which is the smallest possible size of an array.
+If the array is resized downward (e.g. \, from 20 to 15 elements) the
+extra data are lost. If resized upward \, the new elements are initialized
+to default values.;
+#X text 177 368 - a pointer to a scalar that contains an array.;
+#X text 203 149 1) Click here first...;
+#X text 32 211 2) ...then here.;
+#X text 178 444 - the struct name of a scalar that contains an array.
+;
+#X text 80 444 1) symbol atom;
+#X text 80 462 n) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 557 pddp/pddplink all_about_arrays.pd;
+#X obj 98 572 pddp/pddplink scalar-help.pd;
+#X connect 16 0 17 0;
+#X connect 17 0 21 1;
+#X connect 18 0 21 0;
diff --git a/doc/pddp/sigbinops-help.pd b/doc/pddp/sigbinops-help.pd
new file mode 100644
index 00000000..4649cdac
--- /dev/null
+++ b/doc/pddp/sigbinops-help.pd
@@ -0,0 +1,121 @@
+#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 (sigbinops) 3 12
+0 18 -204280 -1 0;
+#X obj -1 385 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION binary operators for signals;
+#X text 12 25 NAME +~ -~ *~ /~ max~ min~;
+#X text 12 5 GENRE help;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj -1 465 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj -1 502 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj -1 566 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 (sigbinops) Related Objects;
+#X obj 22 43 log~;
+#X obj 62 43 exp~;
+#X obj 103 43 abs~;
+#X restore 102 598 pd Related_objects;
+#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 474 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 40 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/bag -text
+pdpedia: bag;
+#X text 11 23 binary operators for signals;
+#X obj 15 276 +~;
+#X obj 103 274 -~;
+#X obj 190 274 *~;
+#X obj 275 276 /~;
+#X obj 15 212 osc~ 440;
+#X obj 415 212 osc~ 675;
+#X msg 24 296 bang;
+#X obj 361 274 max~;
+#X obj 447 276 min~;
+#X msg 115 297 bang;
+#X msg 201 296 bang;
+#X msg 291 297 bang;
+#X msg 373 296 bang;
+#X msg 464 297 bang;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0a 100 float 2;
+#X coords 0 1 99 -1 150 105 1;
+#X restore 15 73 graph;
+#X obj 344 3 +~;
+#X obj 379 3 -~;
+#X obj 412 3 *~;
+#X obj 446 3 /~;
+#X obj 479 3 max~;
+#X obj 513 3 min~;
+#X text 177 111 The binary signal operators can be configured to combine
+two signals as above \, or \, if you give a numeric argument \, audio
+signals are combined with scalars:;
+#X obj 329 156 +~ 5;
+#X text 177 181 The right inlet takes audio signals or numbers depending
+on whether the argument is present or not.;
+#X text 98 393 signal;
+#X text 167 416 - an incoming signal;
+#X text 168 393 - an incoming signal;
+#X text 98 416 signal;
+#X text 98 473 signal;
+#X text 168 473 - the outgoing signal;
+#X text 80 521 1) float;
+#X text 168 521 - (optional) a float argument initializes the right
+inlet to a value \, and allows the right inlet to receive float messages.
+;
+#X text 98 431 float;
+#X text 167 431 - if an argument is provided \, the object's right
+inlet will accept floats instead of a signal.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 15 318 tabwrite~ \$0a;
+#X obj 103 318 tabwrite~ \$0a;
+#X obj 190 318 tabwrite~ \$0a;
+#X obj 275 318 tabwrite~ \$0a;
+#X obj 361 318 tabwrite~ \$0a;
+#X obj 447 318 tabwrite~ \$0a;
+#X connect 13 0 49 0;
+#X connect 14 0 50 0;
+#X connect 15 0 51 0;
+#X connect 16 0 52 0;
+#X connect 17 0 13 0;
+#X connect 17 0 14 0;
+#X connect 17 0 16 0;
+#X connect 17 0 15 0;
+#X connect 17 0 20 0;
+#X connect 17 0 21 0;
+#X connect 18 0 16 1;
+#X connect 18 0 15 1;
+#X connect 18 0 14 1;
+#X connect 18 0 13 1;
+#X connect 18 0 20 1;
+#X connect 18 0 21 1;
+#X connect 19 0 49 0;
+#X connect 20 0 53 0;
+#X connect 21 0 54 0;
+#X connect 22 0 50 0;
+#X connect 23 0 51 0;
+#X connect 24 0 52 0;
+#X connect 25 0 53 0;
+#X connect 26 0 54 0;
diff --git a/doc/pddp/sigmund~-help.pd b/doc/pddp/sigmund~-help.pd
new file mode 100644
index 00000000..c28a4d02
--- /dev/null
+++ b/doc/pddp/sigmund~-help.pd
@@ -0,0 +1,262 @@
+#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 sigmund~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 179 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 202 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 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 GENRE help;
+#X text 12 45 KEYWORDS signal analysis needs_work;
+#X text 12 85 DESCRIPTION sinusoidal analysis and pitch tracking;
+#X text 12 25 NAME sigmund~;
+#X text 12 125 INLET_0 list signal npts hop npeak maxfreq vibrato stabletime
+minpower growth print;
+#X text 12 155 OUTLET_N float list;
+#X text 12 255 RELEASE_VERSION;
+#X text 12 235 RELEASE_DATE;
+#X restore 500 597 pd META;
+#X obj 0 414 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 450 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 82 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 [sigmund~] Related Objects;
+#X obj 22 43 fiddle~;
+#X obj 78 43 bonk~;
+#X restore 102 598 pd Related_objects;
+#X obj 78 188 cnv 17 3 220 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 99 204 list;
+#X obj 78 421 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 sinusoidal analysis and pitch tracking;
+#X obj 474 3 sigmund~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/sigmund~ -text
+pdpedia: sigmund~;
+#X text 98 187 signal;
+#X text 148 187 - the incoming signal to be analyzed.;
+#X text 98 249 npts - number of points in each analysis window (1024)
+;
+#X text 98 263 hop - number of points between each analysis (512);
+#X text 98 276 npeak - number of sinusoidal peaks (20);
+#X text 98 304 vibrato - depth of vibrato to expect in 1/2-tones (1)
+;
+#X text 98 318 stabletime - time (msec) to wait to report notes (50)
+;
+#X text 98 332 minpower - minimum power (dB) to report a pitch (50)
+;
+#X text 98 347 growth - growth (dB) to report a new note (7);
+#X text 98 290 maxfreq - maximum sinusoid frequency in Hz. (1000000)
+;
+#N canvas 84 53 428 534 Using-with-arrays 0;
+#X obj 23 342 print peak;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-insignal 1024 float 2;
+#X coords 0 1 1023 -1 200 140 1;
+#X restore 23 382 graph;
+#X obj 288 463 phasor~;
+#X obj 264 382 loadbang;
+#X obj 264 409 440;
+#X floatatom 264 436 5 0 0 0 - - -;
+#X obj 264 464 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 20 38 If invoked with the "-t" flag (as a creation argument)
+\, sigmund~ analyzes waveforms stored in arrays. Instead of an incoming
+signal \, feed it "list" messages with the following arguments:;
+#X text 38 92 table name (a symbol);
+#X text 39 111 number of points;
+#X obj 23 319 sigmund~ -t -npeak 10 -maxfreq 5000 peaks;
+#X text 38 132 index of first point;
+#X text 38 153 sample rate;
+#X text 38 174 debug flag (print debugging info if nonzero);
+#X text 20 197 In this mode \, only the "env" \, "pitch" \, and "peaks"
+outputs are meaningful.;
+#X text 21 230 click here to test:;
+#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 [sigmund~] Using on arrays;
+#X obj 23 249 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 23 272 f \$0;
+#X msg 23 296 list \$1-insignal 1024 0 44100 0;
+#X obj 264 490 tabwrite~ \$0-insignal;
+#X connect 2 0 21 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 21 0;
+#X connect 10 0 0 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 10 0;
+#X restore 152 233 pd Using-with-arrays;
+#X obj 39 113 phasor~;
+#X obj 39 43 loadbang;
+#X floatatom 38 158 5 0 0 1 pitch - -;
+#X floatatom 203 158 5 0 0 1 envelope - -;
+#X obj 39 91 mtof;
+#X obj 39 66 69;
+#X obj 38 136 sigmund~ -hop 4096 pitch env;
+#X floatatom 66 66 5 0 0 0 - - -;
+#N canvas 98 12 428 605 setting-parameters 0;
+#X msg 22 74 print;
+#X floatatom 32 96 5 0 0 0 - - -;
+#X msg 32 117 minpower \$1;
+#X obj 22 143 sigmund~ -minpower 40;
+#X text 19 164 npts: number of points used in an analysis. Must be
+a power of two \, at least 128 The minimum frequency that can be tracked
+is about 2(sample_rate)/npts.;
+#X text 19 203 hop: number of points between analyses. Must be a power
+of two \, at least the DSP vector size (usually 64). This regulates
+the number of analyses done per unit of time.;
+#X text 19 292 npeak: maximum number of sinusoidal peaks to look for.
+The computation time is quadratic in the number of peaks actually found
+(this number only sets an upper limit). Use it to balance CPU time
+with quality of results.;
+#X text 19 342 maxfreq: maximum frequency of sinusoidal peaks to look
+for. This can be useful in situations where background noise creates
+high-frequency \, spurious peaks..;
+#X text 19 381 vibrato: maximum deviation from "pitch" to accept as
+normal vibrato (affects "notes" output only). If the value is too small.
+vibratos will appear as trills. If too large \, very small melodic
+intervals may not be reported as new notes.;
+#X text 19 431 stabletime: time period to wait before reporting a note
+(affects "notes" output only). The "pitch" must be present and must
+not vary more than "vibrato" for this entire period to report a note.
+If too large \, the "notes" will be unnecessarily delayed. If too small
+\, spurious notes get output.;
+#X text 19 503 minpower: minimum measured RMS level to report a pitch
+(affects "pitch" and "notes" output only). Signals quieter than this
+will be assumed to be crosstalk and ignored.;
+#X text 19 542 growth: minimum measured RMS growth to report a new
+note (affects "notes" output only). The RMS level must rise by this
+many dB (within a time period given by "stabletime") to report a repetition
+of a note at or near the previously output pitch.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 19 31 Note: the following "parameters" can be sent to [sigmund~]
+as messages \, or provided as creation arguments by prefixing each
+selector with a dash (i.e. \, -minpower 40):;
+#X text 40 242 * Note: The npts and hop parameters are in samples \,
+and are powers of two. The example above specifies a huge hop of 4096
+(to slow the output down) and to output "pitch" and "env". (Those are
+the default outputs.);
+#X text 8 2 [sigmund~] Setting Parameters;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X restore 152 393 pd setting-parameters;
+#X text 108 504 pitch - output pitch continuously;
+#X text 108 555 tracks - output sinusoidal peaks organized into tracks
+;
+#X text 108 517 notes - output pitch at the beginning of notes;
+#X text 108 542 peaks - output all sinusoidal peaks in order of amplitude
+;
+#X text 108 529 env - output amplitude continuously;
+#X text 100 82 The [sigmund~] object analyzes an incoming sound into
+sinusoidal components \, which may be reported individually or combined
+to form a pitch estimate. Possible outputs are specified as creation
+arguments:;
+#X text 149 204 - [sigmund~] accepts a list to access waveforms stored
+in arrays. See the "Using_with_array" subpatch below.;
+#X text 148 420 One outlet is created for each creation argument (listed
+under the heading "arguments");
+#X text 98 374 See the subpatch below for more info on these parameters:
+;
+#X text 98 452 (optional) In addition to flags (see subpatch "setting-parameters"
+above) \, [sigmund~] can take up to five arguments \, in any order
+\, to specify its output. Each creates (and corresponds to) an outlet.
+;
+#X text 98 360 print - prints current setting to the console.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#N canvas 24 72 482 513 sinusoid-tracking 0;
+#X obj 74 195 sigmund~ -npeak 10 peaks;
+#X obj 74 168 phasor~;
+#X obj 74 98 loadbang;
+#X floatatom 74 144 5 0 120 0 - - -;
+#X obj 74 223 route 0 1 2 3 4 5 6 7 8 9;
+#X obj 74 257 unpack 0 0 0 0;
+#X floatatom 74 379 5 0 0 0 - - -;
+#X floatatom 101 349 5 0 0 0 - - -;
+#X floatatom 128 324 5 0 0 0 - - -;
+#X obj 74 121 440;
+#X floatatom 155 298 5 0 0 0 - - -;
+#X obj 206 257 unpack 0 0 0 0;
+#X floatatom 206 379 5 0 0 0 - - -;
+#X floatatom 233 349 5 0 0 0 - - -;
+#X floatatom 260 324 5 0 0 0 - - -;
+#X floatatom 287 298 5 0 0 0 - - -;
+#X text 269 383 frequency (Hz.);
+#X text 290 350 peak amplitude (linear);
+#X text 322 324 cosine component;
+#X text 343 298 sine component;
+#X text 79 413 loudest partial;
+#X text 216 413 quietest partial;
+#X text 36 4 You can ask for sinusoidal peaks in decreasing order of
+amplitude or arranged into maximally continuous tracks for resynthesis.
+(Or you can ask for both.) If you ask for peaks \, out come lists of
+five numbers \, one for each sinusoid at each analysis period. The
+first is the index number of the sinusoid (so you can use "route" to
+claw them apart). The other four are as shown:;
+#X obj 46 504 osc~ 440;
+#X obj 46 528 *~;
+#X obj 47 582 unpack 0 0 0 0;
+#X floatatom 47 675 5 0 0 0 - - -;
+#X floatatom 74 653 5 0 0 0 - - -;
+#X floatatom 101 630 5 0 0 0 - - -;
+#X floatatom 128 606 5 0 0 0 - - -;
+#X obj 88 531 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 35 443 If you ask for "tracks" \, the output is four numbers:
+index \, frequency \, and amplitude as before \, and finally a flag
+which is one for a new track \, zero for a continuation \, minus one
+for an empty track.;
+#X obj 47 555 sigmund~ -npts 16384 -hop 8192 -npeak 1 tracks;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 9 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 4 9 11 0;
+#X connect 5 0 6 0;
+#X connect 5 1 7 0;
+#X connect 5 2 8 0;
+#X connect 5 3 10 0;
+#X connect 9 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 1 13 0;
+#X connect 11 2 14 0;
+#X connect 11 3 15 0;
+#X connect 23 0 24 0;
+#X connect 24 0 32 0;
+#X connect 25 0 26 0;
+#X connect 25 1 27 0;
+#X connect 25 2 28 0;
+#X connect 25 3 29 0;
+#X connect 30 0 24 1;
+#X connect 32 0 25 0;
+#X restore 101 577 pd sinusoid-tracking;
+#X text 99 433 list;
+#X text 98 419 float;
+#X connect 25 0 31 0;
+#X connect 26 0 30 0;
+#X connect 29 0 25 0;
+#X connect 30 0 29 0;
+#X connect 31 0 27 0;
+#X connect 31 1 28 0;
+#X connect 32 0 29 0;
diff --git a/doc/pddp/sig~-help.pd b/doc/pddp/sig~-help.pd
new file mode 100644
index 00000000..cb660434
--- /dev/null
+++ b/doc/pddp/sig~-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 sig~ 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 49 245 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION convert numbers to audio signal;
+#X text 12 25 NAME sig~;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 98 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 snapshot~;
+#X text 8 2 [sig~] 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 text 98 445 float;
+#X text 98 474 list;
+#X obj 78 511 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 492 3 sig~;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/sig~ -text
+pdpedia: sig~;
+#X obj 245 228 snapshot~;
+#X floatatom 245 253 0 0 0 0 - - -;
+#X floatatom 165 106 0 0 0 0 - - -;
+#X obj 245 178 loadbang;
+#X obj 245 202 metro 200;
+#X text 195 105 <- Scroll to set value;
+#X text 168 445 - a float to the inlet of [sig~] will be converted
+to an audio signal.;
+#X text 98 510 signal;
+#X obj 165 131 sig~;
+#X text 11 23 convert numbers to audio signal;
+#X text 168 474 - a list will be truncated to the first element.;
+#X text 113 280 In this example \, the [sig~] object converts numbers
+to an audio signal \, which the [snapshot~] converts back again.;
+#X text 168 510 - the outgoing signal.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 15 0 16 0;
+#X connect 15 0 16 0;
+#X connect 17 0 23 0;
+#X connect 18 0 19 0;
+#X connect 19 0 15 0;
+#X connect 23 0 15 0;
diff --git a/doc/pddp/sin-help.pd b/doc/pddp/sin-help.pd
new file mode 100644
index 00000000..9721c937
--- /dev/null
+++ b/doc/pddp/sin-help.pd
@@ -0,0 +1,97 @@
+#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 sin 3 12 0 18 -204280
+-1 0;
+#X obj 0 438 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control trigonometry;
+#X text 12 85 DESCRIPTION sine function;
+#X text 12 25 NAME sin;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 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 78 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 23 43 cos;
+#X obj 49 43 tan;
+#X obj 76 43 atan;
+#X obj 109 43 atan2;
+#X obj 149 43 exp;
+#X obj 177 43 log;
+#X obj 204 43 abs;
+#X obj 232 43 sqrt;
+#X obj 267 43 pow;
+#X obj 57 76 cos~;
+#X obj 89 76 osc~;
+#X obj 23 76 expr;
+#X text 8 2 [sin] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 447 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 446 float;
+#X text 98 466 list;
+#X text 98 511 float;
+#X obj 78 512 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 493 3 sin;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/sin -text
+pdpedia: sin;
+#X floatatom 396 171 0 0 0 0 - - -;
+#X floatatom 303 172 0 0 0 0 - - -;
+#X obj 210 137 sin;
+#X floatatom 87 92 0 0 0 0 - - -;
+#X floatatom 210 171 0 0 0 0 - - -;
+#X obj 87 132 * 6.28319;
+#X obj 87 112 / 360;
+#X obj 303 138 cos;
+#X obj 396 137 tan;
+#X text 150 132 2 x Pi;
+#X floatatom 87 152 0 0 0 0 - - -;
+#X text 150 152 Radian;
+#X obj 87 172 s radians;
+#X obj 210 111 r radians;
+#X text 84 209 Trigonometry functions take input in Radians. To find
+a radian \, simply divide a number by 360 (to make it a fraction of
+a circle) and multiply it by 2(Pi) where Pi is equal to approximately
+3.14159265.;
+#X text 83 296 [tan] will produce a number which represents the tangent
+of an angle.;
+#X text 83 270 [sin] and [cos] will return numbers between -1 and 1:
+the sine and cosine of a number repectively.;
+#X text 11 23 sine function;
+#X text 168 466 - a list will be truncated \, and the first element
+will be used as input.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 18 0 20 0;
+#X connect 19 0 22 0;
+#X connect 21 0 26 0;
+#X connect 22 0 21 0;
+#X connect 23 0 17 0;
+#X connect 24 0 16 0;
+#X connect 26 0 28 0;
+#X connect 29 0 18 0;
+#X connect 29 0 23 0;
+#X connect 29 0 24 0;
diff --git a/doc/pddp/snapshot~-help.pd b/doc/pddp/snapshot~-help.pd
new file mode 100644
index 00000000..16a2a669
--- /dev/null
+++ b/doc/pddp/snapshot~-help.pd
@@ -0,0 +1,86 @@
+#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 snapshot~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 417 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION convert a signal to a number on demand;
+#X text 12 25 NAME snapshot~;
+#X text 12 145 OUTLET_0 float;
+#X text 12 125 INLET_0 bang signal set;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 500 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 542 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 569 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 546 (none);
+#N canvas 104 479 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 [snapshot~] Related Objects;
+#X obj 22 43 sig~;
+#X obj 63 43 vsnapshot~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 426 cnv 17 3 65 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 508 float;
+#X obj 78 509 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 465 3 snapshot~;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/snapshot~
+-text pdpedia: snapshot~;
+#X obj 91 307 snapshot~;
+#X floatatom 91 330 0 0 0 0 - - -;
+#X msg 102 255 bang;
+#X obj 91 230 osc~ 0.1;
+#X text 90 209 0.1 Hz cosine;
+#X msg 107 279 set 5;
+#X text 98 425 signal;
+#X text 11 23 convert a signal to a number on demand;
+#X text 98 445 bang;
+#X text 98 465 set;
+#X text 168 465 - the "set" message \, followed by a value \, sets
+[snapshot~] to the specified value (which is reset the next DSP block).
+;
+#X text 168 508 - upon receiving a bang to its inlet \, [snapshot~]
+outputs a value.;
+#X text 143 255 <- Click to take a "snapshot" of the signal;
+#X text 168 425 - the incoming signal.;
+#X text 168 445 - a bang takes one snapshot of the incoming signal.
+;
+#X text 18 109 In the example below \, a [snapshot~] object prints
+out the values of a low frequency cosine wave every time it is sent
+a bang message.;
+#X text 18 152 A "set" message is provided for the (rare) situations
+where you might make a known change to the signal input \, and then
+read snapshot's value before any ensuing signal computation.;
+#X text 18 57 The [snapshot~] object takes a signal and converts it
+to a control value whenever it receives a bang in its left outlet.
+This object is particularly useful for monitoring outputs.;
+#X text 156 329 This output updates each time bang is clicked above.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 99 572 pddp/pddplink ../3.audio.examples/C06.signal.to.control.pd
+-text doc/3.audio.examples/C06.signal.to.control.pd;
+#X connect 14 0 15 0;
+#X connect 14 0 15 0;
+#X connect 16 0 14 0;
+#X connect 17 0 14 0;
+#X connect 19 0 14 0;
diff --git a/doc/pddp/soundfiler-help.pd b/doc/pddp/soundfiler-help.pd
new file mode 100644
index 00000000..e4b71b3b
--- /dev/null
+++ b/doc/pddp/soundfiler-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 soundfiler 3 12
+0 18 -204280 -1 0;
+#X obj 0 387 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 247 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION read and write soundfiles to arrays;
+#X text 12 25 NAME soundfiler;
+#X text 12 125 INLET_0 read write;
+#X text 12 145 OUTLET_0 float;
+#X text 12 45 KEYWORDS control array filesystem;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 487 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 529 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 554 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 533 (none);
+#N canvas 76 485 428 106 Related_objects 0;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [soundfiler] Related Objects;
+#X obj 22 43 tabwrite~;
+#X obj 22 69 tabread4~;
+#X obj 88 43 tabplay~;
+#X obj 143 69 writesf~;
+#X obj 87 69 readsf~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 396 cnv 17 3 80 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 495 float;
+#X obj 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 457 3 soundfiler;
+#X obj 430 20 pddp/pddplink http://wiki.puredata.info/en/soundfiler
+-text pdpedia: soundfiler;
+#X text 11 23 read and write soundfiles to arrays;
+#X text 98 395 read;
+#X text 98 412 write;
+#X text 168 495 - the output specifies the total number of samples
+that have been read or written.;
+#X obj 20 293 soundfiler;
+#X floatatom 20 317 0 0 0 0 - - -;
+#X text 231 137 read a file;
+#X text 287 159 ...optionally resize;
+#X text 322 224 write a file;
+#X text 358 268 write stereo;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array sf-array1 77971 float 0;
+#X coords 0 1 77971 -1 130 70 1;
+#X restore 135 306 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array sf-array2 77971 float 0;
+#X coords 0 1 77971 -1 130 70 1;
+#X restore 288 306 graph;
+#N canvas 110 93 428 434 flags 0;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 19 37 When reading you can leave soundfiler to figure out which
+of the three known soundfile formats the file belongs to or override
+all header information using the "-raw" flag.;
+#X text 136 79 Flags for reading:;
+#X text 45 99 -skip <sample frames to skip in file>;
+#X text 45 159 -raw <headersize> <channels> <bytespersample> <endianness>
+;
+#X text 64 177 This causes all header information to be ignored. Endianness
+is "l" ("little") for Intel machines or "b" ("big") for Macintoshes
+and SGIs. You can give "n" (natural) to take the byte order your machine
+prefers.;
+#X text 45 119 -resize;
+#X text 45 139 -maxsize <maximum number of samples we can resize to>
+;
+#X text 19 230 Flags for writing:;
+#X text 37 251 -wave \, -nextstep \, -aiff;
+#X text 37 271 -big \, -little (nextstep only!);
+#X text 37 291 -skip <number of sample frames to skip in array>;
+#X text 37 311 -nframes <maximum number to write>;
+#X text 37 351 -normalize;
+#X text 37 331 -bytes <2 \, 3 \, or 4>;
+#X text 17 400 The number of channels is limited to 64;
+#X text 37 371 -rate <sample rate>;
+#X text 7 1 [soundfiler] Flags;
+#X restore 172 459 pd flags;
+#X text 168 412 - write a soundfile.;
+#X text 169 428 The "read" and "write" messages accept flags. See the
+subpatch below for details:;
+#X msg 20 138 read ../sound/bell.aiff sf-array2;
+#X msg 20 161 read -resize ../sound/bell.aiff sf-array2;
+#X msg 20 185 read -raw 128 2 2 b ../sound/bell.aiff sf-array1 sf-array2
+;
+#X msg 20 214 write -aiff /tmp/foo1 sf-array2;
+#X msg 20 238 write -wave -nframes 10000 /tmp/foo2 sf-array2;
+#X msg 20 268 write -nextstep -bytes 4 /tmp/foo3 sf-array1 sf-array2
+;
+#X text 399 197 overriding everything;
+#X text 398 183 ...or even;
+#X text 168 395 - read a soundfile.;
+#X text 18 47 The [soundfiler] object reads and writes floating point
+arrays to binary soundfiles which may contain 2 or 3 byte fixed point
+or 4 byte floating point samples in wave \, aiff \, or next formats
+(no floating point aiff \, though.). The number of channels of the
+soundfile need not match the number of arrays given (extras are dropped
+and unsupplied channels are zeroed out).;
+#X text 98 558 Note: The number of channels is limited to 64 .;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 575 pddp/pddplink all_about_arrays.pd;
+#X connect 18 0 19 0;
+#X connect 29 0 18 0;
+#X connect 30 0 18 0;
+#X connect 31 0 18 0;
+#X connect 32 0 18 0;
+#X connect 33 0 18 0;
+#X connect 34 0 18 0;
diff --git a/doc/pddp/spigot-help.pd b/doc/pddp/spigot-help.pd
index 7f912580..11e83eb1 100644
--- a/doc/pddp/spigot-help.pd
+++ b/doc/pddp/spigot-help.pd
@@ -1,137 +1,192 @@
-#N canvas 94 22 874 659 10;
-#X msg 8 96 0.5 1000;
-#X floatatom 38 160 1 0 0 0 - - -;
-#X obj 8 177 spigot;
-#X obj 7 198 print;
-#X msg 20 136 walk the cat;
-#X msg 13 116 bang;
-#X obj 27 11 spigot;
-#X text 75 11 - pass or block messages;
-#X text 51 160 control: nonzero to pass messages \, zero to stop them
+#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 spigot 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 50 243 494 364 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.38-4. It was edited by Dave Sabine and Hans-Christoph Steiner
+as part of a project called pddp proposed by Krzysztof Czaja to build
+comprehensive documentation for Pd. Revised by Jonathan Wilkes to conform
+to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION pass or block messages;
+#X text 12 25 NAME spigot;
+#X text 12 125 INLET_0 anything;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 anything;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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 443 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 538 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 72 359 428 230 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 [spigot] Related Objects;
+#X text 20 38 Externals;
+#X text 19 85 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 126 The best places to find information about Pd's libraries
+is:;
+#X text 19 146 www.puredata.org and click on "Downloads" then "Software"
;
-#X text 4 294 USING [SPIGOT] TO CREATE A GATE.;
-#X text 14 312 Unlike its closest cousin MAX \, Pd does not have a
-native [gate] object. There are other Pd libraries which include gates
-for both audio and numerical data \, but similar routines can be built
-in Pd using [spigot]. The example below shows a two-way gate using
-two [spigots] and the [expr] object.;
-#X obj 87 505 spigot;
-#X floatatom 88 459 1 0 0 0 - - -;
-#X text 105 458 controls: open and close the gates.;
-#X floatatom 23 527 5 0 0 0 - - -;
-#X floatatom 87 527 5 0 0 0 - - -;
-#X obj 4 400 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X text 19 161 or;
+#X text 19 176 iem.kug.ac.at/pdb/;
+#X obj 21 58 pddp/helplink cyclone/gate;
+#X restore 102 598 pd Related_objects;
+#X obj 78 304 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 398 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 345 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 344 float;
+#X obj 481 3 spigot;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/spigot -text
+pdpedia: spigot;
+#X text 11 23 pass or block messages;
+#X msg 101 111 0.5 1000;
+#X floatatom 134 177 1 0 0 0 - - -;
+#X obj 101 197 spigot;
+#X obj 101 218 print;
+#X msg 120 155 walk the cat;
+#X msg 111 133 bang;
+#X text 147 177 control: nonzero to pass messages \, zero to stop them
;
-#X obj 7 418 metro 200;
-#X obj 4 439 f;
-#X obj 31 439 + 1;
-#X obj 118 484 expr 1-$f1;
-#X text 24 398 Click to start sending info through the gates.;
-#X obj 88 439 loadbang;
-#X text 8 38 [spigot] passes messages from its left inlet to its outlet
+#X text 18 52 [spigot] passes messages from its left inlet to its outlet
\, as long as a nonzero number is sent to its right inlet. When its
right inlet gets zero \, incoming messages are "blocked" (i.e. ignored).
;
-#X text 6 231 [spigot] works essentially like a doorway. When the door
-is open \, messages can pass through. When the door is closed \, messages
-are ignored. By default \, the door is always closed!;
-#X obj 23 505 spigot;
-#X text 5 547 In the example above \, the magic is created by the [expr]
-object which performs a simple calculation using the incoming number
-(1 or 0). Note that the figure "$f1" is a variable which assumes the
-value of the incoming number.;
-#X text 447 17 CREATION ARGUMENTS?;
-#X obj 567 98 spigot 0;
-#X text 434 216 [SPIGOT] FOR AUDIO SIGNALS?;
-#X text 447 233 [spigot] does not work with audio signals. The data
-types which are accepted by this object are floats \, symbols \, lists
-\, bangs \, anythings and pointers. However \, audio signals require
-a completely different treatment.;
-#X text 444 285 Pd does not have a [spigot] for audio signals \, but
+#X text 18 242 [spigot] works essentially like a doorway. When the
+door is open \, messages can pass through. When the door is closed
+\, messages are ignored. By default \, the door is always closed!;
+#N canvas 96 273 428 291 using_spigot_to_create_a_gate 0;
+#X text 20 38 Unlike its closest cousin MAX \, Pd does not have a native
+[gate] object. There are other Pd libraries which include gates for
+both audio and numerical data \, but similar routines can be built
+in Pd using [spigot]. The example below shows a two-way gate using
+two [spigots] and the [expr] object.;
+#X floatatom 121 188 1 0 0 0 - - -;
+#X text 138 187 controls: open and close the gates.;
+#X floatatom 24 262 5 0 0 0 - - -;
+#X floatatom 76 262 5 0 0 0 - - -;
+#X obj 24 129 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 24 149 metro 200;
+#X obj 24 171 f;
+#X obj 51 171 + 1;
+#X text 44 127 Click to start sending info through the gates.;
+#X obj 24 240 spigot;
+#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 [spigot] Using [spigot] to Create a Gate;
+#X obj 76 240 spigot 1;
+#X obj 121 218 == 0;
+#X connect 1 0 10 1;
+#X connect 1 0 14 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 10 0;
+#X connect 7 0 13 0;
+#X connect 8 0 7 1;
+#X connect 10 0 3 0;
+#X connect 13 0 4 0;
+#X connect 14 0 13 1;
+#X restore 102 568 pd using_spigot_to_create_a_gate;
+#N canvas 61 206 428 334 spigot_for_audio_signals 0;
+#X text 20 38 [spigot] does not work with audio signals. The data types
+which are accepted by this object are floats \, symbols \, lists \,
+bangs \, anythings and pointers. However \, audio signals require a
+completely different treatment.;
+#X text 21 100 Pd does not have a [spigot] for audio signals \, but
the same effect can be created using the following structure:;
-#X obj 458 332 osc~ 800;
-#X obj 426 15 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 426 596 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 458 389 *~;
-#X floatatom 471 372 1 0 0 0 - - -;
-#X obj 440 467 env~;
-#X floatatom 440 488 5 0 0 0 - - -;
-#X msg 598 342 \; pd dsp \$1 \;;
-#X obj 598 323 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 485 486 dac~;
-#X obj 485 466 *~ 0.05;
-#X text 615 324 Turn on audio computation first.;
-#X text 489 377 Here is the [spigot].;
-#X text 488 390 When "0" \, audio signal;
-#X text 487 406 is effectively blocked.;
-#X text 488 420 When "1" \, audio signal is;
-#X text 488 435 not effected in any way.;
-#X text 446 518 RELATED OBJECTS;
-#N canvas 0 22 454 304 related_objects_from_other_libraries 0;
-#X obj 40 36 gate;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.puredata.org and click on "Downloads" then "Software"
+#X obj 24 147 osc~ 800;
+#X obj 24 217 *~;
+#X floatatom 39 196 1 0 0 0 - - -;
+#X obj 24 279 env~;
+#X floatatom 24 300 5 0 0 0 - - -;
+#X obj 69 299 dac~;
+#X obj 69 279 *~ 0.05;
+#X text 79 168 Here is the [spigot].;
+#X text 80 183 When "0" \, audio signal;
+#X text 79 198 is effectively blocked.;
+#X text 80 213 When "1" \, audio signal is;
+#X text 80 228 not effected in any way.;
+#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 [spigot] Is There a [spigot] for Audio Signals?;
+#X obj 287 145 pddp/dsp-reminder;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 3 0 8 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 8 0 7 0;
+#X restore 102 547 pd spigot_for_audio_signals;
+#X text 98 303 anything;
+#X text 167 344 - "0" blocks all incoming messages to the left inlet.
+"1" (or any nonzero number) passes the incoming message to the outlet.
;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X restore 459 539 pd related_objects_from_other_libraries;
-#X obj 456 188 spigot cat;
-#X obj 534 188 spigot dog;
-#X text 454 33 [spigot] only accepts one numerical creation argument:
+#X text 98 397 anything;
+#X text 168 397 - if the last value received at the right inlet was
+nonzero \, [spigot] passes the message from the first inlet to its
+outlet.;
+#X text 168 457 - By default \, the left inlet of [spigot] is initially
+closed. A one (or any nonzero number) as a creation argument will cause
+the spigot to be open initially. See the subpatch below for an example:
+;
+#X text 168 303 - [spigot] takes the input to the left inlet and either
+ignores it or passes it through to the outlet \, depending on the value
+at the right inlet.;
+#N canvas 74 291 428 213 creation_args 0;
+#X obj 146 108 spigot 0;
+#X text 21 38 [spigot] only accepts one numerical creation argument:
a one or a zero. At creation time the [spigot] is "closed". With a
one \, its defaults to open.;
-#X obj 635 98 spigot 1;
-#X obj 579 71 bng 15 250 50 0 empty empty empty 0 -6 0 8 -225271 -1
+#X obj 214 108 spigot 1;
+#X obj 146 81 bng 15 250 50 0 empty empty empty 0 -6 0 8 -225271 -1
-1;
-#X obj 511 98 spigot;
-#X obj 511 116 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 90 108 spigot;
+#X obj 90 135 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 567 117 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 146 135 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 635 117 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 214 135 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X text 451 576 This document was updated for Pd version 0.38-4. It
-was edited 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 455 143 [spigot] used to accept any symbol \, but all of these
-are meaningless and have no effect on the operation of the object.
-This was removed in Pd 0.38-3;
-#X connect 0 0 2 0;
-#X connect 1 0 2 1;
-#X connect 2 0 3 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 11 0 15 0;
-#X connect 12 0 20 0;
-#X connect 12 0 25 1;
-#X connect 16 0 17 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 [spigot] Creation Arguments;
+#X text 20 158 [spigot] used to accept any symbol as a creation argument
+\, but all of these are meaningless and have no effect on the operation
+of the object. This was removed in Pd 0.38-3;
+#X connect 0 0 6 0;
+#X connect 2 0 7 0;
+#X connect 3 0 0 0;
+#X connect 3 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X restore 171 510 pd creation_args;
+#X text 90 457 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 296 548 pddp/pddplink ../2.control.examples/18.conditional.pd
+-text doc/2.control.examples/18.conditional.pd;
+#X connect 15 0 17 0;
+#X connect 16 0 17 1;
#X connect 17 0 18 0;
-#X connect 18 0 19 0;
-#X connect 18 0 11 0;
-#X connect 18 0 25 0;
-#X connect 19 0 18 1;
-#X connect 20 0 11 1;
-#X connect 22 0 12 0;
-#X connect 25 0 14 0;
-#X connect 28 0 58 0;
-#X connect 32 0 35 0;
-#X connect 33 0 34 0;
-#X connect 35 0 37 0;
-#X connect 35 0 42 0;
-#X connect 36 0 35 1;
-#X connect 37 0 38 0;
-#X connect 40 0 39 0;
-#X connect 42 0 41 0;
-#X connect 54 0 59 0;
-#X connect 55 0 28 0;
-#X connect 55 0 56 0;
-#X connect 55 0 54 0;
-#X connect 56 0 57 0;
+#X connect 19 0 17 0;
+#X connect 20 0 17 0;
diff --git a/doc/pddp/sqrt-help.pd b/doc/pddp/sqrt-help.pd
new file mode 100644
index 00000000..ac847d4d
--- /dev/null
+++ b/doc/pddp/sqrt-help.pd
@@ -0,0 +1,72 @@
+#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 442 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control orphan;
+#X text 12 85 DESCRIPTION square root;
+#X text 12 25 NAME sqrt;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 541 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 545 (none);
+#N canvas 110 477 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 272 43 pow;
+#X obj 57 76 cos~;
+#X obj 89 76 osc~;
+#X obj 23 76 expr;
+#X obj 23 43 sin;
+#X obj 49 43 cos;
+#X obj 76 43 tan;
+#X obj 109 43 atan;
+#X obj 144 43 atan2;
+#X obj 182 43 exp;
+#X obj 209 43 log;
+#X text 8 2 [sqrt] Related Objects;
+#X obj 237 43 abs;
+#X restore 102 597 pd Related_objects;
+#X obj 78 451 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 450 float;
+#X text 98 470 list;
+#X text 98 512 float;
+#X obj 78 513 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 239 217 0 0 0 0 - - -;
+#X floatatom 239 160 0 0 0 0 - - -;
+#X obj 493 3 sqrt;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/sqrt -text
+pdpedia: sqrt;
+#X obj 239 190 sqrt;
+#X text 115 249 [sqrt] will output the square root of a number. Negative
+numbers are ignored.;
+#X text 11 23 square root;
+#X text 168 470 - a list will be truncated \, and the first element
+will be used as input.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 15 0 18 0;
+#X connect 18 0 14 0;
diff --git a/doc/pddp/sqrt~-help.pd b/doc/pddp/sqrt~-help.pd
new file mode 100644
index 00000000..1d3991ab
--- /dev/null
+++ b/doc/pddp/sqrt~-help.pd
@@ -0,0 +1,83 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION signal square root;
+#X text 12 25 NAME sqrt~;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 125 INLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/stripnote-help.pd b/doc/pddp/stripnote-help.pd
new file mode 100644
index 00000000..63cbd07d
--- /dev/null
+++ b/doc/pddp/stripnote-help.pd
@@ -0,0 +1,114 @@
+#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 stripnote 3 12 0
+18 -204280 -1 0;
+#X obj 0 358 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 242 494 366 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 285 RELEASE_VERSION 0.41.4;
+#X text 12 265 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Updated for Pd version 0.28. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION send note-on messages and schedule note-off
+for later;
+#X text 12 25 NAME stripnote;
+#X text 12 125 INLET_0 float list;
+#X text 12 165 OUTLET_0 float;
+#X text 12 145 INLET_1 float;
+#X text 12 185 OUTLET_1 float;
+#X restore 500 597 pd META;
+#X obj 0 467 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 107 153 428 433 Related_objects 0;
+#X obj 1 2 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 3 [stripnote] Related Objects;
+#X obj 74 81 ctlin;
+#X obj 217 81 pgmin;
+#X obj 24 81 bendin;
+#X obj 79 108 touchin;
+#X obj 261 81 polytouchin;
+#X obj 118 81 midiin;
+#X obj 23 108 sysexin;
+#X obj 179 168 noteout;
+#X obj 76 168 ctlout;
+#X obj 24 168 bendout;
+#X obj 366 168 touchout;
+#X obj 280 168 polytouchout;
+#X obj 123 168 midiout;
+#X obj 231 168 pgmout;
+#X obj 24 222 makenote;
+#X text 21 199 MIDI note construction:;
+#X text 21 141 MIDI output:;
+#X text 21 58 MIDI input:;
+#X obj 184 222 stripnote;
+#X obj 168 81 notein;
+#X text 181 199 MIDI note deconstruction:;
+#X obj 24 34 makenote;
+#X text 22 275 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 21 354 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 22 256 Externals;
+#X obj 22 305 pddp/helplink maxlib/pitch;
+#X obj 22 320 pddp/helplink maxlib/score;
+#X obj 22 335 pddp/helplink maxlib/chord;
+#X obj 22 370 pddp/helplink cyclone/midiformat;
+#X obj 22 385 pddp/helplink cyclone/midiparse;
+#X obj 22 400 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X obj 78 367 cnv 17 3 65 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 366 float;
+#X text 98 406 list;
+#X text 98 476 float;
+#X obj 78 477 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 439 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 438 float;
+#X obj 466 3 stripnote;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/stripnote
+-text pdpedia: stripnote;
+#X text 130 227 Stripnote takes note-off (zero-velocity) messages out
+of a stream of MIDI-style note message and passes the others through
+unchanged.;
+#X msg 134 127 23 0;
+#X obj 134 202 print x1;
+#X obj 191 202 print x2;
+#X obj 134 166 stripnote;
+#X text 168 366 - MIDI pitch value. The value will pass unchanged to
+the left outlet if the current value of the right inlet is non-zero.
+;
+#X msg 174 127 34.5 67.8;
+#X text 167 438 - a float to the right inlet is stored for later use.
+;
+#X text 168 476 - the MIDI pitch value received at the left inlet will
+pass unchanged if the value of the right inlet is non-zero.;
+#X text 98 506 float;
+#X obj 78 507 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 168 506 - the velocity will pass unchanged if the value of
+the right inlet is non-zero.;
+#X text 11 23 send note-on messages and schedule note-off for later
+;
+#X text 168 406 - a (pitch \, velocity) pair is distributed to the
+two inlets. Lists with more than two elements will be truncated.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 19 0 22 0;
+#X connect 22 0 20 0;
+#X connect 22 1 21 0;
+#X connect 24 0 22 0;
diff --git a/doc/pddp/struct-help.pd b/doc/pddp/struct-help.pd
new file mode 100644
index 00000000..d85f1b5b
--- /dev/null
+++ b/doc/pddp/struct-help.pd
@@ -0,0 +1,162 @@
+#N struct struct-1 float x float y symbol dog array weasel struct-2
+;
+#N struct struct-2 float y;
+#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 struct 3 12 0 18
+-204280 -1 0;
+#X obj 0 189 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 58 228 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure;
+#X text 12 85 DESCRIPTION declare the fields in a data structure;
+#X text 12 25 NAME struct;
+#X text 12 125 OUTLET_0 click change select deselect displace;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 214 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 375 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 532 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 110 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 [struct] Related Objects;
+#X obj 22 43 filledpolygon;
+#X obj 112 43 drawpolygon;
+#X obj 193 43 plot;
+#X obj 232 43 set;
+#X obj 262 43 get;
+#X obj 293 43 element;
+#X obj 22 73 getsize;
+#X obj 82 73 setsize;
+#X obj 142 73 pointer;
+#X obj 202 73 append;
+#X obj 254 73 sublist;
+#X restore 102 597 pd Related_objects;
+#X obj 78 296 cnv 17 3 72 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 483 3 struct;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/struct -text
+pdpedia: struct;
+#X text 11 23 declare the fields in a data structure;
+#X text 98 193 (none);
+#X text 98 295 click;
+#X text 98 325 select;
+#X text 98 310 change;
+#X text 98 355 displace;
+#X text 98 340 deselect;
+#X text 149 461 float;
+#X text 149 476 symbol;
+#X text 149 491 array;
+#N canvas 106 165 428 349 help-template1 0;
+#X obj 23 43 struct struct-1 float x float y symbol dog array weasel
+struct-2;
+#X text 20 182 This just displays a red square to visualize the data
+structure.;
+#X obj 23 159 filledpolygon 900 0 1 0 0 40 0 40 40 0 40;
+#X obj 23 226 plot weasel 0 1 0 0 10;
+#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 [struct] Data Stucture Template;
+#X text 21 247 Here we plot the array "weasel" \, which gets displayed
+on top of the red square;
+#X obj 23 78 print;
+#X text 20 99 In this example \, the "struct-1" structure is defined
+in which "x" and "y" are "floats" \, i.e. \, numbers \, but "dog" is
+a symbol and "weasel" is an array of objects of the data structure
+"struct-2".;
+#X text 21 286 To learn about z-ordering with data structures \, open
+the abstraction below:;
+#X obj 24 321 z_ordering_in_data_structures;
+#X connect 0 0 7 0;
+#X restore 101 96 pd help-template1;
+#N canvas 105 189 428 125 help-template2 0;
+#X obj 23 43 struct struct-2 float y;
+#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 [struct] Data Structure Template;
+#X text 21 67 Here is a data structure which specifies only the floating
+point "y". It's used for the elements of the array shown in the other
+template.;
+#X restore 101 118 pd help-template2;
+#N canvas 59 240 428 307 struct-help-data 0;
+#X scalar struct-1 95 57 symbol \; 17 \; 38 \; 2 \; 39 \; 14 \; \;
+;
+#X scalar struct-1 164 57 symbol \; 17 \; 1 \; 40 \; 2 \; 14 \; \;
+;
+#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 [struct] Related Objects;
+#X scalar struct-1 239 57 symbol \; 17 \; 38 \; 2 \; 39 \; 14 \; \;
+;
+#X text 19 259 You can also right-click on each square and choose "Properties"
+in both runmode and editmode to see the values associated with each
+scalar.;
+#X text 20 179 In editmode \, you can click on the squares to move
+them. Like other objects in Pd \, you can select multiple scalars and
+move them together (notice the blue bounding box when you select them).
+A [print] object is connected to the outlet of the corresponding [struct]
+for these boxes \, so when you move them with the mouse messages will
+print to the console.;
+#X text 20 117 The three squares above are scalars that are defined
+by the template "help-template1". The zigzag lines are arrays \, the
+elements of which are defined by the template "help-template2". In
+runmode you can click and drag each element to change its value.;
+#X restore 101 168 pd struct-help-data;
+#X text 98 138 To view instances of these data structures \, click
+the patch below:;
+#X text 98 41 The [struct] object is typically put one to a subpatch
+\, and may be accompanied by drawing instructions that define how the
+data will be visualized. Two data structures- "struct-1" and "struct-2"-
+are defined below in subpatches:;
+#X text 169 393 - the name of the struct;
+#N canvas 80 458 429 105 struct_names 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 39 You can't use "float" as a struct name because Pd has
+a hidden data structure named "float" which it uses for tables and
+"Put menu arrays".;
+#X text 8 2 [struct] Struct Names;
+#X restore 102 541 pd struct_names;
+#X text 172 295 - clicking the object with the mouse in run mode.;
+#X text 172 310 - changing the value of a field in run mode.;
+#X text 172 325 - selecting the object in edit mode.;
+#X text 172 340 - deselecting an object in edit mode.;
+#X text 172 355 - moving a selected object in edit mode.;
+#X text 188 461 - "float foo";
+#X text 188 476 - "symbol foo";
+#X text 188 491 - "array foo bar" \, where "bar" is the name of another
+data structure to be used as a template for elements of the array.
+;
+#X text 99 217 When a scalar is moved or edited with the mouse \, data
+is sent to the outlet of the respective [struct] object. This data
+consists of: a selector that describes the mouse action that was performed
+\, a pointer to the scalar \, and-- optionally-- a number (usually
+an x-coordinate). The selectors below correspond to the following mouse
+actions:;
+#X text 169 411 - all subsequent arguments are used to declare fields.
+Fields may be one of three types-- float \, symbol \, or array. To
+create the field "foo" \, use the syntax below for each type:;
+#X text 81 393 1) symbol atom;
+#X text 81 411 n) symbol atom;
+#X obj 99 560 pddp/pddplink scalar-help.pd;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 576 pddp/pddplink all_about_arrays.pd;
+#X obj 257 561 pddp/pddplink ../4.data.structures/06.file.pd -text
+doc/4.data.structures/06.file.pd;
+#X obj 257 576 pddp/pddplink ../4.data.structures/08.selection.pd -text
+doc/4.data.structures/08.selection.pd;
diff --git a/doc/pddp/sublist-help.pd b/doc/pddp/sublist-help.pd
index 419db0e0..0d45bbcd 100644
--- a/doc/pddp/sublist-help.pd
+++ b/doc/pddp/sublist-help.pd
@@ -1,14 +1,66 @@
-#N canvas 28 72 733 292 12;
-#X text 407 254 updated for Pd version 0.32;
-#X obj 21 10 sublist;
-#X text 99 9 -- get a list from a field of a scalar;
-#X text 30 49 Don't try this yet -- it's untested.;
-#X text 37 87 "sublist" will take as creation arguments a template
+#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 sublist 3 12 0 18
+-204280 -1 0;
+#X obj 0 439 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.32. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control data_structure;
+#X text 12 85 DESCRIPTION get a list from a field of a scalar;
+#X text 12 25 NAME sublist;
+#X text 12 125 INLET_0 pointer;
+#X text 12 145 OUTLET_0 pointer;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 476 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 569 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 76 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 [sublist] Related Objects;
+#X obj 14 38 get;
+#X obj 46 38 set;
+#X obj 136 38 getsize;
+#X obj 193 38 setsize;
+#X obj 121 63 element;
+#X obj 13 64 sublist;
+#X obj 79 38 pointer;
+#X obj 69 63 struct;
+#X restore 102 597 pd Related_objects;
+#X obj 78 448 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 485 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 473 3 sublist;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/sublist -text
+pdpedia: sublist;
+#X text 96 170 Don't try this yet -- it's untested.;
+#X text 103 208 "sublist" will take as creation arguments a template
name and a field name \; its one input takes a pointer. If you send
a pointer (which should agree with the template name) \, "sublist"
will output the field (which should be of type "list".) The output
is in fact a pointer to the head of the sublist.;
-#X text 27 226 for more info \, open this patch:;
-#X text 363 226 Miller's help patch:;
-#X obj 43 250 all_about_data_structures;
-#X obj 564 226 help-sublist;
+#X text 98 447 pointer;
+#X text 98 484 pointer;
+#X text 11 23 get a list from a field of a scalar;
+#X text 168 530 - template name.;
+#X text 168 545 - field name.;
+#X text 80 530 1) symbol;
+#X text 80 545 2) symbol;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 573 pddp/pddplink scalar-help.pd;
diff --git a/doc/pddp/swap-help.pd b/doc/pddp/swap-help.pd
index b5d83c04..b6b106f4 100644
--- a/doc/pddp/swap-help.pd
+++ b/doc/pddp/swap-help.pd
@@ -1,185 +1,234 @@
-#N canvas 0 0 625 631 12;
-#X obj 104 572 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 8 cnv 15 90 586 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 37 47 INLETS:;
-#X obj 54 18 swap;
-#X text 108 18 - SWAP TWO NUMBERS \, RESPECTING RIGHT-TO-LEFT ORDER
-;
-#X obj 285 470 swap;
-#X floatatom 175 429 5 0 0 0 - - -;
-#X floatatom 372 437 5 0 0 0 - - -;
-#X floatatom 312 497 5 0 0 0 - - -;
-#X floatatom 263 497 5 0 0 0 - - -;
-#X msg 243 427 42 7;
-#X obj 119 438 bng 15 250 50 0 empty empty "bang" 0 -6 0 8 -262144
--1 -1;
-#X msg 290 415 42 7 3 4;
-#X floatatom 506 491 5 0 0 0 - - -;
-#X floatatom 454 490 5 0 0 0 - - -;
-#X msg 454 436 bang;
-#X obj 454 460 swap 12;
-#X text 37 62 - LEFT:;
-#X text 28 263 - RIGHT:;
-#X text 104 63 Float - A float at the left inlet will send the number
-to the right outlet and then send the number at the right inlet to
-the left outlet.;
-#X text 104 117 Bang - A bang at the left inlet will force [swap] to
-send its values to the outlets \, in reverse order. The value from
-the left inlet will be sent to the right outlet then the value at the
-right inlet will be sent out the left outlet.;
-#X text 104 188 List - A list at the left inlet will update the values
-of both of [swap]'s inlets and send the numbers to the outlets in reverse
-order. Note that lists of 3 or more elements will be truncated.;
-#X text 104 264 Float - A float at the right inlet is stored for later
-use. It will be sent to the left outlet when a float or bang is received
-in the left inlet.;
-#X text 104 317 One - [swap] accepts a single float as a creation argument
-which initializes the first value to be sent out the left outlet.;
-#X text 104 370 Two - outputs the float values of the two inlets in
-reverse order when a float \, list \, or bang is received at the left
-inlet.;
-#X text 371 418 float;
-#X text 174 410 float;
-#X text 244 409 list;
-#X text 428 510 creation argument;
-#N canvas 59 0 397 246 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 23 92 Externals and other object libraries;
-#X obj 42 48 pack;
-#X obj 104 48 unpack;
-#X text 30 126 [split];
-#X restore 104 522 pd Related_Objects;
-#N canvas 60 0 581 620 More_Info 0;
-#X msg 38 54 42 7;
-#X obj 38 79 swap;
-#X floatatom 38 105 5 0 0 0 - - -;
-#X floatatom 97 105 5 0 0 0 - - -;
-#X obj 38 129 pack f f;
-#X obj 38 153 print;
-#N canvas 154 0 649 595 millers_note-off_parser 0;
-#X obj 27 18 notein;
-#X text 103 14 [notein] is an object which receives incoming MIDI data
-from a MIDI instrument. The three outlets are PITCH \, VELOCITY \,
-and MIDI CHANNEL from left to right. It is important to note however
-that the data is outputted from right to left. Which means that the
-first piece of information to be sent out the object is the MIDI CHANNEL.
-;
-#X obj 26 117 swap;
-#X obj 26 156 pack;
-#X obj 26 200 route 0;
-#X floatatom 26 228 5 0 0 0 - - -;
-#X text 102 117 Here \, [swap] is used to store the VELOCITY until
-the PITCH information comes from [notein]. The next step will pack
-the two together...but we have to ensure that [pack] receives the two
-numbers in the correct order: PITCH first \, then VELOCITY. This way
-\, using [route] we can determine whether or not this incoming MIDI
-data is a "note-off" signal (i.e. VELOCITY = 0).;
-#X obj 26 250 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 46 312 notein;
-#X obj 47 352 pack;
-#X obj 47 377 route 0;
-#X floatatom 47 402 5 0 0 0 - - -;
-#X obj 47 420 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 122 308 The goal of the Miller's example at the bottom left
-\, is to retrieve "note-off" signals from [notein]. To do that \, we
-have to test the incoming data for pitches with a velocity of zero.
-To do that \, we are packing up the incoming PITCH and VELOCITY data
-and sending them to [route]...in effect we achieve the following:;
-#X text 98 420 IF velocity = 0 THEN "bang";
-#X text 127 445 In the example above \, the [pack] object will output
-a list as soon as the VELOCITY information comes from [notein]. As
-a result \, the list will be outputted from pack BEFORE the PITCH information
-is retrieved. [swap] is used to solve this problem by making sure that
-the VELOCITY and PITCH are both received before packing them up and
-sending them to the [route] object.;
-#X text 50 248 This will "bang" only when velocity = 0;
-#X text 22 282 THIS IS WHY THE ALTERNATIVE DOESN'T WORK?;
-#X connect 0 0 2 0;
-#X connect 0 1 2 1;
-#X connect 2 0 3 0;
-#X connect 2 1 3 1;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 7 0;
-#X connect 8 0 9 1;
-#X connect 8 1 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X restore 28 569 pd millers_note-off_parser;
-#X floatatom 44 319 5 0 0 0 - - -;
-#X floatatom 94 319 5 0 0 0 - - -;
-#X floatatom 143 319 5 0 0 0 - - -;
-#X floatatom 112 440 5 0 0 0 - - -;
-#X floatatom 161 440 5 0 0 0 - - -;
-#X floatatom 211 440 5 0 0 0 - - -;
-#X msg 37 243 2 2500 9 420;
-#X obj 43 289 unpack f f f f;
-#X floatatom 193 319 5 0 0 0 - - -;
-#X text 14 10 [swap] is most commonly used to change the order of a
-list. This trick is best suited for a PAIR of numbers.;
-#X obj 166 345 swap;
-#X obj 139 370 swap;
-#X obj 112 394 swap;
-#X obj 196 378 swap;
-#X obj 169 403 swap;
-#X obj 228 408 swap;
-#X floatatom 262 440 5 0 0 0 - - -;
-#X text 230 345 This could quickly become ridiculous!;
-#X msg 165 245 1 2 3 4;
-#X msg 254 258 0 200 3333 1111;
-#X text 14 477 In other settings \, the [swap] object is useful as
-a timing mechanism to ensure that two numbers arrive at their destination
-in a particular order. Miller Puckette provided an excellent example
-of [swap] used to build a 'note-off parser'.;
-#X text 14 185 Lists that are longer than two elements could be sorted
-this way \, but the structure quickly becomes unmanageable. It's probably
-better to find an alternative method.;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 2 0 4 0;
-#X connect 3 0 4 1;
-#X connect 4 0 5 0;
-#X connect 7 0 19 0;
-#X connect 8 0 18 0;
-#X connect 9 0 17 0;
-#X connect 13 0 14 0;
-#X connect 14 0 7 0;
-#X connect 14 1 8 0;
-#X connect 14 2 9 0;
-#X connect 14 3 15 0;
-#X connect 15 0 17 1;
-#X connect 17 0 18 1;
-#X connect 17 1 20 1;
-#X connect 18 0 19 1;
-#X connect 18 1 20 0;
-#X connect 19 0 10 0;
-#X connect 19 1 21 0;
-#X connect 20 0 21 1;
-#X connect 20 1 22 1;
-#X connect 21 0 11 0;
-#X connect 21 1 22 0;
-#X connect 22 0 12 0;
-#X connect 22 1 23 0;
-#X connect 25 0 14 0;
-#X connect 26 0 14 0;
-#X restore 104 547 pd More_Info;
-#X text 152 573 - Dave Sabine \, November 12 \, 2002;
-#X text 13 317 ARGUMENTS:;
-#X text 29 369 OUTLETS:;
-#X text 20 427 EXAMPLES:;
-#X text 21 522 SEE ALSO:;
-#X connect 5 0 9 0;
-#X connect 5 1 8 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 1;
-#X connect 10 0 5 0;
-#X connect 11 0 5 0;
-#X connect 12 0 5 0;
-#X connect 15 0 16 0;
-#X connect 16 0 14 0;
-#X connect 16 1 13 0;
+#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 swap 3 12 0 18 -204280
+-1 0;
+#X obj 0 230 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 246 494 357 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 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 5 GENRE help;
+#X text 12 45 KEYWORDS control float list bang;
+#X text 12 85 DESCRIPTION swap two numbers \, respecting right-to-left
+order;
+#X text 12 25 NAME swap;
+#X text 12 125 INLET_0 float list bang;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 185 OUTLET_1 float;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 425 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 485 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;
+#N canvas 86 455 428 136 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 [swap] Related Objects;
+#X text 20 69 Externals and other object libraries;
+#X obj 23 34 pack;
+#X obj 65 34 unpack;
+#X obj 20 89 pddp/helplink cyclone/split;
+#X restore 102 597 pd Related_objects;
+#X obj 78 239 cnv 17 3 135 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 433 float;
+#X obj 78 434 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 380 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 379 float;
+#X obj 493 3 swap;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/swap -text
+pdpedia: swap;
+#X text 98 288 float;
+#X text 168 288 - a float at the left inlet will send the number to
+the right outlet and then send the number at the right inlet to the
+left outlet.;
+#X text 98 239 bang;
+#X text 168 239 - a bang at the left inlet will force [swap] to send
+its values to the outlets \, in reverse order. The value from the left
+inlet will be sent to the right outlet then the value at the right
+inlet will be sent out the left outlet.;
+#X text 98 329 list;
+#X text 168 329 - a list at the left inlet will update the values of
+both of [swap]'s inlets and send the numbers to the outlets in reverse
+order. Note that lists of 3 or more elements will be truncated.;
+#X text 167 379 - a float at the right inlet is stored for later use.
+It will be sent to the left outlet when a float or bang is received
+in the left inlet.;
+#X text 98 456 float;
+#X obj 78 457 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 78 152 swap;
+#X floatatom 106 79 5 0 0 0 - - -;
+#X floatatom 190 119 5 0 0 0 - - -;
+#X floatatom 118 179 5 0 0 0 - - -;
+#X floatatom 78 179 5 0 0 0 - - -;
+#X msg 149 78 42 7;
+#X obj 78 77 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1
+-1;
+#X msg 191 78 42 7 3 4;
+#X floatatom 333 143 5 0 0 0 - - -;
+#X floatatom 294 142 5 0 0 0 - - -;
+#X msg 294 88 bang;
+#X obj 294 112 swap 12;
+#X text 188 102 float;
+#X text 103 60 float;
+#X text 150 60 list;
+#X text 286 162 creation argument;
+#N canvas 90 38 428 503 More_Info 0;
+#X msg 42 82 42 7;
+#X obj 42 107 swap;
+#X floatatom 42 133 5 0 0 0 - - -;
+#X floatatom 101 133 5 0 0 0 - - -;
+#X obj 42 157 pack f f;
+#X obj 42 181 print;
+#X floatatom 43 347 5 0 0 0 - - -;
+#X floatatom 93 347 5 0 0 0 - - -;
+#X floatatom 142 347 5 0 0 0 - - -;
+#X floatatom 111 468 5 0 0 0 - - -;
+#X floatatom 158 468 5 0 0 0 - - -;
+#X floatatom 212 468 5 0 0 0 - - -;
+#X msg 42 271 2 2500 9 420;
+#X obj 42 317 unpack f f f f;
+#X floatatom 192 347 5 0 0 0 - - -;
+#X text 18 38 [swap] is most commonly used to change the order of a
+list. This trick is best suited for a PAIR of numbers.;
+#X obj 165 373 swap;
+#X obj 138 398 swap;
+#X obj 111 422 swap;
+#X obj 195 406 swap;
+#X obj 168 431 swap;
+#X obj 227 436 swap;
+#X floatatom 263 468 5 0 0 0 - - -;
+#X text 199 373 This could quickly become ridiculous!;
+#X msg 140 271 1 2 3 4;
+#X msg 219 271 0 200 3333 1111;
+#X text 19 213 Lists that are longer than two elements could be sorted
+this way \, but the structure quickly becomes unmanageable. It's probably
+better to find an alternative method.;
+#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 [swap] More Info;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 6 0 18 0;
+#X connect 7 0 17 0;
+#X connect 8 0 16 0;
+#X connect 12 0 13 0;
+#X connect 13 0 6 0;
+#X connect 13 1 7 0;
+#X connect 13 2 8 0;
+#X connect 13 3 14 0;
+#X connect 14 0 16 1;
+#X connect 16 0 17 1;
+#X connect 16 1 19 1;
+#X connect 17 0 18 1;
+#X connect 17 1 19 0;
+#X connect 18 0 9 0;
+#X connect 18 1 20 0;
+#X connect 19 0 20 1;
+#X connect 19 1 21 1;
+#X connect 20 0 10 0;
+#X connect 20 1 21 0;
+#X connect 21 0 11 0;
+#X connect 21 1 22 0;
+#X connect 24 0 13 0;
+#X connect 25 0 13 0;
+#X restore 102 546 pd More_Info;
+#N canvas 70 19 444 592 Note-off_parser_using_swap 0;
+#X obj 0 346 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X obj 21 109 notein;
+#X text 77 105 [notein] is an object which receives incoming MIDI data
+from a MIDI instrument. The three outlets are PITCH \, VELOCITY \,
+and MIDI CHANNEL from left to right. It is important to note however
+that the data is outputted from right to left. Which means that the
+first piece of information to be sent out the object is the MIDI CHANNEL.
+;
+#X obj 21 183 swap;
+#X obj 21 222 pack;
+#X obj 21 266 route 0;
+#X floatatom 21 294 5 0 0 0 - - -;
+#X text 76 183 Here \, [swap] is used to store the VELOCITY until the
+PITCH information comes from [notein]. The next step will pack the
+two together...but we have to ensure that [pack] receives the two numbers
+in the correct order: PITCH first \, then VELOCITY. This way \, using
+[route] we can determine whether or not this incoming MIDI data is
+a "note-off" signal (i.e. VELOCITY = 0).;
+#X obj 21 316 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 21 386 notein;
+#X obj 22 426 pack;
+#X obj 22 451 route 0;
+#X floatatom 22 476 5 0 0 0 - - -;
+#X obj 22 497 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 45 315 This will "bang" only when velocity = 0;
+#X text 18 37 In some settings \, the [swap] object is useful as a
+timing mechanism to ensure that two numbers arrive at their destination
+in a particular order. Miller Puckette has provided an excellent example
+of [swap] used to build a 'note-off parser':;
+#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 346 Why doesn't the alternative work?;
+#X text 77 382 The goal of the Miller's example above is to retrieve
+"note-off" signals from [notein]. To do that \, we have to test the
+incoming data for pitches with a velocity of zero. So we swap the values
+\, pack up the incoming VELOCITY and PITCH data \, and send them to
+[route]...in effect we achieve the following:;
+#X text 78 463 IF velocity = 0 THEN display the pitch and send a bang
+;
+#X text 77 485 With the [notein] object \, the VELOCITY information
+is sent before the PITCH information. (Remember that in Pd data is
+sent to the outlets in right-to-left order.) In the example at left
+\, the VELOCITY information triggers the output of [pack] BEFORE the
+PITCH information is retrieved. This is why [swap] is used-- it solves
+the problem by making sure that the VELOCITY and PITCH are both received
+before packing them up and sending them to the [route] object.;
+#X text 7 1 [swap] Note-off Parser;
+#X connect 1 0 3 0;
+#X connect 1 1 3 1;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 9 0 10 1;
+#X connect 9 1 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X restore 102 568 pd Note-off_parser_using_swap;
+#X text 11 23 swap two numbers \, respecting right-to-left order;
+#X text 168 433 - outputs the value from the right inlet.;
+#X text 168 456 - outputs the value from the left inlet.;
+#X text 80 503 1) float;
+#X text 168 503 - initializes the value of the right inlet.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 24 0 28 0;
+#X connect 24 1 27 0;
+#X connect 25 0 24 0;
+#X connect 26 0 24 1;
+#X connect 29 0 24 0;
+#X connect 30 0 24 0;
+#X connect 31 0 24 0;
+#X connect 34 0 35 0;
+#X connect 35 0 33 0;
+#X connect 35 1 32 0;
diff --git a/doc/pddp/switch~-help.pd b/doc/pddp/switch~-help.pd
new file mode 100644
index 00000000..a7c11cfe
--- /dev/null
+++ b/doc/pddp/switch~-help.pd
@@ -0,0 +1,175 @@
+#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 switch~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 225 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 247 494 344 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.4. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 105 DESCRIPTION block size and on/off control for DSP;
+#X text 12 25 NAME switch~;
+#X text 12 45 ALIAS block~;
+#X text 12 145 INLET_0 set float bang;
+#X text 12 65 KEYWORDS signal canvas_op;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 347 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 370 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 91 484 428 108 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 [switch~] Related Objects;
+#X obj 22 43 fft~;
+#X obj 69 43 block~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 234 cnv 17 3 105 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/switch~ -text
+pdpedia: switch~;
+#X text 98 233 bang;
+#X text 168 233 - a "bang" message causes one block of DSP to be computed.
+This might be useful for pre-computing waveforms or window functions
+\, or also for video processing.;
+#X text 98 295 set;
+#X text 98 351 (none);
+#N canvas 65 117 428 374 messages-to-switch 0;
+#X obj 23 238 bang~;
+#X obj 23 264 t b b;
+#X obj 23 290 timer;
+#X floatatom 23 319 5 0 0 0 - - -;
+#X obj 23 38 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 52 63 set 4096 1 1;
+#X msg 52 121 set 4096 2 1;
+#X msg 52 92 set 8192 1 1;
+#X msg 52 151 set 4096 1 0.5;
+#X msg 52 178 set 4096 1 2;
+#X obj 23 205 switch~ 4096 1 1;
+#X obj 23 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 128 220 (args are blocksize \, overlap \, up/downsampling)
+;
+#X text 141 62 block size 4096 \, no overlap \, no resampling;
+#X text 141 91 bigger block size;
+#X text 140 120 double overlap;
+#X text 148 150 downsampled by factor of 2;
+#X text 148 179 upsampled by factor of 2;
+#X text 128 205 creation arguments (if any) initialize blocking;
+#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 [switch~] The "set" Message;
+#X text 65 319 <- measured time (msec) between blocks;
+#X text 50 37 <- switch this subpatch on and off;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#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 10 0;
+#X connect 9 0 10 0;
+#X restore 171 325 pd messages-to-switch;
+#X text 168 295 - the "set" message can be used to change the blocksize
+\, overlap \, and up/downsampling.;
+#N canvas 82 247 428 234 switched 0;
+#X floatatom 140 95 1 0 0 0 - - -;
+#X floatatom 23 159 7 0 0 0 - - -;
+#X obj 23 95 noise~;
+#X obj 23 127 env~ 512;
+#X text 20 37 DSP in this subwindow is turned on and off by the [switch~]
+object. Any subwindows of this window can also be switched off here.
+If a patch and a superpatch both have switches \, both must be "on"
+for DSP to run in the patch.;
+#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 [switch~] A simple example;
+#X obj 140 122 switch~;
+#X text 20 183 [switch~] takes optional arguments the same as block~.
+If you supply arguments to switch \, the patch will be switched AND
+reblocked.;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X restore 78 183 pd switched;
+#X text 237 204 interactions with other objects;
+#X text 75 103 The [switch~] object also allows you to set the block
+size \, overlap \, and up/down-sampling ratio for the window. (The
+overlap and resampling ratio are relative to the super-patch.);
+#X text 76 39 The [switch~] object allows you to switch DSP on and
+off for the window. All subwindows are also switched. (If a subwindow
+of a switched window is also switched \, both switches must be on for
+the subwindow's audio DSP to run. Pd's global DSP must also be on.)
+;
+#X text 75 151 You may have at most one block~/switch~ object in any
+window \, so the examples are in subpatches below:;
+#X text 162 183 a simple example;
+#X text 99 503 BUG! [dac~] and [adc~] work only with a blocksize of
+64 . If you want to reblock audio computation \, do so in a sub-patch
+and keep the [adc~] and [dac~] objects in a super-patch. Only the [inlet~]
+and [outlet~] objects know how to reblock signals. In this example
+\, you could put a [dac~] in this \, outer window \, or in the switched
+subwindow \, but not the blocked one.;
+#N canvas 114 316 428 159 more_about_blocksize 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 [switch~] Block Size;
+#X text 20 38 Pd's default block size is 64 samples. The [inlet~] and
+[outlet~] objects reblock signals to adjust for differences between
+parent and subpatch \, but only power-of-two adjustments are possible.
+So for "normal" audio computations \, all blocaks should also be power-of-two
+in size. HOWEVER \, if you have no [inlet~] or [outlet~] you may specify
+any other block size. This is intended for later use in video processing.
+;
+#X restore 170 476 pd more_about_blocksize;
+#X text 11 23 block size and on/off control for DSP;
+#X text 168 418 - up/downsampling;
+#X text 168 403 - overlap;
+#X text 168 388 - blocksize;
+#X text 167 434 [switch~] with no arguments does not reblock audio
+computation -- in other words \, block size and sample rate are as
+in the parent patch.;
+#X text 298 389 (See the "messages_to_switch" subpatch;
+#X text 298 404 above for more details.);
+#X text 98 270 float;
+#X text 467 3 [switch~];
+#N canvas 80 270 428 229 [switch~]-interactions 0;
+#X text 20 98 If using send~ or delwrite~ from a switched-off patch
+\, the output of corresponding receive~ and delread~ objects in other
+\, running patches will cycle old input (and sound like garbage). Throw~
+may be switched with impunity \, but not catch~.;
+#X text 20 38 dac~ and adc~ don't work correctly if reblocked \, nor
+if a parent window is reblocked \, even if the window containing the
+dac~ or adc~ is reblocked back to the default block size and sample
+rate.;
+#X text 20 168 Patches using send~/receive~ or throw~/catch~ to intercommunicate
+must have the same blocking -- and if their parents are blocked bigger
+than they are \, there might be weirdness.;
+#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 [switch~] Interactions between [switch~] and other objects
+;
+#X restore 78 204 pd [switch~]-interactions;
+#X text 168 270 - "0" turns DSP off for the window \, "1" (or any nonzero
+value) turns it on.;
+#X text 80 388 1) float;
+#X text 80 403 2) float;
+#X text 80 418 3) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
diff --git a/doc/pddp/symbol-help.pd b/doc/pddp/symbol-help.pd
index 2a21eb8e..25b1de74 100644
--- a/doc/pddp/symbol-help.pd
+++ b/doc/pddp/symbol-help.pd
@@ -1,69 +1,133 @@
-#N canvas 353 86 570 640 10;
-#X text 31 576 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 55 12 symbol;
-#X obj 28 259 symbol;
-#X msg 28 112 bang;
-#X text 60 112 "Bang" will force the object to output its value.;
-#X symbolatom 28 310 10 0 0 0 - - -;
-#X obj 28 329 print;
-#X text 22 41 The symbol object stores a symbol (which is set either
+#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 symbol 3 12 0 18
+-204280 -1 0;
+#X obj 0 317 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 246 494 363 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch 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. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 85 DESCRIPTION store a symbol;
+#X text 12 125 INLET_0 anything;
+#X text 12 145 INLET_1 symbol;
+#X text 12 165 OUTLET_0 symbol;
+#X text 12 25 NAME symbol;
+#X text 12 45 KEYWORDS control storage symbol_op;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 475 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 517 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 74 346 428 238 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 [symbol] Related Objects;
+#X obj 23 67 list;
+#X obj 63 67 int;
+#X obj 94 67 float;
+#X obj 137 67 select;
+#X obj 187 67 makefilename;
+#X text 21 38 Native Pd Objects;
+#X text 21 108 Externals;
+#X obj 19 188 pddp/helplink ext13/ftos;
+#X obj 19 208 pddp/helplink iemlib/unsymbol;
+#X obj 20 168 pddp/helplink zexy/index;
+#X obj 20 148 pddp/helplink zexy/makesymbol;
+#X obj 20 128 pddp/helplink zexy/lister;
+#X restore 102 597 pd Related_objects;
+#X obj 78 326 cnv 17 3 110 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 484 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 442 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 481 3 symbol;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/symbol -text
+pdpedia: symbol;
+#X text 11 23 store a symbol;
+#X text 98 325 bang;
+#X text 98 350 symbol;
+#X text 98 441 symbol;
+#X text 98 483 symbol;
+#X text 168 483 - the symbol is output when a message is received at
+the left inlet of [symbol].;
+#X obj 51 220 symbol;
+#X symbolatom 51 279 10 0 0 0 - - -;
+#X obj 60 256 print;
+#X msg 63 82 dog;
+#X msg 71 105 cat;
+#X msg 84 132 symbol horse;
+#X msg 98 154 symbol wolf;
+#X msg 107 177 symbol pig;
+#X text 168 325 - sending a bang will force [symbol] to output its
+stored stored value.;
+#X text 275 120 IMPORTANT NOTE;
+#X obj 302 156 symbol;
+#X symbolatom 302 195 10 0 0 0 - - -;
+#X text 270 213 Careful not to get them confused.;
+#X text 270 175 is very different than the symbol box:;
+#X text 270 136 the [symbol] object:;
+#X msg 51 57 bang;
+#N canvas 78 344 428 194 Symbol_vs_Symbol_Box 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 [symbol] vs. the Symbol Box;
+#X obj 23 125 symbol;
+#X msg 23 103 list 12;
+#X text 68 125 outputs "symbol list";
+#X msg 217 103 list 12;
+#X text 283 125 outputs "symbol float";
+#X symbolatom 217 125 10 0 0 0 - - -;
+#X text 20 38 The [symbol] object and the symbol box handle the "list"
+selector inconsistently.;
+#X text 23 76 [symbol] output;
+#X obj 23 147 print from_[symbol];
+#X obj 217 147 print from_symbol_box;
+#X text 216 76 symbol box output;
+#X connect 2 0 10 0;
+#X connect 3 0 2 0;
+#X connect 5 0 7 0;
+#X connect 7 0 11 0;
+#X restore 102 567 pd Symbol_vs_Symbol_Box;
+#X text 168 535 - (optional) initializes the stored symbol.;
+#X text 80 535 1) symbol atom;
+#X text 121 259 For this example \, I have used the symbol box to display
+the value that was stored in the [symbol] object \, as well as printing
+the value to the console.;
+#X text 167 441 - a symbol to the right inlet is stored. (Note: symbol
+atoms like "foo" will not be accepted.);
+#X text 105 49 The [symbol] object stores a symbol (which is set either
by its creation argument or by the right inlet) and then outputs that
symbol when it receives a "bang" message or a new symbol in its left
inlet.;
-#X text 23 381 IMPORTANT NOTE;
-#X obj 71 410 symbol;
-#X symbolatom 63 449 10 0 0 0 - - -;
-#X text 75 328 For this example \, I have used the symbol atom to display
-the value that was stored in the symbol object and also printed the
-value to the terminal window.;
-#X text 74 253 The symbols are stored here. When banged \, the symbol
-is outputted through the outlet. Note that a creation argument is optional.
-;
-#X msg 40 137 dog;
-#X msg 48 155 cat;
-#X msg 59 181 symbol horse;
-#X msg 73 199 symbol wolf;
-#X msg 82 217 symbol pig;
-#X text 75 139 Sending a symbol to its left inlet will store AND output
-the value.;
-#X text 23 490 RELATED OBJECTS;
-#X obj 26 513 int;
-#X obj 58 513 float;
-#X obj 102 513 f;
-#X obj 134 513 select;
-#X obj 188 513 makefilename;
-#X text 153 179 Sending new symbols to its right inlet will store the
-values. These values can later be sent via "bang" to its left inlet.
-Note that these symbols are preceded by the word "symbol" to indicate
-the appropriate data type.;
-#N canvas 0 22 462 238 related_objects_from_other_libraries 0;
-#X obj 160 28 makesymbol;
-#X obj 118 28 index;
-#X obj 16 27 ftos;
-#X obj 52 27 unsymbol;
-#X text 10 129 The best places to find information about Pd's libraries
-is:;
-#X text 13 159 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 14 172 or;
-#X text 15 186 iem.kug.ac.at/pdb/;
-#X obj 243 28 lister;
-#X text 17 58 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. These objects usually included in
-the installers.;
-#X restore 25 536 pd related_objects_from_other_libraries;
-#X text 31 395 Symbol - the OBJECT:;
-#X text 31 431 is very different than symbol - the ATOM:;
-#X text 29 466 Careful not to get them confused.;
-#X text 109 13 STORE A SYMBOL;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 5 0 6 0;
-#X connect 13 0 2 0;
-#X connect 14 0 2 0;
-#X connect 15 0 2 1;
-#X connect 16 0 2 1;
-#X connect 17 0 2 1;
+#X text 168 391 - all other messages to the left inlet of symbol will
+store and output the selector. E.g. \, a float will output the word
+"float" \, a list will output "list" \, a pointer will output "pointer"
+\, "foo bar" will output "foo" \, and so forth.;
+#X text 168 350 - a symbol sent to the left inlet will be stored and
+output. Symbol atoms (e.g. \, "foo") are accepted and given the "symbol"
+selector.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 391 anything;
+#X connect 19 0 20 0;
+#X connect 19 0 21 0;
+#X connect 22 0 19 0;
+#X connect 23 0 19 0;
+#X connect 24 0 19 1;
+#X connect 25 0 19 1;
+#X connect 26 0 19 1;
+#X connect 34 0 19 0;
diff --git a/doc/pddp/sysexin-help.pd b/doc/pddp/sysexin-help.pd
new file mode 100644
index 00000000..7ef2605d
--- /dev/null
+++ b/doc/pddp/sysexin-help.pd
@@ -0,0 +1,94 @@
+#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 sysexin 3 12 0 18
+-204280 -1 0;
+#X obj 0 441 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 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 105 PLATFORM gnulinux;
+#X text 12 265 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 5 GENRE help;
+#X text 12 25 NAME sysexin;
+#X text 12 125 OUTLET_0 float;
+#X text 12 145 OUTLET_1 float;
+#X text 12 45 KEYWORDS control MIDI needs_work;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X text 12 85 DESCRIPTION needs a description;
+#X restore 500 597 pd META;
+#X obj 0 469 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 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 90 178 441 423 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 83 107 touchin;
+#X obj 265 80 polytouchin;
+#X obj 28 34 midiin;
+#X obj 27 107 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 370 167 touchout;
+#X obj 284 167 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [sysexin] Related Objects;
+#X text 26 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 25 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 26 246 Externals;
+#X obj 26 295 pddp/helplink maxlib/pitch;
+#X obj 26 310 pddp/helplink maxlib/score;
+#X obj 26 325 pddp/helplink maxlib/chord;
+#X obj 26 360 pddp/helplink cyclone/midiformat;
+#X obj 26 375 pddp/helplink cyclone/midiparse;
+#X obj 26 390 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 477 float;
+#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 445 (none);
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X floatatom 225 184 0 0 0 0 - - -;
+#X floatatom 264 184 0 0 0 0 - - -;
+#X text 164 264 of the channel (Linux only):;
+#X text 164 230 This object is always omni and;
+#X text 163 246 outputs the port number instead;
+#X text 11 23 needs a description;
+#X text 168 477 - port number;
+#X text 98 502 ???;
+#X text 168 502 - ???;
+#X text 80 545 1) ???;
+#X text 168 545 - ???;
+#X obj 484 3 sysexin;
+#X obj 447 20 pddp/pddplink http://wiki.puredata.info/en/sysexin -text
+pdpedia: sysexin;
+#X obj 225 153 sysexin;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 27 0 14 0;
+#X connect 27 1 15 0;
diff --git a/doc/pddp/table-help.pd b/doc/pddp/table-help.pd
new file mode 100644
index 00000000..53817b18
--- /dev/null
+++ b/doc/pddp/table-help.pd
@@ -0,0 +1,124 @@
+#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 table 3 12 0 18
+-204280 -1 0;
+#X obj 0 347 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 205 RELEASE_VERSION 0.41.4;
+#X text 12 185 RELEASE_DATE 2009-06-12;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 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 GENRE help;
+#X text 12 45 KEYWORDS signal array GUI storage;
+#X text 12 85 DESCRIPTION array of numbers;
+#X text 12 25 NAME table;
+#X restore 500 597 pd META;
+#X obj 0 377 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 407 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;
+#N canvas 78 281 428 334 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 [table] Related Objects;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X restore 22 33 pd;
+#X obj 60 33 pddp/pddplink graph.pd;
+#X obj 124 33 struct;
+#X text 19 200 Externals and other object libraries;
+#X obj 22 91 tabread~;
+#X obj 96 91 tabread4;
+#X obj 171 91 tabwrite;
+#X obj 246 91 tabwrite~;
+#X obj 22 119 tabsend~;
+#X obj 98 119 tabreceive~;
+#X obj 198 119 tabplay~;
+#X obj 275 119 table;
+#X text 19 170 [array];
+#X obj 22 146 soundfiler;
+#X text 82 170 and fft objects.;
+#X obj 209 146 getsize;
+#X obj 118 146 tabosc4~;
+#X text 19 68 Native Pd Objects for reading from and writing to arrays:
+;
+#X obj 174 33 element;
+#X obj 19 220 pddp/helplink zexy/tabdump;
+#X obj 19 240 pddp/helplink linear_path;
+#X text 100 240 <-- which library is this in?;
+#X text 100 260 <-- which library is this in?;
+#X obj 19 260 pddp/helplink score;
+#X text 100 280 <-- which library is this in?;
+#X obj 19 280 pddp/helplink tabenv;
+#X obj 234 33 plot;
+#X obj 19 300 pddp/helplink flatspace/arraysize;
+#X restore 102 598 pd Related_objects;
+#X text 80 426 1) symbol atom;
+#X text 11 23 array of numbers;
+#X obj 461 20 pddp/pddplink http://wiki.puredata.info/en/table -text
+pdpedia: table;
+#X obj 493 3 table;
+#X text 98 355 (none);
+#X text 98 385 (none);
+#X text 99 95 Note that the data (and other properties) of the array
+aren't saved with the patch. You can resize \, save to and/or read
+from an external file as you would with "array" objects. See "arrays"
+in the 2.control examples under the "pure documentation" help menu
+item.;
+#X text 80 505 2) float;
+#X text 99 321 Unfortunately there's no way to set vertical range \,
+etc.;
+#X text 98 561 For help on graphical arrays \, see:;
+#N canvas 74 252 428 203 table_vs_garray_from_Put_menu 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 [table] vs. "Put" menu array: what's the difference?;
+#X text 20 80 * with the [table] object \, you can use the arguments
+to set the name and size of the garray.;
+#X text 20 110 * when using the [table] object \, you can't save any
+changes you make to the properites of the garray \, graph \, or the
+[table] subpatch itself.;
+#X text 20 150 * with the [table] object \, you cannot save the contents
+of the array with the patch. This is true even if you open the [table]
+and check "save contents" in the garray properties.;
+#X text 20 38 At first glance \, the [table] object might just look
+like garray in a graph that's been placed inside a subpatch. There
+are \, however \, some important differences:;
+#X restore 101 538 pd table_vs_garray_from_Put_menu;
+#X obj 102 191 table help-tab-2 25;
+#X obj 102 164 table help-tab-1;
+#X msg 72 242 \; help-tab-1 read table.txt;
+#X msg 72 281 \; help-tab-1 write /tmp/table.txt;
+#X obj 299 269 send help-tab-2;
+#X msg 299 242 sinesum 512 1;
+#X text 213 164 <- You can click [table] to view the garray inside.
+;
+#X text 100 52 The [table] object builds a subpatch with a graphical
+array inside. The creation arguments specify the name and an optional
+size in points.;
+#X text 99 215 You can also send messages to the garray by name:;
+#X obj 404 269 tabread help-tab-2;
+#X floatatom 404 243 5 0 0 0 - - -;
+#X floatatom 404 297 5 0 0 0 - - -;
+#X text 167 426 - (optional) name of the [table] and garray contained
+within. Use the name within array-handling objects \, like [tabwrite~]
+\, or use it to send messages to the garray (see examples above). Duplicate
+names will generate a warning when dsp is turned on. (If no argument
+is given \, [table] objects will be named "table1" \, "table2" \, "table3"
+\, etc.);
+#X text 167 505 - (optional) initial size of the array (default is
+100).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 576 pddp/pddplink garray-help.pd;
+#X connect 24 0 23 0;
+#X connect 28 0 30 0;
+#X connect 29 0 28 0;
diff --git a/doc/pddp/table_of_contents.pd b/doc/pddp/table_of_contents.pd
index d3f3cf90..d101b623 100644
--- a/doc/pddp/table_of_contents.pd
+++ b/doc/pddp/table_of_contents.pd
@@ -1,71 +1,73 @@
-#N canvas 56 22 510 577 10;
-#X obj 3 2 cnv 15 500 20 empty empty pddp 2 12 1 18 -233017 -66577
-0;
-#X obj 9 544 pddp_open;
-#X msg 10 92 acoustic_conversions;
-#X msg 10 112 arrays;
-#X msg 10 132 cyclone;
-#X msg 10 152 data_structures;
-#X msg 10 172 data_types;
-#X msg 10 192 haptics;
-#X msg 10 212 hid;
-#X msg 10 232 hid_mapping;
-#X msg 10 252 lists_vs_anythings;
-#X msg 10 272 looping;
-#X msg 10 312 scope_and_locality;
-#X msg 10 332 send_n_receive;
-#X msg 10 352 symbol_construction;
-#X msg 10 452 pddp-style-guide;
-#X msg 10 482 dynamic_sends;
-#X msg 10 512 time_measurements;
-#X text 170 113 comment;
-#X text 170 173 comment;
-#N canvas 0 22 462 312 guts 0;
-#X obj 79 119 inlet;
-#X obj 75 258 outlet;
-#X obj 78 168 symbol;
-#X obj 75 221 makefilename all_about_%s;
-#X text 46 28 this opens the "all_about_" patches;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X restore 10 387 pd guts;
-#X text 170 93 audio power and RMS \, MIDI and frequency;
-#X text 170 213 physically interfacing with humans;
-#X text 170 273 making all sorts of loops;
-#X msg 10 292 midi_flags;
-#X text 170 193 controlling force and vibration feedback;
-#X text 170 233 mapping data from human interface devices;
-#X text 170 293 command line flags for using MIDI devices;
-#X obj 471 3 pddp/pddplink http://puredata.info/dev/pddp -text pddp
-;
-#X text 170 452 style recommendations for pddp patches;
-#X text 170 482 (unfinished);
-#X text 170 512 (unfinished);
-#X text 170 153 (unfinished);
-#X text 170 253 (unfinished);
-#X text 22 27 TABLE OF CONTENTS;
-#X text 7 48 pddp provides a number of overview patches called "all_about_"
+#N canvas 0 0 435 577 10;
+#X text 19 37 pddp provides a number of overview patches called "all_about_"
patches. Here is a listing of them:;
-#X text 170 133 cyclone is the Max/MSP compatibility library;
-#X text 170 333 sending and receiving with out cords;
-#X text 170 353 building special symbols (unfinished);
-#X text 170 313 global and local scope of names;
-#X connect 2 0 20 0;
-#X connect 3 0 20 0;
-#X connect 4 0 20 0;
-#X connect 5 0 20 0;
-#X connect 6 0 20 0;
-#X connect 7 0 20 0;
-#X connect 8 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 14 0 20 0;
-#X connect 15 0 1 0;
-#X connect 16 0 1 0;
-#X connect 17 0 1 0;
-#X connect 20 0 1 0;
-#X connect 24 0 20 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header All_About_Pd--Table_of_contents
+20 10 1 18 -261106 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 552 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 344 META 0;
+#X text 12 85 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 LIBRARY PDDP;
+#X text 12 5 GENRE all_about_pd;
+#X text 12 25 KEYWORDS needs_work;
+#X text 12 45 DESCRIPTION table of contents;
+#X restore 392 554 pd META;
+#N canvas 10 462 428 105 Related_objects 0;
+#X text 31 37 Hm...what to put here?;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261106 -33289 0;
+#X text 7 2 All About Pd- Related Objects;
+#X restore 103 554 pd Related_objects;
+#X obj 6 554 pddp/pddplink pddp/help.pd -text help;
+#X obj 19 92 pddp/pddplink all_about_arrays.pd -text arrays;
+#X obj 19 107 pddp/pddplink all_about_ascii_art.pd -text ascii_art
+;
+#X obj 19 122 pddp/pddplink all_about_atom_conversion.pd -text atom_conversion
+;
+#X obj 19 137 pddp/pddplink all_about_atoms.pd -text atoms;
+#X obj 19 152 pddp/pddplink all_about_canvas_properties.pd -text canvas_properties
+;
+#X obj 19 167 pddp/pddplink all_about_data_types.pd -text data_types
+;
+#X obj 19 182 pddp/pddplink all_about_dollarsign_zero.pd -text dollarsign_zero
+;
+#X obj 19 197 pddp/pddplink all_about_expr_and_value.pd -text expr_and_value
+;
+#X obj 19 212 pddp/pddplink all_about_expr_functions.pd -text expr_functions
+;
+#X obj 19 227 pddp/pddplink all_about_expr_if.pd -text expr_if;
+#X obj 19 242 pddp/pddplink all_about_expr_multiline.pd -text expr_multiline
+;
+#X obj 19 257 pddp/pddplink all_about_haptics.pd -text haptics;
+#X obj 19 272 pddp/pddplink all_about_help_patches.pd -text help_patches
+;
+#X obj 19 287 pddp/pddplink all_about_hid.pd -text hid;
+#X obj 19 302 pddp/pddplink all_about_libraries.pd -text libraries
+;
+#X obj 19 317 pddp/pddplink all_about_lists_vs_anythings.pd -text lists_vs_anythings
+;
+#X obj 19 332 pddp/pddplink all_about_looping.pd -text looping;
+#X obj 19 347 pddp/pddplink all_about_message_conversion.pd -text message_conversion
+;
+#X obj 19 362 pddp/pddplink all_about_messages.pd -text messages;
+#X obj 19 377 pddp/pddplink all_about_midi_flags.pd -text midi_flags
+;
+#X obj 19 407 pddp/pddplink all_about_pd_META.pd -text pd_META;
+#X obj 19 422 pddp/pddplink all_about_scope_and_locality.pd -text scope_and_locality
+;
+#X obj 19 437 pddp/pddplink all_about_send_n_receive.pd -text send_n_receive
+;
+#X obj 19 452 pddp/pddplink all_about_submitting_bugs.pd -text submitting_bugs
+;
+#X obj 19 467 pddp/pddplink all_about_symbol_construction.pd -text
+symbol_construction;
+#X obj 19 482 pddp/pddplink all_about_writing_help_patches.pd -text
+writing_help_patches;
+#X obj 19 497 pddp/pddplink all_about_z_order.pd -text z_order;
+#X obj 19 77 pddp/pddplink all_about_acoustic_conversions.pd -text
+acoustic_conversions;
+#X obj 19 392 pddp/pddplink all_about.pd -text pd;
diff --git a/doc/pddp/tabosc4~-help.pd b/doc/pddp/tabosc4~-help.pd
new file mode 100644
index 00000000..36847b83
--- /dev/null
+++ b/doc/pddp/tabosc4~-help.pd
@@ -0,0 +1,197 @@
+#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 tabosc4~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 262 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS signal array;
+#X text 12 85 DESCRIPTION 4-point interpolating oscillator;
+#X text 12 25 NAME tabosc4~;
+#X text 12 125 INLET_0 signal set;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 419 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 453 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 491 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 63 314 428 298 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 [tabosc4~] Related Objects;
+#X text 21 38 Native Pd Objects;
+#X obj 24 61 tabread~;
+#X obj 98 61 tabread4;
+#X obj 173 61 tabwrite;
+#X obj 248 61 tabwrite~;
+#X obj 24 89 tabsend~;
+#X obj 100 89 tabreceive~;
+#X obj 200 89 tabplay~;
+#X obj 277 89 table;
+#X text 21 140 [array];
+#X obj 24 116 soundfiler;
+#X text 84 140 and fft objects.;
+#X obj 120 116 tabread4~;
+#X obj 211 116 getsize;
+#X text 22 170 Externals and other object libraries;
+#X obj 22 190 pddp/helplink zexy/tabdump;
+#X obj 22 210 pddp/helplink linear_path;
+#X text 103 210 <-- which library is this in?;
+#X text 103 230 <-- which library is this in?;
+#X obj 22 230 pddp/helplink score;
+#X text 103 250 <-- which library is this in?;
+#X obj 22 250 pddp/helplink tabenv;
+#X obj 22 270 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 271 cnv 17 3 100 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 428 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 376 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 375 float;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/tabosc4~ -text
+pdpedia: tabosc4~;
+#X obj 464 3 tabosc4~;
+#X floatatom 43 203 0 0 0 0 - - -;
+#N canvas 159 26 495 270 output 0;
+#X obj 414 196 t b;
+#X obj 414 134 f;
+#X obj 414 73 inlet;
+#X text 421 36 mute;
+#X obj 414 227 f;
+#X msg 521 218 0;
+#X msg 414 104 bang;
+#X obj 414 166 moses 1;
+#X obj 521 187 t b f;
+#X obj 486 143 moses 1;
+#X obj 102 181 dbtorms;
+#X obj 486 113 r master-lvl;
+#X obj 102 52 r master-lvl;
+#X obj 414 257 s master-lvl;
+#X obj 26 222 inlet~;
+#X obj 244 50 inlet;
+#X text 244 22 level;
+#X obj 244 122 s master-lvl;
+#X msg 118 80 set \$1;
+#X obj 118 109 outlet;
+#X msg 262 78 \; pd dsp 1;
+#X obj 102 238 line~;
+#X obj 26 259 *~;
+#X obj 26 295 dac~;
+#X obj 102 210 pack 0 50;
+#X text 24 195 audio;
+#X text 114 135 show level;
+#X connect 0 0 4 0;
+#X connect 1 0 7 0;
+#X connect 2 0 6 0;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 1 0;
+#X connect 7 0 0 0;
+#X connect 7 1 8 0;
+#X connect 8 0 5 0;
+#X connect 9 1 4 1;
+#X connect 10 0 24 0;
+#X connect 11 0 1 1;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 12 0 18 0;
+#X connect 14 0 22 0;
+#X connect 15 0 17 0;
+#X connect 15 0 20 0;
+#X connect 18 0 19 0;
+#X connect 21 0 22 1;
+#X connect 22 0 23 0;
+#X connect 22 0 23 1;
+#X connect 24 0 21 0;
+#X restore 18 224 pd output;
+#X msg 69 203 MUTE;
+#X floatatom 18 51 4 0 0 0 - - -;
+#X obj 18 76 sig~ 100;
+#X msg 32 119 set table1;
+#X obj 18 158 tabosc4~ table1;
+#X msg 116 119 set table2;
+#X floatatom 190 121 4 0 0 0 - - -;
+#X text 48 51 signal input for frequency (Hz.);
+#X text 33 98 message to switch tables;
+#X text 220 121 inlet to reset phase;
+#X obj 319 51 table table1;
+#X obj 319 73 table table2;
+#X text 98 270 signal;
+#X text 98 288 float;
+#X text 98 327 list;
+#X text 168 327 - a list will be truncated to the first item.;
+#X text 98 343 set;
+#X text 168 343 - the "set" message is used to switch to a different
+table (e.g. \, "set table2" in the example above).;
+#X text 167 375 - inlet to reset phase (range is 0 to 1).;
+#X text 98 395 list;
+#X text 167 395 - a list will be truncated to the first item.;
+#X text 98 427 signal;
+#N canvas 71 165 428 199 init_tables 0;
+#X msg 23 99 \; table1 sinesum 512 0.5 0.5 0.5 0.5 \; table2 cosinesum
+512 0 1;
+#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 [tabosc4~] Subpatch to Initialize [table] objects;
+#X obj 23 75 loadbang;
+#X text 20 38 This subpatch initializes the [table] objects used by
+[tabosc4~].;
+#X text 20 147 Note: Don't send new "sinesum" messages to tables while
+you're running. Instead \, use "set" messages to switch between tables.
+;
+#X connect 3 0 0 0;
+#X restore 319 95 pd init_tables;
+#X text 29 184 volume in dB;
+#X text 11 23 4-point interpolating oscillator;
+#X text 168 471 - initializes the table or array to use.;
+#X text 168 288 - a float can be used to specify the frequency \, as
+long as there is not also a signal connection to the left inlet of
+[tabosc4~].;
+#X text 168 270 - an incoming signal to specify frequency (Hz.).;
+#X text 168 427 - the outgoing signal.;
+#X text 98 494 For good results use 512 points for up to about 15 partials
+\, or 32*npartials (rounded up to a power of 2) for more than 15 .
+;
+#X text 139 152 [tabosc4~] is a traditional computer music style wavetable
+lookup oscillator using 4-point polynomial interpolation. The table
+should have a power of two points plus three "guard points" \, one
+at the beginning and two at the end \, which should be wraparound copies
+of the last point and the first two points \, respectively. The "sinesum"
+and "cosinesum" methods for arrays do this automatically for you if
+you just want to specify partial strengths.;
+#X text 80 471 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 530 pddp/pddplink all_about_arrays.pd;
+#X obj 98 545 pddp/pddplink ../3.audio.examples/B01.wavetables.pd -text
+doc/3.audio.examples/B01.wavetables.pd;
+#X obj 98 560 pddp/pddplink ../3.audio.examples/B05.tabread.FM.pd -text
+doc/3.audio.examples/B05.tabread.FM.pd;
+#X obj 98 575 pddp/pddplink ../3.audio.examples/B06.table.switching.pd
+-text doc/3.audio.examples/B06.table.switching.pd;
+#X connect 14 0 15 1;
+#X connect 15 0 14 0;
+#X connect 16 0 15 2;
+#X connect 17 0 18 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 0;
+#X connect 20 0 15 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 1;
diff --git a/doc/pddp/tabplay~-help.pd b/doc/pddp/tabplay~-help.pd
new file mode 100644
index 00000000..05a1ff9b
--- /dev/null
+++ b/doc/pddp/tabplay~-help.pd
@@ -0,0 +1,163 @@
+#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 tabplay~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 302 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version 0.29. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal array;
+#X text 12 85 DESCRIPTION play a table as audio (non-transposing);
+#X text 12 25 NAME tabplay~;
+#X text 12 125 INLET_0 float bang list set;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 165 OUTLET_1 bang;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 437 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 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 58 313 441 301 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 [tabplay~] Related Objects;
+#X text 20 38 Native Pd Objects;
+#X obj 23 63 tabread~;
+#X obj 97 63 tabread4;
+#X obj 276 89 table;
+#X text 22 146 [array];
+#X obj 23 116 soundfiler;
+#X text 85 146 and fft objects.;
+#X obj 119 116 tabread4~;
+#X obj 210 116 getsize;
+#X obj 281 116 setsize;
+#X obj 172 63 tabread;
+#X obj 247 63 tabwrite;
+#X obj 23 89 tabwrite~;
+#X obj 99 89 tabsend~;
+#X obj 179 89 tabreceive~;
+#X text 20 170 Externals and other object libraries;
+#X obj 20 190 pddp/helplink zexy/tabdump;
+#X obj 20 210 pddp/helplink linear_path;
+#X text 101 210 <-- which library is this in?;
+#X text 101 230 <-- which library is this in?;
+#X obj 20 230 pddp/helplink score;
+#X text 101 250 <-- which library is this in?;
+#X obj 20 250 pddp/helplink tabenv;
+#X obj 20 270 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 311 cnv 17 3 115 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 446 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 472 3 tabplay~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/tabplay~ -text
+pdpedia: tabplay~;
+#X text 98 310 bang;
+#X text 98 328 float;
+#X text 98 365 list;
+#X text 98 393 set;
+#X obj 78 469 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 445 signal;
+#X text 98 468 bang;
+#X text 168 468 - the right inlet sends a bang when [tabplay~] has
+finished playing through the table.;
+#X text 168 328 - sending a float n will cause [tabplay~] to start
+playing from the nth sample. (Sending 0 will play the entire sample.)
+;
+#X text 168 365 - a two-element list (x \, y) will cause [tabplay~]
+to begin at sample number x \, and continue for y samples.;
+#X floatatom 13 271 0 0 0 0 - - -;
+#X msg 13 52 set array99;
+#X obj 13 245 env~ 16384;
+#X obj 179 272 dac~ 1;
+#X obj 179 228 *~;
+#X obj 193 206 line~;
+#X msg 193 165 0.1 100;
+#X msg 209 186 0 100;
+#X text 255 166 on;
+#X text 255 186 off;
+#X text 231 206 envelope;
+#X text 231 217 generator;
+#X text 223 274 audio output;
+#X obj 179 250 hip~ 5;
+#X msg 28 119 0 44100;
+#X msg 29 98 44100;
+#X msg 28 78 bang;
+#X msg 27 139 44100 1000;
+#X text 168 520 - the name of the array or table to which [tabwrite~]
+will write data. The array or table must exist in an open Pd patch/canvas
+or an error message will appear in the console.;
+#X text 174 143 amplitude controls:;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 155948 float 0;
+#X coords 0 1 155948 -1 160 100 1;
+#X restore 345 167 graph;
+#N canvas 0 0 428 391 init 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 283 soundfiler;
+#X floatatom 23 305 0 0 0 0 - - -;
+#X obj 23 204 loadbang;
+#X text 20 38 The objects below load a short soundfile into the array
+named "tabplay~-help-array.";
+#X text 20 68 If you right-click on the array and choose "Properties
+\, " you'll see the "save contents" checkbox is unmarked \, so that
+the array data is not saved as part of the patch.;
+#X text 20 110 You can always check this box to save the contents of
+the array in the patch \, but with large amounts of array data- even
+a few seconds of audio- this can create rather large Pd files.;
+#X text 20 162 Thus it is better just to load the content of the array
+when the patch opens \, as follows:;
+#X text 20 333 See the [soundfiler] help patch for more information.
+;
+#X text 8 2 [tabplay~] Initialisation Subpatch;
+#X obj 23 231 f \$0;
+#X msg 23 258 read -resize ../sound/bell.aiff \$1-array;
+#X connect 1 0 2 0;
+#X connect 3 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X restore 345 272 pd init;
+#X text 11 23 play a table as audio (non-transposing);
+#X text 95 75 The tabplay~ object plays through a table \, or part
+of one \, with no transposition or interpolation. It is cheaper than
+tabread4~ and there are none of tabread4~'s interpolation artifacts.
+;
+#X text 168 310 - play through the whole table.;
+#X text 168 393 - the "set" message \, followed by the name of an array
+\, permits you to switch between arrays (e.g. \, "set another_array").
+;
+#X text 168 445 - the outgoing audio signal.;
+#X text 80 520 1) symbol;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 570 pddp/pddplink all_about_arrays.pd;
+#X obj 13 165 tabplay~ \$0-array;
+#X connect 23 0 53 0;
+#X connect 24 0 22 0;
+#X connect 26 0 35 0;
+#X connect 27 0 26 1;
+#X connect 28 0 27 0;
+#X connect 29 0 27 0;
+#X connect 35 0 25 0;
+#X connect 36 0 53 0;
+#X connect 37 0 53 0;
+#X connect 38 0 53 0;
+#X connect 39 0 53 0;
+#X connect 53 0 24 0;
+#X connect 53 0 26 0;
diff --git a/doc/pddp/tabread-help.pd b/doc/pddp/tabread-help.pd
index b13d50e2..88e089b5 100644
--- a/doc/pddp/tabread-help.pd
+++ b/doc/pddp/tabread-help.pd
@@ -1,93 +1,135 @@
-#N canvas 2 1 648 608 12;
-#X obj 114 560 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 14 223 ARGUMENTS:;
-#X text 19 323 EXAMPLES:;
-#X text 22 471 SEE ALSO:;
-#N canvas 58 0 405 254 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 16 166 Externals and other object libraries;
-#X obj 16 41 tabread~;
-#X obj 90 41 tabread4;
-#X obj 165 41 tabwrite;
-#X obj 240 41 tabwrite~;
-#X obj 16 67 tabsend~;
-#X obj 92 67 tabreceive~;
-#X obj 192 67 tabplay~;
-#X obj 269 67 table;
-#X text 15 124 [array];
-#X obj 16 94 soundfiler;
-#X text 78 124 and fft objects.;
-#X text 21 187 [tabdump];
-#X obj 112 94 tabread4~;
-#X text 20 207 [tabenv];
-#X obj 203 94 getsize;
-#X obj 274 94 setsize;
-#X text 238 207 [arraysize];
-#X text 238 186 [score];
-#X text 114 186 [linear_path];
-#X text 114 207 [plot];
-#X restore 114 508 pd Related_Objects;
-#N canvas 80 0 655 534 More_Info 0;
-#X text 25 16 WHAT IS THE DIFFERENCE BETWEEN A TABLE AND AN ARRAY AND
-A GRAPH AND A TEMPLATE AND A LIST AND A SCALAR AND A WIDGET?;
-#X text 43 56 That question isn't relevant yet \, but I know you're
-probably asking it. Let's just set aside these terms and their uses
-and say the following:;
-#X text 67 114 1 In Pd \, the terms "graph" and "table" are almost
-synonymous.;
-#X text 66 164 2 A table in Pd is a convenient place to store an array.
-;
-#X text 65 392 5 For more discussion about arrays and tables \, please
-see the help documentation in: doc/2.control.examples/15.arrays.pd
-and doc/5.reference/table.pd;
-#X text 44 487 Also See:;
-#X obj 123 487 pddp/pddplink all_about_arrays.pd -text all_about_arrays;
-#X text 66 195 3 When you create a table \, an array of 100 elements
-is automatically created inside that table. The name of the table and
-the name of the array are stored separately. This means \, that although
-the table has the same name as the default array \, you can rename
-one or the other individually.;
-#X text 66 307 4 [tabread] is designed to read the numbers from arrays
-- whether they're stored in tables or not! Perhaps we can think of
-this object as [arrayread] instead? Keep in mind that arrays can be
-created separately from tables.;
-#X restore 114 534 pd More_Info;
-#X obj 32 10 tabread;
-#X text 111 10 - READ NUMBERS FROM A TABLE;
-#X text 104 277 One - outputs a floating point number which corresponds
-to the index you query using the inlet.;
-#X obj 161 416 tabread davids_table;
-#X floatatom 161 443 0 0 0 3 - - -;
-#X floatatom 116 364 0 0 99 1 index - -;
-#X msg 241 391 set another_table;
-#X msg 203 366 set davids_table;
-#X text 105 168 Set - the "set <arrayname>" message allows you to read
-from dynamic sources. You can change the source at any time using the
-"set" message.;
-#X text 105 223 One - the argument informs [tabread] which array to
-read. The array must exist in an open Pd patch/canvas or an error message
-will appear in the terminal window.;
-#X text 29 278 OUTLETS:;
-#X text 410 433 tables which store \; arrays of the same name.;
-#X obj 413 384 table davids_table;
-#X obj 413 410 table another_table;
-#X text 113 443 value;
-#X text 158 561 - Dave Sabine \, April 25 \, 2003;
-#X text 106 323 Open the tables and use your mouse to draw new values
-in the arrays - otherwise [tabread] will always output "0".;
-#X text 39 34 INLETS:;
-#X text 107 34 Float - A float at the left inlet will move to the corresponding
-index in the table's array. The lowest valid number is "0" which represents
-the first element of the array. The highest valid number is the size
-of the array minus 1 By default \, the size of an array in a table
-is 100 - or 0 to 99 The actual size of the array can be altered using
-the array's dialog box or the resize command. More about arrays can
-be found below.;
-#X text 112 470 doc/2.control.examples/15.arrays.pd;
-#X text 113 489 doc/2.control.examples/16.more.arrays.pd;
-#X connect 10 0 11 0;
-#X connect 12 0 10 0;
-#X connect 13 0 10 0;
-#X connect 14 0 10 0;
+#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 tabread 3 12 0 18
+-204280 -1 0;
+#X obj 0 277 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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Dave Sabine \, April 25 \, 2003 .
+Jonathan Wilkes revised the patch to conform to the PDDP template for
+Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control array;
+#X text 12 85 DESCRIPTION read numbers from a table;
+#X text 12 25 NAME tabread;
+#X text 12 125 INLET_0 float set;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 444 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 482 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 541 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 83 315 428 299 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 [tabread] Related Objects;
+#X text 21 38 Native Pd Objects;
+#X obj 24 61 tabread~;
+#X obj 98 61 tabread4;
+#X obj 173 61 tabwrite;
+#X obj 248 61 tabwrite~;
+#X obj 24 89 tabsend~;
+#X obj 100 89 tabreceive~;
+#X obj 200 89 tabplay~;
+#X obj 277 89 table;
+#X text 21 140 [array];
+#X obj 24 116 soundfiler;
+#X text 84 140 and fft objects.;
+#X obj 120 116 tabread4~;
+#X obj 211 116 getsize;
+#X obj 282 116 setsize;
+#X text 22 164 Externals and other object libraries;
+#X obj 22 184 pddp/helplink zexy/tabdump;
+#X obj 22 204 pddp/helplink linear_path;
+#X text 103 204 <-- which library is this in?;
+#X text 103 224 <-- which library is this in?;
+#X obj 22 224 pddp/helplink score;
+#X text 103 244 <-- which library is this in?;
+#X obj 22 244 pddp/helplink tabenv;
+#X obj 22 264 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 286 cnv 17 3 145 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 285 float;
+#X text 98 452 float;
+#X obj 78 453 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 475 3 tabread;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/tabread -text
+pdpedia: tabread;
+#X text 168 285 - a float at the left inlet will move to the corresponding
+index in the table's array. The index ranges from 0 to the size of
+the array minus one (numbers outside this range are ignored). By default
+\, the size of an array in a table is 100 - or 0 to 99 . The actual
+size of the array can be altered using the array's dialog box or the
+resize command. More about arrays can be found below.;
+#X text 98 402 set;
+#X text 168 500 - the argument informs [tabread] which array to read.
+The array must exist in an open Pd patch/canvas or an error message
+will appear in the terminal window.;
+#X text 168 452 - outputs a floating point number which corresponds
+to the index you query using the inlet.;
+#X floatatom 74 251 0 0 0 0 value - -;
+#X floatatom 74 93 0 0 99 0 index - -;
+#X text 18 55 Open the tables and use your mouse to draw new values
+in the arrays - otherwise [tabread] will always output "0".;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array1 100 float 3;
+#A 0 -0.900001 -0.900001 -0.900001 -0.900001 -0.900001 -0.866667 -0.833334
+-0.833334 -0.833334 -0.833334 -0.800001 -0.800001 -0.766667 -0.766667
+-0.766667 -0.766667 -0.766667 -0.766667 -0.766667 -0.766667 -0.766667
+-0.766667 -0.766667 -0.766667 -0.766667 -0.766667 -0.766667 -0.766667
+-0.766667 -0.766667 -0.733334 -0.733334 -0.733334 -0.7 -0.666667 -0.633334
+-0.633334 -0.633334 -0.633334 -0.633334 -0.633334 -0.633334 -0.633334
+-0.6 -0.6 -0.566667 -0.566667 -0.566667 -0.566667 -0.566667 -0.566667
+-0.566667 -0.566667 -0.566667 -0.566667 -0.566667 -0.533334 -0.533334
+-0.5 -0.5 -0.466667 -0.466667 -0.433334 -0.4 -0.366667 -0.333333 -0.3
+-0.283333 -0.266667 -0.233333 -0.2 -0.133333 -0.133333 -0.133333 -0.0666667
+-0.0666667 -0.0666667 1.49012e-08 0.1 0.1 0.233333 0.3 0.333334 0.4
+0.433334 0.566667 0.633334 0.733334 0.733334 0.766667 0.766667 0.800001
+0.800001 0.800001 0.800001 0.800001 0.800001 0.800001 0.800001 0.900001
+;
+#X coords 0 1 99 -1 100 60 1;
+#X restore 383 83 graph;
+#X text 346 217 mouse to draw new values.;
+#X text 346 204 Open the table and use your;
+#X text 98 546 doc/2.control.examples/15.arrays.pd;
+#X text 98 561 doc/2.control.examples/16.more.arrays.pd;
+#X text 168 402 - the "set" message allows you to read from dynamic
+sources (e.g. \, "set tabread-help-array"). You can change the source
+at any time using the "set" message.;
+#X text 98 380 list;
+#X text 168 380 - a list will be truncated to the first item.;
+#X text 11 24 read numbers from a table;
+#X obj 98 577 pddp/pddplink all_about_arrays.pd -text all_about_arrays
+;
+#X text 80 500 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 107 93 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 107 113 f \$0;
+#X obj 110 162 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 110 182 f \$0;
+#X msg 107 135 set \$1-array1;
+#X obj 74 227 tabread \$0-array1;
+#X msg 110 204 set \$1-array2;
+#X obj 353 184 table \$0-array2;
+#X connect 19 0 38 0;
+#X connect 33 0 34 0;
+#X connect 34 0 37 0;
+#X connect 35 0 36 0;
+#X connect 36 0 39 0;
+#X connect 37 0 38 0;
+#X connect 38 0 18 0;
+#X connect 39 0 38 0;
diff --git a/doc/pddp/tabread4-help.pd b/doc/pddp/tabread4-help.pd
index 33923d72..36478c85 100644
--- a/doc/pddp/tabread4-help.pd
+++ b/doc/pddp/tabread4-help.pd
@@ -1,148 +1,125 @@
-#N canvas 2 1 658 618 12;
-#X obj 114 560 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 14 213 ARGUMENTS:;
-#X text 19 323 EXAMPLES:;
-#X text 22 471 SEE ALSO:;
-#N canvas 58 0 407 256 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 16 166 Externals and other object libraries;
-#X obj 16 41 tabread~;
-#X obj 165 41 tabwrite;
-#X obj 240 41 tabwrite~;
-#X obj 16 67 tabsend~;
-#X obj 92 67 tabreceive~;
-#X obj 192 67 tabplay~;
-#X obj 269 67 table;
-#X text 15 124 [array];
-#X obj 16 94 soundfiler;
-#X text 78 124 and fft objects.;
-#X text 21 187 [tabdump];
-#X obj 112 94 tabread4~;
-#X text 20 207 [tabenv];
-#X obj 203 94 getsize;
-#X obj 274 94 setsize;
-#X text 238 207 [arraysize];
-#X text 238 186 [score];
-#X text 114 186 [linear_path];
-#X text 114 207 [plot];
-#X obj 90 41 tabread;
-#X restore 114 508 pd Related_Objects;
-#N canvas 80 0 659 614 More_Info 0;
-#X text 46 564 Also See:;
-#X obj 125 564 pddp/pddplink all_about_arrays.pd -text all_about_arrays;
-#X text 21 8 WHAT IS INTERPOLATION?;
-#X text 38 34 "Interpolation" is a word which described a sophisticated
-way to "connect-the-dots". (This is over simplified \, but effective
-for the time being.);
-#X text 17 85 Let's say for example that we have an array whose values
-are: 0 \, 6 \, 5;
-#X text 36 120 There are 3 elements in this array \, right? Well \,
-using [tabread] we could successfully read only 3 numbers. But interpolation
-allows us to fill in the gaps between those values in a meaningful
-way. For example \, we can assume that between 0 and 6 \, we might
-find 4.5! We can also assume that the slope from 0 to 6 will be sharper
-than the slope from 6 to 5 In this way \, using [tabread4] will allow
-us to create much smoother lines and curves between our "dots".;
-#X text 35 254 However \, this process is much more complicated than
-mere "smoothing". 4-point interpolation incorporates a sophisticated
-formula to intelligently create meaningful increments between values
-in an array. For example: we could draw a few points on a baseball
-diamond between the pitcher's mound and home plate. Those points could
-represent the path a ball travels after a pitch. Using 4-point interpolation
-\, we might be able to assume the positions of the ball between our
-"known" points and determine whether the pitch was a fastball or a
-curve ball.;
-#X text 35 419 There are different formulas used to interpolate arrays.
-Each method has a sort of niche where it is most comfortable and most
-effective. Pd \, like most contemporary audio software \, uses 4-point
-interpolation which is also known as "Hermite" interpolation. It is
-the most "intelligent" 2-dimensional method of interpolation.;
-#N canvas 167 0 570 613 What_does_it_really_do? 0;
-#X text 20 10 Let's see [tabread4] at work...;
-#N canvas 0 0 450 300 graph36 0;
-#X array original_array 10 float 1;
-#A 0 -0.324999 -0.274999 -0.0749997 0.174999 -0.624998 0.649998 0.599998
-0.524998 -0.749997 -0.774996;
-#X coords 0 1 9 -1 200 140 1;
-#X restore 292 9 graph;
-#X text 37 158 The array above has only 10 elements. You can draw new
-shapes with your mouse.;
-#X obj 14 202 bng 15 250 50 0 empty empty Bang_me 18 7 0 8 -24198 -1
--1;
-#X obj 88 246 until;
-#N canvas 0 0 450 300 graph37 0;
-#X array interpolation 1000 float 0;
-#X coords 0 1 999 -1 200 140 1;
-#X restore 304 445 graph;
-#X obj 84 341 tabread4 original_array;
-#X obj 88 270 f;
-#X obj 118 270 + 1;
-#X obj 84 368 tabwrite interpolation;
-#X obj 87 295 t f f;
-#X obj 14 222 t b b;
-#X msg 48 250 0;
-#X obj 86 318 / 100;
-#X msg 88 222 1000;
-#X text 36 395 The array below has 1000 elements. At this resolution
-\, you will see the overall effect of 4-point interpolation.;
-#X connect 3 0 11 0;
-#X connect 4 0 7 0;
-#X connect 6 0 9 0;
-#X connect 7 0 8 0;
-#X connect 7 0 10 0;
-#X connect 8 0 7 1;
-#X connect 10 0 13 0;
-#X connect 10 1 9 1;
-#X connect 11 0 14 0;
-#X connect 11 1 12 0;
-#X connect 12 0 7 1;
-#X connect 13 0 6 0;
-#X connect 14 0 4 0;
-#X restore 36 526 pd What_does_it_really_do?;
-#X restore 114 534 pd More_Info;
-#X floatatom 161 443 0 0 0 3 - - -;
-#X floatatom 116 364 0 0 1000 1 location - -;
-#X msg 286 389 set another_table;
-#X text 106 162 Set - the "set <arrayname>" message allows you to read
-from dynamic sources. You can change the source at any time using the
-"set" message.;
-#X text 29 266 OUTLETS:;
-#X obj 486 442 table another_table;
-#X text 106 323 Open the tables and use your mouse to draw new values
-in the arrays - otherwise [tabread] will always output "0".;
-#X text 39 34 INLETS:;
-#X text 112 470 doc/2.control.examples/15.arrays.pd;
-#X text 113 489 doc/2.control.examples/16.more.arrays.pd;
-#X obj 21 10 tabread4;
-#X text 111 10 - READ NUMBERS FROM A TABLE WITH 4-POINT INTERPOLATION
-;
-#X text 105 213 One - the argument informs [tabread4] which array to
-read. The array must exist in an open Pd patch/canvas or an error message
-will appear in the terminal window.;
-#X text 104 265 One - outputs a floating point number representing
-an interpolation of the array value corresponding to the location described
-at the inlet.;
-#X text 107 34 Float - A float at the left inlet will move to the corresponding
-location in the table's array. The lowest valid number is "0" which
-represents the first element of the array. The highest valid number
-is a fraction below the actual length of the array. Each fractional
-increment between the lower and upper bounds of the array will produce
-an interpolation of the actual array values at the outlet.;
-#X msg 248 364 set davids_array;
-#N canvas 0 0 450 300 graph27 0;
-#X array davids_array 10 float 1;
-#A 0 0 0.749989 0 -0.849987 0 -0.349995 0.949986 0 -0.699989 -0.399994
-;
-#X coords 0 1 9 -1 100 40 1;
-#X restore 526 380 graph;
-#X text 249 444 interpolation;
-#X obj 121 390 / 100;
-#X obj 161 416 tabread4 davids_array;
-#X text 158 561 - Dave Sabine \, May 2 \, 2003;
-#X connect 8 0 25 0;
-#X connect 9 0 26 0;
-#X connect 22 0 26 0;
-#X connect 25 0 26 0;
-#X connect 26 0 7 0;
+#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 tabread4 3 12 0
+18 -204280 -1 0;
+#X obj 0 247 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 247 494 344 META 0;
+#X text 12 115 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 HELP_PATCH_AUTHORS Dave Sabine \, May 2 \, 2003 Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control array;
+#X text 12 85 DESCRIPTION read numbers from a table with 4-point interpolation
+;
+#X text 12 25 NAME tabread4;
+#X text 12 155 OUTLET_0 float;
+#X text 12 135 INLET_0 float set;
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#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 475 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 538 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 74 320 428 293 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 [tabread4] Related Objects;
+#X text 21 38 Native Pd Objects;
+#X obj 24 61 tabread~;
+#X obj 98 61 tabread4;
+#X obj 173 61 tabwrite;
+#X obj 248 61 tabwrite~;
+#X obj 24 89 tabsend~;
+#X obj 100 89 tabreceive~;
+#X obj 200 89 tabplay~;
+#X obj 277 89 table;
+#X text 21 140 [array];
+#X obj 24 116 soundfiler;
+#X text 84 140 and fft objects.;
+#X obj 211 116 getsize;
+#X obj 120 116 tabosc4~;
+#X text 22 165 Externals and other object libraries;
+#X obj 22 185 pddp/helplink zexy/tabdump;
+#X obj 22 205 pddp/helplink linear_path;
+#X text 103 205 <-- which library is this in?;
+#X text 103 225 <-- which library is this in?;
+#X obj 22 225 pddp/helplink score;
+#X text 103 245 <-- which library is this in?;
+#X obj 22 245 pddp/helplink tabenv;
+#X obj 22 265 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 256 cnv 17 3 160 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 255 float;
+#X text 98 362 list;
+#X text 98 430 float;
+#X obj 78 431 cnv 17 3 40 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 tabread4;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/tabread4 -text
+pdpedia: tabread4;
+#X floatatom 101 216 0 0 0 0 interpolation - -;
+#X floatatom 101 107 0 0 1000 0 location - -;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 10 float 1;
+#A 0 0 0.749989 0 -0.849987 0 -0.349995 0.949986 0 -0.699989 -0.399994
+;
+#X coords 0 1 9 -1 100 40 1;
+#X restore 316 73 graph;
+#X text 168 362 - a list will be truncated to the first item.;
+#X text 98 377 set;
+#X text 168 255 - a float at the left inlet will move to the corresponding
+location in the table's array. The lowest valid number is "0" which
+represents the first element of the array. The highest valid number
+is a fraction below the actual length of the array (values out of range
+are ignored). Each fractional increment between the lower and upper
+bounds of the array will produce an interpolation of the actual array
+values at the outlet.;
+#X text 168 377 - the "set" message allows you to read from dynamic
+sources (e.g. \, "set tabread-help-array"). You can change the source
+at any time using the "set" message.;
+#X text 98 558 doc/2.control.examples/15.arrays.pd;
+#X text 98 573 doc/2.control.examples/16.more.arrays.pd;
+#X text 168 430 - outputs a floating point number representing an interpolation
+of the array value corresponding to the location described at the inlet.
+;
+#X text 11 23 read numbers from a table with 4-point interpolation
+;
+#X obj 98 543 pddp/pddplink all_about_arrays.pd -text all_about_arrays
+;
+#X obj 101 132 / 100;
+#X text 323 163 Draw values in the table below:;
+#X text 168 493 - the name of the array or table to read. The array
+or table must exist in an open Pd patch/canvas or an error message
+will appear in the console.;
+#X text 80 493 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 101 189 tabread4 \$0-array;
+#X obj 172 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 172 145 f \$0;
+#X msg 172 166 set \$1-another_table;
+#X obj 374 182 table \$0-another_table 10;
+#X obj 182 47 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 182 67 f \$0;
+#X msg 182 89 set \$1-array;
+#X connect 16 0 27 0;
+#X connect 27 0 32 0;
+#X connect 32 0 15 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 32 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 39 0 32 0;
diff --git a/doc/pddp/tabread4~-help.pd b/doc/pddp/tabread4~-help.pd
new file mode 100644
index 00000000..c95cb692
--- /dev/null
+++ b/doc/pddp/tabread4~-help.pd
@@ -0,0 +1,146 @@
+#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 tabread4~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 305 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 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS Updated for Pd version 0.29. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal array;
+#X text 12 85 DESCRIPTION 4-point-interpolating table lookup;
+#X text 12 25 NAME tabread4~;
+#X text 12 125 INLET_0 signal set;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 signal;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 417 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 449 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 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;
+#N canvas 79 318 428 294 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 21 38 Native Pd Objects;
+#X obj 24 61 tabread~;
+#X obj 98 61 tabread4;
+#X obj 173 61 tabwrite;
+#X obj 248 61 tabwrite~;
+#X obj 24 89 tabsend~;
+#X obj 100 89 tabreceive~;
+#X obj 200 89 tabplay~;
+#X obj 277 89 table;
+#X text 21 140 [array];
+#X obj 24 116 soundfiler;
+#X text 84 140 and fft objects.;
+#X obj 120 116 tabread4~;
+#X obj 211 116 getsize;
+#X obj 282 116 setsize;
+#X text 8 2 [tabread4~] Related Objects;
+#X text 21 170 Externals and other object libraries;
+#X obj 21 190 pddp/helplink zexy/tabdump;
+#X obj 21 210 pddp/helplink linear_path;
+#X text 102 210 <-- which library is this in?;
+#X text 102 230 <-- which library is this in?;
+#X obj 21 230 pddp/helplink score;
+#X text 102 250 <-- which library is this in?;
+#X obj 21 250 pddp/helplink tabenv;
+#X obj 21 270 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 314 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 426 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 tabread4~;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/tabread4~
+-text pdpedia: tabread4~;
+#X text 11 23 4-point-interpolating table lookup;
+#X text 68 174 signal input x(n);
+#X obj 21 261 snapshot~;
+#X obj 40 239 metro 200;
+#X obj 21 115 sig~;
+#X floatatom 21 89 0 0 0 0 - - -;
+#X floatatom 21 284 0 0 0 0 - - -;
+#X text 98 313 signal;
+#X text 168 313 - the incoming signal is the index. Indices should
+range from 1 to the size of the array minus two \, so that the 4-point
+interpolation is meaningful.;
+#X text 53 83 Shift-drag the number box to see the effect of interpolation.
+;
+#X text 98 353 set;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 10 float 0;
+#X coords 0 1 9 -1 160 100 1;
+#X restore 289 141 graph;
+#X text 98 425 signal;
+#X obj 40 217 loadbang;
+#X obj 100 515 pddp/pddplink all_about_arrays.pd -text all_about_arrays
+;
+#X text 168 467 - the name of the array or table from which [tabread4~]
+will read data. The array or table must exist in an open Pd patch/canvas
+or an error message will appear in the console.;
+#N canvas 117 345 428 159 init 0;
+#X obj 23 125 s tabread4~-help-tab;
+#X msg 23 103 0 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 23 81 loadbang;
+#X text 8 2 [tabread4~] [table] initialization;
+#X text 20 38 This subpatch just initializes a [table] to some values.
+(Values in a [table] are not saved in the patch.);
+#X connect 1 0 0 0;
+#X connect 3 0 1 0;
+#X restore 288 270 pd init;
+#X text 168 353 - the "set" message \, followed by the name of an array
+\, permits you to switch between arrays (e.g. \, "set another_array").
+;
+#X text 80 467 1) symbol;
+#X text 18 44 [tabread4~] is used to build samplers and other table
+lookup algorithms. The interpolation scheme is 4-point polynomial.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 100 530 pddp/pddplink ../3.audio.examples/B03.tabread4.pd -text
+doc/3.audio.examples/B03.tabread4.pd;
+#X obj 100 545 pddp/pddplink ../3.audio.examples/B04.tabread4.interpolation.pd
+-text doc/3.audio.examples/B04.tabread4.interpolation.pd;
+#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 247 395 pddp/pddplink ../3.audio.examples/B15.tabread4~-onset.pd
+-text doc/3.audio.examples/B15.tabread4~-onset.pd;
+#X text 168 395 - onset. See:;
+#X obj 100 560 pddp/pddplink ../3.audio.examples/B06.table.switching.pd
+-text doc/3.audio.examples/B06.table.switching.pd;
+#X obj 100 575 pddp/pddplink ../3.audio.examples/B07.sampler.pd -text
+doc/3.audio.examples/B07.sampler.pd;
+#X obj 21 194 tabread4~ \$0-array;
+#X obj 289 247 table \$0-array2;
+#X obj 66 113 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 66 133 f \$0;
+#X msg 66 155 set \$1-array2;
+#X obj 170 280 s \$0-array2;
+#X msg 170 253 sinesum 256 1;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 42 0;
+#X connect 17 0 16 0;
+#X connect 25 0 15 0;
+#X connect 42 0 14 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 46 0 42 0;
+#X connect 48 0 47 0;
diff --git a/doc/pddp/tabreceive~-help.pd b/doc/pddp/tabreceive~-help.pd
new file mode 100644
index 00000000..dfdd073b
--- /dev/null
+++ b/doc/pddp/tabreceive~-help.pd
@@ -0,0 +1,59 @@
+#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 tabreceive~ 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 52 247 494 344 META 0;
+#X text 12 115 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 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 GENRE help;
+#X text 12 45 KEYWORDS signal array needs_work block_oriented;
+#X text 12 85 DESCRIPTION read a block of a signal from an array continuously
+;
+#X text 12 25 NAME tabreceive~;
+#X text 12 135 INLET_0;
+#X text 12 155 OUTLET_0 signal;
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 487 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 524 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 565 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 74 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 103 43 fft~;
+#X obj 23 43 tabsend~;
+#X text 8 2 [tabreceive~] 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 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 456 3 tabreceive~;
+#X obj 425 20 pddp/pddplink http://wiki.puredata.info/en/tabreceive~
+-text pdpedia: tabreceive~;
+#X text 11 23 read a block of a signal from an array continuously;
+#X obj 95 226 tabreceive~;
+#X text 90 291 By default a block is 64 samples \; this can be reset
+using the block~ object.;
+#X text 203 226 - read a block of a signal from an array continuously
+;
+#X text 168 542 - the name of an array to read from.;
+#X text 98 495 signal;
+#X text 98 458 unknown;
+#X text 80 542 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 570 pddp/pddplink all_about_arrays.pd;
diff --git a/doc/pddp/tabsend~-help.pd b/doc/pddp/tabsend~-help.pd
new file mode 100644
index 00000000..accb250a
--- /dev/null
+++ b/doc/pddp/tabsend~-help.pd
@@ -0,0 +1,97 @@
+#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 tabsend~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 464 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 115 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 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 GENRE help;
+#X text 12 45 KEYWORDS signal array block_oriented;
+#X text 12 85 DESCRIPTION write one block of a signal continuously
+to an array;
+#X text 12 135 DATATYPE_IN signal;
+#X text 12 155 DATATYPE_OUT;
+#X text 12 25 NAME tabsend~;
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 501 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 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 76 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 103 43 fft~;
+#X text 8 2 [tabsend~] Related Objects;
+#X obj 23 43 tabreceive~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 473 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 tabsend~;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/tabsend~ -text
+pdpedia: tabsend~;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 64 float 2;
+#X coords 0 1 64 -1 100 70 1;
+#X restore 291 205 graph;
+#X obj 83 169 loadbang;
+#X text 98 505 (none);
+#X text 98 472 signal;
+#N canvas 68 141 428 387 Using_tabsend~_with_block~ 0;
+#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 (subpatch) 0;
+#X array \$0-array2 128 float 0;
+#X coords 0 1 127 -1 128 100 1;
+#X restore 193 117 graph;
+#X msg 24 305 set 128;
+#X msg 24 257 set 64;
+#X obj 194 117 cnv 15 64 20 empty empty 64_samples 0 10 0 10 -257985
+-66577 0;
+#X obj 193 197 cnv 15 128 20 empty empty 128_samples 60 10 0 10 -4034
+-66577 0;
+#X obj 23 117 osc~ 512;
+#X text 73 256 default size;
+#X text 78 303 double size;
+#X obj 24 353 block~;
+#X text 8 2 [tabsend~] Using [tabsend~] with [block~];
+#X text 21 230 Try changing the block size:;
+#X text 20 38 You can use [block~] to change the blocksize and \, consequently
+\, how many samples are send to the specified array by [tabsend~].
+;
+#X obj 24 148 tabsend~ \$0-array2;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 6 0 13 0;
+#X restore 83 368 pd Using_tabsend~_with_block~;
+#X text 80 320 By default a block is 64 samples. This can be reset
+using the [block~] object \, as in the subpatch below:;
+#X obj 83 228 osc~;
+#X msg 83 198 512;
+#X text 168 472 - the incoming signal to be sent to the table/array.
+;
+#X text 81 121 The [tabsend~] object writes an audio signal continuously
+to an array.;
+#X text 11 23 write one block of a signal continuously to an array
+;
+#X text 168 543 - the name of an array to write to.;
+#X text 80 543 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 108 570 pddp/pddplink all_about_arrays.pd;
+#X obj 83 258 tabsend~ \$0-array;
+#X connect 12 0 18 0;
+#X connect 17 0 27 0;
+#X connect 18 0 17 0;
diff --git a/doc/pddp/tabwrite-help.pd b/doc/pddp/tabwrite-help.pd
index 706d6c0d..b83f7471 100644
--- a/doc/pddp/tabwrite-help.pd
+++ b/doc/pddp/tabwrite-help.pd
@@ -1,98 +1,136 @@
-#N canvas 2 1 650 610 12;
-#X obj 114 560 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 14 223 ARGUMENTS:;
-#X text 20 303 EXAMPLES:;
-#X text 22 471 SEE ALSO:;
-#N canvas 58 0 407 256 Related_Objects 0;
-#X text 25 11 Native Pd Objects;
-#X text 16 166 Externals and other object libraries;
-#X obj 16 41 tabread~;
-#X obj 90 41 tabread4;
-#X obj 240 41 tabwrite~;
-#X obj 16 67 tabsend~;
-#X obj 92 67 tabreceive~;
-#X obj 192 67 tabplay~;
-#X obj 269 67 table;
-#X text 15 124 [array];
-#X obj 16 94 soundfiler;
-#X text 78 124 and fft objects.;
-#X text 21 187 [tabdump];
-#X obj 112 94 tabread4~;
-#X text 20 207 [tabenv];
-#X obj 203 94 getsize;
-#X obj 274 94 setsize;
-#X text 238 207 [arraysize];
-#X text 238 186 [score];
-#X text 114 186 [linear_path];
-#X text 114 207 [plot];
-#X obj 165 41 tabread;
-#X restore 114 508 pd Related_Objects;
-#N canvas 80 0 661 319 More_Info 0;
-#X text 28 257 Also See:;
-#X obj 107 257 pddp/pddplink all_about_arrays.pd -text all_about_arrays;
-#X text 26 21 In this help document \, the [tabwrite] object is set
-to write values to one of the two arrays you see on your screen. The
-[tabwrite] will just as easily write values to tables buried in the
-[table] object. This terminology is somewhat confusing \, but the objects
-"array" and "table" exist separately because they offer different speeds
-of performance.;
-#X text 25 150 For example \, the;
-#X obj 163 150 tabread;
-#X text 229 150 documentation shows similar;
-#X text 24 169 functionality using [table] instead of array. In this
-particular document \, I chose to sacrifice speed for the sake of visually
-displaying the effectiveness of [tabwrite].;
-#X restore 114 534 pd More_Info;
-#X obj 32 10 tabread;
-#X floatatom 303 407 0 0 99 1 index - -;
-#X text 29 278 OUTLETS:;
-#X text 107 303 Open the tables and use your mouse to draw new values
-in the arrays - otherwise [tabread] will always output "0".;
-#X text 39 34 INLETS:;
-#X text 112 470 doc/2.control.examples/15.arrays.pd;
-#X text 113 489 doc/2.control.examples/16.more.arrays.pd;
-#X text 111 10 - WRITE NUMBERS TO A TABLE;
-#X text 38 50 - LEFT:;
-#X text 107 51 Float - A float at the left inlet will become the new
-value of the chosen index (whichever index is currently selected at
-the right inlet).;
-#X text 105 101 List - The left inlet also accepts pairs of floats
-(longer lists will be truncated). A number pair represents "value"
-and "index" - corresponding to "left" and "right" inlets.;
-#X text 105 151 Set - the "set <arrayname>" message allows you to write
-to dynamic locations. You can change the table at any time using the
-"set" message.;
-#X text 158 561 - Dave Sabine \, April 29 \, 2003;
-#X text 29 203 - RIGHT:;
-#X text 104 203 Float - selects which index in which to write the new
-value.;
-#X text 105 223 One - the argument informs [tabwrite] which array to
-write to. The array must exist in an open Pd patch/canvas or an error
-message will appear in the terminal window.;
-#X text 104 277 None.;
-#X obj 161 437 tabwrite davids_array;
-#X msg 220 375 set another_array;
-#X msg 204 346 set davids_array;
-#X floatatom 148 381 0 0 0 0 value - -;
-#N canvas 0 0 450 300 graph12 0;
-#X array davids_array 100 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.75 0 0 0 0 0
-0 0 0;
-#X coords 0 1 99 -1 100 70 1;
-#X restore 528 343 graph;
-#N canvas 0 0 450 300 graph12 0;
-#X array another_array 100 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 -0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0;
-#X coords 0 1 99 -1 100 70 1;
-#X restore 528 417 graph;
-#X connect 8 0 24 1;
-#X connect 25 0 24 0;
-#X connect 26 0 24 0;
-#X connect 27 0 24 0;
+#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 tabwrite 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 52 244 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Dave Sabine \, April 29 \, 2003 .
+Jonathan Wilkes revised the patch to conform to the PDDP template for
+Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control array;
+#X text 12 85 DESCRIPTION write numbers to a table;
+#X text 12 25 NAME tabwrite;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 456 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 481 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 540 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 77 311 428 300 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 [tabwrite] Related Objects;
+#X text 20 38 Native Pd Objects;
+#X obj 23 63 tabread~;
+#X obj 97 63 tabread4;
+#X obj 247 63 tabwrite~;
+#X obj 23 89 tabsend~;
+#X obj 99 89 tabreceive~;
+#X obj 199 89 tabplay~;
+#X obj 276 89 table;
+#X text 22 146 [array];
+#X obj 23 116 soundfiler;
+#X text 85 146 and fft objects.;
+#X obj 119 116 tabread4~;
+#X obj 210 116 getsize;
+#X obj 281 116 setsize;
+#X obj 172 63 tabread;
+#X text 20 170 Externals and other object libraries;
+#X obj 20 190 pddp/helplink zexy/tabdump;
+#X obj 20 210 pddp/helplink linear_path;
+#X text 101 210 <-- which library is this in?;
+#X text 101 230 <-- which library is this in?;
+#X obj 20 230 pddp/helplink score;
+#X text 101 250 <-- which library is this in?;
+#X obj 20 250 pddp/helplink tabenv;
+#X obj 20 270 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 309 cnv 17 3 115 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 308 float;
+#X text 98 348 list;
+#X obj 78 435 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 434 float;
+#X obj 472 3 tabwrite;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/tabwrite -text
+pdpedia: tabwrite;
+#X floatatom 174 251 0 0 99 1 index - -;
+#X obj 51 276 tabwrite davids_array;
+#X floatatom 51 84 0 0 0 0 value - -;
+#X text 168 308 - a float at the left inlet will become the new value
+of the chosen index (whichever index is currently selected at the right
+inlet).;
+#X text 168 348 - the left inlet also accepts pairs of floats (longer
+lists will be truncated). A number pair represents "value" and "index"
+- corresponding to "left" and "right" inlets.;
+#X text 98 388 set;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-davids_array 100 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0;
+#X coords 0 1 99 -1 100 70 1;
+#X restore 278 94 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-another_array 100 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 -0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0;
+#X coords 0 1 99 -1 100 70 1;
+#X restore 408 94 graph;
+#X text 98 559 doc/2.control.examples/15.arrays.pd;
+#X text 98 575 doc/2.control.examples/16.more.arrays.pd;
+#X text 11 23 write numbers to a table;
+#X text 167 434 - selects index in which to write the new value.;
+#X text 98 460 (none);
+#X obj 98 543 pddp/pddplink all_about_arrays.pd -text all_about_arrays
+;
+#X text 276 181 Click below to view the table:;
+#X text 168 498 - the name of the array or table to which [tabwrite]
+will write data. The array must exist in an open Pd patch/canvas or
+an error message will appear in the console.;
+#X text 168 388 - the "set" message \, followed by the name of an array
+\, permits you to switch between arrays (e.g. \, "set another_array")
+;
+#X text 80 498 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 90 117 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 90 137 f \$0;
+#X obj 95 186 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 95 206 f \$0;
+#X obj 84 47 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1 -1
+;
+#X obj 84 67 f \$0;
+#X msg 84 89 set \$1-davids_array;
+#X obj 278 202 table \$0-tabwrite_table;
+#X msg 90 159 set \$1-another_array;
+#X msg 95 228 set \$1-tabwrite_table;
+#X connect 15 0 16 1;
+#X connect 17 0 16 0;
+#X connect 34 0 35 0;
+#X connect 35 0 42 0;
+#X connect 36 0 37 0;
+#X connect 37 0 43 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 40 0 16 0;
+#X connect 42 0 16 0;
+#X connect 43 0 16 0;
diff --git a/doc/pddp/tabwrite~-help.pd b/doc/pddp/tabwrite~-help.pd
new file mode 100644
index 00000000..62fc1286
--- /dev/null
+++ b/doc/pddp/tabwrite~-help.pd
@@ -0,0 +1,114 @@
+#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 tabwrite~ 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 51 245 494 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS signal array;
+#X text 12 85 DESCRIPTION write a signal in an array;
+#X text 12 25 NAME tabwrite~;
+#X text 12 125 INLET_0 bang signal start stop set;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 475 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 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 77 301 428 313 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 38 Native Pd Objects;
+#X obj 23 63 tabread~;
+#X obj 97 63 tabread4;
+#X obj 23 89 tabsend~;
+#X obj 99 89 tabreceive~;
+#X obj 199 89 tabplay~;
+#X obj 276 89 table;
+#X text 22 146 [array];
+#X obj 23 116 soundfiler;
+#X text 85 146 and fft objects.;
+#X obj 119 116 tabread4~;
+#X obj 210 116 getsize;
+#X obj 281 116 setsize;
+#X obj 172 63 tabread;
+#X text 8 2 [tabwrite~] Related Objects;
+#X obj 247 63 tabwrite;
+#X text 20 180 Externals and other object libraries;
+#X obj 20 200 pddp/helplink zexy/tabdump;
+#X obj 20 220 pddp/helplink linear_path;
+#X text 101 220 <-- which library is this in?;
+#X text 101 240 <-- which library is this in?;
+#X obj 20 240 pddp/helplink score;
+#X text 101 260 <-- which library is this in?;
+#X obj 20 260 pddp/helplink tabenv;
+#X obj 20 280 pddp/helplink flatspace/arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 333 cnv 17 3 135 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 tabwrite~;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/tabwrite~
+-text pdpedia: tabwrite~;
+#X text 11 23 write a signal in an array;
+#X msg 95 195 bang;
+#X msg 111 238 stop;
+#X obj 78 165 phasor~ 200;
+#X text 98 332 bang;
+#X text 98 351 start;
+#X text 98 390 stop;
+#X text 98 410 set;
+#X text 98 479 (none);
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 1000 float 0;
+#X coords 0 1 999 -1 160 100 1;
+#X restore 329 183 graph;
+#X msg 98 216 start 500;
+#X text 168 521 - the name of the array or table to which [tabwrite~]
+will write data. The array or table must exist in an open Pd patch/canvas
+or an error message will appear in the console.;
+#X text 98 451 signal;
+#X text 75 55 [tabwrite~] records an audio signal sequentially into
+an array. Sending it "bang" writes from beginning to end of the array.
+To avoid writing all the way to the end \, you can send a "stop message
+at an appropriate later time. The "start" message allows skipping a
+number of samples at the nbeginning. (Starting and stopping occur on
+block boundaries \, typically multiples of 64 samples \, in the input
+signal.);
+#X text 80 521 1) symbol atom;
+#X text 168 351 - the "start" message will start recording at the specified
+element (e.g. \, "start 500" will start recording at the 500th element).
+;
+#X text 168 332 - start recording.;
+#X text 168 390 - stop recording.;
+#X text 168 410 - the "set" message \, followed by the name of an array
+\, permits you to switch between arrays (e.g. \, "set another_array").
+;
+#X text 166 452 - the signal to be written to the array.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 570 pddp/pddplink all_about_arrays.pd;
+#X obj 171 219 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 171 239 f \$0;
+#X msg 171 261 set \$1-array;
+#X obj 78 291 tabwrite~ \$0-array;
+#X connect 12 0 37 0;
+#X connect 13 0 37 0;
+#X connect 14 0 37 0;
+#X connect 21 0 37 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 37 0;
diff --git a/doc/pddp/tan-help.pd b/doc/pddp/tan-help.pd
new file mode 100644
index 00000000..7e181dd3
--- /dev/null
+++ b/doc/pddp/tan-help.pd
@@ -0,0 +1,97 @@
+#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 tan 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 54 243 494 360 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS control trigonometry;
+#X text 12 85 DESCRIPTION tangent function;
+#X text 12 25 NAME tan;
+#X text 12 125 INLET_0 float;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 536 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 564 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 540 (none);
+#N canvas 82 476 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 76 43 atan;
+#X obj 109 43 atan2;
+#X obj 149 43 exp;
+#X obj 177 43 log;
+#X obj 204 43 abs;
+#X obj 232 43 sqrt;
+#X obj 267 43 pow;
+#X obj 57 76 cos~;
+#X obj 89 76 osc~;
+#X obj 23 76 expr;
+#X obj 23 43 sin;
+#X obj 49 43 cos;
+#X text 8 2 [tan] 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 text 98 445 float;
+#X text 98 465 list;
+#X text 98 507 float;
+#X obj 78 508 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X floatatom 396 201 0 0 0 0 - - -;
+#X floatatom 303 202 0 0 0 0 - - -;
+#X obj 210 167 sin;
+#X floatatom 87 122 0 0 0 0 - - -;
+#X floatatom 210 201 0 0 0 0 - - -;
+#X obj 87 162 * 6.28319;
+#X obj 87 142 / 360;
+#X obj 303 168 cos;
+#X obj 396 167 tan;
+#X text 150 162 2 x Pi;
+#X floatatom 87 182 0 0 0 0 - - -;
+#X text 150 182 Radian;
+#X obj 87 202 s radians;
+#X obj 210 141 r radians;
+#X text 84 239 Trigonometry functions take input in Radians. To find
+a radian \, simply divide a number by 360 (to make it a fraction of
+a circle) and multiply it by 2(Pi) where Pi is equal to approximately
+3.14159265.;
+#X text 83 326 [tan] will produce a number which represents the tangent
+of an angle.;
+#X text 83 300 [sin] and [cos] will return numbers between -1 and 1:
+the sine and cosine of a number repectively.;
+#X obj 494 3 tan;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/tan -text
+pdpedia: tan;
+#X text 11 23 tangent function;
+#X text 148 465 - a list will be truncated \, and the first element
+will be used as input.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 18 0;
+#X connect 17 0 20 0;
+#X connect 19 0 24 0;
+#X connect 20 0 19 0;
+#X connect 21 0 15 0;
+#X connect 22 0 14 0;
+#X connect 24 0 26 0;
+#X connect 27 0 16 0;
+#X connect 27 0 21 0;
+#X connect 27 0 22 0;
diff --git a/doc/pddp/test-loop~.pd b/doc/pddp/test-loop~.pd
new file mode 100644
index 00000000..9966483d
--- /dev/null
+++ b/doc/pddp/test-loop~.pd
@@ -0,0 +1,58 @@
+#N canvas 33 0 680 609 12;
+#X floatatom 52 262 0 0 0 0 - - -;
+#X obj 261 346 print~;
+#X msg 47 373 bang;
+#X msg 274 313 bang;
+#X obj 52 306 loop~;
+#X floatatom 102 245 0 0 0 0 - - -;
+#N canvas 0 0 450 300 graph1 0;
+#X array array1 44100 float 0;
+#X coords 0 10 44100 0 200 150 1;
+#X restore 65 17 graph;
+#X msg 43 204 \; array1 resize 44100;
+#X obj 25 401 tabwrite~ array1;
+#X msg 208 371 bang;
+#X obj 176 402 tabwrite~ array1;
+#X msg 194 261 bang;
+#X obj 204 347 print~;
+#X msg 217 314 bang;
+#N canvas 0 0 450 300 graph1 0;
+#X array array2 150000 float 0;
+#X coords 0 1 150000 -1 200 150 1;
+#X restore 332 398 graph;
+#X msg 326 274 \; array2 resize 150000;
+#X obj 103 529 tabread4~ array2;
+#X obj 64 481 *~;
+#X obj 107 581 dac~;
+#X obj 105 552 hip~ 5;
+#X obj 123 482 samphold~;
+#X obj 102 506 +~;
+#X floatatom 106 430 0 0 0 0 - - -;
+#X obj 108 453 *~ 1000;
+#X obj 312 215 soundfiler;
+#X msg 330 170 read ../doc/sound/bell.aiff array2;
+#X msg 330 193 read ../doc/sound/vocal.aiff array2;
+#X connect 0 0 4 0;
+#X connect 2 0 8 0;
+#X connect 3 0 1 0;
+#X connect 4 0 12 0;
+#X connect 4 0 17 0;
+#X connect 4 0 8 0;
+#X connect 4 0 20 1;
+#X connect 4 1 10 0;
+#X connect 4 1 1 0;
+#X connect 4 1 17 1;
+#X connect 5 0 4 1;
+#X connect 9 0 10 0;
+#X connect 11 0 4 0;
+#X connect 13 0 12 0;
+#X connect 16 0 19 0;
+#X connect 17 0 21 0;
+#X connect 19 0 18 0;
+#X connect 19 0 18 1;
+#X connect 20 0 21 1;
+#X connect 21 0 16 0;
+#X connect 22 0 23 0;
+#X connect 23 0 20 0;
+#X connect 25 0 24 0;
+#X connect 26 0 24 0;
diff --git a/doc/pddp/text-help.pd b/doc/pddp/text-help.pd
new file mode 100644
index 00000000..d3c75314
--- /dev/null
+++ b/doc/pddp/text-help.pd
@@ -0,0 +1,68 @@
+#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 comments 3 12 0
+18 -204280 -1 0;
+#X obj 0 458 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 PLATFORM windows macosx gnulinux;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS Updated for Pd version 0.26. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control;
+#X text 12 85 DESCRIPTION text;
+#X text 12 25 NAME text;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 205 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 486 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 514 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 542 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 518 (none);
+#N canvas 98 495 428 119 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 comment Related Objects;
+#X obj 21 28 pddp/pddplink all_about_externals.pd -text _________;
+#X obj 21 28 pddp/pddplink all_about_externals.pd -text Externals;
+#X obj 21 48 pddp/helplink cyclone/comment;
+#X obj 21 68 pddp/helplink pddp/pddplink;
+#X obj 21 88 pddp/helplink pddp/helplink;
+#X restore 102 597 pd Related_objects;
+#X text 473 2 comment;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/comment -text
+pdpedia: comment;
+#X text 104 287 Phone number with hyphens: 555-555-5555;
+#X text 104 307 Same phone number without hyphens: 5.55556e+09;
+#X text 98 462 (none);
+#X text 98 491 (none);
+#X text 85 164 This is Pd's help window for comments \, which don't
+do anything. To create a comment \, use the "Put" menu or click <ctrl-5>.
+;
+#N canvas 100 383 428 181 Some_Comments_On_Comments 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 29 semicolons in comments cause the text \; following them
+to \; start \; on a \; new \; line;
+#X text 19 110 Try adding a period at the end of this sentence \, which
+ends with the number 1;
+#X text 19 140 If you close this subwindow \, then open it again \,
+the period you added will be gone.;
+#X text 8 2 comment Commentary: Additional Comments About Comments
+;
+#X restore 102 551 pd Some_Comments_On_Comments;
+#X text 11 23 text;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 85 217 If you want to jot down a large value like a phone number
+in pd \, use hyphens or dots so that pd will interpret it as a symbol
+atom-- otherwise Pd will change it to scientific notation!;
+#X obj 99 571 pddp/pddplink all_about_ascii_art.pd;
diff --git a/doc/pddp/textfile-help.pd b/doc/pddp/textfile-help.pd
new file mode 100644
index 00000000..f57237c9
--- /dev/null
+++ b/doc/pddp/textfile-help.pd
@@ -0,0 +1,116 @@
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 85 DESCRIPTION read and write text files;
+#X text 12 25 NAME textfile;
+#X text 12 125 INLET_0 bang rewind clear add add2 set read write print
+;
+#X text 12 145 OUTLET_0 list;
+#X text 12 165 OUTLET_1 bang;
+#X text 12 45 KEYWORDS control storage filesystem list_op anything_op
+;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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/doc/pddp/threshold~-help.pd b/doc/pddp/threshold~-help.pd
new file mode 100644
index 00000000..3ef78d91
--- /dev/null
+++ b/doc/pddp/threshold~-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 threshold~ 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 51 244 494 365 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Updated for Pd version 0.32. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE control;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION trigger from audio signal;
+#X text 12 25 NAME threshold~;
+#X text 12 125 INLET_0 set signal;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 bang;
+#X text 12 185 OUTLET_1 bang;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 396 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 468 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 569 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 101 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 [threshold~] Related Objects;
+#X obj 22 43 env~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 304 cnv 17 3 40 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 405 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 352 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 351 float;
+#X obj 453 3 threshold~;
+#X obj 425 20 pddp/pddplink http://wiki.puredata.info/en/threshold~
+-text pdpedia: threshold~;
+#X text 11 23 trigger from audio signal;
+#X obj 140 168 sig~;
+#X obj 140 226 threshold~ 10 100 0 100;
+#X floatatom 140 141 5 0 0 0 - - -;
+#X obj 140 254 print trigger;
+#X obj 275 254 print rest;
+#X msg 296 196 1;
+#X msg 327 196 0;
+#X msg 222 146 set 0 2000 1 2000;
+#X msg 222 169 set 10 100 0 100;
+#X text 98 303 signal;
+#X text 98 324 set;
+#X text 167 351 - a zero to the right inlet sets the object's state
+to "high." A nonzero value sets it to "low." There is no debounce period
+after this.;
+#X text 98 404 bang;
+#X obj 78 435 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 434 bang;
+#X text 168 404 - a bang is sent to the left outlet when the incoming
+signal is greater than or equal to the "trigger" value.;
+#X text 168 434 - a bang is sent to the right outlet when the incoming
+signal is less than or equal to the "rest" value.;
+#X text 168 324 - the "set" message can be used to change the parameters
+(i.e. \, the values set by the creation arguments).;
+#X text 168 303 - the incoming signal.;
+#X text 80 486 1) float;
+#X text 79 506 2) float;
+#X text 168 486 - (optional) trigger threshold.;
+#X text 167 526 - (optional) rest threshold.;
+#X text 167 506 - (optional) trigger debounce time (ms).;
+#X text 167 546 - (optional) rest debounce time (ms).;
+#X text 88 56 [threshold~] monitors its input signal and outputs bangs
+when the signal equals or exceeds a specified "trigger" value \, and
+also when the signal equals or recedes below a "rest" value. You can
+specify debounce times in milliseconds \, for the [threshold~] to wait
+after the two event types before triggering again.;
+#X text 79 526 3) float;
+#X text 79 546 4) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 15 0 16 0;
+#X connect 16 0 18 0;
+#X connect 16 1 19 0;
+#X connect 17 0 15 0;
+#X connect 20 0 16 1;
+#X connect 21 0 16 1;
+#X connect 22 0 16 0;
+#X connect 23 0 16 0;
diff --git a/doc/pddp/throw~-help.pd b/doc/pddp/throw~-help.pd
new file mode 100644
index 00000000..4692eeff
--- /dev/null
+++ b/doc/pddp/throw~-help.pd
@@ -0,0 +1,92 @@
+#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 throw~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 387 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 PLATFORM windows macosx gnulinux;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 245 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 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal;
+#X text 12 85 DESCRIPTION summing signal bus and nonlocal connection
+;
+#X text 12 25 NAME throw~;
+#X text 12 125 INLET_0 signal;
+#X text 12 205 RELEASE_DATE 1997;
+#X text 12 225 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 477 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 504 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;
+#N canvas 93 479 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 [throw~] Related Objects;
+#X obj 22 43 catch~;
+#X obj 72 43 send~;
+#X obj 119 43 receive~;
+#X obj 181 43 inlet~;
+#X obj 231 43 outlet~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 396 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 451 list;
+#X obj 474 3 throw~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/throw~ -text
+pdpedia: throw~;
+#X obj 73 220 throw~ signal1;
+#X floatatom 224 268 0 0 0 0 - - -;
+#X obj 73 243 sig~ 50;
+#X obj 224 243 snapshot~;
+#X obj 73 268 throw~ signal1;
+#X obj 73 149 sig~ 25;
+#X obj 224 168 catch~ signal1;
+#X obj 267 193 loadbang;
+#X obj 267 218 metro 200;
+#X floatatom 358 268 0 0 0 0 - - -;
+#X obj 358 243 snapshot~;
+#X obj 358 168 catch~ signal2;
+#X msg 89 172 set signal2;
+#X msg 90 196 set signal1;
+#X text 98 395 signal;
+#X text 168 451 - a list will be truncated to the first item.;
+#X text 98 423 float;
+#X text 98 481 (none);
+#X text 168 395 - an incoming signal will be sent to a [catch~] object
+that shares the same name as this [throw~] object.;
+#X text 11 23 summing signal bus and non-local connection;
+#X text 168 423 - a float may be sent if there are no signal connections
+made to the inlet of [throw~].;
+#X text 67 99 Any number of [throw~] objects can add into one [catch~]
+object (but two [catch~] objects cannot share the same name.);
+#X text 71 295 You can redirect [throw~] via a "set" message.;
+#X text 79 521 1) symbol atom;
+#X text 168 521 - [throw~] takes one argument-- a symbol atom-- as
+its name. Other [throw~] objects may have the same name \, but there
+may only be one [catch~] that shares this name.;
+#X text 151 47 For help on [catch~] \, see:;
+#X obj 151 62 pddp/pddplink catch~-help.pd -text catch~-help;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 14 0 16 0;
+#X connect 15 0 13 0;
+#X connect 17 0 12 0;
+#X connect 18 0 15 0;
+#X connect 19 0 20 0;
+#X connect 20 0 15 0;
+#X connect 20 0 22 0;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 12 0;
+#X connect 25 0 12 0;
diff --git a/doc/pddp/time_measurements.pd b/doc/pddp/time_measurements.pd
index 19f1dbb2..a3b3ed59 100644
--- a/doc/pddp/time_measurements.pd
+++ b/doc/pddp/time_measurements.pd
@@ -1,65 +1,75 @@
-#N canvas 289 74 815 597 12;
-#X obj 114 34 inlet;
-#X obj 424 31 inlet;
-#X obj 654 100 inlet;
-#X obj 319 494 outlet;
-#X obj 392 493 outlet;
-#X obj 480 493 outlet;
-#X obj 114 64 t b b;
-#X obj 37 134 timer;
-#X obj 104 135 cputime;
-#X obj 183 136 realtime;
-#X obj 299 62 osc~ 800;
-#X msg 424 87 1;
-#X msg 424 114 \; pd dsp \$1 \;;
-#X msg 369 94 0;
-#X obj 424 57 t b b;
-#X obj 312 251 timer;
-#X obj 379 252 cputime;
-#X obj 455 251 realtime;
-#X obj 298 86 env~;
-#X obj 298 110 > 0;
-#X obj 298 135 sel 1;
-#X obj 569 162 delay 3000;
-#X obj 654 132 t b b;
-#X obj 585 242 timer;
-#X obj 652 243 cputime;
-#X obj 728 242 realtime;
-#X connect 0 0 6 0;
-#X connect 1 0 14 0;
-#X connect 2 0 22 0;
-#X connect 6 0 7 1;
-#X connect 6 0 8 1;
-#X connect 6 0 9 1;
-#X connect 6 1 7 0;
-#X connect 6 1 8 0;
-#X connect 6 1 9 0;
-#X connect 7 0 3 0;
-#X connect 8 0 4 0;
-#X connect 9 0 5 0;
-#X connect 10 0 18 0;
-#X connect 11 0 12 0;
-#X connect 13 0 12 0;
-#X connect 14 0 11 0;
-#X connect 14 1 17 0;
-#X connect 14 1 16 0;
-#X connect 14 1 15 0;
-#X connect 15 0 3 0;
-#X connect 16 0 4 0;
-#X connect 17 0 5 0;
-#X connect 18 0 19 0;
-#X connect 19 0 20 0;
-#X connect 20 0 15 1;
-#X connect 20 0 16 1;
-#X connect 20 0 17 1;
-#X connect 20 0 13 0;
-#X connect 21 0 23 1;
-#X connect 21 0 24 1;
-#X connect 21 0 25 1;
-#X connect 22 0 21 0;
-#X connect 22 1 25 0;
-#X connect 22 1 24 0;
-#X connect 22 1 23 0;
-#X connect 23 0 3 0;
-#X connect 24 0 4 0;
-#X connect 25 0 5 0;
+#N canvas 247 23 555 619 10;
+#X obj 63 160 inlet;
+#X obj 280 90 inlet;
+#X obj 472 107 inlet;
+#X obj 177 493 outlet;
+#X obj 239 492 outlet;
+#X obj 307 492 outlet;
+#X obj 63 190 t b b;
+#X obj 7 250 timer;
+#X obj 51 250 cputime;
+#X obj 107 250 realtime;
+#X obj 205 79 osc~ 800;
+#X msg 280 146 1;
+#X msg 280 173 \; pd dsp \$1 \;;
+#X msg 250 146 0;
+#X obj 280 116 t b b;
+#X obj 177 250 timer;
+#X obj 239 251 cputime;
+#X obj 307 250 realtime;
+#X obj 204 103 env~;
+#X obj 204 157 > 0;
+#X obj 204 182 sel 1;
+#X obj 403 176 delay 3000;
+#X obj 472 139 t b b;
+#X obj 376 250 timer;
+#X obj 433 250 cputime;
+#X obj 499 249 realtime;
+#X obj 0 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 Time Measurement Abstraction;
+#X text 19 38 This abstraction is used in the help patches for [timer]
+\, [realtime] \, and [cputime] to compare the output of each of these
+objects.;
+#X obj 204 130 spigot;
+#X connect 0 0 6 0;
+#X connect 1 0 14 0;
+#X connect 2 0 22 0;
+#X connect 6 0 7 1;
+#X connect 6 0 8 1;
+#X connect 6 0 9 1;
+#X connect 6 1 7 0;
+#X connect 6 1 8 0;
+#X connect 6 1 9 0;
+#X connect 7 0 3 0;
+#X connect 8 0 4 0;
+#X connect 9 0 5 0;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 11 0 29 1;
+#X connect 13 0 12 0;
+#X connect 13 0 29 1;
+#X connect 14 0 11 0;
+#X connect 14 1 17 0;
+#X connect 14 1 16 0;
+#X connect 14 1 15 0;
+#X connect 15 0 3 0;
+#X connect 16 0 4 0;
+#X connect 17 0 5 0;
+#X connect 18 0 29 0;
+#X connect 19 0 20 0;
+#X connect 20 0 15 1;
+#X connect 20 0 16 1;
+#X connect 20 0 17 1;
+#X connect 20 0 13 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 1;
+#X connect 21 0 25 1;
+#X connect 22 0 21 0;
+#X connect 22 1 25 0;
+#X connect 22 1 24 0;
+#X connect 22 1 23 0;
+#X connect 23 0 3 0;
+#X connect 24 0 4 0;
+#X connect 25 0 5 0;
+#X connect 29 0 19 0;
diff --git a/doc/pddp/timer-help.pd b/doc/pddp/timer-help.pd
index 5010abaa..f22c4082 100644
--- a/doc/pddp/timer-help.pd
+++ b/doc/pddp/timer-help.pd
@@ -1,108 +1,165 @@
-#N canvas 11 8 937 643 10;
-#X msg 43 113 bang;
-#X msg 18 91 bang;
-#X obj 18 135 timer;
-#X obj 25 15 timer;
-#X floatatom 18 157 0 0 0;
-#X text 90 159 Output is in milliseconds;
-#X text 65 16 -- measure logical time;
-#X text 53 91 Click here to start or reset;
-#X text 13 44 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 11 185 [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 81 114 Click here to get elapsed logical time. Click again...and
-again...to see periodic measurements from the start or reset time.
-;
-#X text 10 282 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 52 545 time_measurements;
-#X obj 52 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 17 572 0 0 0;
-#X floatatom 108 585 0 0 0;
-#X floatatom 175 573 0 0 0;
-#X text 11 358 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 15 587 Logical Time;
-#X text 173 587 Real Time;
-#X text 107 601 CPU Time;
-#X obj 67 477 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 72 435 1 Measures elapsed time between two "bangs" from a [trigger]
-object.;
-#X text 87 469 2 Measures the amount of time Pd requires to turn on
-DSP and start an oscillator.;
-#X obj 445 484 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 445 17 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 472 36 WHY THE DISCREPANCIES BETWEEN CLOCKS?;
-#X text 475 59 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 obj 111 509 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 476 144 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 477 204 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 478 368 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.;
-#N canvas 0 0 454 304 related_objects_from_other_libraries 0;
-#X text 27 63 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 26 112 The best places to find information about Pd's libraries
-is:;
-#X text 23 134 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 25 149 or;
-#X text 25 164 iem.kug.ac.at/pdb/;
-#X obj 44 24 t3_timer;
-#X text 469 589 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X restore 505 476 pd related_objects_from_other_libraries;
-#X text 309 580 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 11 232 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 obj 625 445 metro;
-#X text 504 422 RELATED OBJECTS;
-#X obj 504 446 cputime;
-#X obj 562 445 realtime;
-#X text 132 501 3 Measures the amount of time Pd requires count to
-three...please wait for approximately 3 seconds.;
-#X connect 0 0 2 1;
-#X connect 1 0 2 0;
-#X connect 2 0 4 0;
-#X connect 12 0 14 0;
-#X connect 12 1 15 0;
-#X connect 12 2 16 0;
-#X connect 13 0 12 0;
-#X connect 21 0 12 1;
-#X connect 25 0 24 0;
-#X connect 28 0 12 2;
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 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 GENRE help;
+#X text 12 45 KEYWORDS control time;
+#X text 12 85 DESCRIPTION measure logical time;
+#X text 12 25 NAME timer;
+#X text 12 125 INLET_0 bang;
+#X text 12 145 INLET_1 bang;
+#X text 12 165 OUTLET_0 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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/doc/pddp/toggle-help.pd b/doc/pddp/toggle-help.pd
new file mode 100644
index 00000000..d8e4339a
--- /dev/null
+++ b/doc/pddp/toggle-help.pd
@@ -0,0 +1,400 @@
+#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 125 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 225 AUTHOR Thomas Musil;
+#X text 12 245 WEBSITE;
+#X text 12 305 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 65 KEYWORDS control GUI nonlocal;
+#X text 12 105 DESCRIPTION gui-toggle between zero and a non-zero value
+;
+#X text 12 25 NAME toggle;
+#X text 12 45 ALIAS tgl;
+#X text 12 145 INLET_0 float bang size nonzero init send receive label
+label_pos label_font color pos delta;
+#X text 12 185 OUTLET_0 float;
+#X text 12 285 RELEASE_VERSION;
+#X text 12 265 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/doc/pddp/touchin-help.pd b/doc/pddp/touchin-help.pd
new file mode 100644
index 00000000..c36e8d48
--- /dev/null
+++ b/doc/pddp/touchin-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 touchin 3 12 0 18
+-204280 -1 0;
+#X obj 0 431 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 220 494 375 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This help patch was created for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 85 DESCRIPTION needs a description;
+#X text 12 25 NAME touchin;
+#X text 12 125 INLET_0 float;
+#X text 12 145 INLET_1 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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 526 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 90 178 428 421 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 83 107 touchin;
+#X obj 28 33 polytouchin;
+#X obj 122 80 midiin;
+#X obj 27 107 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 103 33 touchout;
+#X obj 161 33 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [touchin] Related Objects;
+#X text 26 270 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 25 349 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 26 251 Externals;
+#X obj 26 300 pddp/helplink maxlib/pitch;
+#X obj 26 315 pddp/helplink maxlib/score;
+#X obj 26 330 pddp/helplink maxlib/chord;
+#X obj 26 365 pddp/helplink cyclone/midiformat;
+#X obj 26 380 pddp/helplink cyclone/midiparse;
+#X obj 26 395 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 467 float;
+#X obj 78 468 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 435 (none);
+#X text 98 492 float;
+#X obj 78 493 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X text 80 545 1) float;
+#X text 11 23 needs a description;
+#X floatatom 275 218 0 0 0 0 - - -;
+#X floatatom 236 218 0 0 0 0 - - -;
+#X text 168 467 - MIDI channel.;
+#X text 168 492 - ???;
+#X text 168 545 - ???;
+#X obj 472 3 touchin;
+#X obj 443 20 pddp/pddplink http://wiki.puredata.info/en/touchin -text
+pdpedia: touchin;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 236 192 touchin;
+#X connect 25 0 18 0;
+#X connect 25 1 17 0;
diff --git a/doc/pddp/touchout-help.pd b/doc/pddp/touchout-help.pd
new file mode 100644
index 00000000..b2c3a28d
--- /dev/null
+++ b/doc/pddp/touchout-help.pd
@@ -0,0 +1,95 @@
+#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 touchout 3 12 0
+18 -204280 -1 0;
+#X obj 0 417 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This help patch was created for Pd
+version 0.35 by Michal Seta as part of a project called pddp proposed
+by Krzysztof Czaja \, managed and edited by Dave Sabine \, 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 GENRE help;
+#X text 12 45 KEYWORDS control MIDI;
+#X text 12 25 NAME touchout;
+#X text 12 125 INLET_0 float list;
+#X text 12 145 INLET_1 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X text 12 85 DESCRIPTION needs a description;
+#X restore 500 597 pd META;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 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 90 178 428 421 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 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 117 33 touchin;
+#X obj 175 33 polytouchin;
+#X obj 122 80 midiin;
+#X obj 27 107 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 283 167 touchout;
+#X obj 28 33 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [touchin] Related Objects;
+#X text 25 265 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 24 344 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 25 246 Externals;
+#X obj 25 295 pddp/helplink maxlib/pitch;
+#X obj 25 310 pddp/helplink maxlib/score;
+#X obj 25 325 pddp/helplink maxlib/chord;
+#X obj 25 360 pddp/helplink cyclone/midiformat;
+#X obj 25 375 pddp/helplink cyclone/midiparse;
+#X obj 25 390 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 425 float;
+#X obj 78 426 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 503 (none);
+#X text 98 470 float;
+#X obj 78 471 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X text 80 545 1) float;
+#X text 11 23 needs a description;
+#X text 168 425 - MIDI channel.;
+#X text 168 470 - ???;
+#X text 168 545 - ???;
+#X obj 236 192 touchout;
+#X floatatom 236 163 5 0 0 0 - - -;
+#X floatatom 281 163 5 0 0 0 - - -;
+#X obj 472 3 touchout;
+#X obj 439 20 pddp/pddplink http://wiki.puredata.info/en/touchout -text
+pdpedia: touchout;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 445 list;
+#X text 168 445 - a list is distributed to the two inlets.;
+#X connect 21 0 20 0;
+#X connect 22 0 20 1;
diff --git a/doc/pddp/trigger-help.pd b/doc/pddp/trigger-help.pd
index b3c3c189..abff60ed 100644
--- a/doc/pddp/trigger-help.pd
+++ b/doc/pddp/trigger-help.pd
@@ -1,266 +1,155 @@
-#N canvas 132 92 900 611 10;
-#X obj 8 8 trigger;
-#X text 19 222 As I see it \, the [trigger] object serves two great
-purposes which aren't really related - but they might be on some level
-that I don't fully understand yet.;
-#X text 17 270 1 Sequence a series of bangs - or triggers for symbols
-and/or other messages. In the example below \, you should see that
-it is important that it is important that [metro] gets a tempo setting
-before it is started - but let's assume for a moment that you wanted
-to start the [metro] with only a single click.;
-#X obj 21 473 metro;
-#X msg 46 454 1000;
-#X obj 21 493 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 21 396 tgl 15 0 empty empty On/Off 0 -6 0 7 -262144 -1 -1 0
-1;
-#X text 19 96 The [trigger] object can be abbreviated as "t" and the
-creation arguments can be abbreviated as follows:;
-#X obj 109 142 trigger float bang symbol list pointer anything;
-#X text 210 161 is the same as;
-#X obj 213 181 t f b s l p a;
-#X obj 21 414 t f b;
-#X text 22 518 This example is simple \, and may not be very practicle
-in most situations \, but it clearly shows how [trigger] can be used
-to create a simple sequence of events. It is important to note however
-that the messages sent from [trigger]'s outlets occur in ZERO time
-with no delay between the events...more at the top right of the page...
-;
-#X obj 459 86 t b b;
-#X msg 459 67 bang;
-#X obj 459 116 timer;
-#X floatatom 459 136 5 0 0 0 - - -;
-#X obj 431 26 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 431 592 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 493 67 Click here.;
-#X text 499 133 Watch here.;
-#X text 451 155 Now \, to prove that I'm not crazy...click here >;
-#X obj 763 204 timer;
-#X floatatom 763 225 5 0 0 0 - - -;
-#X obj 790 182 delay 2000;
-#X text 572 81 any delay between the first bang and the second bang
-;
-#X text 573 97 from the trigger.;
-#X text 451 190 object to force a 2 second delay between the;
-#X text 574 67 In this case \, the [timer] object does not perceive
-;
-#X text 444 283 2 Click this subpatch to read about [trigger]'s second
-great purpose...;
-#N canvas 148 22 927 612 trigger_can_convert_data_types 0;
-#X msg 425 103 2.5;
-#X msg 523 103 bang;
-#X msg 465 103 23 64;
-#X msg 569 103 symbol dog;
-#X obj 425 228 trigger float bang symbol list anything;
-#X text 24 24 All sophisticated programming environments provide tools
-to convert data types. For instance \, Visual Basic has:;
-#X text 24 55 - VarType: to check the data type.;
-#X text 24 70 - CStr: to convert a variable to a string.;
-#X text 23 84 - CDate: to convert a variable to a date.;
-#X text 24 99 - isNumeric: to test whether the variable is a number.
-;
-#X text 22 113 - etc.;
-#X text 19 137 [trigger] is one object in Pd which can convert an incoming
-atom to a different type of atom.;
-#X text 422 30 In the example below \, you can see that this [trigger]
-has creation arguments which specify what data type the object should
-output through each outlet. Messages which are sent to the first outlet
-will be floats \; the second outlet will send bangs \; the third \,
-symbols \; etc.;
-#X text 19 172 To prove this \, click on each of the messages below
-and watch your terminal window for the output.;
-#X obj 20 239 t b;
-#X msg 20 210 bang;
-#X msg 57 210 1;
-#X floatatom 90 212 5 0 0 0 - - -;
-#X msg 132 211 symbol cat;
-#X msg 204 211 this is anything;
-#X obj 20 259 print all_messages_are_converted_to_bangs;
-#X text 20 292 Another example showing floats and symbols.;
-#X msg 20 308 bang;
-#X floatatom 90 310 5 0 0 0 - - -;
-#X msg 132 309 symbol cat;
-#X msg 206 319 this is anything;
-#X obj 20 337 t f s;
-#X msg 57 308 1 0;
-#X obj 45 387 print converted_to_symbols;
-#X obj 20 407 print converted_to_floats;
-#X text 62 338 Note that "this is anything" causes an error. That is
-because 'anythings' don't conform to floats \, symbols \, lists \,
-pointers. They can only be converted to "bang".;
-#X text 18 430 In the example above \, note that the trigger object
-does not split a list among the outlets like [unpack] does. Instead
-it sends all list elements through all outlets and converts them as
-necessary.;
-#X text 20 486 Also note that some messages don't convert as nicely
-as others. Hence \, the symbol "cat" converts to a ZERO when [trigger]
-converts that symbol into a float. Likewise \, all numbers will convert
-to a symbol called "float" when sent through [trigger]'s right-most
-outlet.;
-#X floatatom 425 248 5 0 0 0 - - -;
-#X obj 482 248 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 539 286 10 0 0 0 - - -;
-#X floatatom 594 162 5 0 0 0 - - -;
-#X obj 594 200 pack f s;
-#X msg 637 161 symbol earth;
-#X msg 652 181 symbol jupiter;
-#X obj 596 267 print a_list;
-#X floatatom 426 403 5 0 0 0 - - -;
-#X symbolatom 470 403 10 0 0 0 - - -;
-#X obj 514 421 print another_list;
-#X text 630 131 Click on all these.;
-#X obj 426 363 r anythings;
-#X text 425 303 Note how each of the messages sent to this trigger
-are converted appropriately for their receiving atoms boxes. Also note
-that "anythings" are sent to the example below.;
-#X text 430 447 I'e used the [route] object to show how "anythings"
-are converted as they pass through the above [trigger]. Note that all
-messages converted to floats are displayed here in the number box \,
-all symbols are displayed in the symbol box \, and all lists are printed
-to the terminal window.;
-#X obj 654 247 s anythings;
-#X obj 426 383 route float symbol list;
-#X msg 642 103 symbol cat;
-#X connect 0 0 4 0;
-#X connect 1 0 4 0;
-#X connect 2 0 4 0;
-#X connect 3 0 4 0;
-#X connect 4 0 33 0;
-#X connect 4 1 34 0;
-#X connect 4 2 35 0;
-#X connect 4 3 40 0;
-#X connect 4 4 48 0;
-#X connect 14 0 20 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 17 0 14 0;
-#X connect 18 0 14 0;
-#X connect 19 0 14 0;
-#X connect 22 0 26 0;
-#X connect 23 0 26 0;
-#X connect 24 0 26 0;
-#X connect 25 0 26 0;
-#X connect 26 0 29 0;
-#X connect 26 1 28 0;
-#X connect 27 0 26 0;
-#X connect 36 0 37 0;
-#X connect 37 0 4 0;
-#X connect 38 0 37 1;
-#X connect 39 0 37 1;
-#X connect 45 0 49 0;
-#X connect 49 0 41 0;
-#X connect 49 1 42 0;
-#X connect 49 2 43 0;
-#X connect 50 0 4 0;
-#X restore 450 317 pd trigger_can_convert_data_types;
-#X obj 763 244 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 847 162 5 0 0 0 - - -;
-#X text 452 238 at the top-right to clearly see "logical time";
-#X text 452 251 as measured by [timer].;
-#X text 484 546 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X text 447 370 RELATED OBJECTS;
-#X obj 532 396 route;
-#X obj 452 396 unpack;
-#X obj 498 396 pack;
-#X obj 573 396 delay;
-#X obj 615 396 pipe;
-#X obj 650 396 float;
-#X obj 690 396 int;
-#X obj 719 396 symbol;
-#N canvas 0 22 456 306 related_objects_from_other_libraries 0;
-#X obj 31 36 exciter 200 200 8 0.1 1 1;
-#X text 26 77 These objects are offered in Pd only if you have downloaded
+#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 trigger 3 12 0 18
+-204280 -1 0;
+#X obj 0 219 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 242 494 358 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 105 DESCRIPTION sequence message in right-to-left order/
+convert data types;
+#X text 12 145 INLET_0 anything;
+#X text 12 165 OUTLET_N anything;
+#X text 12 25 NAME trigger;
+#X text 12 45 ALIAS t;
+#X text 12 65 KEYWORDS control needs_work list_op bang_op;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 256 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 309 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 497 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 49 301 428 283 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 [trigger] Related Objects;
+#X obj 103 43 route;
+#X obj 23 43 unpack;
+#X obj 69 43 pack;
+#X obj 144 43 delay;
+#X obj 186 43 pipe;
+#X obj 221 43 float;
+#X obj 261 43 int;
+#X obj 290 43 symbol;
+#X text 20 77 Externals;
+#X text 20 128 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 25 126 The best places to find information about Pd's libraries
+#X text 20 187 The best places to find information about Pd's libraries
is:;
-#X text 22 148 www.puredata.org and click on "Downloads" then "Software"
+#X text 21 208 www.puredata.org and click on "Downloads" then "Software"
;
-#X text 24 163 or;
-#X text 24 178 iem.kug.ac.at/pdb/;
-#X restore 452 427 pd related_objects_from_other_libraries;
-#X text 447 455 MORE INFO;
-#X obj 454 482 pddp/pddplink all_about_data_types.pd -text all_about_data_types;
-#X obj 455 508 pddp/pddplink all_about_lists_vs_anythings.pd -text all_about_lists_vs_anythings;
-#X obj 763 157 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 12 130 "float" = f;
-#X text 12 142 "bang" = b;
-#X text 11 154 "symbol" = s;
-#X text 12 168 "list" = l;
-#X text 12 196 "anything" = a;
-#X text 12 182 "pointer" = p;
-#X text 21 37 The [trigger] object outputs its input from right to
+#X text 21 223 or;
+#X text 21 238 iem.kug.ac.at/pdb/;
+#X obj 20 104 pddp/helplink unauthorized/exciter;
+#X restore 102 597 pd Related_objects;
+#X obj 78 228 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 265 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 447 3 trigger;
+#X obj 517 3 t;
+#X text 497 3 or;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/trigger -text
+pdpedia: trigger;
+#X text 98 64 The [trigger] object outputs its input from right to
left \, converting to the types indicated by its creation arguments.
There is also a "pointer" argument type (see the [pointer] object.)
;
-#X text 15 356 Click the toggle to set the tempo and start the [metro]
-simultaneously.;
-#X text 62 405 Triggers are sent from right to left...so our tempo
-messages gets sent to [metro] immediately before the numbers from the
-toggle to start and stop the [metro].;
-#X text 457 32 Below is a simple structure which will measure the "logical
-time" between "bangs" from the [trigger] object.;
-#X text 452 176 In this case \, I've simply patched a [delay];
-#X text 451 204 first and second "bangs" sent to the [timer].;
-#X text 452 224 You can reset the [delay] with the number box;
-#X text 68 7 - sequence messages in right-to-left order and convert
-data;
-#X text 485 7 types;
-#N canvas 69 298 440 489 trigger 0;
-#X obj 14 298 trigger anything bang float list pointer symbol;
-#X obj 14 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 339 518 pddp/pddplink all_about_lists_vs_anythings.pd -text
+all_about_lists_vs_anythings;
+#X text 98 227 anything;
+#X text 168 227 - the inlet to [trigger] takes any type of message.
+;
+#X text 98 264 variable;
+#X text 168 328 - for each creation argument \, a new outlet is created.
+If no arguments are supplied \, trigger defaults to two outlets that
+output bang messages.;
+#X text 98 371 The [trigger] object can be abbreviated as "t" and the
+creation arguments can be abbreviated as follows:;
+#X obj 214 413 trigger float bang symbol list pointer anything;
+#X text 315 432 is the same as;
+#X obj 318 452 t f b s l p a;
+#X text 97 408 "float" = f;
+#X text 97 420 "bang" = b;
+#X text 96 432 "symbol" = s;
+#X text 97 446 "list" = l;
+#X text 97 474 "anything" = a;
+#X text 97 460 "pointer" = p;
+#X floatatom 230 114 5 0 0 0 - - -;
+#X obj 230 160 +;
+#X floatatom 230 185 5 0 0 0 - - -;
+#X obj 230 136 t a a;
+#X text 11 23 sequence messages in right-to-left order/ convert data
+types;
+#X text 168 264 - upon receiving a message to its inlet \, [trigger]
+outputs messages specified by the creation arguments. (Like nearly
+all Pd objects \, messages are sent out from right to left.);
+#N canvas 73 80 428 469 trigger_oddities 0;
+#X obj 25 325 trigger anything bang float list pointer symbol;
+#X obj 25 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 69 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 87 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 133 317 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 144 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 199 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 210 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 264 317 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 248 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 329 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 316 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 200 386 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 216 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 258 386 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 273 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 103 365 route float;
-#X obj 103 385 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 114 413 route float;
+#X obj 114 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 167 385 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 177 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 312 388 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 304 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 376 388 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 373 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 17 385 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 28 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 74 385 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 85 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 17 365 route bang;
-#X obj 312 367 route symbol;
-#X obj 200 366 route list;
-#X msg 43 174 1 2 3;
-#X msg 15 77 1;
-#X msg 21 102 float 2;
-#X msg 28 126 test;
-#X msg 35 151 symbol this;
-#X msg 57 220 list 1 two 3;
-#X msg 66 267 list one 2 three;
-#X obj 165 443 print LIST;
-#X obj 81 443 print FLOAT;
-#X msg 48 199 1 two 3;
-#X msg 61 244 one 2 three;
-#X text 18 16 "float" is interpreted;
-#X text 19 36 "symbol" is not interpreted;
-#X text 20 55 "list" is interpreted \, and outputted;
+#X obj 28 413 route bang;
+#X obj 304 413 route symbol;
+#X obj 216 413 route list;
+#X msg 54 201 1 2 3;
+#X msg 25 104 1;
+#X msg 32 129 float 2;
+#X msg 39 153 test;
+#X msg 46 178 symbol this;
+#X msg 68 247 list 1 two 3;
+#X msg 77 294 list one 2 three;
+#X obj 221 390 print LIST;
+#X obj 136 390 print FLOAT;
+#X msg 59 226 1 two 3;
+#X msg 72 271 one 2 three;
+#X text 20 39 "float" is interpreted;
+#X text 21 59 "symbol" is not interpreted;
+#X text 22 78 "list" is interpreted \, and outputted;
+#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 [trigger] Oddities;
#X connect 0 0 1 0;
#X connect 0 1 2 0;
#X connect 0 1 16 0;
@@ -290,20 +179,206 @@ data;
#X connect 25 0 0 0;
#X connect 28 0 0 0;
#X connect 29 0 0 0;
-#X restore 450 342 pd trigger has a few odd conditions;
-#X connect 3 0 5 0;
-#X connect 4 0 3 1;
-#X connect 6 0 11 0;
-#X connect 11 0 3 0;
-#X connect 11 1 4 0;
-#X connect 13 0 15 1;
-#X connect 13 1 15 0;
-#X connect 14 0 13 0;
-#X connect 15 0 16 0;
-#X connect 17 0 18 0;
-#X connect 22 0 23 0;
-#X connect 23 0 31 0;
-#X connect 24 0 22 1;
-#X connect 32 0 24 1;
-#X connect 49 0 24 0;
-#X connect 49 0 22 0;
+#X restore 102 572 pd trigger_oddities;
+#N canvas 60 35 428 560 Converting_data_types_with_trigger 0;
+#X text 21 38 All sophisticated programming environments provide tools
+to convert data types. For instance \, Visual Basic has:;
+#X text 27 69 - VarType: to check the data type.;
+#X text 27 84 - CStr: to convert a variable to a string.;
+#X text 27 99 - CDate: to convert a variable to a date.;
+#X text 27 114 - isNumeric: to test whether the variable is a number.
+;
+#X text 27 129 - etc.;
+#X text 20 151 [trigger] is one object in Pd which can convert an incoming
+atom to a different type of atom.;
+#X text 20 182 To prove this \, click on each of the messages below
+and watch your terminal window for the output.;
+#X msg 23 215 bang;
+#X msg 60 215 1;
+#X floatatom 94 215 5 0 0 0 - - -;
+#X msg 133 215 symbol cat;
+#X msg 207 215 this is anything;
+#X obj 23 264 print all_messages_are_converted_to_bangs;
+#X text 20 293 Another example showing floats and symbols.;
+#X msg 23 317 bang;
+#X floatatom 93 317 5 0 0 0 - - -;
+#X msg 135 317 symbol cat;
+#X msg 209 317 this is anything;
+#X obj 23 345 t f s;
+#X msg 60 317 1 0;
+#X obj 50 390 print converted_to_symbols;
+#X obj 23 413 print converted_to_floats;
+#X text 65 344 Note that "this is anything" causes an error. That is
+because 'anythings' don't conform to floats \, symbols \, lists \,
+pointers. They can only be converted to "bang".;
+#X text 21 435 In the example above \, note that the trigger object
+does not split a list among the outlets like [unpack] does. Instead
+it sends all list elements through all outlets and converts them as
+necessary.;
+#X text 22 487 Also note that some messages don't convert as nicely
+as others. Hence \, the symbol "cat" converts to a ZERO when [trigger]
+converts that symbol into a float. Likewise \, all numbers will convert
+to a symbol called "float" when sent through [trigger]'s right-most
+outlet.;
+#X obj 23 244 t b;
+#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 [trigger] Converting data types;
+#X connect 8 0 26 0;
+#X connect 9 0 26 0;
+#X connect 10 0 26 0;
+#X connect 11 0 26 0;
+#X connect 12 0 26 0;
+#X connect 15 0 19 0;
+#X connect 16 0 19 0;
+#X connect 17 0 19 0;
+#X connect 18 0 19 0;
+#X connect 19 0 22 0;
+#X connect 19 1 21 0;
+#X connect 20 0 19 0;
+#X connect 26 0 13 0;
+#X restore 102 528 pd Converting_data_types_with_trigger;
+#N canvas 29 67 459 506 Triggering_messages_with_trigger 0;
+#X text 21 77 1 Sequence a series of bangs - or triggers for symbols
+and/or other messages. In the example below \, you should see that
+it is important that it is important that [metro] gets a tempo setting
+before it is started - but let's assume for a moment that you wanted
+to start the [metro] with only a single click.;
+#X obj 23 269 metro;
+#X msg 50 247 1000;
+#X obj 23 289 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 23 194 tgl 15 0 empty empty On/Off 0 -6 0 7 -262144 -1 -1 0
+1;
+#X obj 23 212 t f b;
+#X text 21 151 Click the toggle to set the tempo and start the [metro]
+simultaneously.;
+#X text 64 203 Triggers are sent from right to left...so our tempo
+messages gets sent to [metro] immediately before the numbers from the
+toggle to start and stop the [metro].;
+#X text 20 310 This example is simple \, and may not be very practical
+in most situations \, but it clearly shows how [trigger] can be used
+to create a simple sequence of events. It is important to note however
+that the messages sent from [trigger]'s outlets occur in ZERO time
+with no delay between the events...more at the top right of the page...
+;
+#X obj 23 438 t b b;
+#X msg 23 416 bang;
+#X obj 23 468 timer;
+#X floatatom 23 490 5 0 0 0 - - -;
+#X text 57 416 Click here.;
+#X text 62 489 Watch here.;
+#X text 20 511 Now \, to prove that I'm not crazy...click here >;
+#X obj 319 560 timer;
+#X floatatom 319 581 5 0 0 0 - - -;
+#X obj 346 538 delay 2000;
+#X text 136 430 any delay between the first bang and the second bang
+;
+#X text 137 446 from the trigger.;
+#X text 20 540 object to force a 2 second delay between the;
+#X text 138 416 In this case \, the [timer] object does not perceive
+;
+#X obj 319 600 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 403 518 5 0 0 0 - - -;
+#X text 19 588 at the top-right to clearly see "logical time";
+#X text 19 601 as measured by [timer].;
+#X obj 319 513 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 20 384 Below is a simple structure which will measure the "logical
+time" between "bangs" from the [trigger] object.;
+#X text 20 526 In this case \, I've simply patched a [delay];
+#X text 20 554 first and second "bangs" sent to the [timer].;
+#X text 19 574 You can reset the [delay] with the number box;
+#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 [trigger] Uses;
+#X text 19 623 Click on the other subpatches in the main window to
+read about [trigger]'s second great purpose...;
+#X text 21 38 The [trigger] object serves two great purposes which
+aren't really related - but they might be on some level that I don't
+fully understand yet.;
+#X connect 1 0 3 0;
+#X connect 2 0 1 1;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X connect 5 1 2 0;
+#X connect 9 0 11 1;
+#X connect 9 1 11 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 16 0 17 0;
+#X connect 17 0 23 0;
+#X connect 18 0 16 1;
+#X connect 24 0 18 1;
+#X connect 27 0 18 0;
+#X connect 27 0 16 0;
+#X restore 102 506 pd Triggering_messages_with_trigger;
+#N canvas 73 48 428 558 Converting_data_types_(cont.) 0;
+#X msg 23 131 2.5;
+#X msg 110 131 bang;
+#X msg 60 131 23 64;
+#X msg 153 131 symbol dog;
+#X obj 23 256 trigger float bang symbol list anything;
+#X text 20 38 In the example below \, you can see that this [trigger]
+has creation arguments which specify what data type the object should
+output through each outlet. Messages which are sent to the first outlet
+will be floats \; the second outlet will send bangs \; the third \,
+symbols \; etc.;
+#X floatatom 23 278 5 0 0 0 - - -;
+#X obj 80 278 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X symbolatom 138 322 10 0 0 0 - - -;
+#X floatatom 192 187 5 0 0 0 - - -;
+#X obj 192 228 pack f s;
+#X msg 237 187 symbol earth;
+#X msg 250 209 symbol jupiter;
+#X obj 196 300 print a_list;
+#X floatatom 23 463 5 0 0 0 - - -;
+#X symbolatom 68 463 10 0 0 0 - - -;
+#X obj 113 441 print another_list;
+#X text 228 159 Click on all these.;
+#X obj 23 398 r anythings;
+#X text 20 346 Note how each of the messages sent to this trigger are
+converted appropriately for their receiving atoms boxes. Also note
+that "anythings" are sent to the example below.;
+#X obj 254 278 s anythings;
+#X obj 23 418 route float symbol list;
+#X msg 233 131 symbol cat;
+#X text 20 487 I've used the [route] object to show how "anythings"
+are converted as they pass through the above [trigger]. Note that all
+messages converted to floats are displayed here in the number box \,
+all symbols are displayed in the symbol box \, and all lists are printed
+to the terminal window.;
+#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 [trigger] Converting data types (cont.);
+#X connect 0 0 4 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 4 1 7 0;
+#X connect 4 2 8 0;
+#X connect 4 3 13 0;
+#X connect 4 4 20 0;
+#X connect 9 0 10 0;
+#X connect 10 0 4 0;
+#X connect 11 0 10 1;
+#X connect 12 0 10 1;
+#X connect 18 0 21 0;
+#X connect 21 0 14 0;
+#X connect 21 1 15 0;
+#X connect 21 2 16 0;
+#X connect 22 0 4 0;
+#X restore 102 550 pd Converting_data_types_(cont.);
+#X text 80 328 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 339 501 pddp/pddplink all_about_messages.pd -text all_about_messages
+;
+#X obj 291 574 pddp/pddplink ../2.control.examples/03.connections.pd
+;
+#X connect 30 0 33 0;
+#X connect 31 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 1 31 1;
diff --git a/doc/pddp/unpack-help.pd b/doc/pddp/unpack-help.pd
index 1bb88ae3..6cff36ac 100644
--- a/doc/pddp/unpack-help.pd
+++ b/doc/pddp/unpack-help.pd
@@ -1,49 +1,125 @@
-#N canvas 18 16 471 443 10;
-#X floatatom 61 204 0 0 0;
-#X floatatom 186 204 0 0 0;
-#X floatatom 224 204 0 0 0;
-#X floatatom 27 204 0 0 0;
-#X obj 24 294 pack;
-#X obj 41 11 unpack;
-#X msg 27 126 1 2;
-#X msg 65 126 3 4 shut;
-#X msg 145 126 5 6 pick 7 8;
-#X text 90 11 - split a message into atoms;
-#X text 20 41 [unpack] takes lists of atoms and distributes them to
-its outlets. The creation arguments are used to specify the types of
-atoms expected in the incoming list and specify float (any number or
-the symbol 'f') \, pointer (symbol 'p') or symbol (symbol 's').;
-#X symbolatom 103 207 10 0 0;
-#X obj 27 163 unpack 0 0 s f f;
-#X text 23 268 RELATED OBJECTS;
-#X obj 61 294 trigger;
-#N canvas 0 0 452 302 related_objects_from_other_libraries 0;
-#X obj 21 16 pack~;
-#X obj 61 16 unpack~;
-#X obj 113 16 tabdump;
-#X obj 169 16 niagara;
-#X obj 224 16 packel;
-#X obj 21 42 repack;
-#X obj 70 42 drip;
-#X obj 107 42 sort;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X restore 24 333 pd related_objects_from_other_libraries;
-#X text 27 363 This document was updated for Pd version 0.35 test 26
-by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X connect 6 0 12 0;
-#X connect 7 0 12 0;
-#X connect 8 0 12 0;
-#X connect 12 0 3 0;
-#X connect 12 1 0 0;
-#X connect 12 2 11 0;
-#X connect 12 3 1 0;
-#X connect 12 4 2 0;
+#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 unpack 3 12 0 18
+-204280 -1 0;
+#X obj 0 191 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 243 494 361 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 85 DESCRIPTION split a message into atoms;
+#X text 12 45 KEYWORDS control list_op;
+#X text 12 25 NAME unpack;
+#X text 12 125 INLET_0 anything;
+#X text 12 145 OUTLET_N float list symbol pointer bang;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 391 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 444 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 100 211 428 404 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 pack;
+#X obj 59 43 trigger;
+#X text 8 2 [unpack] Related Objects;
+#X text 19 266 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 315 The best places to find information about Pd's libraries
+is:;
+#X text 19 335 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 19 355 or;
+#X text 19 375 iem.kug.ac.at/pdb/;
+#X text 19 79 Externals;
+#X obj 20 103 pddp/helplink zexy/pack~;
+#X obj 20 123 pddp/helplink zexy/unpack~;
+#X obj 20 143 pddp/helplink zexy/tabdump;
+#X obj 20 163 pddp/helplink zexy/niagara;
+#X obj 20 183 pddp/helplink zexy/packel;
+#X obj 20 203 pddp/helplink zexy/repack;
+#X obj 20 223 pddp/helplink zexy/drip;
+#X obj 20 243 pddp/helplink zexy/sort;
+#X restore 102 597 pd Related_objects;
+#X obj 78 200 cnv 17 3 185 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 267 float;
+#X obj 78 400 cnv 17 3 37 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 481 3 unpack;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/unpack -text
+pdpedia: unpack;
+#X floatatom 137 162 0 0 0 0 - - -;
+#X floatatom 252 161 0 0 0 0 - - -;
+#X floatatom 290 161 0 0 0 0 - - -;
+#X floatatom 103 162 0 0 0 0 - - -;
+#X msg 103 91 1 2;
+#X msg 142 91 3 4 shut;
+#X msg 221 91 5 6 pick 7 8;
+#X symbolatom 179 162 10 0 0 0 - - -;
+#X text 11 23 split a message into atoms;
+#X text 98 297 symbol;
+#X text 98 199 list;
+#X text 98 340 pointer;
+#X text 98 368 bang;
+#X text 168 399 - if no arguments are provided \, [unpack] defaults
+to two outlets. Otherwise \, one outlet is created for each creation
+argument specified.;
+#X obj 373 128 unpack;
+#X msg 373 91 60 127;
+#X floatatom 373 162 3 0 0 0 - - -;
+#X floatatom 406 162 3 0 0 0 - - -;
+#X text 168 199 - the elements will be distributed to the outlets.
+The type of each element must match the arguments supplied to [unpack]
+\, or a "type mismatch" error will result. Lists with more (or fewer)
+elements than the total number of outlets are accepted.;
+#X text 100 60 [unpack] takes a list and distributes the elements to
+its outlets.;
+#X text 80 463 1) float;
+#X text 98 477 symbol atom;
+#X text 97 550 [unpack] only checks the first letter of each symbol
+atom in its arguments \, so both "f" and "float" will specify float
+type (so will "foo" \, for that matter).;
+#X text 168 267 - if no arguments are given \, or if the first argument
+is an "f" \, a float will be accepted and sent to the left outlet.
+;
+#X obj 103 128 unpack 0 0 s f f;
+#X text 168 297 - if the first argument to [unpack] is "s" \, a symbol
+message will be sent to the left outlet. Symbol atoms are also accepted
+and given the "symbol" selector when output.;
+#X text 168 340 - if the first argument to [unpack] is "p" \, a pointer
+will be accepted and sent to the left outlet;
+#X text 168 368 - a bang to the inlet has no apparent effect.;
+#X text 168 463 - one outlet is created for each argument specified.
+(If no arguments are provided \, [unpack] will accept a list with two
+floats.) Each symbolic argument specifies the type of atom expected
+in the incoming list. Acceptable arguments are: "f" for float \, "p"
+for pointer \, and "s" for symbol. You can also use a float (e.g. \,
+"o") to specify float.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 37 0;
+#X connect 18 0 37 0;
+#X connect 19 0 37 0;
+#X connect 27 0 29 0;
+#X connect 27 1 30 0;
+#X connect 28 0 27 0;
+#X connect 37 0 16 0;
+#X connect 37 1 13 0;
+#X connect 37 2 20 0;
+#X connect 37 3 14 0;
+#X connect 37 4 15 0;
diff --git a/doc/pddp/until-help.pd b/doc/pddp/until-help.pd
index d6b4f251..e75d71b8 100644
--- a/doc/pddp/until-help.pd
+++ b/doc/pddp/until-help.pd
@@ -1,95 +1,167 @@
-#N canvas 272 105 879 604 10;
-#X obj 13 49 until;
-#X text 7 78 Every modern programming language will have various "looping"
-mechanisms: either in the form of an object \, or as a data structure.
-For example in Visual Basic:;
-#X text 18 145 DO UNTIL i = 100;
-#X text 18 159 i = i + 1;
-#X text 19 130 i = 0;
-#X text 18 174 LOOP;
-#X text 3 285 And now Pd's version of the above programming structures:
-;
-#X obj 12 332 until;
-#X msg 12 312 100;
-#X obj 12 352 print i;
-#X text 5 379 If you start [until] with a "bang" \, it will begin an
-infinite loop! Please plan ahead in this case so that there is a mechanism
-in place to stop the loop - otherwise Pd will effectively freeze.;
-#X text 5 446 HOW TO FREEZE Pd;
-#X msg 13 469 bang;
-#X obj 13 489 until;
-#X obj 13 509 print;
-#X text 51 469 DO NOT CLICK. DO NOT CLICK. DO NOT CLICK.;
-#X text 5 200 OR:;
-#X text 17 226 FOR i = 0 TO 100;
-#X text 16 252 NEXT;
-#X text 17 240 ' do something;
-#X text 439 240 If you start [until] with a number \, it iterates that
+#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 until 3 12 0 18
+-204280 -1 0;
+#X obj 0 346 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 243 494 367 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 85 DESCRIPTION looping mechanism;
+#X text 12 25 NAME until;
+#X text 12 125 INLET_0 float bang;
+#X text 12 165 OUTLET_0 bang;
+#X text 12 145 INLET_1 bang;
+#X text 12 45 KEYWORDS control bang_op;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#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 472 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 500 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 476 (none);
+#N canvas 105 453 428 159 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 [until] Related Objects;
+#X text 19 38 External Objects;
+#X obj 21 57 pddp/helplink iemlib/for++;
+#X obj 21 77 pddp/helplink cyclone/counter;
+#X obj 21 97 pddp/helplink gem_counter;
+#X text 123 97 <-- Which library?;
+#X obj 21 117 pddp/helplink iemlib/modulo_counter;
+#X restore 102 597 pd Related_objects;
+#X obj 78 355 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#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 407 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 482 3 until;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/until -text
+pdpedia: until;
+#X obj 37 195 until;
+#X msg 37 172 100;
+#X obj 37 246 print i;
+#X text 11 23 looping mechanism;
+#X text 98 406 bang;
+#X text 167 406 - a bang to the right inlet ends the loop.;
+#X text 98 354 bang;
+#X text 98 374 float;
+#X text 168 354 - a bang to the left inlet starts the loop.;
+#X text 168 374 - sending a float to the left inlet will cause [until]
+to iterate that number of times.;
+#X text 98 443 bang;
+#X obj 37 221 f;
+#X obj 67 221 + 1;
+#X text 117 98 If you start [until] with a number \, it iterates that
number of times. The [uzi] object in MAX works the same way.;
-#X obj 496 328 until;
-#X msg 496 281 100;
-#X obj 496 348 print i;
-#X msg 524 288 3;
-#X msg 552 295 42;
-#X text 14 536 The [until] object's left inlet starts a loop in which
+#X obj 119 176 until;
+#X msg 119 129 100;
+#X obj 119 196 print i;
+#X msg 149 136 3;
+#X msg 179 143 42;
+#N canvas 86 234 428 358 Infinite_loops 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 [until] Infinite loops;
+#X msg 23 61 bang;
+#X obj 23 81 until;
+#X obj 23 101 print;
+#X text 61 61 DO NOT CLICK. DO NOT CLICK. DO NOT CLICK.;
+#X text 20 126 The [until] object's left inlet starts a loop in which
it outputs "bang" until its right inlet gets a "bang" which stops it.
;
-#X obj 418 44 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 418 571 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 55 49 - LOOPing mechanism;
-#X text 441 381 RELATED OBJECTS;
-#X text 446 400 ?? This author does not know of any other native looping
-mechanisms in Pd.;
-#N canvas 0 22 452 302 related_objects_from_other_libraries 0;
-#X text 27 63 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 26 112 The best places to find information about Pd's libraries
-is:;
-#X text 23 134 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 25 149 or;
-#X text 25 164 iem.kug.ac.at/pdb/;
-#X obj 43 32 for++;
-#X obj 90 32 counter;
-#X obj 150 32 gem_counter;
-#X obj 250 32 modulo_counter;
-#X restore 454 440 pd related_objects_from_other_libraries;
-#X obj 486 513 pddp/pddplink all_about_looping.pd -text all_about_looping;
-#X text 450 490 For more info:;
-#X msg 496 110 bang;
-#X obj 496 131 until;
-#X text 527 110 start;
-#X obj 496 153 f;
-#X obj 525 153 + 1;
-#X obj 571 155 sel 0;
-#X obj 496 197 print;
-#X obj 525 175 mod 10;
-#X text 444 58 The example below includes a method to stop the loop
+#X text 64 81 If you click \, kill Pd or reboot the computer.;
+#X msg 72 241 bang;
+#X obj 72 262 until;
+#X text 103 241 start;
+#X obj 72 284 f;
+#X obj 101 284 + 1;
+#X obj 147 286 sel 0;
+#X obj 72 328 print;
+#X obj 101 306 mod 10;
+#X text 20 189 The example below includes a method to stop the loop
to prevent Pd from looping infinitely.;
-#X text 54 489 If you click \, kill Pd or reboot the computer.;
-#X text 447 546 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X obj 2 2 cnv 15 870 20 empty empty [until] 20 10 1 18 -233017 -66577
-0;
-#X obj 821 3 pddp/pddplink http://puredata.info/dev/pddp -text pddp;
-#X connect 7 0 9 0;
-#X connect 8 0 7 0;
-#X connect 12 0 13 0;
-#X connect 13 0 14 0;
-#X connect 21 0 23 0;
-#X connect 22 0 21 0;
-#X connect 24 0 21 0;
-#X connect 25 0 21 0;
-#X connect 27 0 28 0;
-#X connect 35 0 36 0;
-#X connect 36 0 38 0;
-#X connect 38 0 39 0;
-#X connect 38 0 41 0;
-#X connect 39 0 42 0;
-#X connect 40 0 36 1;
-#X connect 42 0 38 1;
-#X connect 42 0 40 0;
+#X text 20 37 How to FREEZE Pd;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 11 0;
+#X connect 11 0 12 0;
+#X connect 11 0 14 0;
+#X connect 12 0 15 0;
+#X connect 13 0 9 1;
+#X connect 15 0 11 1;
+#X connect 15 0 13 0;
+#X restore 102 533 pd Infinite_loops;
+#N canvas 106 85 428 440 Loops 0;
+#X text 20 38 Every modern programming language will have various "looping"
+mechanisms: either in the form of an object \, or as a data structure.
+For example in Visual Basic:;
+#X text 31 105 DO UNTIL i = 100;
+#X text 31 119 i = i + 1;
+#X text 32 90 i = 0;
+#X text 31 134 LOOP;
+#X text 20 245 And now Pd's version of the above programming structures:
+;
+#X obj 29 322 until;
+#X obj 29 382 print i;
+#X text 20 160 OR:;
+#X text 30 186 FOR i = 0 TO 100;
+#X text 29 212 NEXT;
+#X text 30 200 ' do something;
+#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 [until] More about loops;
+#X obj 239 292 until;
+#X msg 239 272 100;
+#X obj 239 312 print i;
+#X text 139 289 OR:;
+#X obj 29 352 f;
+#X obj 57 352 + 1;
+#X msg 29 268 100;
+#X obj 29 291 t a b;
+#X obj 70 322 0;
+#X connect 6 0 18 0;
+#X connect 14 0 16 0;
+#X connect 15 0 14 0;
+#X connect 18 0 19 0;
+#X connect 18 0 7 0;
+#X connect 19 0 18 1;
+#X connect 20 0 21 0;
+#X connect 21 0 6 0;
+#X connect 21 1 22 0;
+#X connect 22 0 18 1;
+#X restore 102 509 pd Loops;
+#X text 116 216 If you start [until] with a "bang" \, it will begin
+an infinite loop! Please plan ahead in this case so that there is a
+mechanism in place to stop the loop - otherwise Pd will effectively
+freeze. (See the "Loops" subpatch below.);
+#X obj 102 555 pddp/pddplink all_about_looping.pd -text all_about_looping
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 102 572 pddp/pddplink ../2.control.examples/24.loops.pd -text
+doc/2.control.examples/24.loops.pd;
+#X connect 14 0 25 0;
+#X connect 15 0 14 0;
+#X connect 25 0 16 0;
+#X connect 25 0 26 0;
+#X connect 26 0 25 1;
+#X connect 28 0 30 0;
+#X connect 29 0 28 0;
+#X connect 31 0 28 0;
+#X connect 32 0 28 0;
diff --git a/doc/pddp/value-help.pd b/doc/pddp/value-help.pd
index 783ea5a4..5ece3f75 100644
--- a/doc/pddp/value-help.pd
+++ b/doc/pddp/value-help.pd
@@ -1,102 +1,146 @@
-#N canvas 1 1 889 657 10;
-#X text 62 10 -- nonlocal shared value (named variable);
-#X obj 21 10 value;
-#X text 17 46 [value] is a container. It holds a global variable numeric
-value and can be "polled" at any time with a "bang" message. In other
-words \, [value] is a place where numbers can be stored and then accessed
-by all active Pd windows.;
-#X text 16 109 SCOPE;
-#X text 18 127 Understanding "scope" is important while developing
-programmatic applications. In Pd there are three levels of "scope":
-;
-#X text 29 170 1 Local Scope: all objects \, subroutines \, data \,
-and variables which exist within a single patch on a single computer
-and do not communicate with other active Pd patches.;
-#X text 27 226 2 Global Scope: all objects \, subroutines \, data and
-variables which exist within single or multiple patches on a single
-computer which communicate with other active Pd patches.;
-#X text 17 354 As a general rule \, all things are considered "local"
-in Pd and if communication between Pd windows is necessary \, then
-[send]/[receive] \, or [throw]/[catch] objects are used. Likewise \,
-if communication is necessary between many computers running Pd \,
-then objects such as [netsend]/[netreceive] are used.;
-#X text 16 441 The exception to the above rule is [value]. This object
-is a container which makes its data known to all [value] objects of
-the same name in all active Pd windows on a single computer: hence
-\, GLOBAL scope.;
-#X text 28 288 3 Network (Universal) Scope: all objects \, subroutines
-\, data and variables which exist within single or multiple patches
-on two or more computers which communicate with other active Pd patches
-via a network.;
-#X text 419 15 To create a [value] object \, a name should be defined
-for the variable that it will contain. For example:;
-#X obj 422 54 value my_variable;
-#X text 419 110 To assign a numeric value to that variable \, a number
-box or message can be used \, as follows:;
-#X obj 420 190 value my_variable;
-#X msg 438 167 42;
-#X text 12 523 The [value] object can be abbreviated as follows:;
-#X obj 19 550 v;
-#X text 48 550 is the same as;
-#X obj 142 552 value;
-#X obj 384 12 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 384 583 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 417 77 If no name is given \, then the object will communicate
-with all other [value] objects with no name.;
-#X floatatom 420 214 5 0 0;
-#X floatatom 420 147 5 0 0;
-#X obj 417 304 value my_variable;
-#X floatatom 417 328 5 0 0;
-#X obj 417 284 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 464 146 play with me;
-#X text 463 166 or click me;
-#X text 416 237 Notice that the number is not outputted to the outlet
-\; it is merely stored. To retreive the number \, send a "bang" \,
-like below:;
-#X text 414 354 Now \, to show how global scope works \, click the
-sub-patch below and then "bang" the [value] object to retreive the
-current number. While you're in the sub-patch \, change the number
-and then return to this window and click the above "bang". You'll quickly
-see how this variable can be retreived or reset in any active Pd window.
-;
-#N canvas 0 0 452 302 global_values 0;
-#X obj 43 127 v my_variable;
-#X floatatom 43 149 5 0 0;
-#X obj 43 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 61 104 5 0 0;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 415 442 pd global_values;
-#X text 414 474;
-#X text 409 490 RELATED OBJECTS;
-#N canvas 73 229 452 302 related_objects_from_other_libraries 0;
-#X obj 28 37 getenv;
-#X text 18 86 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 17 135 The best places to find information about Pd's libraries
-is:;
-#X text 14 157 www.puredata.org and click on "Downloads" then "Software"
-;
-#X text 15 173 or;
-#X text 16 187 iem.kug.ac.at/pdb/;
-#X restore 413 551 pd related_objects_from_other_libraries;
-#X obj 408 517 send;
-#X obj 441 517 receive;
-#X text 492 504 These objects are actually quite different than [value]
-but it's important to understand that difference in relation to [value].
-;
-#X text 252 603 This document was updated for Pd version 0.35 test
-26 by Dave Sabine as part of a project called pddp proposed by Krzysztof
-Czaja to build comprehensive documentation for Pd.;
-#X connect 13 0 22 0;
-#X connect 14 0 13 0;
-#X connect 19 0 20 0;
-#X connect 23 0 13 0;
-#X connect 24 0 25 0;
-#X connect 26 0 24 0;
+#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 value 3 12 0 18
+-204280 -1 0;
+#X obj 0 284 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 45 219 494 391 META 0;
+#X text 12 125 PLATFORM windows macosx gnulinux;
+#X text 12 185 LIBRARY internal;
+#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 205 AUTHOR Miller Puckette;
+#X text 12 285 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 26 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 GENRE help;
+#X text 12 65 KEYWORDS control storage nonlocal;
+#X text 12 105 DESCRIPTION nonlocal shared value (named variable);
+#X text 12 25 NAME value;
+#X text 12 45 ALIAS v;
+#X text 12 145 INLET_0 float bang;
+#X text 12 165 OUTLET_0 float;
+#X text 12 245 RELEASE_DATE 1997;
+#X text 12 265 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 379 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 421 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 525 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 66 452 428 139 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 [value] Related Objects;
+#X obj 23 43 send;
+#X obj 56 43 receive;
+#X text 20 76 External Objects;
+#X obj 110 43 expr;
+#X obj 20 96 pddp/helplink motex/getenv;
+#X restore 102 597 pd Related_objects;
+#X obj 78 293 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 322 float;
+#X text 98 352 list;
+#X text 98 387 float;
+#X obj 78 388 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/value -text
+pdpedia: value;
+#X obj 456 3 value;
+#X obj 516 3 v;
+#X text 494 3 or;
+#X text 11 23 nonlocal shared value (named variable);
+#N canvas 57 148 428 418 scope 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 38 Understanding "scope" is important while developing programmatic
+applications. In Pd there are three levels of "scope":;
+#X text 31 81 1 Local Scope: all objects \, subroutines \, data \,
+and variables which exist within a single patch on a single computer
+and do not communicate with other active Pd patches.;
+#X text 29 137 2 Global Scope: all objects \, subroutines \, data and
+variables which exist within single or multiple patches on a single
+computer which communicate with other active Pd patches.;
+#X text 20 260 As a general rule \, all things are considered "local"
+in Pd and if communication between Pd windows is necessary \, then
+[send]/[receive] \, or [throw]/[catch] objects are used. Likewise \,
+if communication is necessary between many computers running Pd \,
+then objects such as [netsend]/[netreceive] are used.;
+#X text 20 347 The exception to the above rule is [value]. This object
+is a container which makes its data known to all [value] objects of
+the same name in all active Pd windows on a single computer: hence
+\, GLOBAL scope.;
+#X text 30 199 3 Network (Universal) Scope: all objects \, subroutines
+\, data and variables which exist within single or multiple patches
+on two or more computers which communicate with other active Pd patches
+via a network.;
+#X text 8 2 [value] Scope in Pd;
+#X restore 102 574 pd scope;
+#X text 98 47 [value] is a container. It holds a global variable numeric
+value and can be "polled" at any time with a "bang" message. In other
+words \, [value] is a place where numbers can be stored and then accessed
+by all active Pd windows.;
+#N canvas 73 60 428 231 global_values 0;
+#X obj 173 168 v my_variable;
+#X floatatom 173 190 5 0 0 0 - - -;
+#X obj 173 127 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 191 145 5 0 0 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 [value] Sub-patch to demonstrate global values;
+#X text 20 38 To show how global scope works \, "bang" the [value]
+object to retreive the current number. While you're in the sub-patch
+\, change the number and then return to the main patch window and click
+the "bang". You'll quickly see how this variable can be retreived or
+reset in any active Pd window.;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X restore 101 261 pd global_values;
+#X text 16 102 To assign a numeric value to that variable \, a number
+box or message can be used \, as follows:;
+#X obj 19 179 value my_variable;
+#X msg 37 156 42;
+#X floatatom 19 203 5 0 0 0 - - -;
+#X floatatom 19 136 5 0 0 0 - - -;
+#X obj 271 188 value my_variable;
+#X floatatom 271 212 5 0 0 0 - - -;
+#X obj 271 168 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 63 135 play with me;
+#X text 62 155 or click me;
+#X text 186 133 Notice that the number is not outputted to the outlet
+\; it is merely stored. To retreive the number \, send a "bang" \,
+like below:;
+#X text 168 322 - a float to the inlet sets all [value] objects that
+share the same name to the incoming value.;
+#X text 168 352 - a list is truncated to the first element.;
+#X text 98 292 bang;
+#X text 168 292 - sending a bang to a particular [value] object will
+cause it to output its current value.;
+#X text 168 387 - the current value is output when a bang is received
+at the inlet.;
+#X text 168 439 - [value] takes one argument (a symbol) that is the
+name of the object. All [value] objects that share this name will have
+their values updated when I float is sent to the inlet of any of them.
+;
+#X text 98 229 All [value] objects with the same name receive the value
+(see subpatch below):;
+#X text 168 491 If no creation argument is given \, then the object
+will communicate with all other [value] objects with no name.;
+#X text 99 529 [value] variables may be used within all [expr] family
+objects. See the help patches for [expr] \, [expr~] and [fexpr~] for
+more information.;
+#X text 80 439 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 22 0 24 0;
+#X connect 23 0 22 0;
+#X connect 25 0 22 0;
+#X connect 26 0 27 0;
+#X connect 28 0 26 0;
diff --git a/doc/pddp/vcf~-help.pd b/doc/pddp/vcf~-help.pd
new file mode 100644
index 00000000..12692f5e
--- /dev/null
+++ b/doc/pddp/vcf~-help.pd
@@ -0,0 +1,99 @@
+#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 vcf~ 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 41 189 494 409 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 225 LIBRARY internal;
+#X text 12 265 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 245 AUTHOR Miller Puckette;
+#X text 12 325 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 5 GENRE help;
+#X text 12 45 KEYWORDS signal filter;
+#X text 12 85 DESCRIPTION voltage-controlled bandpass filter;
+#X text 12 25 NAME vcf~;
+#X text 12 125 INLET_0 signal;
+#X text 12 165 INLET_2 float;
+#X text 12 145 INLET_1 signal;
+#X text 12 185 OUTLET_0 signal;
+#X text 12 205 OUTLET_1 signal;
+#X text 12 285 RELEASE_DATE 1997;
+#X text 12 305 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 468 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 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 94 479 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 bp~;
+#X text 8 2 [vcf~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 385 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 477 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 413 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 484 3 vcf~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/vcf~ -text
+pdpedia: vcf~;
+#X obj 78 440 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 439 float;
+#X text 98 476 signal;
+#X text 98 384 signal;
+#X text 98 412 signal;
+#X obj 261 141 sig~;
+#X text 68 141 test signal;
+#X text 125 235 amp in (db);
+#X text 116 96 test frequency;
+#X text 248 233 amp out (db);
+#X text 230 96 center frequency;
+#X text 344 140 q;
+#X floatatom 146 120 5 0 0 0 - - -;
+#X floatatom 261 120 5 0 0 0 - - -;
+#X obj 146 141 osc~;
+#X floatatom 308 141 5 0 0 0 - - -;
+#X obj 146 190 env~ 8192;
+#X obj 244 190 env~ 8192;
+#X floatatom 146 212 5 0 0 0 - - -;
+#X floatatom 244 212 5 0 0 0 - - -;
+#X obj 244 168 vcf~ 1;
+#X text 293 167 optional argument to initialize q;
+#X text 11 23 voltage-controlled bandpass filter;
+#X text 167 412 - center frequency \, which may change continuously
+in time.;
+#X text 167 439 - change the "Q \, " or filter sharpness.;
+#X text 168 384 - the incoming signal to be filtered;
+#X text 168 543 - [vcf~] takes one argument to initialize q.;
+#X text 80 543 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X text 168 476 - the filtered signal (real part).;
+#X obj 78 500 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 499 signal;
+#X text 168 499 - the filtered signal (imaginary part).;
+#X text 76 283 [vcf~] is like [bp~] except that it takes an audio signal
+to set center frequency \, which may thus change continuously in time.
+The "Q" or filter sharpness is still only set by messages. More expensive
+than bp~ in CPU time but more powerful too.;
+#X connect 18 0 33 1;
+#X connect 25 0 27 0;
+#X connect 26 0 18 0;
+#X connect 27 0 29 0;
+#X connect 27 0 33 0;
+#X connect 28 0 33 2;
+#X connect 29 0 31 0;
+#X connect 30 0 32 0;
+#X connect 33 0 30 0;
diff --git a/doc/pddp/vdial-help.pd b/doc/pddp/vdial-help.pd
new file mode 100644
index 00000000..ab5759a4
--- /dev/null
+++ b/doc/pddp/vdial-help.pd
@@ -0,0 +1,283 @@
+#N canvas 90 217 558 455 10;
+#X obj 1 1 cnv 8 100 60 empty empty vdial=vdl 20 20 1 18 -262144 -1109
+0;
+#X text 13 390 (c) musil@iem.kug.ac.at;
+#X text 55 403 IEM KUG;
+#X text 132 122 click properties to;
+#X text 120 133 modify geometry \, colors \, etc.;
+#X obj 159 261 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 21 54 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X msg 41 319 \$1;
+#X floatatom 41 341 4 0 0 0 - - -;
+#X obj 41 363 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 86 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 86 317 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 194 92 set \$1;
+#X floatatom 194 71 4 0 9 0 - - -;
+#X floatatom 44 54 4 0 9 0 - - -;
+#X msg 91 41 7 0 -5.44;
+#X msg 95 63 3 3 4.55;
+#X obj 103 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 120 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 137 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 154 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 171 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 188 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 205 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 222 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 239 338 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 79 355 print;
+#X floatatom 183 287 4 0 0 0 - - -;
+#X msg 183 261 \$1;
+#X msg 158 192 set \$1;
+#X floatatom 158 171 4 0 9 0 - - -;
+#X text 125 355 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 124 366 for moving selected gui-objects;
+#N canvas 230 247 699 530 edit 0;
+#X obj 42 198 f;
+#X msg 20 177 bang;
+#X floatatom 58 176 3 63 156 0 - - -;
+#X floatatom 93 198 3 -20 37 0 - - -;
+#X obj 42 221 pack 0 0;
+#X text 120 198 y-label;
+#X text 86 176 x-label;
+#X floatatom 270 187 3 8 50 0 - - -;
+#X text 297 187 size;
+#X obj 286 293 f;
+#X msg 264 272 bang;
+#X floatatom 302 271 3 -10 10 0 - - -;
+#X floatatom 337 293 3 -10 10 0 - - -;
+#X obj 286 316 pack 0 0;
+#X obj 300 412 f;
+#X msg 278 391 bang;
+#X floatatom 316 390 3 20 60 0 - - -;
+#X floatatom 351 412 3 100 200 0 - - -;
+#X obj 300 435 pack 0 0;
+#X text 330 271 x-delta;
+#X text 364 293 y-delta;
+#X text 344 390 x-position;
+#X text 378 412 y-position;
+#X obj 62 313 f;
+#X msg 40 292 bang;
+#X floatatom 78 291 3 0 2 0 - - -;
+#X floatatom 113 313 3 4 36 0 - - -;
+#X obj 62 336 pack 0 0;
+#X text 106 291 font;
+#X text 142 313 height;
+#X text 504 293 no init;
+#X text 475 348 init value on loadbang;
+#X floatatom 482 228 5 2 20 0 - - -;
+#X text 491 417 changing-behavior;
+#X text 526 228 number of buttons;
+#X obj 47 104 pack 0 0 0;
+#X obj 47 76 f;
+#X msg 24 28 bang;
+#X floatatom 63 26 3 0 29 0 - - -;
+#X floatatom 79 46 3 0 29 0 - - -;
+#X floatatom 112 62 3 0 29 0 - - -;
+#X text 91 26 background;
+#X text 106 46 front-color;
+#X text 140 63 label-color;
+#X msg 285 25 back;
+#X msg 285 45 front;
+#X msg 285 65 label;
+#X msg 247 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 86 pd RGB_____________;
+#X floatatom 327 55 3 0 255 0 - - -;
+#X floatatom 370 55 3 0 255 0 - - -;
+#X floatatom 413 56 3 0 255 0 - - -;
+#X text 34 0 preset-colors;
+#X text 296 -3 RGB-colors;
+#X text 327 37 red;
+#X text 363 36 green;
+#X text 411 36 blue;
+#X msg 47 125 \; foo12_rcv color \$1 \$2 \$3;
+#X msg 42 246 \; foo12_rcv label_pos \$1 \$2;
+#X msg 62 361 \; foo12_rcv label_font \$1 \$2;
+#X msg 34 423 \; foo12_rcv label blabla;
+#X msg 34 459 \; foo12_rcv label vdial_0_9;
+#X msg 300 460 \; foo12_rcv pos \$1 \$2;
+#X msg 286 341 \; foo12_rcv delta \$1 \$2;
+#X msg 270 216 \; foo12_rcv size \$1;
+#X msg 483 50 \; foo12_rcv send foo12a_snd;
+#X msg 483 88 \; foo12_rcv send foo12_snd;
+#X msg 482 171 \; foo12a_rcv receive foo12_rcv;
+#X msg 483 133 \; foo12_rcv receive foo12a_rcv;
+#X msg 482 254 \; foo12_rcv number \$1;
+#X msg 483 312 \; foo12_rcv init 0;
+#X msg 485 366 \; foo12_rcv init 1;
+#X msg 490 436 \; foo12_rcv single_change;
+#X msg 490 470 \; foo12_rcv double_change;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 58 0;
+#X connect 7 0 64 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 63 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 62 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 59 0;
+#X connect 32 0 69 0;
+#X connect 35 0 57 0;
+#X connect 36 0 35 0;
+#X connect 37 0 36 0;
+#X connect 38 0 36 1;
+#X connect 39 0 35 1;
+#X connect 40 0 35 2;
+#X connect 44 0 48 0;
+#X connect 45 0 48 0;
+#X connect 46 0 48 0;
+#X connect 47 0 48 0;
+#X connect 48 0 35 0;
+#X connect 48 1 35 1;
+#X connect 48 2 35 2;
+#X connect 49 0 48 1;
+#X connect 50 0 48 2;
+#X connect 51 0 48 3;
+#X restore 267 222 pd edit;
+#X obj 221 11 x_all_guis aaa bbb ccc ddd eee fff ggg hhh iii;
+#X text 30 415 graz \, austria 2002;
+#X text 223 401 updated for Pd version 0.35;
+#X text 144 11 gui-vdial:;
+#X obj 79 110 vdl 25 1 0 8 foo12_snd foo12_rcv vdial_0_9 20 -8 192
+10 -99865 -262144 -260818 0;
+#X obj 352 36 vdl 15 1 0 8 iii iii empty 20 8 192 8 -262144 -1 -1 0
+;
+#X obj 158 213 s foo12_rcv;
+#X obj 159 239 r foo12_snd;
+#X text 225 418 KEYWORDS deprecated;
+#X connect 6 0 38 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 11 0 10 0;
+#X connect 11 1 17 0;
+#X connect 11 2 18 0;
+#X connect 11 3 19 0;
+#X connect 11 4 20 0;
+#X connect 11 5 21 0;
+#X connect 11 6 22 0;
+#X connect 11 7 23 0;
+#X connect 11 8 24 0;
+#X connect 11 9 25 0;
+#X connect 12 0 38 0;
+#X connect 13 0 12 0;
+#X connect 14 0 38 0;
+#X connect 15 0 38 0;
+#X connect 16 0 38 0;
+#X connect 28 0 27 0;
+#X connect 29 0 40 0;
+#X connect 30 0 29 0;
+#X connect 38 0 11 0;
+#X connect 38 0 26 0;
+#X connect 38 0 7 0;
+#X connect 41 0 5 0;
+#X connect 41 0 28 0;
diff --git a/doc/pddp/vd~-help.pd b/doc/pddp/vd~-help.pd
new file mode 100644
index 00000000..5799f70b
--- /dev/null
+++ b/doc/pddp/vd~-help.pd
@@ -0,0 +1,97 @@
+#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 vd~ 3 12 0 18 -204280
+-1 0;
+#X obj 0 369 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal nonlocal time;
+#X text 12 85 DESCRIPTION read a signal from a delay line at a variable
+delay time;
+#X text 12 25 NAME vd~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 444 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 497 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 538 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 108 477 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 delwrite~;
+#X obj 92 43 delread~;
+#X text 8 2 [vd~] Related Objects;
+#X obj 159 44 delay;
+#X restore 102 597 pd Related_objects;
+#X obj 78 378 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 453 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/vd~ -text
+pdpedia: vd~;
+#X obj 324 138 sig~;
+#X text 98 377 signal;
+#X text 98 397 float;
+#X text 98 416 list;
+#X text 11 23 reads a signal from a delay line at a variable delay
+time;
+#X text 165 343 NOTE: [vd~] uses 4-point-interpolation;
+#X text 98 452 signal;
+#X text 168 452 - the signal from the corresponding [delwrite~] object
+is interpolated and output after the delay specified by the incoming
+signal.;
+#X text 168 515 - the name of the corresponding [delwrite~] object
+;
+#X text 484 5 [vd~];
+#X text 168 416 - a list is truncated to the first element.;
+#X text 168 377 - incoming signal (delay time in ms).;
+#X text 168 397 - delay time in ms.;
+#X text 80 515 1) symbol atom;
+#X obj 101 160 delwrite~ vd~help_example 1000;
+#X obj 324 160 vd~ vd~help_example;
+#X text 98 67 [vd~] implements a 4-point interpolating delay tap from
+a corresponding delwrite~ object. The delay in milliseconds of the
+tap is specified by the incoming signal.;
+#X floatatom 324 115 5 0 0 0 - - -;
+#X obj 324 230 snapshot~;
+#X obj 333 204 metro 150;
+#X obj 333 182 loadbang;
+#X floatatom 324 252 5 0 0 0 - - -;
+#X floatatom 101 139 5 0 0 0 - - -;
+#X msg 369 115 1000;
+#X text 98 274 The delay time is always at least one sample and at
+most the length of the delay line (specified by [delwrite~]). In addition
+\, in case the [delwrite~] runs later in the DSP loop than the [vd~]
+\, the delay is constrained below by one vector length (64 samples.)
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 543 pddp/pddplink ../3.audio.examples/G03.delay.variable.pd
+-text doc/3.audio.examples/G03.delay.variable.pd;
+#X obj 98 558 pddp/pddplink ../3.audio.examples/G04.control.blocksize.pd
+-text doc/3.audio.examples/G04.control.blocksize.pd;
+#X obj 98 573 pddp/pddplink ../3.audio.examples/G05.execution.order.pd
+-text doc/3.audio.examples/G05.execution.order.pd;
+#X connect 11 0 26 0;
+#X connect 26 0 29 0;
+#X connect 28 0 11 0;
+#X connect 29 0 32 0;
+#X connect 30 0 29 0;
+#X connect 31 0 30 0;
+#X connect 33 0 25 0;
+#X connect 34 0 11 0;
diff --git a/doc/pddp/vline~-help.pd b/doc/pddp/vline~-help.pd
new file mode 100644
index 00000000..dd0f69bb
--- /dev/null
+++ b/doc/pddp/vline~-help.pd
@@ -0,0 +1,105 @@
+#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 vline~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 361 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 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 245 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Miller Puckette;
+#X text 12 305 HELP_PATCH_AUTHORS Updated for version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal time conversion;
+#X text 12 85 DESCRIPTION high-precision audio ramp generator;
+#X text 12 25 NAME vline~;
+#X text 12 125 INLET_0 float list stop;
+#X text 12 145 INLET_1 float;
+#X text 12 165 INLET_2 float;
+#X text 12 185 OUTLET_0 signal;
+#X text 12 265 RELEASE_DATE 1997;
+#X text 12 285 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 541 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 545 (none);
+#N canvas 85 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 line~;
+#X obj 62 43 line;
+#X text 8 2 [vline~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 370 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 369 float;
+#X text 98 393 list;
+#X obj 78 508 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 448 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 447 float;
+#X obj 480 3 vline~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/vline~ -text
+pdpedia: vline~;
+#X text 11 23 high-precision audio ramp generator;
+#X text 168 393 - a list to the first inlet is distributed among the
+inlets of [vline~].;
+#X text 98 426 stop;
+#X obj 78 471 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 470 float;
+#X text 98 507 signal;
+#X text 168 507 - the output is a linear ramp whose levels and timing
+are determined by the messages sent to the inlet(s).;
+#X obj 31 271 snapshot~;
+#X floatatom 31 294 5 0 0 0 - - -;
+#X obj 41 244 metro 100;
+#X msg 31 69 1 1000;
+#X msg 59 174 stop;
+#X msg 51 113 0;
+#X obj 31 200 vline~;
+#X text 86 67 ramp up;
+#X msg 40 91 0 1000;
+#X text 86 90 ramp down;
+#X text 60 133 ramp up \, jump down \, ramp up again;
+#X msg 54 152 1 1000 \, 0 0 1000 \, 1 1000 1000;
+#X text 86 112 jump down;
+#X text 147 181 The [vline~] object \, like [line~] \, generates linear
+ramps whose levels and timing are determined by messages you send it.
+The messages consist of a target value \, a time interval (zero if
+not supplied) \, and an initial delay (also zero if not supplied.)
+Ramps may start and stop between audio samples \, in which case the
+output is interpolated accordingly.;
+#X text 147 276 Any number of future ramps may be scheduled and [vline~]
+will remember them and execute them in order. They must be specified
+in increasing order of initial delay however \, since a segment cancels
+all planned segments at any future time.;
+#X text 168 369 - target value.;
+#X text 168 426 - the "stop" message freezes [vline~] at its current
+value.;
+#X text 167 447 - time value.;
+#X text 167 470 - initial delay.;
+#X obj 41 222 loadbang;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/C04.control.to.signal.pd
+-text doc/3.audio.examples/C04.control.to.signal.pd;
+#X connect 24 0 25 0;
+#X connect 26 0 24 0;
+#X connect 27 0 30 0;
+#X connect 28 0 30 0;
+#X connect 29 0 30 0;
+#X connect 30 0 24 0;
+#X connect 32 0 30 0;
+#X connect 35 0 30 0;
+#X connect 43 0 26 0;
diff --git a/doc/pddp/vradio-help.pd b/doc/pddp/vradio-help.pd
new file mode 100644
index 00000000..7d298460
--- /dev/null
+++ b/doc/pddp/vradio-help.pd
@@ -0,0 +1,391 @@
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Thomas Musil;
+#X text 12 205 WEBSITE;
+#X text 12 265 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control storage GUI nonlocal;
+#X text 12 85 DESCRIPTION vertical column of gui-radio buttons;
+#X text 12 25 NAME vradio;
+#X text 12 125 INLET_0 float bang size init number send receive label
+label_pos label_font color pos delta;
+#X text 12 145 OUTLET_0 float;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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/doc/pddp/vslider-help.pd b/doc/pddp/vslider-help.pd
new file mode 100644
index 00000000..96abe0e9
--- /dev/null
+++ b/doc/pddp/vslider-help.pd
@@ -0,0 +1,438 @@
+#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 125 PLATFORM windows macosx gnulinux;
+#X text 12 195 LIBRARY internal;
+#X text 12 235 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LICENSE SIBSD;
+#X text 12 215 AUTHOR Miller Puckette;
+#X text 12 295 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 GENRE help;
+#X text 12 65 KEYWORDS control storage GUI nonlocal;
+#X text 12 105 DESCRIPTION vertical gui-slider;
+#X text 12 25 NAME vslider;
+#X text 12 45 ALIAS vsl;
+#X text 12 145 INLET_0 float bang size range log init steady receive
+send label label_pos label_font color pos delta;
+#X text 12 175 OUTLET_0 float;
+#X text 12 255 RELEASE_DATE 1997;
+#X text 12 275 RELEASE_VERSION;
+#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/doc/pddp/vsnapshot~-help.pd b/doc/pddp/vsnapshot~-help.pd
index 8541f430..428f4c58 100644
--- a/doc/pddp/vsnapshot~-help.pd
+++ b/doc/pddp/vsnapshot~-help.pd
@@ -1,34 +1,77 @@
-#N canvas 85 46 661 400 12;
-#X floatatom 19 339 0 0 0 0 - - -;
-#X msg 30 264 bang;
-#X text 112 342 This output updates each time bang is clicked above.
+#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 vsnapshot~ 3 12
+0 18 -204280 -1 0;
+#X obj 0 436 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 115 PLATFORM windows macosx gnulinux;
+#X text 12 175 LIBRARY internal;
+#X text 12 215 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 195 AUTHOR Miller Puckette;
+#X text 12 275 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 154 14 - convert a signal to a number on demand;
-#X msg 565 43 \; pd dsp 1;
-#X obj 565 20 loadbang;
-#X obj 19 239 osc~ 0.1;
-#X text 24 221 0.1 Hz cosine;
-#X text 397 373 updated for Pd version 0.37;
-#X msg 35 288 set 5;
-#X text 102 239 signal in to take snapshots of;
-#X text 73 263 bang -- take one snapshot;
-#X text 89 288 set -- set value (which is reset next DSP block.);
-#X msg 565 85 \; pd dsp 0;
-#X text 11 109 In the example below \, a snapshot~ object prints out
-the values of a low frequency cosine wave every time it is sent a bang
-message.;
-#X text 12 161 A 'set' message is provided for the (rare) situations
-where you might make a known change to the signal input \, and then
-read snapshot's value before any ensuing signal computation.;
-#X obj 74 14 vsnapshot~;
-#X text 9 46 The vsnapshot~ object is a high-precision version of snapshot~.
-It takes a signal and converts it to a control value whenever it receives
-a bang in its left outlet. This object is particularly useful for monitoring
-outputs.;
-#X obj 19 316 vsnapshot~;
-#X connect 1 0 18 0;
-#X connect 5 0 4 0;
-#X connect 6 0 18 0;
-#X connect 9 0 18 0;
-#X connect 18 0 0 0;
-#X connect 18 0 0 0;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal conversion;
+#X text 12 85 DESCRIPTION precision conversion of a signal to a number
+on demand;
+#X text 12 25 NAME vsnapshot~;
+#X text 12 135 INLET_0 signal bang;
+#X text 12 155 OUTLET_0 float;
+#X text 12 235 RELEASE_DATE 1997;
+#X text 12 255 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 501 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 538 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 text 98 542 (none);
+#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 obj 22 43 snapshot~;
+#X text 8 2 [vsnapshot~] Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 79 445 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 509 float;
+#X obj 79 510 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 precision conversion of a signal to a number on demand
+;
+#X obj 463 3 vsnapshot~;
+#X obj 431 20 pddp/pddplink http://wiki.puredata.info/en/vsnapshot~
+-text pdpedia: vsnapshot~;
+#X floatatom 80 308 0 0 0 0 - - -;
+#X msg 91 233 bang;
+#X text 154 310 This output updates each time bang is clicked above.
+;
+#X obj 80 208 osc~ 0.1;
+#X text 85 190 0.1 Hz cosine;
+#X text 163 208 signal in to take snapshots of;
+#X text 134 232 bang -- take one snapshot;
+#X obj 80 285 vsnapshot~;
+#X text 73 55 The [vsnapshot~] object is a high-precision version of
+[snapshot~]. It takes a signal and converts it to a control value whenever
+it receives a bang in its left outlet. This object is particularly
+useful for monitoring outputs.;
+#X text 98 444 signal;
+#X text 168 444 - the incoming signal.;
+#X text 98 464 bang;
+#X text 73 118 In the example below \, a [vsnapshot~] object prints
+out the values of a low frequency cosine wave every time it is sent
+a bang message.;
+#X text 168 464 - a bang takes the current sample from the signal \,
+converts it to a float \, and sends it to the outlet.;
+#X text 168 509 - the outgoing value.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 16 0 22 0;
+#X connect 18 0 22 0;
+#X connect 22 0 15 0;
+#X connect 22 0 15 0;
diff --git a/doc/pddp/vu-help.pd b/doc/pddp/vu-help.pd
new file mode 100644
index 00000000..9766105f
--- /dev/null
+++ b/doc/pddp/vu-help.pd
@@ -0,0 +1,378 @@
+#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 105 PLATFORM windows macosx gnulinux;
+#X text 12 205 LIBRARY internal;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 225 AUTHOR Thomas Musil;
+#X text 12 245 WEBSITE;
+#X text 12 305 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS control GUI nonlocal;
+#X text 12 85 DESCRIPTION gui-vu-meter-display;
+#X text 12 25 NAME vu;
+#X text 12 125 INLET_0 float list bang size scale receive label label_pos
+label_font color pos delta;
+#X text 12 145 INLET_1 float;
+#X text 12 165 OUTLET_0 float;
+#X text 12 185 OUTLET_1 float;
+#X text 12 265 RELEASE_DATE 2002;
+#X text 12 285 RELEASE_VERSION;
+#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/doc/pddp/wrap~-help.pd b/doc/pddp/wrap~-help.pd
new file mode 100644
index 00000000..283d6194
--- /dev/null
+++ b/doc/pddp/wrap~-help.pd
@@ -0,0 +1,74 @@
+#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 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 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 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION remainder modulo 1;
+#X text 12 25 NAME wrap~;
+#X text 12 125 INLET_0 signal;
+#X text 12 145 OUTLET_0 signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#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;
diff --git a/doc/pddp/writesf~-help.pd b/doc/pddp/writesf~-help.pd
new file mode 100644
index 00000000..1bde9010
--- /dev/null
+++ b/doc/pddp/writesf~-help.pd
@@ -0,0 +1,103 @@
+#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 writesf~ 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 344 META 0;
+#X text 12 105 PLATFORM windows macosx gnulinux;
+#X text 12 165 LIBRARY internal;
+#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 185 AUTHOR Miller Puckette;
+#X text 12 265 HELP_PATCH_AUTHORS Updated for Pd version 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE help;
+#X text 12 45 KEYWORDS signal;
+#X text 12 85 DESCRIPTION write audio signals to a soundfile;
+#X text 12 25 NAME writesf~;
+#X text 12 125 INLET_0 signal open start stop print;
+#X text 12 145 INLET_N signal;
+#X text 12 225 RELEASE_DATE 1997;
+#X text 12 245 RELEASE_VERSION;
+#X restore 500 597 pd META;
+#X obj 0 498 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 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 107 479 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 [writesf~] Related Objects;
+#X obj 22 43 readsf~;
+#X obj 80 43 soundfiler;
+#X restore 102 597 pd Related_objects;
+#X obj 78 276 cnv 17 3 183 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 465 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 472 3 writesf~;
+#X obj 441 20 pddp/pddplink http://wiki.puredata.info/en/writesf~ -text
+pdpedia: writesf~;
+#X text 98 502 (none);
+#X msg 77 179 print;
+#X msg 9 103 bang;
+#X msg 76 135 start;
+#X msg 78 157 stop;
+#X obj 9 134 del 1000;
+#X obj 67 223 writesf~ 2;
+#X msg 67 65 open /tmp/foo.wav;
+#X obj 81 201 osc~ 440;
+#X msg 67 111 open -bytes 4 /tmp/foo.wav;
+#X text 176 64 create a new 16-bit soundfile;
+#X text 233 88 create 24-bit soundfile;
+#X text 232 111 create 32-bit floating-point soundfile;
+#X msg 67 88 open -bytes 3 /tmp/foo.wav;
+#X text 11 23 write audio signals to a soundfile;
+#X text 98 275 signal;
+#X text 98 292 open;
+#X text 98 415 start;
+#X text 98 430 stop;
+#X text 98 445 print;
+#X text 98 464 signal;
+#X text 167 464 - an additional inlet is created for each channel specified
+by the creation argument.;
+#X text 202 328 -wave \, -nextstep \, -aiff;
+#X text 203 343 -big \, -little (nextstep only!);
+#X text 203 358 -bytes <2 \, 3 \, or 4>;
+#X text 203 374 -rate <sample rate>;
+#X text 167 389 (setting sample rate will affect the soundfile header
+but the file will _not_ be resampled.);
+#X text 168 292 - the "open" message creates a new soundfile that can
+be written to. The "open" message may take flag-style arguments as
+follows:;
+#X text 168 415 - start streaming audio to disk.;
+#X text 168 430 - stop streaming audio to disk.;
+#X text 149 206 The soundfile is 2- or 3-byte fixed point ("pcm") or
+4-byte floating-point. The soundfile format is determined by the file
+extent ("foo.wav" \, "foo.aiff" \, or "foo.snd").;
+#X text 149 138 [writesf~] creates a subthread whose task is to write
+audio streams to disk. You need not provide any disk access time between
+"open" and "start" \, but between "stop" and the next "open" you must
+give the object time to flush all the output to disk.;
+#X text 168 445 - print debugging information.;
+#X text 168 275 - the incoming signal is written to the file.;
+#X text 168 544 - the creation argument is the number of channels (1
+to 64).;
+#X text 80 544 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 13 0 18 0;
+#X connect 14 0 15 0;
+#X connect 14 0 17 0;
+#X connect 15 0 18 0;
+#X connect 16 0 18 0;
+#X connect 17 0 16 0;
+#X connect 19 0 18 0;
+#X connect 20 0 18 0;
+#X connect 21 0 18 0;
+#X connect 25 0 18 0;
diff --git a/doc/pddp/x_all_guis.pd b/doc/pddp/x_all_guis.pd
new file mode 100644
index 00000000..e300eb07
--- /dev/null
+++ b/doc/pddp/x_all_guis.pd
@@ -0,0 +1,19 @@
+#N canvas 209 342 290 271 10;
+#X obj 23 31 bng 15 250 50 0 \$1 \$1 empty 20 8 0 8 -262144 -1 -1;
+#X obj 23 63 tgl 15 1.04858e+006 \$2 \$2 empty 20 8 0 8 -262144 -1
+-1 0 1;
+#X obj 22 95 vsl 15 128 0 127 0 1.04858e+006 \$3 \$3 empty 20 8 0 8
+-262144 -1 -1 0 1;
+#X obj 65 30 hsl 128 15 0 127 0 0 \$4 \$4 empty 20 8 0 8 -262144 -1
+-1 0 1;
+#X obj 63 63 hdl 15 1 2.6624e+006 8 \$5 \$5 empty 20 8 192 8 -262144
+-1 -1 0;
+#X obj 62 99 vu 15 120 \$6 empty 35 8 0 8 -66577 -1 1 0;
+#X obj 115 99 cnv 15 100 60 \$7 \$7 \$7 20 12 0 14 -233017 -66577 1.04858e+006
+;
+#X obj 41 308 inlet;
+#X obj 41 334 outlet;
+#X obj 227 30 vdl 15 1 4.79232e+006 8 \$9 \$9 empty 20 8 192 8 -262144
+-1 -1 0;
+#X obj 116 176 nbx 5 14 -1e+037 1e+037 0 0 \$8 \$8 empty 45 7 0 10
+-262144 -1 -1 88 256;
diff --git a/doc/pddp/zexy.pd b/doc/pddp/zexy.pd
new file mode 100644
index 00000000..37e1f781
--- /dev/null
+++ b/doc/pddp/zexy.pd
@@ -0,0 +1,317 @@
+#N canvas 5 7 745 601 10;
+#X declare -lib zexy;
+#X msg 81 59 help;
+#N canvas 259 142 708 221 io~ 0;
+#X obj 41 184 sfplay;
+#X obj 137 185 sfrecord;
+#X msg 41 162 help;
+#X msg 137 163 help;
+#X text 297 186 harddisk-recording tools;
+#X text 144 19 input~/output~ objects;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X restore 54 187 pd io~;
+#N canvas 320 195 583 254 generators~ 0;
+#X obj 125 173 noisi~;
+#X msg 125 151 help;
+#X msg 29 149 help;
+#X msg 125 103 help;
+#X msg 29 101 help;
+#X obj 29 171 noish~;
+#X obj 29 123 dirac~;
+#X obj 125 125 step~;
+#X text 296 174 bandlimited noise~ generators;
+#X text 290 127 scientific test-functions;
+#X text 152 26 generator~ objects;
+#X connect 1 0 0 0;
+#X connect 2 0 5 0;
+#X connect 3 0 7 0;
+#X connect 4 0 6 0;
+#X restore 54 212 pd generators~;
+#N canvas 362 224 657 505 processing~ 0;
+#X obj 52 93 limiter~;
+#X obj 51 143 quantize~;
+#X obj 52 193 swap~;
+#X msg 51 121 help;
+#X msg 52 71 help;
+#X msg 52 171 help;
+#X text 280 92 a limiter/compressor module;
+#X text 121 16 signal~processing objects;
+#X text 280 131 quantizes signals by various degrees;
+#X text 281 186 byte-swapps a 16bit signal;
+#X obj 55 254 z~;
+#X msg 55 231 help;
+#X text 245 228 a samplewise delay \, great for designing FIR-filters
+;
+#X text 253 247 (you cannot use it for IIR-filters !);
+#X obj 62 336 blockswap~;
+#X msg 62 314 help;
+#X text 244 339 swap upper and lower part of a signal-block;
+#X msg 62 374 help;
+#X obj 62 396 blockmirror~;
+#X text 244 399 revert a signal-block (play it back reversely);
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 5 0 2 0;
+#X connect 11 0 10 0;
+#X connect 15 0 14 0;
+#X connect 17 0 18 0;
+#X restore 54 236 pd processing~;
+#N canvas 319 68 585 573 analytic~ 0;
+#X obj 26 173 sigzero~;
+#X msg 26 151 help;
+#X text 164 171 detects whether a signal-block is zero throughout or
+not;
+#X obj 25 236 pdf~;
+#X msg 25 213 help;
+#X text 165 237 get the probability density function of a signal;
+#X text 130 48 signal~analyzing objectsd;
+#X obj 27 303 envrms~;
+#X obj 28 356 avg~;
+#X obj 29 407 tavg~;
+#X msg 27 282 help;
+#X msg 28 335 help;
+#X msg 29 386 help;
+#X text 158 300 the same as env~ \, except that this outputs rms instead
+of dB;
+#X text 158 356 arithmetic mean of one signal~vector;
+#X text 161 407 arithmetic mean between two bangs;
+#X msg 31 448 help;
+#X obj 31 469 dfreq~;
+#X text 164 469 frequency detector;
+#X connect 1 0 0 0;
+#X connect 4 0 3 0;
+#X connect 10 0 7 0;
+#X connect 11 0 8 0;
+#X connect 12 0 9 0;
+#X connect 16 0 17 0;
+#X restore 54 261 pd analytic~;
+#N canvas 299 114 664 548 others~ 0;
+#X obj 31 70 nop~;
+#X msg 31 48 help;
+#X text 246 63 do_nothing but delay for one-block (useful for synchronising)
+;
+#X text 175 11 miscanellous signal~ objects;
+#X msg 31 127 help;
+#X obj 31 149 pack~;
+#X msg 77 128 help;
+#X obj 77 150 unpack~;
+#X text 245 138 convert a signal to (packages of) floats and vice-versa
+;
+#X msg 31 350 help;
+#X msg 32 394 help;
+#X obj 31 371 multiplex~;
+#X obj 32 415 demultiplex~;
+#X msg 129 350 help;
+#X msg 130 393 help;
+#X obj 129 371 mux~;
+#X obj 130 415 demux~;
+#X text 245 416 multiplex 1 IN~signal to 1-of-n OUT~signals;
+#X text 246 369 multiplex 1-of-n IN~signals to 1 OUT~signal;
+#X msg 31 297 help;
+#X obj 31 319 multiline~;
+#X text 239 316 a line~d multiplication for multiple streams;
+#X connect 1 0 0 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 9 0 11 0;
+#X connect 10 0 12 0;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 19 0 20 0;
+#X restore 54 332 pd others~;
+#X text 269 183 alternative i/o-devices (harddisk \, net \, ...);
+#X text 268 207 useful signal generators;
+#X text 271 231 process your own signals;
+#X text 270 257 and analyze them;
+#X text 270 328 none of the above;
+#N canvas 0 0 591 430 sigbinops~ 0;
+#X obj 81 96 >~;
+#X obj 81 129 <~;
+#X obj 81 162 ==~;
+#X obj 81 244 &&~;
+#X obj 81 277 ||~;
+#X text 159 95 greater;
+#X text 158 131 less;
+#X text 157 165 equal;
+#X text 156 246 logical AND;
+#X text 154 278 logical OR;
+#X obj 80 347 abs~;
+#X obj 80 375 sgn~;
+#X text 158 348 absolute value (I think this is included at GEM too)
+;
+#X text 158 375 sign of a function;
+#X text 148 32 binary and math operators for signals~;
+#X restore 54 286 pd sigbinops~;
+#X text 269 284 some mathematical and logical functions that were missing
+;
+#N canvas 266 0 630 542 basic 0;
+#X obj 41 28 nop;
+#X text 222 28 a do nothing - pass through everything;
+#X obj 41 85 lister;
+#X obj 98 86 l;
+#X text 216 87 store a list (like "float" \, "int" \, ...);
+#X text 83 86 ==;
+#X obj 40 244 repack;
+#X text 211 242 (re)packs atoms to packages of a given size;
+#X obj 40 275 packel;
+#X text 209 272 the specified element of a list;
+#X obj 39 316 niagara;
+#X text 214 315 split 1 package into 2 at a specifique point;
+#X obj 43 464 segregate;
+#X text 210 463 segregates the input to various outputs depending on
+the type;
+#X text 210 117 convert anythings to lists;
+#X obj 41 115 any2list;
+#X text 101 115 ==;
+#X obj 119 115 a2l;
+#X obj 39 215 length;
+#X text 210 214 get the length of a list;
+#X obj 41 351 glue;
+#X text 216 345 append a list to another;
+#X obj 42 409 list2symbol;
+#X text 123 410 ==;
+#X obj 140 409 l2s;
+#X text 207 410 convert a list into a single symbol;
+#X obj 40 147 repeat 0;
+#X text 211 148 repeat a message N-times;
+#X restore 52 446 pd basic control;
+#N canvas 401 27 602 871 advanced 0;
+#X obj 28 129 makesymbol;
+#X msg 28 107 help;
+#X text 202 129 concatenate lists to formatted symbols;
+#X msg 28 154 help;
+#X obj 28 176 date;
+#X msg 67 154 help;
+#X obj 67 176 time;
+#X text 201 173 get the current system date/time;
+#X obj 28 229 index;
+#X msg 28 207 help;
+#X text 202 226 map symbols to indices;
+#X text 166 384 (no "help"-message available...);
+#X obj 28 433 demultiplex;
+#X obj 128 433 demux;
+#X text 109 434 ==;
+#X text 199 434 demultiplex the inlet to a specified outlet;
+#X obj 28 485 drip;
+#X text 201 484 extract the atoms of a package (opt. scheduled);
+#X msg 28 278 help;
+#X obj 28 302 msgfile;
+#X text 197 300 a powerful "textfile" derivative;
+#X obj 28 629 lpt;
+#X text 200 625 write data to the parallel port (line printer);
+#X text 109 454 ==;
+#X obj 28 453 multiplex;
+#X obj 128 453 mux;
+#X text 200 456 multiplex the specified inlet to the outlet;
+#X obj 28 672 operating_system;
+#X text 209 676 get the current operating system;
+#X obj 31 553 fifop;
+#X text 195 554 a FIFO (first-in-first-out) with Priorities;
+#X obj 31 583 lifop;
+#X text 195 584 a LIFO (last-in-first-out) with Priorities;
+#X obj 28 350 strcmp;
+#X text 194 354 compare to symbols with strcmp();
+#X connect 1 0 0 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 9 0 8 0;
+#X connect 18 0 19 0;
+#X restore 53 478 pd advanced control;
+#X text 265 477 some more complex control objects (systime \, tabread4
+\, ...);
+#X text 262 446 some useful control objects (nop...);
+#X text 268 567 objects to work with matrices (moved to IEMMATRIX)
+;
+#N canvas 221 231 583 258 matrix 0;
+#X obj 224 173 iemmatrix;
+#X text 109 52 zexy>=2.0 no longer has any matrix-objects.;
+#X text 109 72 instead \, these objects are now in a separate library
+"iemmatrix" \, dedicated solely to manipulation of 2D-matrices.;
+#X text 185 171 use;
+#X restore 53 570 pd matrix;
+#N canvas 0 0 616 602 numeric 0;
+#X obj 39 46 list2int;
+#X text 94 47 ==;
+#X obj 112 47 l2i;
+#X obj 41 85 atoi;
+#X text 207 49 cast each float of a list/anything to an integer;
+#X text 209 83 ascii to integer;
+#X obj 42 435 sort;
+#X text 208 438 shell-sort a package of floats;
+#X obj 42 303 mavg;
+#X msg 42 283 help;
+#X text 214 307 a moving average filter;
+#X obj 41 346 mean;
+#X msg 41 327 help;
+#X msg 40 367 help;
+#X obj 40 386 minmax;
+#X text 209 343 get the mean value of a list of floats (==vector);
+#X text 208 383 get the minimum and the maximum of a vector;
+#X obj 43 223 .;
+#X text 209 225 scalar multiplication of 2 vectors;
+#X obj 43 158 prime;
+#X text 200 162 check whether a number is prime;
+#X obj 43 259 sum;
+#X text 194 252 elementwise sum of a list;
+#X obj 44 137 wrap;
+#X text 196 139 wrap a number between an upper and a lower bound;
+#X obj 50 505 urn;
+#X text 199 502 Unique-Random-Numbers: get random numbers from an urn
+;
+#X connect 9 0 8 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X restore 51 378 pd numeric objects;
+#X text 262 376 objects dealing with numbers;
+#N canvas 306 127 571 219 tables 0;
+#X msg 29 16 help;
+#X obj 29 35 tabdump table;
+#X text 205 33 dump a table as a list of floats;
+#X msg 30 55 help;
+#X obj 30 74 tabset table;
+#X text 206 72 set a table with a list of floats;
+#X msg 29 106 help;
+#X obj 29 125 tabminmax table;
+#X text 208 128 get minimum and maximum;
+#X connect 0 0 1 0;
+#X connect 3 0 4 0;
+#X connect 6 0 7 0;
+#X restore 53 508 pd tables;
+#X text 268 517 objects to work on tables;
+#N canvas 0 0 701 577 conversions 0;
+#X obj 65 95 cart2sph;
+#X obj 65 115 cart2pol;
+#X obj 65 155 sph2pol;
+#X obj 65 175 sph2cart;
+#X obj 65 224 pol2cart;
+#X obj 65 247 pol2sph;
+#X text 84 67 coordinate-conversion;
+#X text 186 168 convert between Cartesian \, polar and spherical corrdinates
+;
+#X obj 72 334 deg2rad;
+#X obj 72 362 rad2deg;
+#X text 146 350 convert between degree and radiant;
+#X restore 52 402 pd conversions;
+#X text 259 406 numeric conversion (coordinates \, angles \, ...);
+#X text 208 7 the zexy external v2.1;
+#X text 409 66 (c) forum::für::umlute 1999-2005;
+#X text 410 82 bug-reports: zmoelnig-AT-iem.at;
+#X obj 81 83 zexy;
+#N canvas 515 193 494 344 META 0;
+#X text 12 65 TEMPLATE template-help.pd v0.1;
+#X text 12 85 PLATFORM windows macosx gnulinux;
+#X text 12 165 WEBSITE;
+#X text 12 205 RELEASE_VERSION 0.42;
+#X text 12 225 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
+Wilkes for Pd version 0.42.;
+#X text 12 45 LICENSE GPL v2;
+#X text 12 145 AUTHOR IOhannes m zmölnig;
+#X text 12 185 RELEASE_DATE;
+#X text 12 105 DATATYPE;
+#X text 12 25 KEYWORDS;
+#X text 12 125 LIBRARY external zexy;
+#X text 12 5 GENRE help;
+#X restore 696 581 pd META;
+#X obj 672 560 import zexy;
+#X connect 0 0 28 0;