aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/vasp/pd-help
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2002-12-02 19:21:08 +0000
committerThomas Grill <xovo@users.sourceforge.net>2002-12-02 19:21:08 +0000
commit9815096db22c73cacdbb65512d1b61d633db7fa8 (patch)
tree4a6582ead85b8efd031f68e717fbc8a5b3a3df3f /externals/grill/vasp/pd-help
parent0a109da279e9df66fb5ea7d6bdaeffed16592f02 (diff)
"version 0.1.1"
svn path=/trunk/; revision=267
Diffstat (limited to 'externals/grill/vasp/pd-help')
-rw-r--r--externals/grill/vasp/pd-help/vasp_abs.pd48
-rw-r--r--externals/grill/vasp/pd-help/vasp_add.pd54
-rw-r--r--externals/grill/vasp/pd-help/vasp_ageq.pd50
-rw-r--r--externals/grill/vasp/pd-help/vasp_agtr.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_aleq.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_alwr.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_cadd.pd21
-rw-r--r--externals/grill/vasp/pd-help/vasp_cconj.pd33
-rw-r--r--externals/grill/vasp/pd-help/vasp_ccopy.pd83
-rw-r--r--externals/grill/vasp/pd-help/vasp_cdiv.pd16
-rw-r--r--externals/grill/vasp/pd-help/vasp_cdivr.pd18
-rw-r--r--externals/grill/vasp/pd-help/vasp_cfft.pd98
-rw-r--r--externals/grill/vasp/pd-help/vasp_channel.pd10
-rw-r--r--externals/grill/vasp/pd-help/vasp_check.pd26
-rw-r--r--externals/grill/vasp/pd-help/vasp_cifft.pd89
-rw-r--r--externals/grill/vasp/pd-help/vasp_cmul.pd21
-rw-r--r--externals/grill/vasp/pd-help/vasp_cnoise.pd53
-rw-r--r--externals/grill/vasp/pd-help/vasp_cnorm.pd94
-rw-r--r--externals/grill/vasp/pd-help/vasp_copy.pd70
-rw-r--r--externals/grill/vasp/pd-help/vasp_cosc.pd63
-rw-r--r--externals/grill/vasp/pd-help/vasp_cpowi.pd84
-rw-r--r--externals/grill/vasp/pd-help/vasp_crsub.pd22
-rw-r--r--externals/grill/vasp/pd-help/vasp_cset.pd20
-rw-r--r--externals/grill/vasp/pd-help/vasp_csqr.pd79
-rw-r--r--externals/grill/vasp/pd-help/vasp_csub.pd21
-rw-r--r--externals/grill/vasp/pd-help/vasp_csubr.pd21
-rw-r--r--externals/grill/vasp/pd-help/vasp_dframes.pd65
-rw-r--r--externals/grill/vasp/pd-help/vasp_dif.pd49
-rw-r--r--externals/grill/vasp/pd-help/vasp_div.pd42
-rw-r--r--externals/grill/vasp/pd-help/vasp_divr.pd37
-rw-r--r--externals/grill/vasp/pd-help/vasp_doffset.pd28
-rw-r--r--externals/grill/vasp/pd-help/vasp_dsize.pd39
-rw-r--r--externals/grill/vasp/pd-help/vasp_equ.pd53
-rw-r--r--externals/grill/vasp/pd-help/vasp_exp.pd42
-rw-r--r--externals/grill/vasp/pd-help/vasp_fhp.pd89
-rw-r--r--externals/grill/vasp/pd-help/vasp_fix.pd64
-rw-r--r--externals/grill/vasp/pd-help/vasp_flp.pd86
-rw-r--r--externals/grill/vasp/pd-help/vasp_frames.pd60
-rw-r--r--externals/grill/vasp/pd-help/vasp_gate.pd74
-rw-r--r--externals/grill/vasp/pd-help/vasp_gather.pd64
-rw-r--r--externals/grill/vasp/pd-help/vasp_geq.pd50
-rw-r--r--externals/grill/vasp/pd-help/vasp_gtr.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_imm.pd77
-rw-r--r--externals/grill/vasp/pd-help/vasp_int.pd40
-rw-r--r--externals/grill/vasp/pd-help/vasp_iwindow.pd61
-rw-r--r--externals/grill/vasp/pd-help/vasp_join.pd26
-rw-r--r--externals/grill/vasp/pd-help/vasp_leq.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_list.pd28
-rw-r--r--externals/grill/vasp/pd-help/vasp_log.pd50
-rw-r--r--externals/grill/vasp/pd-help/vasp_lwr.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_max.pd51
-rw-r--r--externals/grill/vasp/pd-help/vasp_mcosc.pd68
-rw-r--r--externals/grill/vasp/pd-help/vasp_mframes.pd63
-rw-r--r--externals/grill/vasp/pd-help/vasp_min.pd51
-rw-r--r--externals/grill/vasp/pd-help/vasp_minmax.pd59
-rw-r--r--externals/grill/vasp/pd-help/vasp_mirr.pd45
-rw-r--r--externals/grill/vasp/pd-help/vasp_miwindow.pd64
-rw-r--r--externals/grill/vasp/pd-help/vasp_mod.pd48
-rw-r--r--externals/grill/vasp/pd-help/vasp_mosc.pd80
-rw-r--r--externals/grill/vasp/pd-help/vasp_mphasor.pd78
-rw-r--r--externals/grill/vasp/pd-help/vasp_msize.pd38
-rw-r--r--externals/grill/vasp/pd-help/vasp_mul.pd135
-rw-r--r--externals/grill/vasp/pd-help/vasp_multi.pd20
-rw-r--r--externals/grill/vasp/pd-help/vasp_mwindow.pd64
-rw-r--r--externals/grill/vasp/pd-help/vasp_mxwindow.pd64
-rw-r--r--externals/grill/vasp/pd-help/vasp_neq.pd52
-rw-r--r--externals/grill/vasp/pd-help/vasp_noise.pd43
-rw-r--r--externals/grill/vasp/pd-help/vasp_nonzero.pd160
-rw-r--r--externals/grill/vasp/pd-help/vasp_offset.pd30
-rw-r--r--externals/grill/vasp/pd-help/vasp_offsetd.pd28
-rw-r--r--externals/grill/vasp/pd-help/vasp_offsetq.pd25
-rw-r--r--externals/grill/vasp/pd-help/vasp_opt.pd71
-rw-r--r--externals/grill/vasp/pd-help/vasp_osc.pd63
-rw-r--r--externals/grill/vasp/pd-help/vasp_part.pd34
-rw-r--r--externals/grill/vasp/pd-help/vasp_peaks.pd89
-rw-r--r--externals/grill/vasp/pd-help/vasp_phasor.pd67
-rw-r--r--externals/grill/vasp/pd-help/vasp_polar.pd90
-rw-r--r--externals/grill/vasp/pd-help/vasp_pow.pd44
-rw-r--r--externals/grill/vasp/pd-help/vasp_qamax.pd75
-rw-r--r--externals/grill/vasp/pd-help/vasp_qamin.pd53
-rw-r--r--externals/grill/vasp/pd-help/vasp_qchannel.pd10
-rw-r--r--externals/grill/vasp/pd-help/vasp_qframes.pd27
-rw-r--r--externals/grill/vasp/pd-help/vasp_qmax.pd44
-rw-r--r--externals/grill/vasp/pd-help/vasp_qmin.pd44
-rw-r--r--externals/grill/vasp/pd-help/vasp_qoffset.pd19
-rw-r--r--externals/grill/vasp/pd-help/vasp_qrmax.pd99
-rw-r--r--externals/grill/vasp/pd-help/vasp_qrmin.pd59
-rw-r--r--externals/grill/vasp/pd-help/vasp_qsize.pd31
-rw-r--r--externals/grill/vasp/pd-help/vasp_qvector.pd13
-rw-r--r--externals/grill/vasp/pd-help/vasp_qvectors.pd17
-rw-r--r--externals/grill/vasp/pd-help/vasp_radd.pd84
-rw-r--r--externals/grill/vasp/pd-help/vasp_radio.pd28
-rw-r--r--externals/grill/vasp/pd-help/vasp_rect.pd87
-rw-r--r--externals/grill/vasp/pd-help/vasp_rfft.pd74
-rw-r--r--externals/grill/vasp/pd-help/vasp_rframes.pd63
-rw-r--r--externals/grill/vasp/pd-help/vasp_rgate.pd86
-rw-r--r--externals/grill/vasp/pd-help/vasp_rifft.pd75
-rw-r--r--externals/grill/vasp/pd-help/vasp_rmax.pd81
-rw-r--r--externals/grill/vasp/pd-help/vasp_rmin.pd84
-rw-r--r--externals/grill/vasp/pd-help/vasp_ropt.pd86
-rw-r--r--externals/grill/vasp/pd-help/vasp_rot.pd48
-rw-r--r--externals/grill/vasp/pd-help/vasp_rpeaks.pd94
-rw-r--r--externals/grill/vasp/pd-help/vasp_rpow.pd83
-rw-r--r--externals/grill/vasp/pd-help/vasp_rsize.pd37
-rw-r--r--externals/grill/vasp/pd-help/vasp_rvalleys.pd91
-rw-r--r--externals/grill/vasp/pd-help/vasp_set.pd90
-rw-r--r--externals/grill/vasp/pd-help/vasp_sframes.pd136
-rw-r--r--externals/grill/vasp/pd-help/vasp_shift.pd57
-rw-r--r--externals/grill/vasp/pd-help/vasp_sign.pd42
-rw-r--r--externals/grill/vasp/pd-help/vasp_size.pd43
-rw-r--r--externals/grill/vasp/pd-help/vasp_soffset.pd153
-rw-r--r--externals/grill/vasp/pd-help/vasp_spit.pd46
-rw-r--r--externals/grill/vasp/pd-help/vasp_split.pd27
-rw-r--r--externals/grill/vasp/pd-help/vasp_sqr.pd38
-rw-r--r--externals/grill/vasp/pd-help/vasp_sqrt.pd38
-rw-r--r--externals/grill/vasp/pd-help/vasp_ssqr.pd96
-rw-r--r--externals/grill/vasp/pd-help/vasp_ssqrt.pd96
-rw-r--r--externals/grill/vasp/pd-help/vasp_sub.pd54
-rw-r--r--externals/grill/vasp/pd-help/vasp_subr.pd48
-rw-r--r--externals/grill/vasp/pd-help/vasp_sync.pd81
-rw-r--r--externals/grill/vasp/pd-help/vasp_tilt.pd100
-rw-r--r--externals/grill/vasp/pd-help/vasp_update.pd36
-rw-r--r--externals/grill/vasp/pd-help/vasp_v.pd50
-rw-r--r--externals/grill/vasp/pd-help/vasp_valleys.pd86
-rw-r--r--externals/grill/vasp/pd-help/vasp_vector.pd31
-rw-r--r--externals/grill/vasp/pd-help/vasp_vectors.pd13
-rw-r--r--externals/grill/vasp/pd-help/vasp_window.pd62
-rw-r--r--externals/grill/vasp/pd-help/vasp_xmirr.pd86
-rw-r--r--externals/grill/vasp/pd-help/vasp_xrot.pd48
-rw-r--r--externals/grill/vasp/pd-help/vasp_xshift.pd57
-rw-r--r--externals/grill/vasp/pd-help/vasp_xtilt.pd107
-rw-r--r--externals/grill/vasp/pd-help/vasp_xwindow.pd61
132 files changed, 7628 insertions, 0 deletions
diff --git a/externals/grill/vasp/pd-help/vasp_abs.pd b/externals/grill/vasp/pd-help/vasp_abs.pd
new file mode 100644
index 00000000..493bf9fd
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_abs.pd
@@ -0,0 +1,48 @@
+#N canvas 99 112 853 471 10;
+#X msg 521 263 vasp bufabs;
+#X text 71 63 get absolute values of a vasp;
+#X text 71 79 see also vasp.*.help for an example using vasp.abs to
+generate an envelope from a vasp;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.abs 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufabs 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 465 124 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufabs;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 737 285 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 521 284 pd clear_buffer;
+#X text 189 209 get the absolute values;
+#X obj 77 209 prepend set;
+#X obj 77 285 vasp.update;
+#X text 178 134 generate a sinewave;
+#X msg 77 135 vasp bufabs;
+#X obj 77 154 vasp.osc 22050;
+#X obj 77 247 vasp.abs;
+#X obj 170 210 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 77 173 vasp.update;
+#X text 58 209 *;
+#X text 71 414 * prepend-object from iemlib2 (http://pd.iem.at/iemlib)
+;
+#X obj 77 383 VASP-HELP;
+#X connect 0 0 6 0;
+#X connect 8 0 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 9 0;
+#X connect 14 0 13 0;
+#X connect 15 0 8 0;
diff --git a/externals/grill/vasp/pd-help/vasp_add.pd b/externals/grill/vasp/pd-help/vasp_add.pd
new file mode 100644
index 00000000..56781928
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_add.pd
@@ -0,0 +1,54 @@
+#N canvas 8 252 972 385 10;
+#N canvas 40 55 255 173 clear_buffer 0;
+#X obj 59 79 vasp.update;
+#X obj 59 56 vasp.= 0;
+#X obj 59 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 755 285 pd clear_buffer;
+#X text 452 193 shift all values - 0.5;
+#X text 372 63 optional argument/right inlet: right operand;
+#X text 372 46 subtracts a value or a vasp from a vasp;
+#X obj 376 213 vasp.update;
+#X obj 376 190 vasp.- 0.5;
+#X obj 376 145 vasp.osc 44100;
+#X obj 376 167 vasp.* 0.5;
+#X text 45 63 optional argument/right inlet: right operand;
+#X text 45 46 adds a value or a vasp to a vasp;
+#X obj 45 20 cnv 15 15 15 empty empty vasp.+ 0 10 1 14 -262144 -1 0
+;
+#X obj 374 18 cnv 15 15 15 empty empty vasp.- 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph167 0;
+#X array bufadd 88200 float 0;
+#X coords 0 1 88199 -1 300 120 1;
+#X restore 624 100 graph;
+#X text 124 192 shift all values + 0.5;
+#X text 127 169 half the amplitude;
+#X obj 49 213 vasp.update;
+#X obj 49 190 vasp.+ 0.5;
+#X obj 49 145 vasp.osc 44100;
+#X obj 49 167 vasp.* 0.5;
+#X text 157 147 generate a 1Hz sine wave;
+#X msg 49 113 vasp bufadd;
+#X msg 376 113 vasp bufadd;
+#X msg 755 264 vasp bufadd;
+#N canvas 0 0 396 272 init 0;
+#X obj 36 19 loadbang;
+#X msg 36 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 36 45 symbol bufadd;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 879 285 pd init;
+#X obj 49 345 VASP-HELP;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 18 0 16 0;
+#X connect 20 0 17 0;
+#X connect 21 0 6 0;
+#X connect 22 0 0 0;
diff --git a/externals/grill/vasp/pd-help/vasp_ageq.pd b/externals/grill/vasp/pd-help/vasp_ageq.pd
new file mode 100644
index 00000000..04df10f5
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_ageq.pd
@@ -0,0 +1,50 @@
+#N canvas 44 207 839 468 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.a>= 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufageq 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 408 84 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufageq \, symbol bufageq1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 662 388 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufageq1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 408 213 graph;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 460 390 pd clear_buffers;
+#X obj 57 418 VASP-HELP;
+#X obj 58 366 vasp.update;
+#X floatatom 125 308 5 0 0;
+#X text 164 236 copy to new buffer;
+#X text 60 80 abs(sample) >= abs(value);
+#X msg 61 150 vasp bufageq;
+#X msg 58 236 vasp bufageq1;
+#X obj 58 262 vasp.= bufageq;
+#X obj 58 335 vasp.>= -0.4;
+#X msg 460 364 vasp bufageq bufageq1;
+#X connect 5 0 6 0;
+#X connect 10 0 16 1;
+#X connect 13 0 5 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 9 0;
+#X connect 17 0 7 0;
diff --git a/externals/grill/vasp/pd-help/vasp_agtr.pd b/externals/grill/vasp/pd-help/vasp_agtr.pd
new file mode 100644
index 00000000..c7ff71e6
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_agtr.pd
@@ -0,0 +1,52 @@
+#N canvas 44 207 841 470 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.a> 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufagtr 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 439 87 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufagtr \, symbol bufagtr1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 693 391 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufagtr1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 439 216 graph;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 491 393 pd clear_buffers;
+#X text 338 218 1/true;
+#X text 337 258 0/false;
+#X obj 57 418 VASP-HELP;
+#X obj 58 366 vasp.update;
+#X floatatom 119 309 5 0 0;
+#X text 164 230 copy to new buffer;
+#X msg 491 367 vasp bufagtr bufagtr1;
+#X text 60 80 abs(sample) > abs(value);
+#X msg 61 150 vasp bufagtr;
+#X msg 58 236 vasp bufagtr1;
+#X obj 58 262 vasp.= bufagtr;
+#X obj 58 335 vasp.> -0.4;
+#X connect 5 0 6 0;
+#X connect 12 0 19 1;
+#X connect 14 0 7 0;
+#X connect 16 0 5 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 11 0;
diff --git a/externals/grill/vasp/pd-help/vasp_aleq.pd b/externals/grill/vasp/pd-help/vasp_aleq.pd
new file mode 100644
index 00000000..30a88cf6
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_aleq.pd
@@ -0,0 +1,52 @@
+#N canvas 56 200 881 464 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.a<= 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufaleq 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 489 91 graph;
+#N canvas 0 0 402 278 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufaleq \, symbol bufaleq1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 743 395 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufaleq1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 489 220 graph;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 541 397 pd clear_buffers;
+#X text 389 220 1/true;
+#X text 388 260 0/false;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#X obj 58 366 vasp.update;
+#X floatatom 125 308 5 0 0;
+#X text 164 230 copy to new buffer;
+#X obj 57 418 VASP-HELP;
+#X msg 541 371 vasp bufaleq bufaleq1;
+#X msg 61 150 vasp bufaleq;
+#X msg 58 236 vasp bufaleq1;
+#X obj 58 262 vasp.= bufaleq;
+#X obj 58 335 vasp.<= -0.4;
+#X text 60 80 abs(sample) <= abs(value);
+#X connect 8 0 9 0;
+#X connect 11 0 18 1;
+#X connect 14 0 4 0;
+#X connect 15 0 8 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_alwr.pd b/externals/grill/vasp/pd-help/vasp_alwr.pd
new file mode 100644
index 00000000..2eca3860
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_alwr.pd
@@ -0,0 +1,52 @@
+#N canvas 44 207 843 472 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.a< 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufalwr 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 480 90 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufalwr \, symbol bufalwr1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 734 394 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufalwr1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 480 219 graph;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#X text 164 234 copy to new buffer;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 532 396 pd clear_buffers;
+#X text 378 219 1/true;
+#X text 377 259 0/false;
+#X obj 58 366 vasp.update;
+#X floatatom 125 313 5 0 0;
+#X obj 59 418 VASP-HELP;
+#X msg 532 370 vasp bufalwr bufalwr1;
+#X msg 58 236 vasp bufalwr1;
+#X msg 61 150 vasp bufalwr;
+#X obj 58 262 vasp.= bufalwr;
+#X obj 58 335 vasp.a< -0.4;
+#X text 61 80 abs(sample) < abs(value);
+#X connect 5 0 6 0;
+#X connect 12 0 18 1;
+#X connect 14 0 8 0;
+#X connect 15 0 17 0;
+#X connect 16 0 5 0;
+#X connect 17 0 18 0;
+#X connect 18 0 11 0;
diff --git a/externals/grill/vasp/pd-help/vasp_cadd.pd b/externals/grill/vasp/pd-help/vasp_cadd.pd
new file mode 100644
index 00000000..ec1492eb
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cadd.pd
@@ -0,0 +1,21 @@
+#N canvas 266 193 597 452 10;
+#X text 49 142 c \, d ... right operand;
+#X text 49 127 a \, b ... left operand;
+#X text 49 112 e \, f ... target buffers;
+#X text 49 202 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 49 80 e+if=(a+ib)+(c+id);
+#X text 49 174 vasp.c+ needs 2 vectors per operand which are treated
+as pairs;
+#X text 49 65 complex addition;
+#X obj 55 34 cnv 15 15 15 empty empty vasp.c+ 0 10 1 14 -262144 -1
+0;
+#X obj 263 107 vasp.c+;
+#X text 46 287 related objects:;
+#X obj 182 330 vasp.c!-;
+#X obj 265 330 vasp.c!/;
+#X obj 182 288 vasp.c=;
+#X obj 265 309 vasp.c/;
+#X obj 265 288 vasp.c*;
+#X obj 182 309 vasp.c-;
+#X obj 50 384 VASP-HELP;
diff --git a/externals/grill/vasp/pd-help/vasp_cconj.pd b/externals/grill/vasp/pd-help/vasp_cconj.pd
new file mode 100644
index 00000000..ba402500
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cconj.pd
@@ -0,0 +1,33 @@
+#N canvas 122 81 821 476 10;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.cconj 0 10 1 14 -262144
+-1 0;
+#X obj 51 208 vasp.update;
+#X obj 53 367 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufconre 21 float 1;
+#A 0 0.619999 0.639999 0.4 0.18 0.3 0.32 0.0599999 -0.28 -0.26 -0.14
+0.22 0.46 0.26 -0.24 -0.719999 -0.619999 -0.26 -0.02 -0.26 -0.48 -0.5
+;
+#X coords 0 1 20 -1 300 100 1;
+#X restore 410 100 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 45 symbol bufconre \, symbol bufconim;
+#X msg 33 73 \; \$1 xticks 0 1 5 \; \$1 xlabel 1.1 0 5 10 15 20 \;
+\$1 yticks 0 0.25 2 \; \$1 ylabel 21.3 -1 -0.5 0 0.5 1;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 670 381 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufconim 21 float 1;
+#A 0 0.900005 0.820005 0.720004 0.640004 0.580003 0.460003 0.360002
+0.240002 0.120001 0.0600005 -0.0600002 -0.180001 -0.300002 -0.300002
+-0.400002 -0.480003 -0.500003 -0.500003 -0.560003 -0.420002 -0.380002
+;
+#X coords 0 1 20 -1 300 100 1;
+#X restore 411 232 graph;
+#X text 44 59 conjugates the imaginary part of a complex vasp;
+#X obj 51 177 vasp.cconj;
+#X msg 51 142 vasp bufconre bufconim;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
diff --git a/externals/grill/vasp/pd-help/vasp_ccopy.pd b/externals/grill/vasp/pd-help/vasp_ccopy.pd
new file mode 100644
index 00000000..5e2d51da
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_ccopy.pd
@@ -0,0 +1,83 @@
+#N canvas 21 60 973 580 10;
+#X obj 62 33 cnv 15 15 15 empty empty vasp.c-> 0 10 1 14 -262144 -1
+0;
+#X text 55 81 optional argument/right inlet: value/vasp;
+#N canvas 0 0 262 199 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X restore 308 479 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy1 100 float 1;
+#A 0 0.143758 0.0686079 -0.38831 -0.0776481 0.294635 0.674558 0.607506
+-0.170675 -0.0864513 -0.41061 -0.195257 -0.0921464 -0.0565912 -0.0555828
+0.0530162 0.0249378 -0.0623897 -0.0156552 0.0755211 0.0167451 0.141562
+0.0405158 -0.023263 0.0180184 -0.0637342 -0.0822978 -0.00542918 -0.000371593
+0.0383471 0.0352856 0.00255783 -0.0732533 0.00192948 -0.00246741 -0.00759756
+0.038446 -0.030182 -0.0408431 -0.0153346 -0.0652415 -0.0363779 0.0186147
+0.0138818 0.0333752 0.0466349 0.0131742 -0.0321698 0.0154971 0.00843997
+0.0131756 0.0645522 0.00604813 -0.0115883 0.00454732 -0.0538017 -0.0109963
+0.0257179 0.0423155 0.0291044 0.0311714 -0.0175559 -0.0558005 0.0108977
+-0.0305093 -0.00780438 0.0367772 -0.0188594 -0.00453038 -0.0172815
+-0.0762415 -0.00338057 0.0343781 0.0289549 0.00518148 0.0427147 -0.0310832
+-0.0454392 0.0401651 -0.0132068 0.0646664 0.120187 -0.00961662 0.0462419
+-0.0174716 -0.0689202 -0.0208856 0.0423041 0.024882 0.00339087 -0.0797522
+-0.230074 -0.440424 -0.0808137 -0.16581 0.848087 -0.0205055 -0.296507
+0.0507298 0.357646 -0.480663;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 572 53 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 87 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufcopy1 \, symbol bufcopy2 \, symbol bufcopy3
+\, symbol bufcopy4;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 308 518 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy2 100 float 1;
+#A 0 0.0280782 -0.0422518 0.554172 -0.1767 1 0.156081 -0.876136 -0.11387
+-0.208158 -0.115016 0.0598257 -0.00410798 -0.0287769 0.247451 -0.0203781
+-0.0739293 0.0539849 0.0833412 0.0777782 0.109606 0.0072245 -0.146124
+-0.0299617 -0.123235 -0.0657105 0.00113347 -0.00988766 -0.00689244
+0.0115624 -0.0669525 -0.0608685 -0.0229969 0.00134453 -0.0204591 0.0424171
+-0.0235819 -0.0606822 -0.0179317 -0.0448778 -0.00991407 0.042282 0.0112347
+0.00659574 -0.0135941 -0.0447328 -0.0525184 -0.00989902 0.00836445
+-0.00132186 0.0146546 -0.000898497 -0.0431941 -0.00978027 -0.0237825
+-0.0115866 0.0196117 0.0161645 0.000628861 -0.0328125 -0.0393695 -0.0745345
+-0.0206123 0.0146289 -0.0234719 0.0331914 -0.00930453 -0.0477893 0.0219494
+-0.0180073 0.0137906 0.0326551 0.0580143 -0.0392246 -0.0196385 -0.0287846
+-0.0691948 0.00847168 0.0580848 -0.00780806 0.111565 -0.0162468 -0.142128
+-0.0371815 -0.0349165 -0.0117682 -0.022951 -0.012041 -0.245803 -0.0872
+-0.246933 -0.3275 0.130284 0.138918 -0.150566 0.816856 0.0117589 0.391891
+0.00536379 0.00963765 0.49746;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 572 167 graph;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy3 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 573 319 graph;
+#X text 111 357 abbreviation;
+#X obj 211 251 vasp.update;
+#X text 53 224 original;
+#X text 55 99 left outlet: original \, right outlet copy;
+#X text 183 226 copy;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy4 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 573 435 graph;
+#X msg 54 169 vasp bufcopy1 bufcopy2;
+#X obj 54 204 vasp.copy bufcopy3 bufcopy4;
+#X msg 308 454 vasp bufcopy3 bufcopy4;
+#X obj 53 356 vasp.c->;
+#X text 55 62 copy a complex vasp to another;
+#X text 50 405 related object;
+#X obj 162 404 vasp.copy;
+#X obj 249 404 vasp.=;
+#X obj 50 500 VASP-HELP;
+#X connect 13 0 14 0;
+#X connect 14 1 8 0;
+#X connect 15 0 2 0;
diff --git a/externals/grill/vasp/pd-help/vasp_cdiv.pd b/externals/grill/vasp/pd-help/vasp_cdiv.pd
new file mode 100644
index 00000000..bb1a5073
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cdiv.pd
@@ -0,0 +1,16 @@
+#N canvas 235 228 623 356 10;
+#X text 52 141 c \, d ... right operand;
+#X text 52 126 a \, b ... left operand;
+#X text 52 111 e \, f ... target buffers;
+#X text 51 199 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 52 81 e+if=(a+ib)/(c+id);
+#X text 52 168 vasp.c/ needs 2 vectors per operand which are treated
+as pairs;
+#X text 52 65 complex division;
+#X obj 55 34 cnv 15 15 15 empty empty vasp.c/ 0 10 1 14 -262144 -1
+0;
+#X obj 277 86 vasp.c/;
+#X obj 173 280 vasp.c!/;
+#X obj 54 317 VASP-HELP;
+#X text 51 281 related object:;
diff --git a/externals/grill/vasp/pd-help/vasp_cdivr.pd b/externals/grill/vasp/pd-help/vasp_cdivr.pd
new file mode 100644
index 00000000..5aa1c1a2
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cdivr.pd
@@ -0,0 +1,18 @@
+#N canvas 231 208 570 384 10;
+#X text 52 141 c \, d ... right operand;
+#X text 52 126 a \, b ... left operand;
+#X text 52 111 e \, f ... target buffers;
+#X text 51 199 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 52 81 e+if=(a+ib)/(c+id);
+#X text 52 168 vasp.c/ needs 2 vectors per operand which are treated
+as pairs;
+#X obj 55 34 cnv 15 15 15 empty empty vasp.c!/ 0 10 1 14 -262144 -1
+0;
+#X text 52 65 reverse complex division;
+#X obj 283 79 vasp.c!/;
+#X obj 186 308 vasp.c/;
+#X obj 186 287 vasp.c*;
+#X obj 53 346 VASP-HELP;
+#X text 92 348 - vasp overview;
+#X text 51 285 related objects:;
diff --git a/externals/grill/vasp/pd-help/vasp_cfft.pd b/externals/grill/vasp/pd-help/vasp_cfft.pd
new file mode 100644
index 00000000..e6f46809
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cfft.pd
@@ -0,0 +1,98 @@
+#N canvas 48 55 915 635 10;
+#N canvas 92 108 405 306 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 203 210 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 259 135 resize \$1;
+#X obj 259 88 loadbang;
+#X obj 67 53 loadbang;
+#X msg 259 109 88200;
+#X obj 259 157 s bufre;
+#X obj 269 181 s bufim;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 4;
+#X obj 66 178 t b;
+#X msg 67 133 read \$1 bufre;
+#X connect 0 0 11 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 4 0 6 0;
+#X connect 5 0 10 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 9 0 12 0;
+#X connect 10 0 9 0;
+#X connect 11 0 2 0;
+#X connect 12 0 0 0;
+#X restore 781 473 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.cfft 0 10 1 14 -262144 -1
+0;
+#X obj 326 113 filelist \$0;
+#X text 75 52 complex fourier transformation (giant);
+#X text 70 68 cfft needs two buffers;
+#X msg 67 113 vasp bufre;
+#X obj 67 136 vasp.noise;
+#X text 151 112 generate white noise or;
+#X obj 67 159 vasp.* 0.5;
+#X obj 67 182 vasp.update;
+#X obj 67 205 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 61 411 vasp.update;
+#X obj 61 434 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 61 388 vasp.c!fft;
+#X obj 61 276 vasp.cfft;
+#X msg 61 253 vasp bufre bufim;
+#X obj 61 299 vasp.update;
+#X obj 61 322 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 61 365 vasp bufre bufim;
+#X text 758 100 real;
+#X text 768 242 imaginary;
+#X text 524 387 0 Hz;
+#X text 660 387 sr/2;
+#X obj 558 117 wavedisplay-select bufre \$0;
+#X obj 559 266 wavedisplay-select bufim \$0;
+#X text 166 472 <-- click to open;
+#X text 789 387 44.1 kHz;
+#X text 145 274 convert a signal from the time domain into the frequency
+domain. each sample now represents a frequency (range from 0 to 44.1
+kHz).;
+#X obj 59 473 filter_example;
+#X obj 352 478 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 486 472 pd clear_buffers;
+#X obj 352 434 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 374 428 play;
+#X text 486 428 clear;
+#X obj 352 455 tabplay~ bufre;
+#X msg 486 449 vasp bufre bufim;
+#X text 67 556 related objects:;
+#X obj 68 596 VASP-HELP;
+#X text 110 595 - vasp overview;
+#X obj 379 557 vasp.r!fft;
+#X obj 296 557 vasp.rfft;
+#X obj 210 557 vasp.c!fft;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 11 0 12 0;
+#X connect 13 0 11 0;
+#X connect 14 0 16 0;
+#X connect 15 0 14 0;
+#X connect 16 0 17 0;
+#X connect 18 0 13 0;
+#X connect 31 0 34 0;
+#X connect 34 0 29 0;
+#X connect 34 0 29 1;
+#X connect 35 0 30 0;
diff --git a/externals/grill/vasp/pd-help/vasp_channel.pd b/externals/grill/vasp/pd-help/vasp_channel.pd
new file mode 100644
index 00000000..2734b3f6
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_channel.pd
@@ -0,0 +1,10 @@
+#N canvas 87 123 442 407 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.channel 0 10 1 14 -262144
+-1 0;
+#X obj 59 163 vasp.channel;
+#X obj 161 209 vasp.channel?;
+#X text 57 69 set channel index of vectors in vasp;
+#X text 54 105 only used for interleaved stereo-files;
+#X text 57 210 related object;
+#X text 52 123 (MaxMSP version of vasp);
+#X obj 61 268 VASP-HELP;
diff --git a/externals/grill/vasp/pd-help/vasp_check.pd b/externals/grill/vasp/pd-help/vasp_check.pd
new file mode 100644
index 00000000..ef9311e4
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_check.pd
@@ -0,0 +1,26 @@
+#N canvas 219 135 653 496 10;
+#X text 250 113 buffer length = 88200 samples;
+#X text 67 72 checks the dimensions of a vasp and corrects them;
+#X obj 70 32 cnv 15 15 15 empty empty vasp.check 0 10 1 14 -262144
+-1 0;
+#X obj 69 114 table bufchk 88200;
+#X text 250 253 corrected vasp with maximum length at offset 44100
+;
+#X obj 69 227 prepend set;
+#X msg 69 159 vasp 88200 bufchk 44100 0;
+#X text 250 158 vasp with impossible dimensions;
+#X msg 69 254 vasp 44100 bufchk 44100 0;
+#X obj 69 186 vasp.check;
+#X obj 65 334 vasp.chk;
+#X text 139 333 abbreviation;
+#X text 64 363 related objects:;
+#X obj 67 393 VASP-HELP;
+#X text 52 226 *;
+#X text 62 432 * prepend-object from iemlib2 (http://pd.iem.at/iemlib)
+;
+#X obj 337 362 vasp.frames?;
+#X obj 187 362 vasp.n?;
+#X obj 245 362 vasp.offset?;
+#X connect 5 0 8 0;
+#X connect 6 0 9 0;
+#X connect 9 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_cifft.pd b/externals/grill/vasp/pd-help/vasp_cifft.pd
new file mode 100644
index 00000000..22f10920
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cifft.pd
@@ -0,0 +1,89 @@
+#N canvas 81 48 890 610 10;
+#N canvas 92 108 396 316 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 192 209 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 241 140 resize \$1;
+#X obj 241 93 loadbang;
+#X obj 67 53 loadbang;
+#X msg 241 114 88200;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 4;
+#X obj 241 162 s bufrei;
+#X obj 251 186 s bufimi;
+#X obj 66 178 t b;
+#X msg 67 133 read \$1 bufrei;
+#X connect 0 0 11 0;
+#X connect 3 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 11 0 2 0;
+#X connect 12 0 0 0;
+#X restore 781 472 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.c!fft 0 10 1 14 -262144
+-1 0;
+#X obj 74 90 filelist \$0;
+#X obj 61 411 vasp.update;
+#X obj 61 434 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 61 388 vasp.c!fft;
+#X obj 61 233 vasp.cfft;
+#X obj 61 254 vasp.update;
+#X obj 61 275 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 801 97 real;
+#X text 768 242 imaginary;
+#X text 524 385 0 Hz;
+#X text 660 384 sr/2;
+#X text 171 473 <-- click to open;
+#X text 789 386 44.1 kHz;
+#X obj 352 474 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 486 474 pd clear_buffers;
+#X obj 352 431 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 374 428 play;
+#X text 486 429 clear;
+#X obj 59 473 filter_examplei;
+#X text 71 53 invers complex fourier transformation (giant);
+#X text 69 66 c!fft needs two buffers;
+#X msg 486 451 vasp bufrei bufimi;
+#X obj 352 451 tabplay~ bufrei;
+#X msg 61 212 vasp bufrei bufimi;
+#X text 189 211 transform to frequency domain;
+#X text 152 247 each sample of the buffer now represents a frequency
+(range from 0 to 44.1 kHz).;
+#X text 60 306 to get back to the sourcefile in time domain either
+use 3 more times vasp.cfft or just once vasp.c!fft;
+#X text 195 364 invers cfft to transform back to time domain;
+#X msg 61 365 vasp bufrei bufimi;
+#X obj 525 112 wavedisplay-simple bufrei \$0;
+#X obj 527 263 wavedisplay-simple bufimi \$0;
+#X text 59 538 related objects:;
+#X obj 59 574 VASP-HELP;
+#X obj 371 539 vasp.r!fft;
+#X obj 288 539 vasp.rfft;
+#X obj 202 539 vasp.cfft;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 17 0 24 0;
+#X connect 23 0 16 0;
+#X connect 24 0 15 0;
+#X connect 24 0 15 1;
+#X connect 25 0 6 0;
+#X connect 30 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_cmul.pd b/externals/grill/vasp/pd-help/vasp_cmul.pd
new file mode 100644
index 00000000..1847cf69
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cmul.pd
@@ -0,0 +1,21 @@
+#N canvas 262 173 610 420 10;
+#X text 54 148 c \, d ... right operand;
+#X text 54 130 a \, b ... left operand;
+#X text 54 112 e \, f ... target buffers;
+#X text 54 197 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 54 82 e+if=(a+ib)*(c+id);
+#X text 54 166 vasp.c* needs 2 vectors per operand which are treated
+as pairs;
+#X text 54 64 complex multiplication;
+#X obj 55 29 cnv 15 15 15 empty empty vasp.c* 0 10 1 14 -262144 -1
+0;
+#X obj 286 81 vasp.c*;
+#X text 46 271 related objects:;
+#X obj 182 314 vasp.c!-;
+#X obj 263 293 vasp.c!/;
+#X obj 263 272 vasp.c/;
+#X obj 182 293 vasp.c-;
+#X obj 50 347 VASP-HELP;
+#X obj 182 272 vasp.c+;
+#X obj 263 314 vasp.c=;
diff --git a/externals/grill/vasp/pd-help/vasp_cnoise.pd b/externals/grill/vasp/pd-help/vasp_cnoise.pd
new file mode 100644
index 00000000..7485db5b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cnoise.pd
@@ -0,0 +1,53 @@
+#N canvas 47 54 881 559 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.cnoise 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcnoise1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 500 96 graph;
+#N canvas 0 0 402 278 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufcnoise1 \, symbol bufcnoise2;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 775 366 pd init;
+#X obj 65 217 vasp.update;
+#X obj 65 194 vasp.* 0.5;
+#N canvas 40 55 247 122 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 504 389 pd clear_buffers;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcnoise2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 501 228 graph;
+#X text 71 63 vasp complex noise generator;
+#X text 71 83 needs 2 buffers;
+#X msg 65 127 vasp bufcnoise1 bufcnoise2;
+#X text 267 140 into two buffers;
+#X obj 65 171 vasp.cnoise;
+#X obj 324 411 dac~;
+#X obj 324 345 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 346 344 play;
+#X msg 504 366 vasp bufcnoise1 bufcnoise2;
+#X obj 324 366 tabplay~ bufcnoise1;
+#X obj 343 388 tabplay~ bufcnoise2;
+#X obj 64 505 VASP-HELP;
+#X obj 189 472 vasp.noise;
+#X text 64 471 related object:;
+#X text 265 126 generate complex noise;
+#X connect 4 0 3 0;
+#X connect 9 0 11 0;
+#X connect 11 0 4 0;
+#X connect 13 0 16 0;
+#X connect 13 0 17 0;
+#X connect 15 0 5 0;
+#X connect 16 0 12 0;
+#X connect 17 0 12 1;
diff --git a/externals/grill/vasp/pd-help/vasp_cnorm.pd b/externals/grill/vasp/pd-help/vasp_cnorm.pd
new file mode 100644
index 00000000..403165dd
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cnorm.pd
@@ -0,0 +1,94 @@
+#N canvas 36 36 806 582 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.cnorm 0 10 1 14 -262144
+-1 0;
+#X obj 72 113 filelist \$0;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 479 494 pd clear_buffers;
+#X obj 59 247 vasp.update;
+#X obj 59 267 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 337 493 dac~;
+#X obj 337 455 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 358 454 play;
+#N canvas 92 108 432 397 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 202 278 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 240 212 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 113 filelisthandler \$0;
+#X msg 66 91 4;
+#X obj 240 234 s bufcnorm1;
+#X obj 241 255 s bufcnorm2;
+#X msg 235 92 88200;
+#X obj 66 69 t b b;
+#X obj 66 193 t b;
+#X msg 66 145 read \$1 bufcnorm1;
+#X connect 0 0 11 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 4 0 10 0;
+#X connect 5 0 12 0;
+#X connect 6 0 5 0;
+#X connect 9 0 3 0;
+#X connect 9 0 1 0;
+#X connect 10 0 6 0;
+#X connect 10 1 9 0;
+#X connect 11 0 2 0;
+#X connect 12 0 0 0;
+#X restore 668 494 pd inside;
+#X obj 397 118 wavedisplay-simple bufcnorm1 \$0;
+#X obj 398 275 wavedisplay-simple bufcnorm2 \$0;
+#X msg 59 207 vasp bufcnorm1 bufcnorm2;
+#X text 235 206 cfft;
+#X obj 59 227 vasp.cfft;
+#X obj 59 343 vasp.update;
+#X obj 59 363 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 303 vasp bufcnorm1 bufcnorm2;
+#X obj 59 323 vasp.cnorm;
+#X obj 59 434 vasp.update;
+#X obj 59 454 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 394 vasp bufcnorm1 bufcnorm2;
+#X text 235 393 inverse cfft;
+#X obj 59 414 vasp.c!fft;
+#X obj 337 473 tabplay~ bufcnorm2;
+#X obj 202 493 dac~;
+#X obj 202 455 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 223 454 play;
+#X obj 202 473 tabplay~ bufcnorm1;
+#X text 668 97 real;
+#X text 643 253 imaginary;
+#X msg 479 474 vasp bufcnorm1 bufcnorm2;
+#X text 71 66 needs two buffers (or multiple pairs);
+#X text 71 49 sets radius of all complex sample pairs to unity (1)
+;
+#X obj 58 549 VASP-HELP;
+#X text 100 548 - vasp overview;
+#X connect 3 0 4 0;
+#X connect 6 0 23 0;
+#X connect 11 0 13 0;
+#X connect 13 0 3 0;
+#X connect 14 0 15 0;
+#X connect 16 0 17 0;
+#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 23 0 5 0;
+#X connect 23 0 5 1;
+#X connect 25 0 27 0;
+#X connect 27 0 24 0;
+#X connect 27 0 24 1;
+#X connect 30 0 2 0;
diff --git a/externals/grill/vasp/pd-help/vasp_copy.pd b/externals/grill/vasp/pd-help/vasp_copy.pd
new file mode 100644
index 00000000..f75ecad3
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_copy.pd
@@ -0,0 +1,70 @@
+#N canvas 21 60 971 578 10;
+#X obj 62 33 cnv 15 15 15 empty empty vasp.-> 0 10 1 14 -262144 -1
+0;
+#X text 55 81 optional argument/right inlet: value/vasp;
+#X obj 235 402 vasp.update;
+#N canvas 0 0 262 199 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X restore 380 379 pd clear_buffer;
+#X obj 50 500 VASP-HELP;
+#X text 55 62 copy an array/buffer to a new one;
+#X obj 57 452 vasp.->;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy1 100 float 1;
+#A 0 0 0 0 0.0599997 0.0899995 0.119999 0.179999 0.239999 0.259999
+0.279999 0.299998 0.309998 0.319998 0.323998 0.327998 0.331998 0.335998
+0.339998 0.339998 0.339998 0.339998 0.339998 0.309998 0.279999 0.179999
+0.0799996 -0.0599997 -0.0999995 -0.109999 -0.119999 -0.109999 -0.0999995
+-0.0899995 -0.0799996 -0.0599997 -0.0399998 -0.0199999 2.30968e-008
+0.0199999 0.0799996 0.139999 0.259999 0.239999 0.119999 1.86265e-008
+-0.0299998 -0.0599997 -0.0899995 -0.119999 -0.123333 -0.126666 -0.129999
+-0.133333 -0.136666 -0.139999 -0.133333 -0.126666 -0.119999 -0.113333
+-0.106666 -0.0999995 -0.0533331 -0.00666663 0.0399998 0.0866662 0.133333
+0.179999 0.239999 0.299998 0.379998 0.279999 0.159999 0.189999 0.219999
+0.299998 0.379998 0.459998 0.539997 0.595997 0.651997 0.707996 0.763996
+0.819996 0.379998 0.239999 0.0999995 0.0949996 0.0899996 0.0849996
+0.0799997 0.139999 0.199999 0.0399999 0.0999995 0 0 0 0 0 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 621 72 graph;
+#N canvas 0 0 392 268 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufcopy1 \, symbol bufcopy2 \, symbol bufcopy3
+;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 711 457 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy2 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 621 186 graph;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcopy3 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 621 301 graph;
+#X text 111 453 abbreviation;
+#X msg 54 169 vasp bufcopy1;
+#X obj 157 281 vasp.update;
+#X msg 380 354 vasp bufcopy2 bufcopy3;
+#X text 53 254 original;
+#X obj 235 379 vasp.= bufcopy1;
+#X msg 235 354 vasp bufcopy2;
+#X obj 54 234 vasp.copy bufcopy2;
+#X msg 178 226 vasp bufcopy3;
+#X msg 178 203 vasp bufcopy2;
+#X text 66 351 or the other way round:;
+#X text 164 254 copy;
+#X text 55 99 left outlet: original \, right outlet: copy !!!;
+#X text 377 330 clear buffer 2 and 3;
+#X connect 12 0 18 0;
+#X connect 14 0 3 0;
+#X connect 16 0 2 0;
+#X connect 17 0 16 0;
+#X connect 18 1 13 0;
+#X connect 19 0 18 1;
+#X connect 20 0 18 1;
diff --git a/externals/grill/vasp/pd-help/vasp_cosc.pd b/externals/grill/vasp/pd-help/vasp_cosc.pd
new file mode 100644
index 00000000..bbc4941c
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cosc.pd
@@ -0,0 +1,63 @@
+#N canvas 47 54 885 488 10;
+#N canvas 0 0 452 302 Hz_to_period_length 0;
+#X floatatom 125 238 0 0 0;
+#X obj 125 142 t b f;
+#X text 164 238 period length in samples (float);
+#X floatatom 125 80 0 0 0;
+#X obj 125 206 / 1;
+#X text 170 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 125 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 78 302 pd Hz_to_period_length;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.cosc 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcosc1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 500 96 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufcosc1 \, symbol bufcosc2;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 781 387 pd init;
+#X text 71 83 optional argument/right inlet: frequency in period length
+in samples;
+#X obj 77 241 vasp.update;
+#X obj 77 218 vasp.* 0.5;
+#X msg 503 360 vasp bufcosc1 bufcosc2;
+#N canvas 40 55 247 122 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 503 383 pd clear_buffers;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufcosc2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 501 228 graph;
+#X text 71 63 vasp complex sine wave generator;
+#X text 241 123 generate a complex sinewave;
+#X text 241 135 at 1 Hz into two buffers;
+#X obj 77 194 vasp.cosc 44100;
+#X msg 77 127 vasp bufcosc1 bufcosc2;
+#X floatatom 162 168 7 0 0;
+#X text 239 168 set period length (samples);
+#X obj 79 424 VASP-HELP;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 13 0 6 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 1;
diff --git a/externals/grill/vasp/pd-help/vasp_cpowi.pd b/externals/grill/vasp/pd-help/vasp_cpowi.pd
new file mode 100644
index 00000000..8d5d8047
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cpowi.pd
@@ -0,0 +1,84 @@
+#N canvas 28 51 892 605 10;
+#N canvas 92 108 411 413 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 67 53 loadbang;
+#X obj 66 178 t b f f;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 133 read -resize \$1 bufcpowi1;
+#X obj 214 228 s bufcpowi1;
+#X obj 224 252 s bufcpowi2;
+#X msg 67 79 1;
+#X connect 0 0 5 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 10 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 0 0;
+#X connect 10 0 6 0;
+#X restore 693 501 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.cpowi 0 10 1 14 -262144
+-1 0;
+#X obj 77 139 filelist \$0;
+#X obj 59 482 vasp.update;
+#X obj 59 502 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 59 442 vasp.c!fft;
+#X obj 59 264 vasp.cfft;
+#X obj 59 284 vasp.update;
+#X obj 59 304 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 360 498 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 494 498 pd clear_buffers;
+#X obj 360 455 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 382 452 play;
+#X text 494 453 clear;
+#X text 74 61 complex integer power function;
+#X text 74 75 complex sample ^ n;
+#X text 74 101 argument: exponent;
+#X msg 59 244 vasp bufcpowi1 bufcpowi2;
+#X obj 470 111 wavedisplay-simple bufcpowi1 \$0;
+#X obj 471 254 wavedisplay-simple bufcpowi2 \$0;
+#X obj 360 475 tabplay~ bufcpowi1;
+#X msg 494 475 vasp bufcpowi1 bufcpowi2;
+#X obj 59 368 vasp.update;
+#X obj 59 388 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 328 vasp bufcpowi1 bufcpowi2;
+#X obj 59 348 vasp.cpowi 2;
+#X msg 59 422 vasp bufcpowi1 bufcpowi2;
+#X obj 59 462 vasp.opt;
+#X text 75 88 needs two vectors (or more complex pairs);
+#X obj 59 552 VASP-HELP;
+#X text 222 242 1 transform to frequency domain;
+#X text 219 310 2 complex int power function;
+#X text 217 404 3 transform back to time domain;
+#X connect 3 0 4 0;
+#X connect 5 0 27 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 11 0 20 0;
+#X connect 17 0 6 0;
+#X connect 20 0 9 0;
+#X connect 20 0 9 1;
+#X connect 21 0 10 0;
+#X connect 22 0 23 0;
+#X connect 24 0 25 0;
+#X connect 25 0 22 0;
+#X connect 26 0 5 0;
+#X connect 27 0 3 0;
diff --git a/externals/grill/vasp/pd-help/vasp_crsub.pd b/externals/grill/vasp/pd-help/vasp_crsub.pd
new file mode 100644
index 00000000..8a70d962
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_crsub.pd
@@ -0,0 +1,22 @@
+#N canvas 262 173 566 417 10;
+#X text 56 204 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 59 142 c \, d ... right operand;
+#X text 59 127 a \, b ... left operand;
+#X text 59 83 e+if=(c+id)-(a+ib);
+#X text 59 112 e \, f ... target buffers;
+#X text 59 170 vasp.c- needs 2 vectors per operand which are treated
+as pairs;
+#X text 59 67 complex inverse substraction;
+#X obj 55 34 cnv 15 15 15 empty empty vasp.c!- 0 10 1 14 -262144 -1
+0;
+#X obj 286 96 vasp.c!-;
+#X text 46 287 related objects:;
+#X obj 265 330 vasp.c!/;
+#X obj 182 288 vasp.c=;
+#X obj 265 309 vasp.c/;
+#X obj 265 288 vasp.c*;
+#X obj 52 377 VASP-HELP;
+#X text 94 377 - vasp overview;
+#X obj 182 309 vasp.c+;
+#X obj 182 330 vasp.c-;
diff --git a/externals/grill/vasp/pd-help/vasp_cset.pd b/externals/grill/vasp/pd-help/vasp_cset.pd
new file mode 100644
index 00000000..b317f1d2
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_cset.pd
@@ -0,0 +1,20 @@
+#N canvas 232 203 575 403 10;
+#X text 57 188 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 58 124 c \, d is the target;
+#X text 58 109 a \, b is the source;
+#X text 58 84 (a+ib)=(c+id);
+#X text 58 153 vasp.c= needs 2 vectors per operand which are treated
+as pairs;
+#X text 58 68 complex =;
+#X obj 55 34 cnv 15 15 15 empty empty vasp.c= 0 10 1 14 -262144 -1
+0;
+#X obj 291 90 vasp.c=;
+#X text 58 265 related objects:;
+#X obj 194 308 vasp.c!-;
+#X obj 277 308 vasp.c!/;
+#X obj 277 287 vasp.c/;
+#X obj 277 266 vasp.c*;
+#X obj 194 287 vasp.c-;
+#X obj 57 352 VASP-HELP;
+#X obj 194 266 vasp.c+;
diff --git a/externals/grill/vasp/pd-help/vasp_csqr.pd b/externals/grill/vasp/pd-help/vasp_csqr.pd
new file mode 100644
index 00000000..23554fe5
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_csqr.pd
@@ -0,0 +1,79 @@
+#N canvas 28 51 892 642 10;
+#N canvas 92 108 415 417 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 67 53 loadbang;
+#X obj 66 178 t b f f;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 3;
+#X obj 214 228 s bufcsqr1;
+#X obj 224 252 s bufcsqr2;
+#X msg 67 133 read -resize \$1 bufcsqr1;
+#X connect 0 0 5 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 10 0 0 0;
+#X restore 685 477 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.csqr 0 10 1 14 -262144 -1
+0;
+#X obj 77 139 filelist \$0;
+#X obj 59 482 vasp.update;
+#X obj 59 502 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 59 442 vasp.c!fft;
+#X obj 59 264 vasp.cfft;
+#X obj 59 284 vasp.update;
+#X obj 59 304 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 352 474 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 486 474 pd clear_buffers;
+#X obj 352 431 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 374 428 play;
+#X text 486 429 clear;
+#X obj 59 368 vasp.update;
+#X obj 59 388 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 59 462 vasp.opt;
+#X text 74 75 complex sample ^ 2;
+#X msg 59 244 vasp bufcsqr1 bufcsqr2;
+#X msg 59 328 vasp bufcsqr1 bufcsqr2;
+#X obj 59 348 vasp.csqr;
+#X msg 59 422 vasp bufcsqr1 bufcsqr2;
+#X obj 352 451 tabplay~ bufcsqr1;
+#X msg 486 451 vasp bufcsqr1 bufcsqr2;
+#X obj 383 123 wavedisplay-simple bufcsqr1 \$0;
+#X obj 383 258 wavedisplay-simple bufcsqr2 \$0;
+#X text 75 88 needs two vectors (or multiple complex pairs);
+#X obj 57 580 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 11 0 22 0;
+#X connect 14 0 15 0;
+#X connect 16 0 3 0;
+#X connect 18 0 6 0;
+#X connect 19 0 20 0;
+#X connect 20 0 14 0;
+#X connect 21 0 5 0;
+#X connect 22 0 9 0;
+#X connect 22 0 9 1;
+#X connect 23 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_csub.pd b/externals/grill/vasp/pd-help/vasp_csub.pd
new file mode 100644
index 00000000..35cd2bd7
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_csub.pd
@@ -0,0 +1,21 @@
+#N canvas 262 173 610 462 10;
+#X text 62 147 c \, d ... right operand;
+#X text 62 132 a \, b ... left operand;
+#X text 62 117 e \, f ... target buffers;
+#X text 60 201 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 62 87 e+if=(a+ib)-(c+id);
+#X text 61 169 vasp.c- needs 2 vectors per operand which are treated
+as pairs;
+#X text 62 71 complex subtraction;
+#X obj 57 23 cnv 15 15 15 empty empty vasp.c- 0 10 1 14 -262144 -1
+0;
+#X obj 297 94 vasp.c-;
+#X text 46 287 related objects:;
+#X obj 182 330 vasp.c!-;
+#X obj 265 330 vasp.c!/;
+#X obj 182 288 vasp.c=;
+#X obj 265 309 vasp.c/;
+#X obj 265 288 vasp.c*;
+#X obj 52 377 VASP-HELP;
+#X obj 182 309 vasp.c+;
diff --git a/externals/grill/vasp/pd-help/vasp_csubr.pd b/externals/grill/vasp/pd-help/vasp_csubr.pd
new file mode 100644
index 00000000..ed2e3027
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_csubr.pd
@@ -0,0 +1,21 @@
+#N canvas 266 193 568 419 10;
+#X text 56 204 differences in lengths are adjusted to smaller vector
+of each pair;
+#X text 59 142 c \, d ... right operand;
+#X text 59 127 a \, b ... left operand;
+#X text 59 83 e+if=(c+id)-(a+ib);
+#X text 59 112 e \, f ... target buffers;
+#X text 59 170 vasp.c- needs 2 vectors per operand which are treated
+as pairs;
+#X text 59 67 complex inverse substraction;
+#X obj 55 34 cnv 15 15 15 empty empty vasp.c!- 0 10 1 14 -262144 -1
+0;
+#X obj 286 96 vasp.c!-;
+#X text 46 287 related objects:;
+#X obj 265 330 vasp.c!/;
+#X obj 182 288 vasp.c=;
+#X obj 265 309 vasp.c/;
+#X obj 265 288 vasp.c*;
+#X obj 52 377 VASP-HELP;
+#X obj 182 309 vasp.c+;
+#X obj 182 330 vasp.c-;
diff --git a/externals/grill/vasp/pd-help/vasp_dframes.pd b/externals/grill/vasp/pd-help/vasp_dframes.pd
new file mode 100644
index 00000000..327ff98e
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_dframes.pd
@@ -0,0 +1,65 @@
+#N canvas 97 138 905 512 10;
+#X obj 62 303 vasp.osc 22050;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.frames+ 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufdfram1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 149 graph;
+#N canvas 0 0 402 278 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufdfram1;
+#X msg 140 45 symbol bufdfram2;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X restore 714 408 pd init;
+#X obj 62 335 vasp.update;
+#X text 119 397 abbreviation;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufdfram2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 268 graph;
+#X text 56 98 !!!all vectors of a vasp have the same framesize/length!!!
+;
+#X obj 77 252 prepend set;
+#X obj 62 220 vasp.frames+ 30000;
+#X obj 63 396 vasp.f+;
+#X obj 63 452 VASP-HELP;
+#X text 57 69 adds a value to the frames of a vasp;
+#X text 58 83 argument/right inlet: value in frames;
+#X obj 278 432 vasp.osc 22050;
+#X obj 278 455 vasp.update;
+#X obj 278 258 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
+10 -24198 -1 -1 -161 256;
+#X obj 278 277 * 100;
+#X floatatom 313 280 12 0 0;
+#X msg 62 192 vasp 0 bufdfram1;
+#X text 62 164 add 30000 frames to a buffer with length 0;
+#X obj 296 351 vasp.= 0;
+#X obj 278 306 t b b f;
+#X obj 278 408 vasp.frames+ 0;
+#X msg 278 380 vasp 30000 bufdfram2;
+#X msg 296 330 vasp bufdfram2;
+#X text 278 217 add an amount \, to subtract;
+#X text 278 231 try negative values;
+#X msg 77 274;
+#X connect 0 0 4 0;
+#X connect 8 0 28 0;
+#X connect 9 0 8 0;
+#X connect 9 0 0 0;
+#X connect 14 0 15 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 17 0 22 0;
+#X connect 19 0 9 0;
+#X connect 22 0 24 0;
+#X connect 22 1 25 0;
+#X connect 22 2 23 1;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 25 0 21 0;
diff --git a/externals/grill/vasp/pd-help/vasp_dif.pd b/externals/grill/vasp/pd-help/vasp_dif.pd
new file mode 100644
index 00000000..039671ca
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_dif.pd
@@ -0,0 +1,49 @@
+#N canvas 96 158 863 464 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.dif 0 10 1 14 -262144 -1
+0;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 469 375 pd clear_buffer;
+#X obj 77 365 vasp.update;
+#X obj 77 243 vasp.update;
+#X obj 77 340 vasp.opt;
+#X obj 77 315 vasp.dif;
+#X text 70 61 vasp differential function;
+#X text 70 77 argument/right inlet: repetition count (default 1);
+#X obj 77 154 vasp.- 0.5;
+#X obj 77 177 vasp.abs;
+#X obj 77 199 vasp.- 0.25;
+#X obj 77 220 vasp.* 4;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufdif 20 float 0;
+#X coords 0 1 19 -1 300 100 1;
+#X restore 441 173 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 5 \; \$1 xlabel 1.1 0 5 10 15 \; \$1
+yticks 0 0.25 2 \; \$1 ylabel 20.5 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufdif;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 690 378 pd init;
+#X msg 469 354 vasp bufdif;
+#X obj 77 130 vasp.phasor 10;
+#X msg 77 103 vasp bufdif;
+#X msg 77 293 vasp bufdif;
+#X text 170 293 find the gradient of the curve;
+#X text 187 101 generate triangular wave;
+#X obj 79 422 VASP-HELP;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 3 0;
+#X connect 14 0 1 0;
+#X connect 15 0 8 0;
+#X connect 16 0 15 0;
+#X connect 17 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_div.pd b/externals/grill/vasp/pd-help/vasp_div.pd
new file mode 100644
index 00000000..2b2363e9
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_div.pd
@@ -0,0 +1,42 @@
+#N canvas 193 184 764 384 10;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 45 79 vasp.update;
+#X obj 45 56 vasp.= 0;
+#X obj 45 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 522 282 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufdiv 88200 float 0;
+#X coords 0 1 88199 -1 300 120 1;
+#X restore 401 42 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufdiv;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 655 282 pd init;
+#X obj 51 19 cnv 15 15 15 empty empty vasp./ 0 10 1 14 -262144 -1 0
+;
+#X text 127 122 generate a sine wave at 1Hz;
+#X text 44 82 optional argument/right inlet: divisor;
+#X text 44 67 vasp division;
+#X msg 522 262 vasp bufdiv;
+#X obj 51 271 vasp.update;
+#X obj 51 204 vasp.osc 44100;
+#X obj 51 231 vasp./ 2;
+#X msg 51 175 vasp bufdiv;
+#X obj 51 334 VASP-HELP;
+#X obj 51 144 t b f;
+#X obj 51 123 nbx 5 14 -1e+037 1e+037 0 1 empty empty empty 0 -6 0
+10 -24198 -1 -1 2 256;
+#X connect 7 0 0 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 13 0 11 0;
+#X connect 13 1 10 1;
+#X connect 14 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_divr.pd b/externals/grill/vasp/pd-help/vasp_divr.pd
new file mode 100644
index 00000000..ee67e6c4
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_divr.pd
@@ -0,0 +1,37 @@
+#N canvas 193 184 768 388 10;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 45 79 vasp.update;
+#X obj 45 56 vasp.= 0;
+#X obj 45 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 403 225 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufrdiv 88200 float 0;
+#X coords 0 1 88199 -1 300 120 1;
+#X restore 401 42 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufrdiv;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 668 245 pd init;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.!/ 0 10 1 14 -262144 -1
+0;
+#X msg 403 205 vasp bufrdiv;
+#X text 44 67 vasp reverse division (value/sample);
+#X text 44 82 optional argument/right inlet: denominator;
+#X obj 49 219 vasp.update;
+#X msg 49 124 vasp bufrdiv;
+#X text 137 124 generate a ramp from 1 to 2;
+#X obj 49 186 vasp.!/ 1;
+#X text 136 185 1/x;
+#X obj 48 298 VASP-HELP;
+#X obj 49 151 vasp.= env 1 0 2 88200;
+#X connect 4 0 0 0;
+#X connect 8 0 13 0;
+#X connect 10 0 7 0;
+#X connect 13 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_doffset.pd b/externals/grill/vasp/pd-help/vasp_doffset.pd
new file mode 100644
index 00000000..c1f7b32c
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_doffset.pd
@@ -0,0 +1,28 @@
+#N canvas 199 140 620 413 10;
+#X text 55 80 argument/right inlet: value;
+#X obj 41 11 cnv 15 15 15 empty empty vasp.offset+ 0 10 1 14 -262144
+-1 0;
+#X text 57 323 abbreviation;
+#X floatatom 149 151 0 0 0;
+#X obj 58 201 prepend set;
+#X obj 58 172 vasp.offset+ 300;
+#X msg 58 128 vasp bufoffsd1;
+#X msg 58 234;
+#X floatatom 336 151 0 0 0;
+#X obj 245 201 prepend set;
+#X obj 245 172 vasp.offset+ 300;
+#X msg 245 128 vasp bufoffsd1 220 bufoffsd2 100;
+#X msg 245 234;
+#X obj 147 324 vasp.o+;
+#X text 55 63 change the offset of a vasp (relatively);
+#X obj 471 286 table bufoffsd1;
+#X obj 471 313 table bufoffsd2;
+#X obj 58 365 VASP-HELP;
+#X connect 3 0 5 1;
+#X connect 4 0 7 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 8 0 10 1;
+#X connect 9 0 12 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_dsize.pd b/externals/grill/vasp/pd-help/vasp_dsize.pd
new file mode 100644
index 00000000..b8c47396
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_dsize.pd
@@ -0,0 +1,39 @@
+#N canvas 85 111 905 540 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.size+ 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 408 284 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 2 5 \; \$1 xlabel 1.1 0 10 20 30 40 50
+\; \$1 yticks 0 0.25 2;
+#X msg 33 45 symbol bufdsize;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 714 408 pd init;
+#X text 119 392 abbreviation;
+#X text 58 83 argument/right inlet: value in samples;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufdsize 176 float 0;
+#X coords 0 1 175 -1 300 100 1;
+#X restore 453 153 graph;
+#X text 62 433 related objects:;
+#X obj 343 460 vasp.frames;
+#X obj 183 460 vasp.size?;
+#X obj 259 460 vasp.size*;
+#X obj 259 437 vasp.size/;
+#X msg 62 152 vasp bufdsize;
+#X text 56 67 add an amount to the size of a buffer/array;
+#X obj 62 225 vasp.size+ 10;
+#X obj 62 271 vasp.size?;
+#X floatatom 62 304 5 0 0;
+#X obj 63 392 vasp.s+;
+#X obj 183 436 vasp.size;
+#X obj 62 504 VASP-HELP;
+#X obj 135 199 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
+10 -24198 -1 -1 0 256;
+#X obj 62 129 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X connect 10 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 18 0 12 1;
+#X connect 19 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_equ.pd b/externals/grill/vasp/pd-help/vasp_equ.pd
new file mode 100644
index 00000000..36c5ce74
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_equ.pd
@@ -0,0 +1,53 @@
+#N canvas 28 91 940 545 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.== 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufequ 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 402 278 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufequ \, symbol bufequ1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 766 421 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufequ1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 248 graph;
+#X text 60 104 argument/right inlet: value;
+#X text 166 293 copy to new buffer;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 564 426 pd clear_buffers;
+#X text 60 80 equal;
+#X msg 564 399 vasp bufequ bufequ1;
+#X text 173 149 generate a function;
+#X msg 61 150 vasp bufequ;
+#X text 406 248 1/true;
+#X text 405 288 0/false;
+#X text 164 359 test if a part of the function is equal to -1;
+#X obj 58 431 VASP-HELP;
+#X obj 60 384 vasp.update;
+#X msg 60 294 vasp bufequ1;
+#X obj 60 326 vasp.= bufequ;
+#X obj 60 357 vasp.== -1;
+#X obj 61 218 vasp.update;
+#X obj 61 178 vasp.= env 0 0 1 22049 0.3 22050 0.3 44099 -1 44100 -1
+66149 1 66150 0 88200;
+#X connect 8 0 6 0;
+#X connect 10 0 20 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 15 0;
+#X connect 20 0 19 0;
diff --git a/externals/grill/vasp/pd-help/vasp_exp.pd b/externals/grill/vasp/pd-help/vasp_exp.pd
new file mode 100644
index 00000000..902ebc33
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_exp.pd
@@ -0,0 +1,42 @@
+#N canvas 51 74 827 464 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.exp 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 408 284 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufexp;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 608 330 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 463 330 pd clear_buffer;
+#X obj 77 197 vasp.update;
+#X text 71 63 e ^ sample;
+#X text 72 81 exponential function;
+#X obj 77 150 vasp.osc 22050;
+#X obj 77 172 vasp.* 0.5;
+#X msg 77 127 vasp bufexp;
+#X msg 463 307 vasp bufexp;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufexp 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 341 144 graph;
+#X obj 78 372 VASP-HELP;
+#X obj 77 316 vasp.update;
+#X msg 77 246 vasp bufexp;
+#X obj 77 291 vasp.opt;
+#X obj 77 269 vasp.exp;
+#X connect 6 0 7 0;
+#X connect 7 0 3 0;
+#X connect 8 0 6 0;
+#X connect 9 0 2 0;
+#X connect 13 0 15 0;
+#X connect 14 0 12 0;
+#X connect 15 0 14 0;
diff --git a/externals/grill/vasp/pd-help/vasp_fhp.pd b/externals/grill/vasp/pd-help/vasp_fhp.pd
new file mode 100644
index 00000000..9b5eff80
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_fhp.pd
@@ -0,0 +1,89 @@
+#N canvas 47 54 891 554 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.fhp 0 10 1 14 -262144 -1
+0;
+#X obj 76 247 vasp.update;
+#X obj 76 224 vasp.* 0.5;
+#X obj 401 449 dac~;
+#X obj 401 405 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 423 404 play;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 533 449 pd clear_buffer;
+#X text 180 178 generate white noise;
+#X obj 76 201 vasp.noise;
+#X obj 76 270 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 77 391 vasp.update;
+#X obj 77 414 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#N canvas 92 108 341 266 init 0;
+#X obj 110 180 s \$0-sample-length;
+#X msg 177 126 resize \$1;
+#X obj 177 79 loadbang;
+#X msg 177 100 88200;
+#X obj 177 148 s buffhp;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 0 0;
+#X restore 672 447 pd init;
+#N canvas 0 0 458 308 Hz_to_period_length 0;
+#X floatatom 125 242 0 0 0;
+#X obj 125 142 t b f;
+#X text 158 223 period length in samples (float);
+#X floatatom 125 80 0 0 0;
+#X obj 125 206 / 1;
+#X text 170 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 125 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 78 457 pd Hz_to_period_length;
+#X text 71 63 vasp high pass filter (FIR);
+#X text 70 78 first argument: cutoff frequency in period length;
+#X text 70 92 second argument: q-factor from 1 to infinite (integer)
+default 1;
+#X text 70 119 right inlet: cutoff and q-factor (list);
+#X obj 421 188 wavedisplay-simple buffhp \$0;
+#X msg 76 179 vasp buffhp;
+#X msg 77 330 vasp buffhp;
+#X floatatom 201 298 5 0 0;
+#X floatatom 260 298 5 0 0;
+#X text 195 278 cutoff;
+#X text 261 277 q-factor;
+#X obj 201 345 pack;
+#X obj 401 426 tabplay~ buffhp;
+#X msg 533 426 vasp buffhp;
+#X obj 260 319 t b f;
+#X obj 77 366 vasp.fhp 220;
+#X obj 78 503 VASP-HELP;
+#X connect 1 0 9 0;
+#X connect 2 0 1 0;
+#X connect 4 0 26 0;
+#X connect 8 0 2 0;
+#X connect 10 0 11 0;
+#X connect 19 0 8 0;
+#X connect 20 0 29 0;
+#X connect 21 0 25 0;
+#X connect 22 0 28 0;
+#X connect 25 0 29 1;
+#X connect 26 0 3 0;
+#X connect 26 0 3 1;
+#X connect 27 0 6 0;
+#X connect 28 0 25 0;
+#X connect 28 1 25 1;
+#X connect 29 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_fix.pd b/externals/grill/vasp/pd-help/vasp_fix.pd
new file mode 100644
index 00000000..871a1d33
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_fix.pd
@@ -0,0 +1,64 @@
+#N canvas 40 76 961 604 10;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 45 79 vasp.update;
+#X obj 45 56 vasp.= 0;
+#X obj 45 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 567 519 pd clear_buffer;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.fix 0 10 1 14 -262144 -1
+0;
+#X obj 52 493 VASP-HELP;
+#X text 43 57 NAN (not a number) - values become 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array buffix1 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 539 58 graph;
+#N canvas 0 0 390 266 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol buffix1 \, symbol buffix2 \, symbol buffix3;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 799 523 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array buffix2 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 539 207 graph;
+#N canvas 0 0 450 300 graph1 0;
+#X array buffix3 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 539 353 graph;
+#X msg 567 490 vasp buffix1 buffix2 buffix3;
+#X obj 142 254 vasp.log;
+#X obj 246 392 vasp.u;
+#X obj 246 365 vasp.fix;
+#X obj 142 393 vasp.u;
+#X obj 142 332 vasp.exp;
+#X text 152 362 no fix;
+#X obj 57 179 vasp.u;
+#X text 212 253 values < 0 become NANs;
+#X text 803 324 fixed;
+#X text 802 18 source;
+#X text 814 179 NANs;
+#X msg 57 121 vasp buffix1;
+#X obj 57 202 vasp.-> buffix2;
+#X obj 142 292 vasp.-> buffix3;
+#X obj 246 334 vasp.exp;
+#X text 142 421 NANs;
+#X text 246 420 fixed;
+#X text 157 121 generate sine wave;
+#X obj 57 157 vasp.osc 21;
+#X text 316 365 NANs become 0;
+#X connect 8 0 0 0;
+#X connect 9 0 22 0;
+#X connect 11 0 10 0;
+#X connect 13 0 12 0;
+#X connect 15 0 21 0;
+#X connect 20 0 27 0;
+#X connect 21 1 9 0;
+#X connect 22 0 13 0;
+#X connect 22 1 23 0;
+#X connect 23 0 11 0;
+#X connect 27 0 15 0;
diff --git a/externals/grill/vasp/pd-help/vasp_flp.pd b/externals/grill/vasp/pd-help/vasp_flp.pd
new file mode 100644
index 00000000..ab720f99
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_flp.pd
@@ -0,0 +1,86 @@
+#N canvas 47 54 883 546 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.flp 0 10 1 14 -262144 -1
+0;
+#X obj 76 247 vasp.update;
+#X obj 76 224 vasp.* 0.5;
+#X obj 401 449 dac~;
+#X obj 401 405 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 423 404 play;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 533 449 pd clear_buffer;
+#X text 180 178 generate white noise;
+#X obj 76 201 vasp.noise;
+#X obj 76 270 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#N canvas 92 108 343 268 init 0;
+#X obj 110 180 s \$0-sample-length;
+#X msg 177 126 resize \$1;
+#X obj 177 79 loadbang;
+#X msg 177 100 88200;
+#X obj 177 148 s bufflp;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 0 0;
+#X restore 672 447 pd init;
+#N canvas 0 0 456 306 Hz_to_period_length 0;
+#X floatatom 125 242 0 0 0;
+#X obj 125 142 t b f;
+#X text 158 223 period length in samples (float);
+#X floatatom 125 80 0 0 0;
+#X obj 125 206 / 1;
+#X text 170 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 125 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 78 457 pd Hz_to_period_length;
+#X text 70 78 first argument: cutoff frequency in period length;
+#X text 70 92 second argument: q-factor from 1 to infinite (integer)
+default 1;
+#X text 70 119 right inlet: cutoff and q-factor (list);
+#X text 71 63 vasp low pass filter (FIR);
+#X msg 76 179 vasp bufflp;
+#X obj 428 165 wavedisplay-simple bufflp \$0;
+#X msg 533 426 vasp bufflp;
+#X obj 401 426 tabplay~ bufflp;
+#X obj 78 496 VASP-HELP;
+#X obj 77 371 vasp.update;
+#X obj 77 394 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X floatatom 201 298 5 0 0;
+#X floatatom 260 298 5 0 0;
+#X text 195 278 cutoff;
+#X text 261 277 q-factor;
+#X obj 201 318 pack;
+#X msg 77 297 vasp bufflp;
+#X obj 77 347 vasp.flp 220;
+#X connect 1 0 9 0;
+#X connect 2 0 1 0;
+#X connect 4 0 19 0;
+#X connect 8 0 2 0;
+#X connect 16 0 8 0;
+#X connect 18 0 6 0;
+#X connect 19 0 3 0;
+#X connect 19 0 3 1;
+#X connect 21 0 22 0;
+#X connect 23 0 27 0;
+#X connect 24 0 27 1;
+#X connect 27 0 29 1;
+#X connect 28 0 29 0;
+#X connect 29 0 21 0;
diff --git a/externals/grill/vasp/pd-help/vasp_frames.pd b/externals/grill/vasp/pd-help/vasp_frames.pd
new file mode 100644
index 00000000..6ee8ce96
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_frames.pd
@@ -0,0 +1,60 @@
+#N canvas 79 77 899 565 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.frames 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array buffram1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 149 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol buffram1;
+#X msg 140 45 symbol buffram2;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X restore 714 408 pd init;
+#X text 119 397 abbreviation;
+#N canvas 0 0 450 300 graph1 0;
+#X array buffram2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 268 graph;
+#X obj 62 303 vasp.osc 22050;
+#X obj 62 335 vasp.update;
+#X msg 62 165 vasp buffram1;
+#X obj 62 225 vasp.frames 30000;
+#X obj 90 258 prepend set;
+#X msg 90 280;
+#X obj 233 226 vasp.frames 22050;
+#X obj 233 335 vasp.update;
+#X obj 261 258 prepend set;
+#X msg 233 164 vasp buffram1 buffram2 11050;
+#X floatatom 330 197 5 0 0 0 - - -;
+#X obj 233 303 vasp.osc 11025;
+#X msg 261 280;
+#X obj 62 397 vasp.f;
+#X obj 61 498 VASP-HELP;
+#X text 57 69 set the number of frames of a vasp;
+#X text 58 83 argument/right inlet: value in frames;
+#X text 60 429 related objects:;
+#X obj 61 451 vasp.size;
+#X obj 150 451 vasp.f?;
+#X obj 223 451 vasp.f=;
+#X text 57 100 the number of frames is limited by the size of a buffer/array!
+;
+#X text 57 129 all vectors of a vasp have the same frame count/length!
+;
+#X connect 5 0 6 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 11 0 13 0;
+#X connect 11 0 16 0;
+#X connect 13 0 17 0;
+#X connect 14 0 11 0;
+#X connect 15 0 11 1;
+#X connect 16 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_gate.pd b/externals/grill/vasp/pd-help/vasp_gate.pd
new file mode 100644
index 00000000..7dfcda6e
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_gate.pd
@@ -0,0 +1,74 @@
+#N canvas 36 36 808 584 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.gate 0 10 1 14 -262144 -1
+0;
+#X obj 71 131 filelist \$0;
+#N canvas 92 108 418 383 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 84 253 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 214 221 resize \$1;
+#X obj 66 60 loadbang;
+#X obj 66 193 t b f f;
+#X obj 66 113 filelisthandler \$0;
+#X msg 66 91 1;
+#X obj 214 243 s bufgate1;
+#X obj 225 264 s bufgate2;
+#X msg 66 145 read -resize \$1 bufgate1;
+#X connect 0 0 5 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 10 0 0 0;
+#X restore 668 495 pd inside;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 479 495 pd clear_buffers;
+#X obj 60 272 vasp.update;
+#X obj 60 292 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 69 52 gate buffer content with a value;
+#X obj 419 261 wavedisplay-simple bufgate2 \$0;
+#X obj 419 112 wavedisplay-simple bufgate1 \$0;
+#X msg 60 232 vasp bufgate2;
+#X obj 60 252 vasp.= bufgate1;
+#X msg 479 475 vasp bufgate1 bufgate2;
+#X text 161 229 copy from bufgate1 to bufgate2;
+#X obj 337 495 dac~;
+#X obj 337 457 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 358 455 play;
+#X obj 337 475 tabplay~ bufgate2;
+#X text 71 66 optional argument/right inlet: value (usually from 0-1
+to gate the soundfile sample for sample (not like a compressor!);
+#X obj 58 497 VASP-HELP;
+#X obj 60 391 vasp.update;
+#X floatatom 133 349 5 0 0;
+#X obj 60 411 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 60 324 vasp bufgate2;
+#X obj 60 371 vasp.gate 0.2;
+#X text 177 348 value;
+#X text 159 321 gate the buffer content;
+#X connect 4 0 5 0;
+#X connect 9 0 10 0;
+#X connect 10 0 4 0;
+#X connect 11 0 3 0;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
+#X connect 16 0 13 1;
+#X connect 19 0 21 0;
+#X connect 20 0 23 1;
+#X connect 22 0 23 0;
+#X connect 23 0 19 0;
diff --git a/externals/grill/vasp/pd-help/vasp_gather.pd b/externals/grill/vasp/pd-help/vasp_gather.pd
new file mode 100644
index 00000000..8f5e2969
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_gather.pd
@@ -0,0 +1,64 @@
+#N canvas 112 58 831 625 10;
+#X text 403 160 gather as many vasps as you want and put them out (bang)
+;
+#X text 71 74 gather several vasps into one;
+#X text 70 90 argument: vasps to gather before output;
+#X text 71 143 right inlet: stores the different vasps;
+#X text 70 110 left inlet: outputs a vasp immediately \, causes output
+of vasps gathered in right inlet (bang);
+#X text 72 163 use vasp.gather like the int/float object;
+#X text 398 444 !vasps can have more vectors \, but just one length!
+;
+#X text 398 464 gather will always take the length from the shortest
+of all gathered vasps for the new one!;
+#X obj 71 37 cnv 15 15 15 empty empty vasp.gather 0 10 1 14 -262144
+-1 0;
+#X msg 486 242 vasp bufgather4;
+#X msg 471 221 vasp bufgather3;
+#X msg 410 178 bang;
+#X msg 456 201 vasp bufgather2;
+#X msg 410 314;
+#X obj 410 291 prepend set;
+#X obj 410 268 vasp.gather;
+#X msg 447 178 vasp bufgather1;
+#X msg 167 450 vasp bufgather4;
+#X msg 233 200 vasp bufgather2;
+#X msg 78 200 bang;
+#X obj 78 291 prepend set;
+#X msg 117 200 vasp bufgather1;
+#X msg 151 429 vasp bufgather3;
+#X msg 78 386 bang;
+#X msg 137 409 vasp bufgather2;
+#X msg 78 520;
+#X obj 78 497 prepend set;
+#X obj 78 474 vasp.gather 2;
+#X msg 125 386 vasp bufgather1;
+#X text 71 366 gather two vasps (opt. argument) an put them out;
+#X obj 77 561 VASP-HELP;
+#N canvas 274 433 336 148 tables 0;
+#X obj 105 39 table bufgather1;
+#X obj 105 61 table bufgather2;
+#X obj 105 84 table bufgather3;
+#X obj 105 106 table bufgather4;
+#X restore 422 552 pd tables;
+#X obj 78 268 vasp.gather;
+#X msg 78 314;
+#X connect 9 0 15 1;
+#X connect 10 0 15 1;
+#X connect 11 0 15 0;
+#X connect 12 0 15 1;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 16 0 15 1;
+#X connect 17 0 27 1;
+#X connect 18 0 32 1;
+#X connect 19 0 32 0;
+#X connect 20 0 33 0;
+#X connect 21 0 32 0;
+#X connect 22 0 27 1;
+#X connect 23 0 27 0;
+#X connect 24 0 27 1;
+#X connect 26 0 25 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 1;
+#X connect 32 0 20 0;
diff --git a/externals/grill/vasp/pd-help/vasp_geq.pd b/externals/grill/vasp/pd-help/vasp_geq.pd
new file mode 100644
index 00000000..c0339b41
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_geq.pd
@@ -0,0 +1,50 @@
+#N canvas 44 207 837 466 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.>= 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufgeq 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 408 84 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufgeq \, symbol bufgeq1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 662 388 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufgeq1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 408 213 graph;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 460 390 pd clear_buffers;
+#X msg 460 364 vasp bufgeq bufgeq1;
+#X text 60 80 sample >= value;
+#X msg 61 150 vasp bufgeq;
+#X obj 57 418 VASP-HELP;
+#X obj 58 366 vasp.update;
+#X floatatom 119 308 5 0 0;
+#X text 164 236 copy to new buffer;
+#X msg 58 236 vasp bufgeq1;
+#X obj 58 262 vasp.= bufgeq;
+#X obj 58 335 vasp.>= 0.4;
+#X connect 5 0 6 0;
+#X connect 8 0 7 0;
+#X connect 10 0 5 0;
+#X connect 13 0 17 1;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 17 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_gtr.pd b/externals/grill/vasp/pd-help/vasp_gtr.pd
new file mode 100644
index 00000000..41b2bf9c
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_gtr.pd
@@ -0,0 +1,52 @@
+#N canvas 44 207 839 468 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.> 0 10 1 14 -262144 -1 0
+;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufgtr 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 439 87 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufgtr \, symbol bufgtr1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 693 391 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufgtr1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 439 216 graph;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 491 393 pd clear_buffers;
+#X text 60 80 sample > value;
+#X msg 61 150 vasp bufgtr;
+#X msg 491 367 vasp bufgtr bufgtr1;
+#X text 338 218 1/true;
+#X text 337 258 0/false;
+#X obj 57 418 VASP-HELP;
+#X obj 58 366 vasp.update;
+#X floatatom 113 308 5 0 0;
+#X text 164 230 copy to new buffer;
+#X obj 58 335 vasp.> 0.4;
+#X msg 58 236 vasp bufgtr1;
+#X obj 58 262 vasp.= bufgtr;
+#X connect 5 0 6 0;
+#X connect 9 0 5 0;
+#X connect 10 0 7 0;
+#X connect 15 0 17 1;
+#X connect 17 0 14 0;
+#X connect 18 0 19 0;
+#X connect 19 0 17 0;
diff --git a/externals/grill/vasp/pd-help/vasp_imm.pd b/externals/grill/vasp/pd-help/vasp_imm.pd
new file mode 100644
index 00000000..b44e4fda
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_imm.pd
@@ -0,0 +1,77 @@
+#N canvas 51 36 891 586 10;
+#X obj 61 33 cnv 15 15 15 empty empty vasp.imm 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 261 214 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 656 460 pd clear_buffer;
+#X obj 51 533 VASP-HELP;
+#X obj 159 477 vasp.!;
+#X text 58 476 abbreviation:;
+#X obj 57 216 vasp.imm 88200;
+#X obj 154 218 vasp.imm 88200;
+#X obj 254 218 vasp.imm 88200;
+#X obj 57 241 vasp.noise;
+#X obj 154 268 vasp.max;
+#X obj 57 316 vasp.-> bufnotimm;
+#X obj 154 369 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufnotimm 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 511 69 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufnotimm;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 760 461 pd init;
+#X obj 57 191 t b b b;
+#X obj 355 447 dac~;
+#X obj 355 399 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 377 398 play;
+#X obj 355 422 tabplay~ bufnotimm;
+#X msg 656 435 vasp bufnotimm;
+#X obj 57 290 vasp.min;
+#X obj 154 243 vasp.osc 882;
+#X obj 57 266 vasp.* 0.1;
+#X obj 254 268 vasp.* 0.2;
+#X obj 254 243 vasp.osc 3.4;
+#X text 61 55 create an immediate vasp;
+#X text 360 217 create three immediate vasps;
+#X text 111 164 <-- click me;
+#X text 55 124 argument/right inlet: length in samples;
+#X text 55 86 immediate vasps are temporary buffers that are created
+on demand and deleted after usage in a command chain.;
+#X obj 57 165 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 361 239 and compose them;
+#X text 363 318 copy the result to an existing buffer/array;
+#X connect 5 0 8 0;
+#X connect 6 0 21 0;
+#X connect 7 0 24 0;
+#X connect 8 0 22 0;
+#X connect 9 0 20 1;
+#X connect 10 1 11 0;
+#X connect 14 0 5 0;
+#X connect 14 1 6 0;
+#X connect 14 2 7 0;
+#X connect 16 0 18 0;
+#X connect 18 0 15 0;
+#X connect 18 0 15 1;
+#X connect 19 0 1 0;
+#X connect 20 0 10 0;
+#X connect 21 0 9 0;
+#X connect 22 0 20 0;
+#X connect 23 0 9 1;
+#X connect 24 0 23 0;
+#X connect 30 0 14 0;
diff --git a/externals/grill/vasp/pd-help/vasp_int.pd b/externals/grill/vasp/pd-help/vasp_int.pd
new file mode 100644
index 00000000..e53ec66a
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_int.pd
@@ -0,0 +1,40 @@
+#N canvas 95 158 862 404 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.int 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufint 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 465 124 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufint;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 737 285 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 521 284 pd clear_buffer;
+#X text 70 61 vasp integral function;
+#X msg 521 263 vasp bufint;
+#X msg 77 131 vasp bufint;
+#X obj 77 178 vasp.update;
+#X text 70 77 argument: repetition count;
+#X obj 76 336 VASP-HELP;
+#X obj 77 289 vasp.update;
+#X msg 77 211 vasp bufint;
+#X obj 77 242 vasp.int;
+#X obj 77 266 vasp.opt;
+#X obj 77 153 vasp.window lin;
+#X connect 5 0 3 0;
+#X connect 6 0 14 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 10 0;
+#X connect 14 0 7 0;
diff --git a/externals/grill/vasp/pd-help/vasp_iwindow.pd b/externals/grill/vasp/pd-help/vasp_iwindow.pd
new file mode 100644
index 00000000..10db2b49
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_iwindow.pd
@@ -0,0 +1,61 @@
+#N canvas 58 39 870 560 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.!window 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufiwindow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 408 284 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufiwindow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 771 320 pd init;
+#N canvas 0 0 194 221 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 569 326 pd clear_buffers;
+#X text 173 148 generate a function;
+#X obj 61 278 vasp.u;
+#X floatatom 194 186 5 0 0;
+#X text 259 185 0..4;
+#X msg 231 215 lin;
+#X msg 231 240 sin;
+#X msg 231 265 hanning;
+#X msg 231 290 hamming;
+#X msg 231 315 blackman;
+#X text 275 214 0;
+#X text 275 236 1;
+#X text 295 260 2;
+#X text 300 289 3;
+#X text 300 316 4;
+#X obj 132 401 vasp.window;
+#X obj 132 426 vasp.*window;
+#X text 60 396 see also:;
+#X obj 322 426 vasp.*xwindow;
+#X obj 225 426 vasp.*!window;
+#X text 60 104 argument/right inlet: name or number of name;
+#X text 60 80 generate window functions;
+#X msg 569 301 vasp bufiwindow;
+#X obj 322 401 vasp.xwindow;
+#X msg 61 149 vasp bufiwindow;
+#X obj 61 226 vasp.!window lin;
+#X obj 60 503 VASP-HELP;
+#X connect 6 0 28 1;
+#X connect 8 0 28 1;
+#X connect 9 0 28 1;
+#X connect 10 0 28 1;
+#X connect 11 0 28 1;
+#X connect 12 0 28 1;
+#X connect 25 0 3 0;
+#X connect 27 0 28 0;
+#X connect 28 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_join.pd b/externals/grill/vasp/pd-help/vasp_join.pd
new file mode 100644
index 00000000..3d48406b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_join.pd
@@ -0,0 +1,26 @@
+#N canvas 239 111 493 440 10;
+#X text 51 62 join several vasps into one;
+#X text 51 78 argument: number of vasps to join;
+#X text 51 95 left inlet triggers the output;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.join 0 10 1 14 -262144 -1
+0;
+#X obj 62 382 VASP-HELP;
+#X msg 230 159 vasp bufjoin1 bufjoin2 bufjoin3;
+#X obj 128 214 prepend set;
+#X obj 61 305 prepend set;
+#X obj 61 191 vasp.split 2;
+#X obj 61 282 vasp.join 2;
+#X msg 61 159 vasp bufjoin1 bufjoin2;
+#X obj 310 337 table bufjoin1;
+#X obj 310 360 table bufjoin2;
+#X obj 310 384 table bufjoin3;
+#X msg 128 238;
+#X msg 61 329;
+#X connect 5 0 8 0;
+#X connect 6 0 14 0;
+#X connect 7 0 15 0;
+#X connect 8 0 9 0;
+#X connect 8 1 9 1;
+#X connect 8 2 6 0;
+#X connect 9 0 7 0;
+#X connect 10 0 8 0;
diff --git a/externals/grill/vasp/pd-help/vasp_leq.pd b/externals/grill/vasp/pd-help/vasp_leq.pd
new file mode 100644
index 00000000..85b55609
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_leq.pd
@@ -0,0 +1,52 @@
+#N canvas 56 200 877 460 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.<= 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufleq 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 489 91 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufleq \, symbol bufleq1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 743 395 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufleq1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 489 220 graph;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 541 397 pd clear_buffers;
+#X msg 541 371 vasp bufleq bufleq1;
+#X text 389 220 1/true;
+#X text 388 260 0/false;
+#X text 60 94 argument/right inlet: value;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#X obj 58 366 vasp.update;
+#X floatatom 119 308 5 0 0;
+#X text 164 230 copy to new buffer;
+#X obj 58 335 vasp.<= 0.4;
+#X text 60 80 sample <= value;
+#X msg 61 150 vasp bufleq;
+#X msg 58 236 vasp bufleq1;
+#X obj 58 262 vasp.= bufleq;
+#X obj 57 418 VASP-HELP;
+#X connect 5 0 4 0;
+#X connect 9 0 10 0;
+#X connect 12 0 14 1;
+#X connect 14 0 11 0;
+#X connect 16 0 9 0;
+#X connect 17 0 18 0;
+#X connect 18 0 14 0;
diff --git a/externals/grill/vasp/pd-help/vasp_list.pd b/externals/grill/vasp/pd-help/vasp_list.pd
new file mode 100644
index 00000000..6764e257
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_list.pd
@@ -0,0 +1,28 @@
+#N canvas 93 206 852 414 10;
+#X text 60 80 outputs the values of all samples of a vasp as list;
+#X obj 74 32 cnv 15 15 15 empty empty vasp.? 0 10 1 14 -262144 -1 0
+;
+#N canvas 0 0 450 300 graph1 0;
+#X array buflist 20 float 0;
+#X coords 0 1 19 -1 300 100 1;
+#X restore 389 143 graph;
+#N canvas 0 0 392 268 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 45 symbol buflist;
+#X msg 33 73 \; \$1 xticks 0 1 5 \; \$1 xlabel 1.1 0 5 10 15 \; \$1
+yticks 0 0.25 2 \; \$1 ylabel 20.5 -1 -0.5 0 0.5 1;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 677 302 pd init;
+#X obj 99 205 vasp.?;
+#X msg 99 130 vasp buflist;
+#X obj 99 173 vasp.update;
+#X obj 99 237 prepend set;
+#X obj 95 373 VASP-HELP;
+#X obj 99 151 vasp.window lin;
+#X msg 99 284;
+#X connect 4 0 7 0;
+#X connect 5 0 9 0;
+#X connect 6 0 4 0;
+#X connect 7 0 10 0;
+#X connect 9 0 6 0;
diff --git a/externals/grill/vasp/pd-help/vasp_log.pd b/externals/grill/vasp/pd-help/vasp_log.pd
new file mode 100644
index 00000000..4e8c839f
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_log.pd
@@ -0,0 +1,50 @@
+#N canvas 47 54 892 462 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.log 0 10 1 14 -262144 -1
+0;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 494 337 pd clear_buffer;
+#X text 71 63 ln (sample);
+#X text 72 81 natural logarithm;
+#X text 170 281 calculate the natural logarithm;
+#X msg 494 314 vasp buflog;
+#X text 167 184 draw a line from 1 to a value (def 1001);
+#X text 193 127 value;
+#N canvas 0 0 450 300 graph1 0;
+#X array buflog 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 493 168 graph;
+#N canvas 0 0 390 266 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol buflog;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 756 336 pd init;
+#X text 170 303 and optimize to values between (-1) and 1;
+#X obj 69 329 vasp.update;
+#X obj 69 305 vasp.opt;
+#X obj 69 282 vasp.log;
+#X msg 69 185 vasp buflog;
+#X obj 69 232 vasp.* 1000;
+#X obj 69 258 vasp.+ 1;
+#X obj 133 147 t b f;
+#X obj 70 405 VASP-HELP;
+#X obj 69 207 vasp.window lin;
+#X obj 133 129 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
+10 -24198 -1 -1 1 256;
+#X connect 5 0 1 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 19 0;
+#X connect 15 0 16 0;
+#X connect 16 0 13 0;
+#X connect 17 0 14 0;
+#X connect 17 1 15 1;
+#X connect 19 0 15 0;
+#X connect 20 0 17 0;
diff --git a/externals/grill/vasp/pd-help/vasp_lwr.pd b/externals/grill/vasp/pd-help/vasp_lwr.pd
new file mode 100644
index 00000000..f2f5f021
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_lwr.pd
@@ -0,0 +1,52 @@
+#N canvas 44 207 839 468 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.< 0 10 1 14 -262144 -1 0
+;
+#N canvas 0 0 450 300 graph1 0;
+#X array buflwr 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 480 90 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol buflwr \, symbol buflwr1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 734 394 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array buflwr1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 480 219 graph;
+#X text 60 80 sample < value;
+#X text 60 94 argument/right inlet: value;
+#X msg 61 150 vasp buflwr;
+#X obj 61 172 vasp.osc 44100;
+#X obj 61 194 vasp.update;
+#X text 164 234 copy to new buffer;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 532 396 pd clear_buffers;
+#X msg 532 370 vasp buflwr buflwr1;
+#X text 378 219 1/true;
+#X text 377 259 0/false;
+#X obj 58 366 vasp.update;
+#X obj 58 262 vasp.= buflwr;
+#X msg 58 236 vasp buflwr1;
+#X floatatom 113 308 5 0 0;
+#X obj 58 335 vasp.< 0.4;
+#X obj 59 418 VASP-HELP;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 11 0 10 0;
+#X connect 15 0 18 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 1;
+#X connect 18 0 14 0;
diff --git a/externals/grill/vasp/pd-help/vasp_max.pd b/externals/grill/vasp/pd-help/vasp_max.pd
new file mode 100644
index 00000000..92e25c7e
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_max.pd
@@ -0,0 +1,51 @@
+#N canvas 53 20 825 522 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.max 0 10 1 14 -262144 -1
+0;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 400 405 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmax 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 400 114 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 43 symbol bufmax \, symbol bufmax1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 675 411 pd init;
+#X obj 73 144 vasp.osc 44100;
+#X obj 73 167 vasp.update;
+#X text 68 58 take maximum of vasp and argument;
+#X text 70 75 argument/right inlet: value;
+#X msg 73 123 vasp bufmax;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmax1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 400 251 graph;
+#X text 625 70 source;
+#X obj 72 281 vasp.= bufmax;
+#X msg 72 255 vasp bufmax1;
+#X obj 72 334 vasp.update;
+#X msg 400 382 vasp bufmax bufmax1;
+#X text 162 121 generate a sine wave at 1 Hz;
+#X text 178 251 copy to new buffer;
+#X obj 72 309 vasp.max -0.4;
+#X obj 65 435 VASP-HELP;
+#X text 177 327 set all values < -0.4 to -0.4;
+#X connect 4 0 5 0;
+#X connect 8 0 4 0;
+#X connect 11 0 17 0;
+#X connect 12 0 11 0;
+#X connect 14 0 1 0;
+#X connect 17 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mcosc.pd b/externals/grill/vasp/pd-help/vasp_mcosc.pd
new file mode 100644
index 00000000..46d729f5
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mcosc.pd
@@ -0,0 +1,68 @@
+#N canvas 14 55 990 494 10;
+#N canvas 4 20 456 306 Hz_to_period_length 0;
+#X floatatom 135 238 0 0 0;
+#X obj 135 142 t b f;
+#X text 136 260 period length in samples (float);
+#X floatatom 135 80 0 0 0;
+#X obj 135 206 / 1;
+#X text 180 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 135 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 65 415 pd Hz_to_period_length;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.*cosc 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmcosc1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 563 101 graph;
+#N canvas 0 0 402 278 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmcosc1 \, symbol bufmcosc2;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 846 418 pd init;
+#N canvas 40 55 247 122 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 568 414 pd clear_buffers;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmcosc2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 566 259 graph;
+#X text 71 63 multiplies a complex buffer with a complex sine wave
+;
+#X text 71 83 argument/right inlet: frequency in period length in samples
+;
+#X msg 568 391 vasp bufmcosc1 bufmcosc2;
+#X obj 65 179 vasp.update;
+#X msg 65 127 vasp bufmcosc1 bufmcosc2;
+#X text 246 127 generate a ramp from 0 to 1;
+#X text 742 70 *real part of the cosc;
+#X text 713 227 *imaginary part of the cosc;
+#X obj 65 357 vasp.update;
+#X obj 65 334 vasp.* 0.5;
+#X msg 65 267 vasp bufmcosc1 bufmcosc2;
+#X obj 65 311 vasp.*cosc 44100;
+#X obj 64 448 VASP-HELP;
+#X obj 65 154 vasp.window lin;
+#X text 245 265 multiply the ramp with a complex sine wave;
+#X connect 8 0 4 0;
+#X connect 10 0 19 0;
+#X connect 15 0 14 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 19 0 9 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mframes.pd b/externals/grill/vasp/pd-help/vasp_mframes.pd
new file mode 100644
index 00000000..ead17da8
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mframes.pd
@@ -0,0 +1,63 @@
+#N canvas 80 119 908 535 10;
+#X obj 62 323 vasp.osc 22050;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.frames* 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmfram1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 149 graph;
+#N canvas 0 0 404 280 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmfram1;
+#X msg 140 45 symbol bufmfram2;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X restore 813 459 pd init;
+#X obj 62 355 vasp.update;
+#X text 117 412 abbreviation;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmfram2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 268 graph;
+#X text 54 103 !!!all vectors of a vasp have the same framesize/length!!!
+;
+#X obj 77 274 prepend set;
+#X obj 233 323 vasp.osc 22050;
+#X obj 233 355 vasp.update;
+#X text 58 83 argument/right inlet: value;
+#X obj 233 239 vasp.frames* 2;
+#X obj 62 187 vasp.-> bufmfram2;
+#X obj 255 271 prepend set;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 528 439 pd clear_buffer;
+#X msg 528 418 vasp bufmfram1 bufmfram2;
+#X msg 62 153 vasp 30000 bufmfram1;
+#X obj 61 411 vasp.f*;
+#X obj 161 453 vasp.frames;
+#X text 53 454 related objects:;
+#X obj 243 453 vasp.frames+;
+#X text 59 66 multiply the number of frames of a vasp by a value;
+#X obj 59 495 VASP-HELP;
+#X msg 77 297;
+#X msg 255 294;
+#X connect 0 0 4 0;
+#X connect 8 0 24 0;
+#X connect 9 0 10 0;
+#X connect 12 0 14 0;
+#X connect 12 0 9 0;
+#X connect 13 0 8 0;
+#X connect 13 0 0 0;
+#X connect 13 1 12 0;
+#X connect 14 0 25 0;
+#X connect 16 0 15 0;
+#X connect 17 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_min.pd b/externals/grill/vasp/pd-help/vasp_min.pd
new file mode 100644
index 00000000..f2448cbe
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_min.pd
@@ -0,0 +1,51 @@
+#N canvas 57 40 836 521 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.min 0 10 1 14 -262144 -1
+0;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 412 403 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmin 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 412 112 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 43 symbol bufmin \, symbol bufmin1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 687 409 pd init;
+#X obj 73 144 vasp.osc 44100;
+#X obj 73 167 vasp.update;
+#X text 70 75 argument/right inlet: value;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmin1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 412 249 graph;
+#X text 666 74 source;
+#X text 68 58 take minimum of vasp and argument;
+#X msg 73 123 vasp bufmin;
+#X msg 412 380 vasp bufmin bufmin1;
+#X text 162 121 generate a sine wave at 1 Hz;
+#X text 178 251 copy to new buffer;
+#X obj 72 354 vasp.update;
+#X msg 72 255 vasp bufmin1;
+#X obj 72 281 vasp.= bufmin;
+#X obj 72 328 vasp.min 0.4;
+#X obj 66 460 VASP-HELP;
+#X text 177 327 set all values > 0.4 to 0.4;
+#X connect 4 0 5 0;
+#X connect 10 0 4 0;
+#X connect 11 0 1 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 17 0 14 0;
diff --git a/externals/grill/vasp/pd-help/vasp_minmax.pd b/externals/grill/vasp/pd-help/vasp_minmax.pd
new file mode 100644
index 00000000..5e0f8397
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_minmax.pd
@@ -0,0 +1,59 @@
+#N canvas 58 24 940 639 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.minmax 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmm1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 546 71 graph;
+#N canvas 0 0 408 284 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 yticks 0 0.25 2 \; \$1
+ylabel 94000 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufmm1 \, symbol bufmm2 \, symbol bufmm3 \, symbol
+bufmm4;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 875 594 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 65 491 pd clear_buffer;
+#X obj 77 178 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmm2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 546 212 graph;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmm3 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 547 356 graph;
+#X text 780 334 min values;
+#X text 786 480 max values;
+#X obj 76 315 vasp.update;
+#X obj 76 294 vasp.minmax;
+#X obj 65 534 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmm4 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 548 499 graph;
+#X text 788 45 source1;
+#X text 797 191 source2;
+#X obj 77 152 vasp.cosc 44100;
+#X msg 77 127 vasp bufmm1 bufmm2;
+#X obj 76 266 vasp.c-> bufmm3 bufmm4;
+#X msg 76 242 vasp bufmm1 bufmm2;
+#X text 228 295 compare the two buffers;
+#X text 227 264 copy and;
+#X msg 65 468 vasp bufmm1 bufmm2 bufmm3 bufmm4;
+#X text 71 63 compare two vasps and assign lower values to the first
+and higher values to the second buffer;
+#X text 210 125 generate a complex sine wave at 1 Hz;
+#X connect 10 0 9 0;
+#X connect 15 0 4 0;
+#X connect 16 0 15 0;
+#X connect 17 1 10 0;
+#X connect 18 0 17 0;
+#X connect 21 0 3 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mirr.pd b/externals/grill/vasp/pd-help/vasp_mirr.pd
new file mode 100644
index 00000000..9096f0b8
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mirr.pd
@@ -0,0 +1,45 @@
+#N canvas 24 75 805 395 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.mirr 0 10 1 14 -262144 -1
+0;
+#X text 453 269 clear;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 453 313 pd clear_buffer;
+#X msg 453 290 vasp bufmirr;
+#X text 75 52 mirrors a vasp (reverse);
+#X obj 69 204 vasp.update;
+#X msg 69 156 vasp bufmirr;
+#X obj 69 181 vasp.mirr;
+#X obj 68 312 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmirr 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 342 75 graph;
+#N canvas 0 0 390 266 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 45 symbol buflist;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X obj 32 227 vasp.u;
+#X msg 32 182 vasp bufmirr;
+#X obj 32 205 vasp.= env 0 0 1 20 -1 100;
+#X obj 32 160 loadbang;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X restore 578 313 pd init;
+#X obj 69 135 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X connect 3 0 2 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 11 0 6 0;
diff --git a/externals/grill/vasp/pd-help/vasp_miwindow.pd b/externals/grill/vasp/pd-help/vasp_miwindow.pd
new file mode 100644
index 00000000..3719874c
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_miwindow.pd
@@ -0,0 +1,64 @@
+#N canvas 44 117 889 563 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.*!window 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmiwindow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 408 284 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmiwindow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 771 320 pd init;
+#N canvas 0 0 194 221 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 569 327 pd clear_buffers;
+#X obj 63 495 VASP-HELP;
+#X obj 61 302 vasp.u;
+#X floatatom 194 210 5 0 0;
+#X text 259 209 0..4;
+#X msg 231 239 lin;
+#X msg 231 264 sin;
+#X msg 231 289 hanning;
+#X msg 231 314 hamming;
+#X msg 231 339 blackman;
+#X text 275 238 0;
+#X text 275 260 1;
+#X text 295 284 2;
+#X text 300 313 3;
+#X text 300 335 4;
+#X obj 225 401 vasp.!window;
+#X text 60 396 see also:;
+#X obj 322 426 vasp.*xwindow;
+#X text 60 102 argument/right inlet: name or number of name;
+#X text 60 80 generate window functions;
+#X obj 322 401 vasp.xwindow;
+#X obj 134 401 vasp.window;
+#X obj 61 174 vasp.osc 3000;
+#X text 182 156 generate a sine wave;
+#X text 182 178 and multiply it with a window function;
+#X msg 569 302 vasp bufmiwindow;
+#X msg 61 149 vasp bufmiwindow;
+#X obj 61 250 vasp.*!window lin;
+#X obj 134 426 vasp.*window;
+#X connect 6 0 30 1;
+#X connect 8 0 30 1;
+#X connect 9 0 30 1;
+#X connect 10 0 30 1;
+#X connect 11 0 30 1;
+#X connect 12 0 30 1;
+#X connect 25 0 30 0;
+#X connect 28 0 3 0;
+#X connect 29 0 25 0;
+#X connect 30 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mod.pd b/externals/grill/vasp/pd-help/vasp_mod.pd
new file mode 100644
index 00000000..f5551c88
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mod.pd
@@ -0,0 +1,48 @@
+#N canvas 35 127 922 431 10;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 613 298 pd clear_buffer;
+#X text 366 125 ramp from 0-1;
+#X obj 286 174 vasp.update;
+#X obj 51 173 vasp.update;
+#X text 132 126 a sine wave at 1Hz or;
+#X obj 51 149 vasp.osc 44100;
+#X text 54 77 optional argument/right inlet: divisor;
+#X text 54 60 modulo function / remainder of a division;
+#X obj 62 31 cnv 15 15 15 empty empty vasp.% 0 10 1 14 -262144 -1 0
+;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmod 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 485 110 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmod;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 760 300 pd init;
+#X msg 51 126 vasp bufmod;
+#X msg 613 273 vasp bufmod;
+#X msg 286 127 vasp bufmod;
+#X obj 100 292 vasp.update;
+#X floatatom 161 245 0 0 0;
+#X obj 100 268 vasp.% 0.25;
+#X text 187 260 modulo;
+#X msg 100 219 vasp bufmod;
+#X obj 53 388 VASP-HELP;
+#X obj 286 148 vasp.window lin;
+#X connect 5 0 3 0;
+#X connect 11 0 5 0;
+#X connect 12 0 0 0;
+#X connect 13 0 20 0;
+#X connect 15 0 16 1;
+#X connect 16 0 14 0;
+#X connect 18 0 16 0;
+#X connect 20 0 2 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mosc.pd b/externals/grill/vasp/pd-help/vasp_mosc.pd
new file mode 100644
index 00000000..416d86dd
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mosc.pd
@@ -0,0 +1,80 @@
+#N canvas 47 54 883 486 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.*osc 0 10 1 14 -262144 -1
+0;
+#X obj 77 195 vasp.update;
+#X obj 77 172 vasp.* 0.5;
+#X obj 402 397 dac~;
+#X obj 402 353 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 424 352 play;
+#X text 71 63 multiplies a sine wave with a buffer content;
+#X text 70 78 argument/right inlet: frequency in period length in samples
+;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 534 397 pd clear_buffer;
+#X msg 534 374 vasp bufmosc;
+#X msg 77 127 vasp bufmosc;
+#X text 181 126 generate white noise;
+#X obj 77 149 vasp.noise;
+#X obj 77 218 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 427 174 wavedisplay-simple bufmosc \$0;
+#X obj 402 374 tabplay~ bufmosc;
+#N canvas 92 108 339 264 init 0;
+#X obj 110 180 s \$0-sample-length;
+#X msg 177 126 resize \$1;
+#X obj 177 79 loadbang;
+#X msg 177 100 88200;
+#X obj 177 148 s bufmosc;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 0 0;
+#X restore 673 395 pd init;
+#N canvas 4 20 454 304 Hz_to_period_length 0;
+#X floatatom 136 242 0 0 0;
+#X obj 136 142 t b f;
+#X text 169 223 period length in samples (float);
+#X floatatom 136 80 0 0 0;
+#X obj 136 206 / 1;
+#X text 181 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 136 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 79 405 pd Hz_to_period_length;
+#X text 188 379 ringmod-example;
+#X obj 79 380 ringmod_example;
+#X text 188 263 with 2Hz;
+#X text 186 245 generate an amplitude modulation;
+#X msg 78 245 vasp bufmosc;
+#X obj 78 268 vasp.*osc 22050;
+#X obj 78 292 vasp.update;
+#X obj 78 315 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 60 460 VASP-HELP;
+#X connect 1 0 13 0;
+#X connect 2 0 1 0;
+#X connect 4 0 15 0;
+#X connect 9 0 8 0;
+#X connect 10 0 12 0;
+#X connect 12 0 2 0;
+#X connect 15 0 3 0;
+#X connect 15 0 3 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mphasor.pd b/externals/grill/vasp/pd-help/vasp_mphasor.pd
new file mode 100644
index 00000000..5ad39ce7
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mphasor.pd
@@ -0,0 +1,78 @@
+#N canvas 47 54 883 486 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.*phasor 0 10 1 14 -262144
+-1 0;
+#X obj 77 195 vasp.update;
+#X obj 77 172 vasp.* 0.5;
+#X obj 394 397 dac~;
+#X obj 394 353 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 416 352 play;
+#X text 70 78 argument/right inlet: frequency in period length in samples
+;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 534 397 pd clear_buffer;
+#X text 188 126 generate white noise;
+#X obj 77 149 vasp.noise;
+#X obj 77 218 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#N canvas 92 108 341 266 init 0;
+#X obj 110 180 s \$0-sample-length;
+#X msg 177 126 resize \$1;
+#X obj 177 79 loadbang;
+#X msg 177 100 88200;
+#X obj 177 148 s bufmphasor;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 0 0;
+#X restore 673 395 pd init;
+#N canvas 4 20 454 304 Hz_to_period_length 0;
+#X floatatom 135 242 0 0 0;
+#X obj 135 142 t b f;
+#X text 168 223 period length in samples (float);
+#X floatatom 135 80 0 0 0;
+#X obj 135 206 / 1;
+#X text 180 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 135 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 80 396 pd Hz_to_period_length;
+#X text 72 63 multiplies a saw tooth ramp with a buffer content;
+#X msg 77 127 vasp bufmphasor;
+#X obj 464 158 wavedisplay-simple bufmphasor \$0;
+#X msg 534 374 vasp bufmphasor;
+#X obj 394 374 tabplay~ bufmphasor;
+#X text 207 243 generate an amplitude modulation;
+#X text 208 258 with 2Hz;
+#X obj 78 292 vasp.update;
+#X obj 78 315 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 78 268 vasp.*phasor 22050;
+#X msg 78 245 vasp bufmphasor;
+#X obj 79 449 VASP-HELP;
+#X connect 1 0 10 0;
+#X connect 2 0 1 0;
+#X connect 4 0 17 0;
+#X connect 9 0 2 0;
+#X connect 14 0 9 0;
+#X connect 16 0 7 0;
+#X connect 17 0 3 0;
+#X connect 17 0 3 1;
+#X connect 20 0 21 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
diff --git a/externals/grill/vasp/pd-help/vasp_msize.pd b/externals/grill/vasp/pd-help/vasp_msize.pd
new file mode 100644
index 00000000..6053bf6f
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_msize.pd
@@ -0,0 +1,38 @@
+#N canvas 85 111 836 513 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.size/ 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmsize 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 453 152 graph;
+#X obj 252 439 vasp.frames;
+#X text 62 415 related objects:;
+#X floatatom 120 319 5 0 0;
+#X obj 252 417 vasp.size;
+#X obj 253 373 vasp.s/;
+#X obj 62 217 vasp.size* 2;
+#X obj 177 217 vasp.size/ 2;
+#X obj 193 31 cnv 15 15 15 empty empty vasp.size* 0 10 1 14 -262144
+-1 0;
+#X text 57 69 divide and multiplicate the size of a buffer/array;
+#X text 59 371 abbreviations:;
+#X obj 175 372 vasp.s*;
+#X obj 120 289 vasp.size?;
+#X obj 176 439 vasp.size?;
+#N canvas 0 0 412 288 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 2 5 \; \$1 xlabel 1.1 0 10 20 30 40 50
+\; \$1 yticks 0 0.25 2;
+#X msg 33 45 symbol bufmsize;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 714 408 pd init;
+#X obj 176 416 vasp.s+;
+#X msg 62 152 vasp bufmsize;
+#X msg 177 152 vasp bufmsize;
+#X obj 58 481 VASP-HELP;
+#X connect 7 0 13 0;
+#X connect 8 0 13 0;
+#X connect 13 0 4 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mul.pd b/externals/grill/vasp/pd-help/vasp_mul.pd
new file mode 100644
index 00000000..de6420b4
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mul.pd
@@ -0,0 +1,135 @@
+#N canvas 162 101 824 443 10;
+#N canvas 40 55 247 122 clear_buffers 0;
+#X obj 45 79 vasp.update;
+#X obj 45 56 vasp.= 0;
+#X obj 45 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 362 340 pd clear_buffers;
+#X text 60 57 optional argument/right inlet: multiplier;
+#X text 62 41 multiplies a vasp;
+#X obj 62 19 cnv 15 15 15 empty empty vasp.* 0 10 1 14 -262144 -1 0
+;
+#N canvas 0 0 450 300 graph168 0;
+#X array bufmul 88200 float 0;
+#X coords 0 1 88199 -1 300 120 1;
+#X restore 390 67 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmul;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 662 331 pd init;
+#X msg 362 319 vasp bufmul;
+#X text 182 315 <- click to open;
+#N canvas 32 40 910 552 envelope_example 0;
+#X text 167 179 generate noise;
+#X text 148 346 normalize the vasp;
+#X obj 59 344 vasp.opt;
+#X obj 59 321 vasp.flp 2205;
+#X obj 59 297 vasp.abs;
+#X obj 60 204 vasp.noise;
+#X text 74 32 use vasp.* to multiply an envelope to noise;
+#X msg 60 183 vasp bufmul1;
+#X text 796 105 bufmul1;
+#X obj 438 485 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 662 492 pd clear_buffers;
+#X obj 438 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 463 431 play;
+#X obj 536 122 wavedisplay-simple bufmul1 \$0;
+#X obj 536 274 wavedisplay-simple bufmul2 \$0;
+#X text 797 256 bufmul2;
+#X obj 80 79 filelist \$0;
+#N canvas 92 108 393 368 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 214 159 loadbang;
+#X obj 67 53 loadbang;
+#X msg 214 180 88200;
+#X obj 66 178 t b f f;
+#X obj 67 101 filelisthandler \$0;
+#X obj 224 252 s bufmul2;
+#X obj 214 228 s bufmul1;
+#X msg 67 133 read -resize \$1 bufmul2;
+#X msg 67 79 2;
+#X connect 0 0 7 0;
+#X connect 3 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 6 0;
+#X connect 5 0 12 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 2 0;
+#X connect 7 1 1 0;
+#X connect 7 2 3 0;
+#X connect 8 0 11 0;
+#X connect 11 0 0 0;
+#X connect 12 0 8 0;
+#X restore 780 493 pd inside;
+#X obj 438 458 tabplay~ bufmul1;
+#X msg 662 466 vasp bufmul1 bufmul2;
+#X text 221 79 into buffer bufmul2;
+#X obj 60 225 vasp.update;
+#X obj 60 247 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 275 vasp bufmul2;
+#X obj 59 367 vasp.update;
+#X obj 59 389 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 147 296 get absolute values;
+#X text 153 422 multiply noise with the envelope;
+#X obj 60 470 vasp.update;
+#X obj 60 492 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 60 422 vasp bufmul1;
+#X obj 60 444 vasp.* bufmul2;
+#X text 157 329 get the envelope (2Hz);
+#X text 156 316 filter the values with a lowpass to;
+#X connect 2 0 24 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 21 0;
+#X connect 7 0 5 0;
+#X connect 11 0 18 0;
+#X connect 18 0 9 0;
+#X connect 18 0 9 1;
+#X connect 19 0 10 0;
+#X connect 21 0 22 0;
+#X connect 23 0 4 0;
+#X connect 24 0 25 0;
+#X connect 28 0 29 0;
+#X connect 30 0 31 0;
+#X connect 31 0 28 0;
+#X restore 45 315 pd envelope_example;
+#X obj 45 255 vasp.update;
+#X msg 45 173 vasp bufmul;
+#X obj 45 375 VASP-HELP;
+#X obj 45 119 nbx 5 14 -1 1 0 1 empty empty empty 0 -6 0 10 -24198
+-1 -1 0.5 256;
+#X obj 45 140 t b f;
+#X obj 45 200 vasp.osc 4410;
+#X text 138 132 and change gain;
+#X text 136 118 generate sine wave;
+#X obj 45 229 vasp.* 0.5;
+#X connect 6 0 0 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 10 0;
+#X connect 13 1 17 1;
+#X connect 14 0 17 0;
+#X connect 17 0 9 0;
diff --git a/externals/grill/vasp/pd-help/vasp_multi.pd b/externals/grill/vasp/pd-help/vasp_multi.pd
new file mode 100644
index 00000000..337d562b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_multi.pd
@@ -0,0 +1,20 @@
+#N canvas 266 151 546 412 10;
+#X text 51 63 outputs a vasp multiple times;
+#X obj 43 28 cnv 15 15 15 empty empty vasp.multi 0 10 1 14 -262144
+-1 0;
+#X obj 56 111 table bufm 88200;
+#X obj 223 232 prepend set;
+#X text 51 80 argument: number of outlets (default 2);
+#X text 109 312 abbreviation;
+#X obj 56 232 prepend set;
+#X msg 56 156 vasp 22050 bufm 44100 0;
+#X obj 56 190 vasp.multi 2;
+#X obj 58 311 vasp.m;
+#X obj 58 366 VASP-HELP;
+#X msg 56 257;
+#X msg 223 257;
+#X connect 3 0 12 0;
+#X connect 6 0 11 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 8 1 3 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mwindow.pd b/externals/grill/vasp/pd-help/vasp_mwindow.pd
new file mode 100644
index 00000000..e14dbb28
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mwindow.pd
@@ -0,0 +1,64 @@
+#N canvas 44 117 889 563 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.*window 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmwindow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 406 282 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmwindow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 771 320 pd init;
+#N canvas 0 0 194 221 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 569 325 pd clear_buffers;
+#X obj 63 495 VASP-HELP;
+#X obj 61 302 vasp.u;
+#X floatatom 194 210 5 0 0;
+#X text 259 209 0..4;
+#X msg 231 239 lin;
+#X msg 231 264 sin;
+#X msg 231 289 hanning;
+#X msg 231 314 hamming;
+#X msg 231 339 blackman;
+#X text 275 238 0;
+#X text 275 260 1;
+#X text 295 284 2;
+#X text 300 313 3;
+#X text 300 340 4;
+#X obj 225 401 vasp.!window;
+#X text 60 396 see also:;
+#X obj 322 426 vasp.*xwindow;
+#X obj 225 426 vasp.*!window;
+#X text 60 104 argument/right inlet: name or number of name;
+#X text 60 80 generate window functions;
+#X obj 322 401 vasp.xwindow;
+#X msg 61 149 vasp bufmwindow;
+#X obj 61 250 vasp.*window lin;
+#X obj 134 401 vasp.window;
+#X msg 569 301 vasp bufmwindow;
+#X obj 61 178 vasp.osc 3000;
+#X text 182 156 generate a sine wave;
+#X text 183 173 and multiply it with a window function;
+#X connect 6 0 26 1;
+#X connect 8 0 26 1;
+#X connect 9 0 26 1;
+#X connect 10 0 26 1;
+#X connect 11 0 26 1;
+#X connect 12 0 26 1;
+#X connect 25 0 29 0;
+#X connect 26 0 5 0;
+#X connect 28 0 3 0;
+#X connect 29 0 26 0;
diff --git a/externals/grill/vasp/pd-help/vasp_mxwindow.pd b/externals/grill/vasp/pd-help/vasp_mxwindow.pd
new file mode 100644
index 00000000..615af950
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_mxwindow.pd
@@ -0,0 +1,64 @@
+#N canvas 68 99 889 563 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.*xwindow 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufmxwindow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 410 286 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufmxwindow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 771 320 pd init;
+#N canvas 0 0 194 221 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 569 327 pd clear_buffers;
+#X obj 63 495 VASP-HELP;
+#X obj 61 302 vasp.u;
+#X floatatom 194 210 5 0 0;
+#X text 259 209 0..4;
+#X msg 231 239 lin;
+#X msg 231 264 sin;
+#X msg 231 289 hanning;
+#X msg 231 314 hamming;
+#X msg 231 339 blackman;
+#X text 275 238 0;
+#X text 275 260 1;
+#X text 295 284 2;
+#X text 300 313 3;
+#X text 300 335 4;
+#X obj 225 401 vasp.!window;
+#X text 60 396 see also:;
+#X text 60 102 argument/right inlet: name or number of name;
+#X text 60 80 generate window functions;
+#X obj 322 401 vasp.xwindow;
+#X obj 134 401 vasp.window;
+#X obj 61 174 vasp.osc 3000;
+#X text 182 156 generate a sine wave;
+#X text 182 178 and multiply it with a window function;
+#X obj 134 426 vasp.*window;
+#X msg 569 302 vasp bufmxwindow;
+#X obj 225 426 vasp.*!window;
+#X msg 61 149 vasp bufmxwindow;
+#X obj 61 250 vasp.*xwindow lin;
+#X connect 6 0 31 1;
+#X connect 8 0 31 1;
+#X connect 9 0 31 1;
+#X connect 10 0 31 1;
+#X connect 11 0 31 1;
+#X connect 12 0 31 1;
+#X connect 24 0 31 0;
+#X connect 28 0 3 0;
+#X connect 30 0 24 0;
+#X connect 31 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_neq.pd b/externals/grill/vasp/pd-help/vasp_neq.pd
new file mode 100644
index 00000000..15f3c905
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_neq.pd
@@ -0,0 +1,52 @@
+#N canvas 28 91 938 543 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.!= 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufneq1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 404 280 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufneq1 \, symbol bufneq2;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 766 421 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufneq2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 248 graph;
+#X text 59 98 argument/right inlet: value;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 564 426 pd clear_buffers;
+#X text 417 248 1/true;
+#X text 416 288 0/false;
+#X text 60 80 not equal;
+#X msg 564 399 vasp bufneq1 bufneq2;
+#X text 166 358 test if a part of the function is not equal to -1;
+#X obj 62 383 vasp.update;
+#X obj 62 356 vasp.!= -1;
+#X obj 62 325 vasp.= bufneq1;
+#X msg 62 298 vasp bufneq2;
+#X obj 53 444 VASP-HELP;
+#X text 173 149 generate a function;
+#X msg 61 150 vasp bufequ;
+#X obj 61 218 vasp.update;
+#X obj 61 178 vasp.= env 0 0 1 22049 0.3 22050 0.3 44099 -1 44100 -1
+66149 1 66150 0 88200;
+#X connect 9 0 5 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 17 0 19 0;
+#X connect 19 0 18 0;
diff --git a/externals/grill/vasp/pd-help/vasp_noise.pd b/externals/grill/vasp/pd-help/vasp_noise.pd
new file mode 100644
index 00000000..59e2e38b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_noise.pd
@@ -0,0 +1,43 @@
+#N canvas 56 83 867 431 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.noise 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufnoise 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 412 131 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufnoise;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 692 310 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 547 310 pd clear_buffer;
+#X obj 415 311 dac~;
+#X obj 415 267 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 437 266 play;
+#X text 71 63 vasp noise generator;
+#X obj 415 288 tabplay~ bufnoise;
+#X msg 547 287 vasp bufnoise;
+#X obj 77 217 vasp.update;
+#X obj 77 194 vasp.* 0.5;
+#X msg 77 126 vasp bufnoise;
+#X text 175 125 generate white noise;
+#X obj 77 171 vasp.noise;
+#X obj 65 369 VASP-HELP;
+#X connect 5 0 8 0;
+#X connect 8 0 4 0;
+#X connect 8 0 4 1;
+#X connect 9 0 3 0;
+#X connect 11 0 10 0;
+#X connect 12 0 14 0;
+#X connect 14 0 11 0;
diff --git a/externals/grill/vasp/pd-help/vasp_nonzero.pd b/externals/grill/vasp/pd-help/vasp_nonzero.pd
new file mode 100644
index 00000000..137f7abd
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_nonzero.pd
@@ -0,0 +1,160 @@
+#N canvas 96 126 848 577 10;
+#X obj 62 32 cnv 15 15 15 empty empty vasp.?? 0 10 1 14 -262144 -1
+0;
+#X text 64 66 outputs all samples of a vasp that are unequal zero;
+#X text 64 95 right outlet: sample value;
+#X text 65 83 left outlet: sample index;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 512 453 pd clear_buffers;
+#X msg 512 427 vasp bufnonzero bufnonzero1;
+#N canvas 92 108 504 435 inside 0;
+#X obj 87 206 soundfiler;
+#X obj 305 257 s \$0-sample-length;
+#X obj 87 260 s \$0-draw_display;
+#X msg 235 258 resize \$1;
+#X obj 235 280 s bufnonzero1;
+#X obj 245 304 s bufnonzero;
+#X msg 235 232 44100;
+#N canvas 0 0 691 318 menuhandler 0;
+#X obj 69 270 outlet;
+#X msg 111 216 color \$1 \$2;
+#X obj 183 270 outlet;
+#X msg 225 216 color \$1 \$2;
+#X obj 297 270 outlet;
+#X msg 339 216 color \$1 \$2;
+#X obj 411 79 r \$0-plastic;
+#X obj 411 270 outlet;
+#X obj 453 241 s \$0-plastic-color;
+#X msg 453 216 color \$1 \$2;
+#X obj 69 79 r \$0-bass;
+#X obj 183 79 r \$0-beat;
+#X obj 297 79 r \$0-fly;
+#X obj 111 241 s \$0-bass-color;
+#X obj 225 241 s \$0-beat-color;
+#X obj 339 241 s \$0-fly-color;
+#X obj 69 108 t b b b;
+#X obj 183 108 t b b b;
+#X obj 297 108 t b b b;
+#X obj 411 108 t b b b;
+#X msg 111 133 6 12;
+#X msg 79 133 1 10;
+#X msg 191 133 1 10;
+#X msg 225 133 6 12;
+#X msg 306 133 1 10;
+#X msg 339 133 6 12;
+#X msg 419 132 1 10;
+#X msg 453 133 6 12;
+#X connect 1 0 13 0;
+#X connect 3 0 14 0;
+#X connect 5 0 15 0;
+#X connect 6 0 19 0;
+#X connect 9 0 8 0;
+#X connect 10 0 16 0;
+#X connect 11 0 17 0;
+#X connect 12 0 18 0;
+#X connect 16 0 0 0;
+#X connect 16 1 21 0;
+#X connect 16 2 20 0;
+#X connect 17 0 2 0;
+#X connect 17 1 22 0;
+#X connect 17 2 23 0;
+#X connect 18 0 4 0;
+#X connect 18 1 24 0;
+#X connect 18 2 25 0;
+#X connect 19 0 7 0;
+#X connect 19 1 26 0;
+#X connect 19 2 27 0;
+#X connect 20 0 1 0;
+#X connect 21 0 3 0;
+#X connect 21 0 5 0;
+#X connect 21 0 9 0;
+#X connect 22 0 1 0;
+#X connect 22 0 5 0;
+#X connect 22 0 9 0;
+#X connect 23 0 3 0;
+#X connect 24 0 1 0;
+#X connect 24 0 3 0;
+#X connect 24 0 9 0;
+#X connect 25 0 5 0;
+#X connect 26 0 5 0;
+#X connect 26 0 3 0;
+#X connect 26 0 1 0;
+#X connect 27 0 9 0;
+#X restore 77 43 pd menuhandler;
+#X obj 235 211 loadbang;
+#X obj 41 107 loadbang;
+#X msg 87 230 bang;
+#X msg 77 79 read bass.aif bufnonzero;
+#X msg 103 107 read beat.aif bufnonzero;
+#X msg 129 133 read fly.aif bufnonzero;
+#X msg 156 160 read plastic.aif bufnonzero;
+#X connect 0 0 10 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 11 0;
+#X connect 7 1 12 0;
+#X connect 7 2 13 0;
+#X connect 7 3 14 0;
+#X connect 8 0 6 0;
+#X connect 9 0 12 0;
+#X connect 10 0 2 0;
+#X connect 11 0 0 0;
+#X connect 12 0 0 0;
+#X connect 13 0 0 0;
+#X connect 14 0 0 0;
+#X restore 708 457 pd inside;
+#X obj 462 101 wavedisplay-simple bufnonzero \$0;
+#X obj 463 243 wavedisplay-simple bufnonzero1 \$0;
+#X obj 81 151 hdl 15 1 0 6 \$0-beat empty empty 0 -6 1152 8 -262144
+-1 -1 0;
+#X obj 81 151 cnv 15 90 15 empty \$0-beat-color beat.aif 5 8 576 8
+-225271 -33289 0;
+#X obj 81 169 hdl 15 1 0 6 \$0-fly empty empty 0 -6 1152 8 -262144
+-1 -1 0;
+#X obj 81 169 cnv 15 90 15 empty \$0-fly-color fly.aif 5 8 576 8 -166441
+-233017 0;
+#X obj 81 133 hdl 15 1 0 6 \$0-bass empty empty 0 -6 1152 8 -262144
+-1 -1 0;
+#X obj 81 133 cnv 15 90 15 empty \$0-bass-color bass.aif 5 8 576 8
+-166441 -233017 0;
+#X obj 81 187 hdl 15 1 0 6 \$0-plastic empty empty 0 -6 1152 8 -262144
+-1 -1 0;
+#X obj 81 187 cnv 15 90 15 empty \$0-plastic-color plastic.aif 5 8
+576 8 -166441 -233017 0;
+#X text 723 83 source;
+#X text 728 224 peaks;
+#X obj 62 258 vasp.= bufnonzero;
+#X msg 62 229 vasp bufnonzero1;
+#X obj 62 309 vasp.update;
+#X obj 115 330 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 62 285 vasp.peaks 0.0004;
+#X text 140 388 sample index;
+#X text 177 455 sample values;
+#X obj 62 346 vasp.??;
+#X text 183 228 copy to new buffer \, find peaks;
+#X obj 62 389 prepend set;
+#X obj 99 455 prepend set;
+#X msg 62 415;
+#X msg 99 481;
+#X obj 34 521 VASP-HELP;
+#X connect 5 0 4 0;
+#X connect 19 0 23 0;
+#X connect 20 0 19 0;
+#X connect 21 0 22 0;
+#X connect 21 0 26 0;
+#X connect 23 0 21 0;
+#X connect 26 0 28 0;
+#X connect 26 1 29 0;
+#X connect 28 0 30 0;
+#X connect 29 0 31 0;
diff --git a/externals/grill/vasp/pd-help/vasp_offset.pd b/externals/grill/vasp/pd-help/vasp_offset.pd
new file mode 100644
index 00000000..214d0284
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_offset.pd
@@ -0,0 +1,30 @@
+#N canvas 192 165 707 400 10;
+#X text 55 83 argument/right inlet: value;
+#X text 55 69 set the offset of a vasp (into a buffer);
+#X text 55 98 ---! vasp.offs sets all vectors to the same offset !---
+;
+#X obj 41 11 cnv 15 15 15 empty empty vasp.offset 0 10 1 14 -262144
+-1 0;
+#X text 57 323 abbreviation;
+#X floatatom 143 175 0 0 0;
+#X obj 58 221 prepend set;
+#X msg 58 148 vasp bufoffs1;
+#X obj 58 196 vasp.offset 300;
+#X floatatom 330 175 0 0 0;
+#X obj 245 221 prepend set;
+#X msg 245 148 vasp bufoffs1 220 bufoffs2 100;
+#X obj 245 196 vasp.offset 300;
+#X obj 157 322 vasp.o;
+#X obj 55 370 VASP-HELP;
+#X obj 521 273 table bufoffs1;
+#X obj 522 300 table bufoffs2;
+#X msg 58 254;
+#X msg 245 254;
+#X connect 5 0 8 1;
+#X connect 6 0 17 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 9 0 12 1;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_offsetd.pd b/externals/grill/vasp/pd-help/vasp_offsetd.pd
new file mode 100644
index 00000000..037a01b6
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_offsetd.pd
@@ -0,0 +1,28 @@
+#N canvas 191 100 545 439 10;
+#X text 55 80 argument/right inlet: value;
+#X text 55 63 change the offset to a vasp (relatively);
+#X obj 41 11 cnv 15 15 15 empty empty vasp.offset+ 0 10 1 14 -262144
+-1 0;
+#X text 57 323 abbreviation;
+#X floatatom 149 151 0 0 0;
+#X msg 58 234 vasp -1 bufoffsd1 300 0;
+#X obj 58 201 prepend set;
+#X obj 58 177 vasp.offset+ 300;
+#X msg 58 128 vasp bufoffsd1;
+#X floatatom 336 151 0 0 0;
+#X msg 245 234 vasp -1 bufoffs+1 520 0 bufoffsd2 400 0;
+#X obj 245 201 prepend set;
+#X obj 245 174 vasp.offset+ 300;
+#X obj 138 324 vasp.o+;
+#X msg 245 128 vasp bufoffsd1 220 bufoffsd2 100;
+#X obj 359 284 table bufoffsd1 88200;
+#X obj 359 305 table bufoffsd2 88200;
+#X obj 57 386 VASP-HELP;
+#X connect 4 0 7 1;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 12 1;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 14 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_offsetq.pd b/externals/grill/vasp/pd-help/vasp_offsetq.pd
new file mode 100644
index 00000000..e2a35dde
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_offsetq.pd
@@ -0,0 +1,25 @@
+#N canvas 243 134 633 339 10;
+#X obj 56 30 cnv 15 15 15 empty empty vasp.offset? 0 10 1 14 -262144
+-1 0;
+#X text 42 59 get a single vectored vasp's offset;
+#X obj 45 131 cnv 15 74 17 empty empty empty 20 12 0 14 -258699 -66577
+0;
+#X obj 226 132 cnv 15 74 17 empty empty empty 20 12 0 14 -258699 -66577
+0;
+#X floatatom 226 163 0 0 0;
+#X floatatom 45 162 0 0 0;
+#X obj 226 132 vasp.offset?;
+#X obj 45 131 vasp.offset?;
+#X msg 226 107 vasp buffoffsetq 220 buffoffsetq 300;
+#X msg 45 106 vasp 200 buffoffsetq 300;
+#X text 228 89 more than 1 vector. watch pd window!;
+#X text 52 278 abbreviation;
+#X obj 148 275 vasp.o;
+#X obj 148 275 cnv 15 44 17 empty empty empty 20 12 0 14 -258699 -66577
+0;
+#X obj 148 275 vasp.o?;
+#X obj 278 221 table buffoffsetq 88200;
+#X connect 6 0 4 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 9 0 7 0;
diff --git a/externals/grill/vasp/pd-help/vasp_opt.pd b/externals/grill/vasp/pd-help/vasp_opt.pd
new file mode 100644
index 00000000..97fd05b7
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_opt.pd
@@ -0,0 +1,71 @@
+#N canvas 36 36 786 555 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.opt 0 10 1 14 -262144 -1
+0;
+#X obj 72 113 filelist \$0;
+#X obj 340 453 dac~;
+#X obj 340 415 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 361 413 play;
+#N canvas 92 108 338 379 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 91 253 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X obj 66 47 loadbang;
+#X obj 66 113 filelisthandler \$0;
+#X msg 66 145 read -resize \$1 bufopt;
+#X msg 66 91 3;
+#X obj 66 193 t b f;
+#X connect 0 0 7 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 0 0;
+#X connect 6 0 4 0;
+#X connect 7 0 2 0;
+#X connect 7 1 1 0;
+#X restore 607 456 pd inside;
+#X obj 59 440 vasp.update;
+#X obj 59 460 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 69 59 optimise a vasp (normalize);
+#X text 70 73 right outlet: the previous maximum set to 1;
+#X obj 342 136 wavedisplay-simple bufopt \$0;
+#X obj 340 433 tabplay~ bufopt;
+#X msg 482 433 vasp bufopt;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 482 453 pd clear_buffer;
+#X msg 59 338 vasp bufopt;
+#X obj 59 361 vasp.amax?;
+#X text 58 317 or use vasp.amax? to optimise buffer content;
+#X floatatom 114 399 12 0 0;
+#X obj 59 419 vasp./;
+#X text 123 381 current absolute maximum;
+#X obj 59 269 vasp.update;
+#X obj 59 289 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 204 vasp bufopt;
+#X obj 59 227 vasp.opt;
+#X floatatom 102 250 8 0 0;
+#X obj 60 514 VASP-HELP;
+#X text 102 514 - vasp overview;
+#X connect 3 0 11 0;
+#X connect 6 0 7 0;
+#X connect 11 0 2 0;
+#X connect 11 0 2 1;
+#X connect 12 0 13 0;
+#X connect 14 0 15 0;
+#X connect 15 0 18 0;
+#X connect 15 1 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 6 0;
+#X connect 20 0 21 0;
+#X connect 22 0 23 0;
+#X connect 23 0 20 0;
+#X connect 23 1 24 0;
diff --git a/externals/grill/vasp/pd-help/vasp_osc.pd b/externals/grill/vasp/pd-help/vasp_osc.pd
new file mode 100644
index 00000000..0c34f5ae
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_osc.pd
@@ -0,0 +1,63 @@
+#N canvas 47 54 873 437 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.osc 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufosc 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 412 131 graph;
+#N canvas 0 0 400 276 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufosc;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 692 310 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 547 310 pd clear_buffer;
+#X text 71 83 optional argument/right inlet: frequency in period length
+in samples;
+#X obj 415 311 dac~;
+#X obj 415 267 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 437 266 play;
+#X text 71 63 vasp sine wave generator;
+#X text 175 125 generate a sine wave at 1 kHz;
+#X obj 415 288 tabplay~ bufosc;
+#X msg 547 287 vasp bufosc;
+#N canvas 4 20 454 304 Hz_to_period_length 0;
+#X floatatom 139 242 0 0 0;
+#X obj 139 142 t b f;
+#X text 172 223 period length in samples (float);
+#X floatatom 139 80 0 0 0;
+#X obj 139 206 / 1;
+#X text 184 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 139 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 81 311 pd Hz_to_period_length;
+#X obj 77 217 vasp.update;
+#X obj 77 194 vasp.* 0.5;
+#X msg 77 127 vasp bufosc;
+#X obj 77 171 vasp.osc 44.1;
+#X obj 66 380 VASP-HELP;
+#X connect 6 0 10 0;
+#X connect 10 0 5 0;
+#X connect 10 0 5 1;
+#X connect 11 0 3 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 14 0;
diff --git a/externals/grill/vasp/pd-help/vasp_part.pd b/externals/grill/vasp/pd-help/vasp_part.pd
new file mode 100644
index 00000000..45a49b5e
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_part.pd
@@ -0,0 +1,34 @@
+#N canvas 218 99 717 545 10;
+#X text 69 160 right outlet: a vasp with remaining length (if there
+is one) of the input vasp;
+#X text 69 144 left outlet: the new vasps one after the other;
+#X obj 71 47 cnv 15 15 15 empty empty vasp.part 0 10 1 14 -262144 -1
+0;
+#X obj 199 275 print rest;
+#X obj 78 274 print;
+#X obj 78 242 vasp.part 100 100 100;
+#X text 189 206 vasp.part generates 3 new vasps and a rest vasp;
+#X msg 78 207 vasp bufpart1;
+#X obj 125 430 print rest;
+#X obj 76 430 print;
+#X msg 284 360 100 200 300 500 100 200;
+#X obj 76 392 vasp.part;
+#X text 272 323 the input vasp defines the maximum lengths of the vasps
+at the output;
+#X msg 76 328 vasp 1100 bufpart1 bufpart2;
+#X text 202 430 so there are just 4 vasps and no rest.... watch pd
+window;
+#X obj 66 498 VASP-HELP;
+#X text 67 101 left inlet: a vasp to define the buffername and the
+maximum length;
+#X obj 441 477 table bufpart1 2000;
+#X obj 441 499 table bufpart2 2000;
+#X text 67 84 generates vasps with certain lengths;
+#X text 67 131 argument/ right inlet: vasps lengths (list);
+#X connect 5 0 4 0;
+#X connect 5 1 3 0;
+#X connect 7 0 5 0;
+#X connect 10 0 11 1;
+#X connect 11 0 9 0;
+#X connect 11 1 8 0;
+#X connect 13 0 11 0;
diff --git a/externals/grill/vasp/pd-help/vasp_peaks.pd b/externals/grill/vasp/pd-help/vasp_peaks.pd
new file mode 100644
index 00000000..7cfc0fd0
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_peaks.pd
@@ -0,0 +1,89 @@
+#N canvas 152 40 822 598 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.peaks 0 10 1 14 -262144
+-1 0;
+#X obj 71 131 filelist \$0;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 479 495 pd clear_buffers;
+#X obj 60 292 vasp.update;
+#X obj 58 433 vasp.update;
+#X obj 58 453 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 60 312 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 337 495 dac~;
+#X obj 337 457 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 358 455 play;
+#X text 70 66 argument/right inlet: density value 0-1;
+#X text 172 231 copy to new buffer \, find valleys;
+#X floatatom 151 307 12 0 0;
+#X obj 151 328 * 88200;
+#X floatatom 151 350 5 0 0;
+#X obj 58 412 vasp.opt;
+#X text 679 99 source;
+#X text 69 52 find the local maxima of a buffer content;
+#X text 69 81 outlet: current density value;
+#X msg 60 227 vasp bufpeaks2;
+#X obj 337 475 tabplay~ bufpeaks1;
+#X msg 479 475 vasp bufpeaks1 bufpeaks2;
+#X obj 399 117 wavedisplay-simple bufpeaks1 \$0;
+#X obj 399 271 wavedisplay-simple bufpeaks2 \$0;
+#N canvas 92 108 428 393 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 84 253 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 214 221 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 193 t b f f;
+#X obj 66 113 filelisthandler \$0;
+#X msg 66 91 2;
+#X obj 66 69 t b b;
+#X msg 99 91 88200;
+#X obj 214 243 s bufpeaks1;
+#X obj 225 264 s bufpeaks2;
+#X msg 66 145 read \$1 bufpeaks1;
+#X connect 0 0 5 0;
+#X connect 3 0 10 0;
+#X connect 3 0 11 0;
+#X connect 4 0 8 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 12 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 8 1 9 0;
+#X connect 9 0 5 0;
+#X connect 12 0 0 0;
+#X restore 668 495 pd inside;
+#X msg 58 389 vasp bufpeaks2;
+#X text 673 252 peaks;
+#X text 191 348 peak count;
+#X text 230 306 actual peak density;
+#X text 166 273 target peak density as argument;
+#X text 171 390 optimize the buffer content;
+#X obj 60 251 vasp.= bufpeaks1;
+#X obj 60 272 vasp.peaks 0.001;
+#X obj 49 531 VASP-HELP;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 8 0 20 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 15 0 4 0;
+#X connect 19 0 31 0;
+#X connect 20 0 7 0;
+#X connect 20 0 7 1;
+#X connect 21 0 2 0;
+#X connect 25 0 15 0;
+#X connect 31 0 32 0;
+#X connect 32 0 3 0;
+#X connect 32 1 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_phasor.pd b/externals/grill/vasp/pd-help/vasp_phasor.pd
new file mode 100644
index 00000000..38695a08
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_phasor.pd
@@ -0,0 +1,67 @@
+#N canvas 47 54 871 435 10;
+#N canvas 4 20 454 304 Hz_to_period_length 1;
+#X floatatom 138 238 0 0 0;
+#X obj 138 142 t b f;
+#X text 138 259 period length in samples (float);
+#X floatatom 138 80 0 0 0;
+#X obj 138 206 / 1;
+#X text 183 79 frequency in Hz;
+#X obj 53 142 samplerate~;
+#X obj 53 119 loadbang;
+#X floatatom 138 175 5 0 0;
+#X connect 1 0 8 0;
+#X connect 1 1 4 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 78 302 pd Hz_to_period_length;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.phasor 0 10 1 14 -262144
+-1 0;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 547 310 pd clear_buffer;
+#X text 71 83 optional argument/right inlet: frequency in period length
+in samples;
+#X obj 415 311 dac~;
+#X obj 415 267 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 437 266 play;
+#X text 71 63 vasp saw tooth ramp generator;
+#X obj 415 288 tabplay~ bufphasor;
+#X msg 547 287 vasp bufphasor;
+#X obj 414 124 wavedisplay-simple bufphasor \$0;
+#N canvas 92 108 276 288 inside 0;
+#X obj 63 149 s \$0-sample-length;
+#X msg 103 103 resize \$1;
+#X obj 103 56 loadbang;
+#X msg 103 77 88200;
+#X obj 103 124 s bufphasor;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 0 0;
+#X restore 680 311 pd inside;
+#X obj 77 217 vasp.update;
+#X obj 77 194 vasp.* 0.5;
+#X msg 77 127 vasp bufphasor;
+#X text 188 124 generate saw tooth at 20 Hz;
+#X floatatom 168 151 5 0 0;
+#X obj 77 239 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 77 171 vasp.phasor 2205;
+#X obj 77 371 VASP-HELP;
+#X connect 5 0 8 0;
+#X connect 8 0 4 0;
+#X connect 8 0 4 1;
+#X connect 9 0 2 0;
+#X connect 12 0 17 0;
+#X connect 13 0 12 0;
+#X connect 14 0 18 0;
+#X connect 16 0 18 1;
+#X connect 18 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_polar.pd b/externals/grill/vasp/pd-help/vasp_polar.pd
new file mode 100644
index 00000000..e5314f9f
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_polar.pd
@@ -0,0 +1,90 @@
+#N canvas 28 7 948 670 10;
+#N canvas 92 108 559 430 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 214 159 loadbang;
+#X obj 67 53 loadbang;
+#X msg 214 180 88200;
+#X obj 66 178 t b f f;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 4;
+#X obj 214 228 s bufpol1;
+#X obj 224 252 s bufpol2;
+#X msg 67 133 read \$1 bufpol1;
+#X obj 236 278 s bufpola;
+#X obj 246 302 s bufpolp;
+#X obj 226 123 s \$0-bounds;
+#X msg 226 101 ylabel 315 -3.14 0 3.14 \, bounds 0 3.5 300 -3.5;
+#X connect 0 0 7 0;
+#X connect 3 0 10 0;
+#X connect 3 0 11 0;
+#X connect 3 0 13 0;
+#X connect 3 0 14 0;
+#X connect 4 0 6 0;
+#X connect 5 0 9 0;
+#X connect 5 0 16 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 2 0;
+#X connect 7 1 1 0;
+#X connect 7 2 3 0;
+#X connect 8 0 12 0;
+#X connect 9 0 8 0;
+#X connect 12 0 0 0;
+#X connect 16 0 15 0;
+#X restore 360 610 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.polar 0 10 1 14 -262144
+-1 0;
+#X obj 72 91 filelist \$0;
+#X obj 59 223 vasp.cfft;
+#X obj 59 244 vasp.update;
+#X obj 59 267 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 551 318 0 Hz;
+#X text 687 317 sr/2;
+#X text 206 474 <-- click to open;
+#X text 816 319 44.1 kHz;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 254 610 pd clear_buffers;
+#X text 254 565 clear;
+#X msg 59 200 vasp bufpol1 bufpol2;
+#X obj 546 51 wavedisplay-simple bufpol1 \$0;
+#X obj 546 194 wavedisplay-simple bufpol2 \$0;
+#X text 71 53 cartesian to polar coordinate conversion;
+#X text 202 201 transform into real and imaginary part;
+#X text 229 313 real/imaginary -> amplitude/phase;
+#X obj 59 473 phase-random_example;
+#X obj 59 380 vasp.update;
+#X obj 59 403 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 314 vasp bufpol1 bufpol2;
+#X obj 59 357 vasp.polar;
+#X obj 56 622 VASP-HELP;
+#X obj 546 365 wavedisplay-simple bufpola \$0;
+#X obj 546 518 wavedisplay-simple bufpolp \$0;
+#X obj 59 335 vasp.c-> bufpola bufpolp;
+#X msg 254 587 vasp bufpol1 bufpol2 bufpola bufpolp;
+#X obj 546 497 r \$0-bounds;
+#X text 788 31 real part;
+#X text 759 173 imaginary part;
+#X text 791 345 amplitude;
+#X text 812 497 phase;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 12 0 3 0;
+#X connect 19 0 20 0;
+#X connect 21 0 26 0;
+#X connect 22 0 19 0;
+#X connect 26 1 22 0;
+#X connect 27 0 10 0;
+#X connect 28 0 25 0;
diff --git a/externals/grill/vasp/pd-help/vasp_pow.pd b/externals/grill/vasp/pd-help/vasp_pow.pd
new file mode 100644
index 00000000..1ee54241
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_pow.pd
@@ -0,0 +1,44 @@
+#N canvas 47 54 867 462 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.pow 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 410 286 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufpow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 608 330 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 463 330 pd clear_buffer;
+#X obj 77 197 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufpow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 341 144 graph;
+#X text 72 81 vasp power function;
+#X text 71 93 argument/right inlet: exponent;
+#X msg 77 127 vasp bufpow;
+#X msg 463 308 vasp bufpow;
+#X obj 77 150 vasp.osc 44100;
+#X obj 77 172 vasp.* 0.2;
+#X text 71 63 sample ^ x;
+#X obj 77 329 vasp.update;
+#X msg 77 246 vasp bufpow;
+#X obj 77 303 vasp.pow 0.1;
+#X floatatom 144 279 5 0 0;
+#X text 202 278 exponent;
+#X obj 79 397 VASP-HELP;
+#X connect 7 0 9 0;
+#X connect 8 0 2 0;
+#X connect 9 0 10 0;
+#X connect 10 0 3 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X connect 15 0 14 1;
diff --git a/externals/grill/vasp/pd-help/vasp_qamax.pd b/externals/grill/vasp/pd-help/vasp_qamax.pd
new file mode 100644
index 00000000..00c47f4b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qamax.pd
@@ -0,0 +1,75 @@
+#N canvas 57 40 901 555 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.amax? 0 10 1 14 -262144
+-1 0;
+#X obj 492 462 dac~;
+#X obj 492 418 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 514 417 play;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 624 462 pd clear_buffer;
+#X obj 74 116 filelist \$0;
+#N canvas 92 108 400 365 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 66 50 loadbang;
+#X obj 66 178 t b f f;
+#X obj 66 98 filelisthandler \$0;
+#X msg 66 76 3;
+#X msg 66 130 read -resize \$1 bufamax;
+#X obj 214 228 s bufamax;
+#X connect 0 0 5 0;
+#X connect 3 0 9 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 0 0;
+#X restore 755 462 pd inside;
+#X text 70 75 right outlet: calculated value;
+#X text 72 58 max-value of the absolute values of a vasp;
+#X obj 492 439 tabplay~ bufamax;
+#X msg 624 439 vasp bufamax;
+#X obj 484 219 wavedisplay-simple bufamax \$0;
+#X msg 72 405 vasp bufamax;
+#X obj 72 451 vasp.update;
+#X obj 72 476 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 72 428 vasp.opt;
+#X text 173 402 or use vasp.opt which does the same;
+#X floatatom 128 272 5 0 0;
+#X msg 73 215 vasp bufamax;
+#X obj 73 238 vasp.amax?;
+#X text 166 216 find the absolute maximum of this soundfile;
+#X msg 73 305 vasp bufamax;
+#X obj 73 328 vasp./;
+#X obj 73 351 vasp.update;
+#X obj 73 376 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 171 271 -> current absolute maximum;
+#X obj 63 520 VASP-HELP;
+#X text 169 327 use it to optimize buffer content;
+#X connect 2 0 9 0;
+#X connect 9 0 1 0;
+#X connect 9 0 1 1;
+#X connect 10 0 4 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 15 0 13 0;
+#X connect 17 0 22 1;
+#X connect 18 0 19 0;
+#X connect 19 1 17 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qamin.pd b/externals/grill/vasp/pd-help/vasp_qamin.pd
new file mode 100644
index 00000000..6635dd85
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qamin.pd
@@ -0,0 +1,53 @@
+#N canvas 57 40 879 499 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.amin? 0 10 1 14 -262144
+-1 0;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 616 427 pd clear_buffer;
+#X text 72 58 min-value of the absolute values of a vasp;
+#X text 70 75 right outlet: calculated value;
+#X msg 616 404 vasp bufamin;
+#X msg 50 192 vasp bufamin;
+#X obj 50 215 vasp.amin?;
+#X floatatom 105 249 5 0 0;
+#X text 148 248 -> current absolute minimum;
+#X obj 48 429 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufamin 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 535 123 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufamin;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 772 429 pd init;
+#X obj 48 311 vasp.abs;
+#X msg 48 290 vasp bufamin;
+#X obj 48 332 vasp.u;
+#X obj 51 128 vasp.noise;
+#X msg 51 106 vasp bufamin;
+#X text 148 106 1 create random values;
+#X obj 51 149 vasp.u;
+#X text 150 193 2 find the absolute minimum of this soundfile;
+#X text 139 291 3 to control the result display the absolute values
+;
+#X text 55 387 related objects;
+#X obj 172 386 vasp.min;
+#X obj 246 386 vasp.min?;
+#X connect 4 0 1 0;
+#X connect 5 0 6 0;
+#X connect 6 1 7 0;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 15 0 18 0;
+#X connect 16 0 15 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qchannel.pd b/externals/grill/vasp/pd-help/vasp_qchannel.pd
new file mode 100644
index 00000000..8bb34876
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qchannel.pd
@@ -0,0 +1,10 @@
+#N canvas 35 145 460 376 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.channel? 0 10 1 14 -262144
+-1 0;
+#X text 58 212 related object;
+#X text 53 125 (MaxMSP version of vasp);
+#X obj 60 165 vasp.channel?;
+#X text 58 71 get channel index of 0th vector in vasp;
+#X text 55 107 only useful for interleaved stereo-files;
+#X obj 162 211 vasp.channel;
+#X obj 61 280 VASP-HELP;
diff --git a/externals/grill/vasp/pd-help/vasp_qframes.pd b/externals/grill/vasp/pd-help/vasp_qframes.pd
new file mode 100644
index 00000000..bfc0535c
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qframes.pd
@@ -0,0 +1,27 @@
+#N canvas 207 210 709 402 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.frames? 0 10 1 14 -262144
+-1 0;
+#X text 372 130 get the maximum vasp length of both buffers;
+#X floatatom 372 211 0 0 0;
+#X obj 372 181 vasp.frames?;
+#X floatatom 212 211 0 0 0;
+#X obj 212 181 vasp.frames?;
+#X text 212 130 get the buffer length;
+#X msg 372 155 vasp bufframq bufframq1;
+#X msg 212 155 vasp bufframq;
+#X obj 418 273 table bufframq 88200;
+#X obj 418 296 table bufframq1 44100;
+#X floatatom 45 210 0 0 0;
+#X obj 45 180 vasp.frames?;
+#X msg 45 154 vasp 400 bufframq 300;
+#X text 106 312 abbreviation;
+#X obj 49 312 vasp.f?;
+#X obj 41 357 VASP-HELP;
+#X text 44 64 get a vasp's frame count (length) in frames;
+#X text 45 129 get the vasp's length;
+#X connect 3 0 2 0;
+#X connect 5 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qmax.pd b/externals/grill/vasp/pd-help/vasp_qmax.pd
new file mode 100644
index 00000000..43226edc
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qmax.pd
@@ -0,0 +1,44 @@
+#N canvas 57 40 757 367 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.max? 0 10 1 14 -262144 -1
+0;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 468 280 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufqmax 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 339 115 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 43 symbol bufqmax;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 615 284 pd init;
+#X text 70 75 right outlet: max value;
+#X obj 73 144 vasp.osc 44100;
+#X obj 73 165 vasp.* 0.5;
+#X obj 73 186 vasp.update;
+#X msg 73 123 vasp bufqmax;
+#X text 68 58 get maximum sample value of a vasp;
+#X msg 468 257 vasp bufqmax;
+#X floatatom 124 285 5 0 0;
+#X msg 75 230 vasp bufqmax;
+#X obj 75 251 vasp.max?;
+#X text 167 282 >>>> maximum value;
+#X obj 64 339 VASP-HELP;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 8 0 5 0;
+#X connect 10 0 1 0;
+#X connect 12 0 13 0;
+#X connect 13 1 11 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qmin.pd b/externals/grill/vasp/pd-help/vasp_qmin.pd
new file mode 100644
index 00000000..f205f105
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qmin.pd
@@ -0,0 +1,44 @@
+#N canvas 57 40 817 436 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.min? 0 10 1 14 -262144 -1
+0;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 468 280 pd clear_buffer;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufqmin 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 339 115 graph;
+#N canvas 0 0 394 270 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufqmin;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 615 284 pd init;
+#X text 68 58 get minimum sample value of a vasp;
+#X text 70 75 right outlet: max value;
+#X msg 468 257 vasp bufqmin;
+#X msg 73 123 vasp bufqmin;
+#X obj 73 144 vasp.osc 44100;
+#X obj 73 165 vasp.* 0.5;
+#X obj 73 186 vasp.update;
+#X floatatom 124 285 5 0 0;
+#X obj 75 251 vasp.min?;
+#X msg 75 230 vasp bufqmin;
+#X text 167 282 >>>> minimum value;
+#X obj 56 344 VASP-HELP;
+#X connect 6 0 1 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 12 1 11 0;
+#X connect 13 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qoffset.pd b/externals/grill/vasp/pd-help/vasp_qoffset.pd
new file mode 100644
index 00000000..22c6575c
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qoffset.pd
@@ -0,0 +1,19 @@
+#N canvas 307 266 648 378 10;
+#X obj 44 28 cnv 15 15 15 empty empty vasp.offset? 0 10 1 14 -262144
+-1 0;
+#X text 42 59 get a single vectored vasp's offset;
+#X text 52 278 abbreviation;
+#X obj 150 278 vasp.o?;
+#X obj 411 295 table buffoffsetq 88200;
+#X floatatom 45 162 0 0 0;
+#X obj 45 131 vasp.offset?;
+#X msg 45 106 vasp 200 buffoffsetq 300;
+#X floatatom 226 163 0 0 0;
+#X obj 226 132 vasp.offset?;
+#X msg 226 107 vasp buffoffsetq 220 buffoffsetq 300;
+#X text 228 88 more than 1 vector. watch pd window!;
+#X obj 45 325 VASP-HELP;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qrmax.pd b/externals/grill/vasp/pd-help/vasp_qrmax.pd
new file mode 100644
index 00000000..3018e79b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qrmax.pd
@@ -0,0 +1,99 @@
+#N canvas 36 36 881 653 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.rmax? 0 10 1 14 -262144
+-1 0;
+#X obj 289 135 filelist \$0;
+#N canvas 92 108 410 375 inside 0;
+#X obj 63 217 soundfiler;
+#X obj 184 273 s \$0-sample-length;
+#X obj 63 271 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 63 49 loadbang;
+#X obj 63 161 filelisthandler \$0;
+#X msg 63 139 2;
+#X obj 214 228 s bufqrmax1;
+#X obj 225 250 s bufqrmax2;
+#X msg 63 193 read \$1 bufqrmax1;
+#X obj 63 76 t b b;
+#X msg 214 134 88200;
+#X obj 63 241 t b;
+#X connect 0 0 12 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 4 0 10 0;
+#X connect 5 0 9 0;
+#X connect 6 0 5 0;
+#X connect 9 0 0 0;
+#X connect 10 0 6 0;
+#X connect 10 1 11 0;
+#X connect 11 0 3 0;
+#X connect 11 0 1 0;
+#X connect 12 0 2 0;
+#X restore 719 546 pd inside;
+#X text 70 75 right outlet: calculated value;
+#X text 70 92 needs two vectors;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 520 545 pd clear_buffers;
+#X obj 373 544 dac~;
+#X obj 373 501 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 395 498 play;
+#X text 72 58 maximum value of the radius values of a complex vasp
+;
+#X obj 465 130 wavedisplay-simple bufqrmax1 \$0;
+#X obj 465 267 wavedisplay-simple bufqrmax2 \$0;
+#X msg 520 522 vasp bufqrmax1 bufqrmax2;
+#X obj 51 538 vasp.update;
+#X obj 51 558 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 53 162 vasp.cfft;
+#X obj 53 182 vasp.update;
+#X obj 53 202 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 53 142 vasp bufqrmax1 bufqrmax2;
+#X obj 53 432 vasp.update;
+#X obj 53 452 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 53 392 vasp bufqrmax1 bufqrmax2;
+#X obj 53 412 vasp.c!fft;
+#X text 49 482 or use vasp.ropt which does the same;
+#X msg 51 498 vasp bufqrmax1 bufqrmax2;
+#X obj 51 518 vasp.ropt;
+#X obj 373 521 tabplay~ bufqrmax1;
+#X floatatom 108 309 5 0 0;
+#X obj 53 327 vasp./;
+#X obj 53 347 vasp.update;
+#X obj 53 367 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 53 254 vasp.rmax?;
+#X text 150 308 -> current maximum;
+#X text 136 346 use it to optimise radius;
+#X msg 53 234 vasp bufqrmax1 bufqrmax2;
+#X msg 53 282 vasp bufqrmax1 bufqrmax2;
+#X obj 50 618 VASP-HELP;
+#X connect 7 0 26 0;
+#X connect 12 0 5 0;
+#X connect 13 0 14 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 18 0 15 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 22 0 19 0;
+#X connect 24 0 25 0;
+#X connect 25 0 13 0;
+#X connect 26 0 6 0;
+#X connect 26 0 6 1;
+#X connect 27 0 28 1;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 31 1 27 0;
+#X connect 34 0 31 0;
+#X connect 35 0 28 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qrmin.pd b/externals/grill/vasp/pd-help/vasp_qrmin.pd
new file mode 100644
index 00000000..6b3a6b96
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qrmin.pd
@@ -0,0 +1,59 @@
+#N canvas 57 40 879 562 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.rmin? 0 10 1 14 -262144
+-1 0;
+#X obj 70 140 filelist \$0;
+#N canvas 92 108 402 367 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 66 50 loadbang;
+#X obj 66 178 t b f f;
+#X obj 66 98 filelisthandler \$0;
+#X msg 66 130 read -resize \$1 bufqrmin1;
+#X obj 214 228 s bufqrmin1;
+#X obj 225 250 s bufqrmin2;
+#X msg 66 76 4;
+#X connect 0 0 5 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 10 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 0 0;
+#X connect 10 0 6 0;
+#X restore 678 426 pd inside;
+#X text 70 75 right outlet: calculated value;
+#X text 72 58 min-value of the radius values of a complex vasp;
+#X text 70 95 needs two vectors;
+#X obj 434 93 wavedisplay-simple bufqrmin1 \$0;
+#X obj 434 238 wavedisplay-simple bufqrmin2 \$0;
+#X obj 60 280 vasp.cfft;
+#X obj 60 302 vasp.update;
+#X obj 60 325 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 60 258 vasp bufqrmin1 bufqrmin2;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 436 422 pd clear_buffers;
+#X msg 436 399 vasp bufqrmin1 bufqrmin2;
+#X floatatom 110 417 12 0 0;
+#X text 112 435 -> current absolute minimum;
+#X obj 55 383 vasp.rmin?;
+#X msg 55 360 vasp bufqrmin1 bufqrmin2;
+#X obj 41 508 VASP-HELP;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 11 0 8 0;
+#X connect 13 0 12 0;
+#X connect 16 1 14 0;
+#X connect 17 0 16 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qsize.pd b/externals/grill/vasp/pd-help/vasp_qsize.pd
new file mode 100644
index 00000000..2ea1b884
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qsize.pd
@@ -0,0 +1,31 @@
+#N canvas 85 111 907 542 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.size? 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 408 284 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 2 5 \; \$1 xlabel 1.1 0 10 20 30 40 50
+\; \$1 yticks 0 0.25 2;
+#X msg 33 45 symbol bufqsize;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 714 408 pd init;
+#X text 119 374 abbreviation;
+#X obj 62 225 vasp.size 100;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufqsize 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 453 153 graph;
+#X floatatom 135 200 5 0 0;
+#X obj 175 417 vasp.frames;
+#X text 62 415 related objects:;
+#X msg 62 152 vasp bufqsize;
+#X obj 62 266 vasp.size?;
+#X floatatom 62 302 5 0 0;
+#X obj 63 374 vasp.s?;
+#X obj 256 417 vasp.size;
+#X obj 62 463 VASP-HELP;
+#X text 57 69 get the size of a referenced buffer/array;
+#X connect 3 0 9 0;
+#X connect 5 0 3 1;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qvector.pd b/externals/grill/vasp/pd-help/vasp_qvector.pd
new file mode 100644
index 00000000..67c681da
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qvector.pd
@@ -0,0 +1,13 @@
+#N canvas 257 69 511 284 10;
+#X text 52 66 get the number of vectors of a vasp;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.n? 0 10 1 14 -262144 -1
+0;
+#X obj 57 169 cnv 15 44 17 empty empty empty 20 12 0 14 -258699 -66577
+0;
+#X floatatom 57 218 0 0 0;
+#X obj 57 169 vasp.n?;
+#X msg 57 112 vasp bufqn1;
+#X msg 137 112 vasp bufqn1 bufqn2 bufqn3;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
diff --git a/externals/grill/vasp/pd-help/vasp_qvectors.pd b/externals/grill/vasp/pd-help/vasp_qvectors.pd
new file mode 100644
index 00000000..d4725441
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_qvectors.pd
@@ -0,0 +1,17 @@
+#N canvas 261 89 556 365 10;
+#X text 52 66 get the number of vectors of a vasp;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.n? 0 10 1 14 -262144 -1
+0;
+#X floatatom 57 218 0 0 0;
+#X obj 57 169 vasp.n?;
+#X msg 57 112 vasp bufqn1;
+#X msg 147 113 vasp bufqn1 bufqn2 bufqn3;
+#X obj 54 318 VASP-HELP;
+#X obj 438 86 table bufqn1;
+#X obj 438 107 table bufqn2;
+#X obj 438 128 table bufqn3;
+#X obj 151 277 vasp.n?;
+#X text 53 279 abbreviation:;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
diff --git a/externals/grill/vasp/pd-help/vasp_radd.pd b/externals/grill/vasp/pd-help/vasp_radd.pd
new file mode 100644
index 00000000..f28aebc8
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_radd.pd
@@ -0,0 +1,84 @@
+#N canvas 63 27 894 612 10;
+#N canvas 415 205 410 337 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 222 207 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 259 138 resize \$1;
+#X obj 259 91 loadbang;
+#X obj 67 53 loadbang;
+#X msg 259 112 88200;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 4;
+#X msg 67 133 read -resize \$1 bufradd1;
+#X obj 259 160 s bufradd1;
+#X obj 269 183 s bufradd2;
+#X obj 66 178 t b;
+#X connect 0 0 12 0;
+#X connect 3 0 10 0;
+#X connect 3 0 11 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 0 0;
+#X connect 12 0 2 0;
+#X restore 772 512 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.r+ 0 10 1 14 -262144 -1
+0;
+#X obj 73 134 filelist \$0;
+#X obj 65 512 vasp.update;
+#X obj 65 535 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 65 489 vasp.c!fft;
+#X obj 65 260 vasp.cfft;
+#X obj 65 281 vasp.update;
+#X obj 65 302 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 343 514 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 477 514 pd clear_buffers;
+#X obj 343 471 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 365 468 play;
+#X text 477 469 clear;
+#X text 71 53 add avalue to a radius;
+#X text 71 65 argument/right inlet: value (offset);
+#X text 72 82 needs two vectors;
+#X obj 522 272 wavedisplay-simple bufradd2 \$0;
+#X obj 521 116 wavedisplay-simple bufradd1 \$0;
+#X msg 65 239 vasp bufradd1 bufradd2;
+#X msg 65 465 vasp bufradd1 bufradd2;
+#X obj 343 491 tabplay~ bufradd1;
+#X msg 477 491 vasp bufradd1 bufradd2;
+#X obj 65 405 vasp.update;
+#X obj 65 426 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 65 325 vasp bufradd1 bufradd2;
+#X obj 65 379 vasp.r+ 0.05;
+#X floatatom 132 352 5 0 0;
+#X text 183 350 value;
+#X obj 59 579 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 11 0 21 0;
+#X connect 19 0 6 0;
+#X connect 20 0 5 0;
+#X connect 21 0 9 0;
+#X connect 21 0 9 1;
+#X connect 22 0 10 0;
+#X connect 23 0 24 0;
+#X connect 25 0 26 0;
+#X connect 26 0 23 0;
+#X connect 27 0 26 1;
diff --git a/externals/grill/vasp/pd-help/vasp_radio.pd b/externals/grill/vasp/pd-help/vasp_radio.pd
new file mode 100644
index 00000000..0f26c220
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_radio.pd
@@ -0,0 +1,28 @@
+#N canvas 128 36 361 454 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.radio 0 10 1 14 -262144
+-1 0;
+#X obj 66 406 VASP-HELP;
+#X text 71 63 filters radio messages;
+#X floatatom 208 126 5 0 0;
+#X msg 208 146 vasp buf;
+#X msg 51 126 radio prior 1;
+#X msg 208 172 env 0 1 2;
+#X msg 208 195 5 5;
+#X obj 74 267 vasp.radio;
+#X msg 51 150 radio loglvl 3;
+#X obj 74 298 prepend set;
+#X obj 177 300 prepend set;
+#X text 73 350 radio;
+#X text 177 351 other;
+#X msg 74 323;
+#X msg 177 327;
+#X connect 3 0 8 0;
+#X connect 4 0 8 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 8 0 10 0;
+#X connect 8 1 11 0;
+#X connect 9 0 8 0;
+#X connect 10 0 14 0;
+#X connect 11 0 15 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rect.pd b/externals/grill/vasp/pd-help/vasp_rect.pd
new file mode 100644
index 00000000..77f74d9f
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rect.pd
@@ -0,0 +1,87 @@
+#N canvas 15 40 916 673 10;
+#N canvas 92 108 375 293 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 184 208 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 221 138 resize \$1;
+#X obj 221 91 loadbang;
+#X obj 67 53 loadbang;
+#X msg 221 112 88200;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 4;
+#X obj 221 160 s bufrect1;
+#X obj 231 184 s bufrect2;
+#X msg 67 133 read \$1 bufrect1;
+#X obj 66 178 t b;
+#X connect 0 0 12 0;
+#X connect 3 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 11 0 0 0;
+#X connect 12 0 2 0;
+#X restore 777 531 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.rect 0 10 1 14 -262144 -1
+0;
+#X obj 72 91 filelist \$0;
+#X obj 59 327 vasp.update;
+#X obj 59 347 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 59 220 vasp.cfft;
+#X obj 59 240 vasp.update;
+#X obj 59 260 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 205 573 <-- click to open;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 567 527 pd clear_buffers;
+#X text 567 482 clear;
+#X obj 59 306 vasp.polar;
+#X text 229 283 real/imaginary -> amplitude/phase;
+#X obj 59 573 phase-random_example;
+#X text 71 53 polar to cartesian coordinate conversion;
+#X obj 512 116 wavedisplay-simple bufrect1 \$0;
+#X obj 514 261 wavedisplay-simple bufrect2 \$0;
+#X text 738 94 real/amplitude;
+#X text 729 240 imaginary/phase;
+#X msg 59 200 vasp bufrect1 bufrect2;
+#X text 230 201 transform with cfft to real/imaginary;
+#X obj 59 418 vasp.update;
+#X obj 59 438 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 59 496 vasp.cfft;
+#X obj 59 516 vasp.update;
+#X obj 59 536 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 476 vasp bufrect1 bufrect2;
+#X obj 59 397 vasp.rect;
+#X text 223 374 amplitude/phase -> real/imaginary;
+#X text 231 477 transform with inverse cfft to time domain;
+#X msg 567 504 vasp bufrect1 bufrect2;
+#X msg 59 285 vasp bufrect1 bufrect2;
+#X msg 59 376 vasp bufrect1 bufrect2;
+#X obj 58 622 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 11 0 3 0;
+#X connect 19 0 5 0;
+#X connect 21 0 22 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 26 0 23 0;
+#X connect 27 0 21 0;
+#X connect 30 0 9 0;
+#X connect 31 0 11 0;
+#X connect 32 0 27 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rfft.pd b/externals/grill/vasp/pd-help/vasp_rfft.pd
new file mode 100644
index 00000000..d7bbb31f
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rfft.pd
@@ -0,0 +1,74 @@
+#N canvas 24 75 893 495 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.rfft 0 10 1 14 -262144 -1
+0;
+#N canvas 92 108 371 312 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 180 207 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 234 164 resize \$1;
+#X obj 234 117 loadbang;
+#X obj 67 53 loadbang;
+#X msg 234 138 88200;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 3;
+#X obj 234 186 s bufrfft;
+#X msg 67 133 read \$1 bufrfft;
+#X obj 66 178 t b;
+#X connect 0 0 11 0;
+#X connect 3 0 9 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 10 0;
+#X connect 8 0 7 0;
+#X connect 10 0 0 0;
+#X connect 11 0 2 0;
+#X restore 761 385 pd inside;
+#X obj 329 388 dac~;
+#X obj 329 345 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 351 342 play;
+#X text 463 343 clear;
+#X obj 69 121 filelist \$0;
+#X msg 463 365 vasp bufrfft;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 463 388 pd clear_buffer;
+#X obj 329 365 tabplay~ bufrfft;
+#X obj 519 137 wavedisplay-simple bufrfft \$0;
+#X text 157 345 inverse real fft;
+#X obj 68 371 vasp.update;
+#X obj 68 394 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 68 320 vasp bufrfft;
+#X obj 68 345 vasp.r!fft;
+#X text 71 60 real fft;
+#X text 72 73 in opposite to cfft there is only one real input buffer
+;
+#X text 73 86 imaginary part of the fft is assumed to be zero;
+#X text 157 239 real fft;
+#X obj 68 265 vasp.update;
+#X obj 68 288 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 68 214 vasp bufrfft;
+#X obj 68 239 vasp.rfft;
+#X obj 61 456 VASP-HELP;
+#X text 103 456 - vasp overview;
+#X connect 3 0 9 0;
+#X connect 7 0 8 0;
+#X connect 9 0 2 0;
+#X connect 9 0 2 1;
+#X connect 12 0 13 0;
+#X connect 14 0 15 0;
+#X connect 15 0 12 0;
+#X connect 20 0 21 0;
+#X connect 22 0 23 0;
+#X connect 23 0 20 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rframes.pd b/externals/grill/vasp/pd-help/vasp_rframes.pd
new file mode 100644
index 00000000..f20ada29
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rframes.pd
@@ -0,0 +1,63 @@
+#N canvas 80 119 908 535 10;
+#X obj 62 323 vasp.osc 22050;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.frames/ 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufrfram1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 149 graph;
+#N canvas 0 0 404 280 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufrfram1;
+#X msg 140 45 symbol bufrfram2;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X restore 813 459 pd init;
+#X obj 62 355 vasp.update;
+#X text 117 412 abbreviation;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufrfram2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 530 268 graph;
+#X text 54 103 !!!all vectors of a vasp have the same framesize/length!!!
+;
+#X obj 77 274 prepend set;
+#X obj 233 323 vasp.osc 22050;
+#X obj 233 355 vasp.update;
+#X text 58 83 argument/right inlet: value;
+#X obj 62 187 vasp.-> bufrfram2;
+#X msg 77 297 vasp 66150 bufrfram1 0 0;
+#X obj 255 271 prepend set;
+#X msg 255 294 vasp 33075 bufrfram2 0 0;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 528 439 pd clear_buffer;
+#X msg 528 418 vasp bufrfram1 bufrfram2;
+#X obj 161 453 vasp.frames;
+#X text 53 454 related objects:;
+#X obj 243 453 vasp.frames+;
+#X text 59 66 divide the number of frames of a vasp by a value;
+#X msg 62 153 vasp 66150 bufrfram1;
+#X obj 233 239 vasp.frames/ 2;
+#X obj 61 411 vasp.f/;
+#X obj 59 495 VASP-HELP;
+#X connect 0 0 4 0;
+#X connect 8 0 13 0;
+#X connect 9 0 10 0;
+#X connect 12 0 8 0;
+#X connect 12 0 0 0;
+#X connect 12 1 23 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 22 0 12 0;
+#X connect 23 0 14 0;
+#X connect 23 0 9 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rgate.pd b/externals/grill/vasp/pd-help/vasp_rgate.pd
new file mode 100644
index 00000000..cee131b5
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rgate.pd
@@ -0,0 +1,86 @@
+#N canvas 36 36 808 624 10;
+#X obj 72 26 cnv 15 15 15 empty empty vasp.rgate 0 10 1 14 -262144
+-1 0;
+#X obj 76 157 filelist \$0;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 481 518 pd clear_buffers;
+#X obj 63 291 vasp.update;
+#X obj 63 311 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 401 162 wavedisplay-simple bufrgate1 \$0;
+#X obj 402 319 wavedisplay-simple bufrgate2 \$0;
+#X msg 63 251 vasp bufrgate1 bufrgate2;
+#X obj 63 271 vasp.cfft;
+#X obj 63 504 vasp.update;
+#X obj 63 524 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 63 464 vasp bufrgate1 bufrgate2;
+#X obj 63 484 vasp.c!fft;
+#X obj 296 518 dac~;
+#X obj 296 480 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 317 483 play;
+#X obj 296 498 tabplay~ bufrgate1;
+#X msg 481 498 vasp bufrgate1 bufrgate2;
+#X text 71 49 gate the radius of a complex buffer content with a value
+;
+#X text 72 96 needs two buffers (real/imaginary);
+#X text 71 66 argument/right inlet: value (usually from 0-1) to gate
+the radius;
+#N canvas 384 183 438 403 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 184 290 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 214 221 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 113 filelisthandler \$0;
+#X obj 214 243 s bufrgate1;
+#X obj 225 264 s bufrgate2;
+#X msg 66 91 2;
+#X msg 95 91 88200;
+#X obj 66 68 t b b;
+#X msg 66 145 read \$1 bufrgate1;
+#X obj 66 193 t b;
+#X connect 0 0 12 0;
+#X connect 3 0 6 0;
+#X connect 3 0 7 0;
+#X connect 3 0 1 0;
+#X connect 4 0 10 0;
+#X connect 5 0 11 0;
+#X connect 8 0 5 0;
+#X connect 9 0 3 0;
+#X connect 10 0 8 0;
+#X connect 10 1 9 0;
+#X connect 11 0 0 0;
+#X connect 12 0 2 0;
+#X restore 670 518 pd inside;
+#X obj 63 413 vasp.update;
+#X obj 63 433 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 63 329 vasp bufrgate1 bufrgate2;
+#X obj 63 393 vasp.rgate 0.2;
+#X floatatom 142 367 5 0 0;
+#X text 192 366 value;
+#X obj 56 582 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
+#X connect 11 0 12 0;
+#X connect 12 0 9 0;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
+#X connect 16 0 13 1;
+#X connect 17 0 2 0;
+#X connect 22 0 23 0;
+#X connect 24 0 25 0;
+#X connect 25 0 22 0;
+#X connect 26 0 25 1;
diff --git a/externals/grill/vasp/pd-help/vasp_rifft.pd b/externals/grill/vasp/pd-help/vasp_rifft.pd
new file mode 100644
index 00000000..037981a2
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rifft.pd
@@ -0,0 +1,75 @@
+#N canvas 24 75 823 495 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.r!fft 0 10 1 14 -262144
+-1 0;
+#N canvas 92 108 373 314 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 187 209 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 235 166 resize \$1;
+#X obj 235 119 loadbang;
+#X obj 67 53 loadbang;
+#X msg 235 140 88200;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 4;
+#X msg 67 133 read \$1 bufrifft;
+#X obj 235 188 s bufrifft;
+#X obj 66 178 t b;
+#X connect 0 0 11 0;
+#X connect 3 0 10 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 0 0;
+#X connect 11 0 2 0;
+#X restore 627 390 pd inside;
+#X obj 329 388 dac~;
+#X obj 329 345 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 351 342 play;
+#X text 463 343 clear;
+#X obj 69 121 filelist \$0;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 463 388 pd clear_buffer;
+#X text 157 239 real fft;
+#X obj 68 265 vasp.update;
+#X obj 68 288 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 68 238 vasp.rfft;
+#X text 72 73 in opposite to cfft there is only one real input buffer
+;
+#X text 73 86 imaginary part of the fft is assumed to be zero;
+#X text 71 60 inverse real fft;
+#X msg 463 365 vasp bufrifft;
+#X obj 329 365 tabplay~ bufrifft;
+#X msg 68 214 vasp bufrifft;
+#X obj 372 144 wavedisplay-simple bufrifft \$0;
+#X text 645 127 source;
+#X text 157 345 inverse real fft;
+#X obj 68 371 vasp.update;
+#X obj 68 394 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 68 345 vasp.r!fft;
+#X msg 68 320 vasp bufrifft;
+#X obj 61 461 VASP-HELP;
+#X text 103 461 - vasp overview;
+#X connect 3 0 16 0;
+#X connect 9 0 10 0;
+#X connect 11 0 9 0;
+#X connect 15 0 7 0;
+#X connect 16 0 2 0;
+#X connect 16 0 2 1;
+#X connect 17 0 11 0;
+#X connect 21 0 22 0;
+#X connect 23 0 21 0;
+#X connect 24 0 23 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rmax.pd b/externals/grill/vasp/pd-help/vasp_rmax.pd
new file mode 100644
index 00000000..6a05cd58
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rmax.pd
@@ -0,0 +1,81 @@
+#N canvas 36 36 881 625 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.rmax 0 10 1 14 -262144 -1
+0;
+#X obj 71 131 filelist \$0;
+#N canvas 92 108 410 375 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 177 275 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 66 50 loadbang;
+#X obj 66 98 filelisthandler \$0;
+#X msg 66 76 2;
+#X msg 214 146 88200;
+#X msg 66 130 read \$1 bufrmax1;
+#X obj 214 228 s bufrmax1;
+#X obj 225 250 s bufrmax2;
+#X obj 66 178 t b;
+#X connect 0 0 11 0;
+#X connect 3 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 7 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 7 0 1 0;
+#X connect 8 0 0 0;
+#X connect 11 0 2 0;
+#X restore 700 501 pd inside;
+#X text 70 92 needs two vectors;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 501 500 pd clear_buffers;
+#X obj 354 499 dac~;
+#X obj 354 456 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 376 453 play;
+#X obj 60 252 vasp.cfft;
+#X obj 60 272 vasp.update;
+#X obj 60 484 vasp.update;
+#X obj 60 504 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 60 464 vasp.c!fft;
+#X text 72 58 set radius to a maximum value;
+#X text 70 75 argument/right inlet: value;
+#X msg 60 232 vasp bufrmax1 bufrmax2;
+#X obj 448 136 wavedisplay-simple bufrmax1 \$0;
+#X obj 449 281 wavedisplay-simple bufrmax2 \$0;
+#X msg 60 444 vasp bufrmax1 bufrmax2;
+#X obj 354 476 tabplay~ bufrmax1;
+#X msg 501 477 vasp bufrmax1 bufrmax2;
+#X obj 60 292 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 60 324 vasp bufrmax1 bufrmax2;
+#X obj 60 391 vasp.update;
+#X obj 60 371 vasp.rmax 0.2;
+#X floatatom 133 348 5 0 0;
+#X obj 60 411 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 50 564 VASP-HELP;
+#X connect 6 0 19 0;
+#X connect 8 0 9 0;
+#X connect 9 0 21 0;
+#X connect 10 0 11 0;
+#X connect 12 0 10 0;
+#X connect 15 0 8 0;
+#X connect 18 0 12 0;
+#X connect 19 0 5 0;
+#X connect 19 0 5 1;
+#X connect 20 0 4 0;
+#X connect 22 0 24 0;
+#X connect 23 0 26 0;
+#X connect 24 0 23 0;
+#X connect 25 0 24 1;
diff --git a/externals/grill/vasp/pd-help/vasp_rmin.pd b/externals/grill/vasp/pd-help/vasp_rmin.pd
new file mode 100644
index 00000000..6eb7fc75
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rmin.pd
@@ -0,0 +1,84 @@
+#N canvas 36 36 802 593 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.rmin 0 10 1 14 -262144 -1
+0;
+#X obj 71 131 filelist \$0;
+#N canvas 92 108 416 329 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 179 223 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 214 153 resize \$1;
+#X obj 66 38 loadbang;
+#X obj 66 113 filelisthandler \$0;
+#X msg 66 91 2;
+#X msg 214 95 88200;
+#X obj 214 175 s bufrmin1;
+#X obj 225 196 s bufrmin2;
+#X msg 66 145 read \$1 bufrmin1;
+#X obj 66 63 t b b;
+#X obj 66 193 t b;
+#X connect 0 0 12 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 11 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 7 0 1 0;
+#X connect 10 0 0 0;
+#X connect 11 0 6 0;
+#X connect 11 1 7 0;
+#X connect 12 0 2 0;
+#X restore 640 502 pd inside;
+#X text 71 83 needs two vectors;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 480 500 pd clear_buffers;
+#X obj 334 499 dac~;
+#X obj 334 461 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 355 459 play;
+#X obj 60 252 vasp.cfft;
+#X obj 60 272 vasp.update;
+#X obj 60 484 vasp.update;
+#X obj 60 504 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 60 464 vasp.c!fft;
+#X text 71 66 argument/right inlet: value;
+#X obj 60 292 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 71 49 set radius to a minimum value;
+#X msg 60 232 vasp bufrmin1 bufrmin2;
+#X msg 60 444 vasp bufrmin1 bufrmin2;
+#X obj 374 257 wavedisplay-simple bufrmin2 \$0;
+#X obj 334 479 tabplay~ bufrmin1;
+#X msg 480 480 vasp bufrmin1 bufrmin2;
+#X obj 374 119 wavedisplay-simple bufrmin1 \$0;
+#X obj 60 391 vasp.update;
+#X floatatom 139 352 5 0 0;
+#X obj 60 411 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 60 324 vasp bufrmin1 bufrmin2;
+#X obj 60 371 vasp.rmin 0.05;
+#X obj 55 559 VASP-HELP;
+#X text 97 559 - vasp overview;
+#X connect 6 0 19 0;
+#X connect 8 0 9 0;
+#X connect 9 0 14 0;
+#X connect 10 0 11 0;
+#X connect 12 0 10 0;
+#X connect 16 0 8 0;
+#X connect 17 0 12 0;
+#X connect 19 0 5 0;
+#X connect 19 0 5 1;
+#X connect 20 0 4 0;
+#X connect 22 0 24 0;
+#X connect 23 0 26 1;
+#X connect 25 0 26 0;
+#X connect 26 0 22 0;
diff --git a/externals/grill/vasp/pd-help/vasp_ropt.pd b/externals/grill/vasp/pd-help/vasp_ropt.pd
new file mode 100644
index 00000000..c1975b8e
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_ropt.pd
@@ -0,0 +1,86 @@
+#N canvas 36 36 806 598 10;
+#X obj 72 26 cnv 15 15 15 empty empty vasp.ropt 0 10 1 14 -262144 -1
+0;
+#X obj 76 131 filelist \$0;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 507 536 pd clear_buffers;
+#X obj 63 291 vasp.update;
+#X obj 63 311 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 442 164 wavedisplay-simple bufropt1 \$0;
+#X obj 443 321 wavedisplay-simple bufropt2 \$0;
+#X msg 63 251 vasp bufropt1 bufropt2;
+#X obj 63 271 vasp.cfft;
+#X obj 63 504 vasp.update;
+#X obj 63 524 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 63 464 vasp bufropt1 bufropt2;
+#X obj 63 484 vasp.c!fft;
+#X obj 344 538 dac~;
+#X obj 344 500 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 365 503 play;
+#X obj 344 518 tabplay~ bufropt1;
+#X msg 507 516 vasp bufropt1 bufropt2;
+#N canvas 92 108 436 386 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 84 253 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 214 221 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 193 t b f f;
+#X obj 66 113 filelisthandler \$0;
+#X obj 214 243 s bufropt1;
+#X obj 225 264 s bufropt2;
+#X msg 95 91 88200;
+#X obj 66 68 t b b;
+#X msg 66 145 read \$1 bufropt1;
+#X msg 66 91 3;
+#X connect 0 0 5 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 4 0 10 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 11 0;
+#X connect 9 0 5 0;
+#X connect 10 0 12 0;
+#X connect 10 1 9 0;
+#X connect 11 0 0 0;
+#X connect 12 0 6 0;
+#X restore 696 536 pd inside;
+#X text 71 49 optimise the radius of a complex buffer content;
+#X text 71 66 right outlet: the previous maximum;
+#X text 72 84 needs two vectors;
+#X text 227 345 optimise;
+#X text 224 251 transform to frequency domain;
+#X text 224 462 transform to time domain;
+#X obj 63 393 vasp.update;
+#X obj 63 413 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 63 346 vasp bufropt1 bufropt2;
+#X obj 63 373 vasp.ropt 0.2;
+#X obj 51 569 VASP-HELP;
+#X text 93 569 - vasp overview;
+#X connect 3 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
+#X connect 11 0 12 0;
+#X connect 12 0 9 0;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
+#X connect 16 0 13 1;
+#X connect 17 0 2 0;
+#X connect 25 0 26 0;
+#X connect 27 0 28 0;
+#X connect 28 0 25 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rot.pd b/externals/grill/vasp/pd-help/vasp_rot.pd
new file mode 100644
index 00000000..b7aaec0f
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rot.pd
@@ -0,0 +1,48 @@
+#N canvas 24 75 850 525 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.rot 0 10 1 14 -262144 -1
+0;
+#X text 463 343 clear;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 463 388 pd clear_buffer;
+#X text 72 73 optional argument/right inlet: value;
+#X text 71 60 rotate buffer content;
+#X msg 463 365 vasp bufrot;
+#X obj 68 333 vasp.update;
+#X floatatom 123 280 0 0 0;
+#X msg 68 246 vasp bufrot;
+#X obj 59 467 VASP-HELP;
+#X obj 72 192 vasp.u;
+#X obj 72 170 vasp.= env 0 0 1 20 -1 100;
+#X obj 180 427 vasp.shift;
+#X obj 260 427 vasp.xrot;
+#X text 55 426 related objects:;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufrot 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 443 130 graph;
+#N canvas 0 0 398 274 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufrot;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 698 395 pd init;
+#X msg 72 145 vasp bufrot;
+#X obj 68 305 vasp.rot 7;
+#X text 193 139 1 create envelope;
+#X text 193 245 2 rotate buffer content;
+#X connect 5 0 2 0;
+#X connect 7 0 18 1;
+#X connect 8 0 18 0;
+#X connect 11 0 10 0;
+#X connect 17 0 11 0;
+#X connect 18 0 6 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rpeaks.pd b/externals/grill/vasp/pd-help/vasp_rpeaks.pd
new file mode 100644
index 00000000..5891e6d1
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rpeaks.pd
@@ -0,0 +1,94 @@
+#N canvas 36 36 814 590 10;
+#X obj 72 26 cnv 15 15 15 empty empty vasp.rpeaks 0 10 1 14 -262144
+-1 0;
+#X obj 76 131 filelist \$0;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 500 505 pd clear_buffers;
+#X obj 65 264 vasp.update;
+#X obj 65 284 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 411 132 wavedisplay-simple bufrpeaks1 \$0;
+#X obj 412 289 wavedisplay-simple bufrpeaks2 \$0;
+#X msg 65 224 vasp bufrpeaks1 bufrpeaks2;
+#X obj 65 244 vasp.cfft;
+#X obj 65 510 vasp.update;
+#X obj 65 530 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 65 426 vasp bufrpeaks1 bufrpeaks2;
+#X obj 65 446 vasp.c!fft;
+#X obj 337 507 dac~;
+#X obj 337 469 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 358 472 play;
+#X obj 337 487 tabplay~ bufrpeaks1;
+#X msg 500 485 vasp bufrpeaks1 bufrpeaks2;
+#N canvas 92 108 442 392 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 135 260 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 247 217 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 113 filelisthandler \$0;
+#X obj 247 239 s bufrpeaks1;
+#X obj 258 260 s bufrpeaks2;
+#X msg 247 183 88200;
+#X obj 66 68 t b b;
+#X msg 66 145 read \$1 bufrpeaks1;
+#X obj 66 193 t b;
+#X msg 66 91 2;
+#X connect 0 0 11 0;
+#X connect 3 0 6 0;
+#X connect 3 0 7 0;
+#X connect 4 0 9 0;
+#X connect 5 0 10 0;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X connect 9 0 12 0;
+#X connect 9 1 8 0;
+#X connect 10 0 0 0;
+#X connect 11 0 2 0;
+#X connect 12 0 5 0;
+#X restore 689 505 pd inside;
+#X text 71 65 argument/right inlet: density (0-1);
+#X text 72 97 needs two vectors (real and imaginary);
+#X obj 65 467 vasp.opt;
+#X obj 65 489 vasp.* 0.5;
+#X text 71 49 find radius peaks of a complex vasp;
+#X text 71 81 right outlet: current peaks density;
+#X obj 65 374 vasp.update;
+#X obj 65 394 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 65 308 vasp bufrpeaks1 bufrpeaks2;
+#X floatatom 156 331 5 0 0;
+#X floatatom 156 398 12 0 0;
+#X obj 65 354 vasp.rpeaks 0.05;
+#X text 206 329 density;
+#X obj 156 376 * 88200;
+#X text 242 396 current peaks;
+#X obj 46 559 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
+#X connect 11 0 12 0;
+#X connect 12 0 21 0;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
+#X connect 16 0 13 1;
+#X connect 17 0 2 0;
+#X connect 21 0 22 0;
+#X connect 22 0 9 0;
+#X connect 25 0 26 0;
+#X connect 27 0 30 0;
+#X connect 28 0 30 1;
+#X connect 30 0 25 0;
+#X connect 30 1 32 0;
+#X connect 32 0 29 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rpow.pd b/externals/grill/vasp/pd-help/vasp_rpow.pd
new file mode 100644
index 00000000..cbfb4bc6
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rpow.pd
@@ -0,0 +1,83 @@
+#N canvas 28 51 932 647 10;
+#N canvas 92 108 417 419 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 67 53 loadbang;
+#X obj 66 178 t b f f;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 79 1;
+#X msg 67 133 read -resize \$1 bufrpow1;
+#X obj 214 228 s bufrpow1;
+#X obj 224 252 s bufrpow2;
+#X connect 0 0 5 0;
+#X connect 3 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 0 0;
+#X restore 685 477 pd inside;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.rpow 0 10 1 14 -262144 -1
+0;
+#X obj 77 139 filelist \$0;
+#X obj 59 508 vasp.update;
+#X obj 59 528 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 59 487 vasp.c!fft;
+#X obj 59 264 vasp.cfft;
+#X obj 59 284 vasp.update;
+#X obj 59 304 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 352 474 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 486 474 pd clear_buffers;
+#X obj 352 431 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 374 428 play;
+#X text 486 429 clear;
+#X text 73 60 radius ^ x;
+#X text 73 75 power function for the radius values of a complex vasp
+;
+#X text 73 92 argument/right inlet: exponent;
+#X text 73 107 needs two vectors;
+#X msg 59 244 vasp bufrpow1 bufrpow2;
+#X msg 59 467 vasp bufrpow1 bufrpow2;
+#X obj 364 130 wavedisplay-simple bufrpow1 \$0;
+#X obj 365 276 wavedisplay-simple bufrpow2 \$0;
+#X obj 352 451 tabplay~ bufrpow1;
+#X msg 486 451 vasp bufrpow1 bufrpow2;
+#X obj 59 413 vasp.update;
+#X obj 59 433 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 59 339 vasp bufrpow1 bufrpow2;
+#X obj 59 393 vasp.rpow 2;
+#X floatatom 120 366 5 0 0 0 - - -;
+#X text 170 363 exponent;
+#X obj 51 591 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 11 0 22 0;
+#X connect 18 0 6 0;
+#X connect 19 0 5 0;
+#X connect 22 0 9 0;
+#X connect 22 0 9 1;
+#X connect 23 0 10 0;
+#X connect 24 0 25 0;
+#X connect 26 0 27 0;
+#X connect 27 0 24 0;
+#X connect 28 0 27 1;
diff --git a/externals/grill/vasp/pd-help/vasp_rsize.pd b/externals/grill/vasp/pd-help/vasp_rsize.pd
new file mode 100644
index 00000000..ad7d8da3
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rsize.pd
@@ -0,0 +1,37 @@
+#N canvas 85 111 909 544 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.size/ 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 410 286 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 2 5 \; \$1 xlabel 1.1 0 10 20 30 40 50
+\; \$1 yticks 0 0.25 2;
+#X msg 33 45 symbol bufrsize;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 714 408 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufrsize 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 453 152 graph;
+#X obj 175 416 vasp.frames;
+#X text 62 415 related objects:;
+#X floatatom 120 319 5 0 0;
+#X obj 256 416 vasp.size;
+#X obj 256 374 vasp.s/;
+#X msg 62 152 vasp bufrsize;
+#X msg 177 152 vasp bufrsize;
+#X obj 62 217 vasp.size* 2;
+#X obj 177 217 vasp.size/ 2;
+#X obj 193 31 cnv 15 15 15 empty empty vasp.size* 0 10 1 14 -262144
+-1 0;
+#X text 57 69 divide and multiplicate the size of a buffer/array;
+#X text 59 371 abbreviations:;
+#X obj 175 375 vasp.s*;
+#X obj 120 289 vasp.size?;
+#X obj 331 416 vasp.size?;
+#X obj 62 463 VASP-HELP;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 16 0;
+#X connect 11 0 16 0;
+#X connect 16 0 5 0;
diff --git a/externals/grill/vasp/pd-help/vasp_rvalleys.pd b/externals/grill/vasp/pd-help/vasp_rvalleys.pd
new file mode 100644
index 00000000..20170c20
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_rvalleys.pd
@@ -0,0 +1,91 @@
+#N canvas 36 36 837 642 10;
+#X obj 72 26 cnv 15 15 15 empty empty vasp.rval 0 10 1 14 -262144 -1
+0;
+#X obj 76 131 filelist \$0;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 500 505 pd clear_buffers;
+#X obj 65 263 vasp.update;
+#X obj 65 283 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 411 132 wavedisplay-simple bufrval1 \$0;
+#X obj 412 289 wavedisplay-simple bufrval2 \$0;
+#X msg 65 223 vasp bufrval1 bufrval2;
+#X obj 65 243 vasp.cfft;
+#X obj 65 510 vasp.update;
+#X obj 65 530 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 65 426 vasp bufrval1 bufrval2;
+#X obj 65 446 vasp.c!fft;
+#X obj 337 507 dac~;
+#X obj 337 469 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 358 472 play;
+#X obj 337 487 tabplay~ bufrval1;
+#X msg 500 485 vasp bufrval1 bufrval2;
+#N canvas 92 108 440 390 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 135 260 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 247 217 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 113 filelisthandler \$0;
+#X obj 247 239 s bufrval1;
+#X obj 258 260 s bufrval2;
+#X msg 247 183 88200;
+#X obj 66 68 t b b;
+#X msg 66 145 read \$1 bufrval1;
+#X msg 66 91 3;
+#X obj 66 193 t b;
+#X connect 0 0 12 0;
+#X connect 3 0 6 0;
+#X connect 3 0 7 0;
+#X connect 4 0 9 0;
+#X connect 5 0 10 0;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X connect 9 0 11 0;
+#X connect 9 1 8 0;
+#X connect 10 0 0 0;
+#X connect 11 0 5 0;
+#X connect 12 0 2 0;
+#X restore 689 505 pd inside;
+#X text 71 49 find radius valleys of a complex vasp;
+#X text 71 65 argument/right inlet: density (0-1);
+#X text 72 97 needs two vectors (real and imaginary);
+#X obj 65 467 vasp.opt;
+#X obj 65 489 vasp.* 0.5;
+#X text 71 81 right outlet: the current density;
+#X obj 65 382 vasp.update;
+#X obj 65 402 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 65 308 vasp bufrval1 bufrval2;
+#X floatatom 168 342 5 0 0;
+#X floatatom 168 383 12 0 0;
+#X text 257 382 current density;
+#X obj 65 362 vasp.rvalleys 0.05;
+#X obj 54 595 VASP-HELP;
+#X connect 3 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
+#X connect 11 0 12 0;
+#X connect 12 0 22 0;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
+#X connect 16 0 13 1;
+#X connect 17 0 2 0;
+#X connect 22 0 23 0;
+#X connect 23 0 9 0;
+#X connect 25 0 26 0;
+#X connect 27 0 31 0;
+#X connect 28 0 31 1;
+#X connect 31 0 25 0;
+#X connect 31 1 29 0;
diff --git a/externals/grill/vasp/pd-help/vasp_set.pd b/externals/grill/vasp/pd-help/vasp_set.pd
new file mode 100644
index 00000000..161b4774
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_set.pd
@@ -0,0 +1,90 @@
+#N canvas 21 60 881 576 10;
+#X obj 61 33 cnv 15 15 15 empty empty vasp.= 0 10 1 14 -262144 -1 0
+;
+#X text 56 66 set a vasp to a value;
+#X text 55 81 optional argument/right inlet: value/vasp;
+#X msg 56 166 vasp bufset;
+#X obj 56 188 vasp.noise;
+#X obj 56 211 vasp.* 0.5;
+#X text 142 164 generate noise;
+#X obj 56 232 vasp.update;
+#X obj 56 254 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 56 385 vasp.= 0;
+#X obj 112 342 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 56 406 vasp.update;
+#X obj 56 426 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X text 446 103 select a region by drawing inside the wavedisplay:
+mouse+spacebar (select) or mouse+"s" (shift).;
+#N canvas 109 162 310 376 tovaspdata 0;
+#X obj 107 305 outlet;
+#X obj 107 92 unpack;
+#X obj 107 232 runden;
+#X obj 107 210 - 0;
+#X text 191 251 offset;
+#X obj 107 156 t b f;
+#X obj 107 185 0;
+#X text 111 250 length;
+#X obj 188 233 runden;
+#X obj 107 274 pack;
+#X obj 107 72 change2;
+#X obj 107 115 t f f;
+#X obj 107 47 inlet;
+#X connect 1 0 11 0;
+#X connect 1 1 6 1;
+#X connect 2 0 9 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 5 1 3 1;
+#X connect 6 0 3 0;
+#X connect 8 0 9 1;
+#X connect 9 0 0 0;
+#X connect 10 0 1 0;
+#X connect 11 0 5 0;
+#X connect 11 1 8 0;
+#X connect 12 0 10 0;
+#X restore 447 302 pd tovaspdata;
+#X msg 447 330 set vasp \$1 bufset \$2;
+#X obj 447 145 wavedisplay-select bufset \$0;
+#X msg 56 315 vasp bufset;
+#X text 134 314 set all samples to zero;
+#X text 136 339 set selected samples to zero;
+#N canvas 0 0 261 214 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 559 465 pd clear_buffer;
+#X msg 559 439 vasp bufset;
+#X text 177 472 <-- click to open more examples;
+#X text 57 138 use vasp.= to clear a buffer;
+#X obj 53 473 vaspset_examples;
+#X obj 51 533 VASP-HELP;
+#N canvas 280 291 407 308 inside 0;
+#X obj 82 165 s \$0-sample-length;
+#X msg 138 90 resize \$1;
+#X obj 138 43 loadbang;
+#X msg 138 64 88200;
+#X obj 138 112 s bufset;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 0 0;
+#X restore 709 420 pd inside;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 7 0 8 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 9 0;
+#X connect 17 0 9 0;
+#X connect 21 0 20 0;
diff --git a/externals/grill/vasp/pd-help/vasp_sframes.pd b/externals/grill/vasp/pd-help/vasp_sframes.pd
new file mode 100644
index 00000000..510f50b4
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_sframes.pd
@@ -0,0 +1,136 @@
+#N canvas 39 37 929 624 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.frames= 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsfram1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 544 107 graph;
+#N canvas 0 0 392 216 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufsfram1;
+#X msg 140 45 symbol bufsfram2;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X restore 798 498 pd init;
+#X obj 57 402 vasp.update;
+#X text 113 443 abbreviation;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsfram2 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 545 227 graph;
+#X text 56 87 argument/right inlet: value in samples;
+#X obj 57 442 vasp.f+;
+#X obj 55 559 VASP-HELP;
+#X obj 57 378 vasp.noise;
+#X obj 58 200 vasp.update;
+#X msg 58 153 vasp bufsfram1;
+#X msg 57 261 vasp bufsfram1;
+#X obj 57 284 vasp.frames= 0.7;
+#X obj 58 176 vasp.= env -1 0 1 44100 -1 88200;
+#X floatatom 148 305 12 0 0 0 - - -;
+#X text 57 104 right outlet: frames relatively to the starting point
+of the search;
+#X text 147 319 since the search runs from the end to the left \, this
+value is negative;
+#X obj 57 356 vasp.-> bufsfram2;
+#X obj 57 502 vasp.o=;
+#X obj 190 148 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 222 148 1 generate a ramp;
+#X obj 190 260 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 218 274 the value 0.7 appears in the ramp;
+#X text 218 259 2 generate noise until the position \, where;
+#N canvas 77 60 429 598 dir_and_target 0;
+#X text 46 56 forward;
+#X text 48 154 backward;
+#X text 31 22 search direction;
+#X text 58 369 both;
+#X text 28 401 negative;
+#X text 58 337 positive;
+#X text 28 314 target slope;
+#X text 46 99 both (nearest);
+#X obj 185 228 vasp.noise;
+#X obj 185 249 vasp.u;
+#X msg 110 156 dir -1;
+#X msg 111 121 dir 0;
+#X msg 110 59 dir 1;
+#X obj 185 90 t a b;
+#X obj 210 111 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 228 111 (clear);
+#X floatatom 234 175 12 0 0 0 - - -;
+#X msg 126 336 slope 1;
+#X msg 110 367 slope 0;
+#X msg 97 399 slope -1;
+#X obj 239 355 t a b;
+#X obj 264 376 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 282 376 (clear);
+#X floatatom 300 423 12 0 0 0 - - -;
+#X text 29 290 find values with positive and/or negative slope;
+#X obj 185 197 vasp.-> bufsfram2;
+#X obj 239 481 vasp.noise;
+#X obj 239 502 vasp.u;
+#X obj 239 450 vasp.-> bufsfram2;
+#X obj 239 400 vasp.f= 0.2;
+#X obj 185 153 vasp.f= 0;
+#X msg 185 71 vasp 44101 bufsfram1;
+#X msg 239 336 vasp 0 bufsfram1;
+#X connect 8 0 9 0;
+#X connect 10 0 30 0;
+#X connect 11 0 30 0;
+#X connect 12 0 30 0;
+#X connect 13 0 30 0;
+#X connect 13 1 14 0;
+#X connect 17 0 29 0;
+#X connect 18 0 29 0;
+#X connect 19 0 29 0;
+#X connect 20 0 29 0;
+#X connect 20 1 21 0;
+#X connect 25 1 8 0;
+#X connect 26 0 27 0;
+#X connect 28 1 26 0;
+#X connect 29 0 28 0;
+#X connect 29 1 23 0;
+#X connect 30 0 25 0;
+#X connect 30 1 16 0;
+#X connect 31 0 13 0;
+#X connect 32 0 20 0;
+#X restore 586 418 pd dir_and_target;
+#X obj 538 415 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
+0;
+#X msg 562 464 vasp bufsfram2;
+#N canvas 249 259 328 183 clear 0;
+#X obj 74 54 inlet;
+#X obj 74 77 vasp.= 0;
+#X obj 74 100 vasp.u;
+#X obj 168 53 r \$0-clear;
+#X msg 168 76 vasp bufsfram2;
+#X obj 168 99 vasp.= 0;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X restore 562 490 pd clear;
+#X text 537 398 3 more features!;
+#X text 56 56 search for a value (starting at the end) and set the
+length of the vasp according to it;
+#X text 55 482 related objects:;
+#X obj 139 502 vasp.f;
+#X obj 204 502 vasp.s;
+#X connect 9 0 3 0;
+#X connect 11 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 18 0;
+#X connect 13 1 15 0;
+#X connect 14 0 10 0;
+#X connect 18 1 9 0;
+#X connect 20 0 11 0;
+#X connect 22 0 12 0;
+#X connect 27 0 28 0;
diff --git a/externals/grill/vasp/pd-help/vasp_shift.pd b/externals/grill/vasp/pd-help/vasp_shift.pd
new file mode 100644
index 00000000..46b2e408
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_shift.pd
@@ -0,0 +1,57 @@
+#N canvas 24 75 875 494 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.shift 0 10 1 14 -262144
+-1 0;
+#X text 520 322 clear;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 520 367 pd clear_buffer;
+#X text 71 60 shifts buffer content to a sample index;
+#X text 72 73 optional argument/right inlet: value;
+#X msg 520 344 vasp bufshift;
+#X obj 70 354 vasp.update;
+#X msg 70 228 vasp bufshift;
+#X floatatom 143 259 0 0 0 0 - - -;
+#X obj 59 430 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufshift 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 436 125 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufshift;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 673 368 pd init;
+#X obj 70 327 vasp.shift 10;
+#X obj 70 178 vasp.u;
+#X msg 70 133 vasp bufshift;
+#X text 187 132 1 draw envelope;
+#X text 184 230 2 shift content;
+#X obj 262 397 vasp.xrot;
+#X text 57 396 related objects:;
+#X obj 182 397 vasp.xshift;
+#X msg 199 260 fill 0;
+#X msg 199 280 fill 1;
+#X msg 199 300 fill 2;
+#X text 245 260 no filling;
+#X text 244 300 fill with edge-value;
+#X text 245 280 zero filling (default);
+#X obj 70 156 vasp.= env 0.5 0 1 20 -1 100;
+#X connect 5 0 2 0;
+#X connect 7 0 12 0;
+#X connect 8 0 12 1;
+#X connect 12 0 6 0;
+#X connect 14 0 26 0;
+#X connect 20 0 12 0;
+#X connect 21 0 12 0;
+#X connect 22 0 12 0;
+#X connect 26 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_sign.pd b/externals/grill/vasp/pd-help/vasp_sign.pd
new file mode 100644
index 00000000..83062d7e
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_sign.pd
@@ -0,0 +1,42 @@
+#N canvas 95 158 858 400 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.sign 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsign 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 465 124 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufsign;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 737 285 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 521 284 pd clear_buffer;
+#X text 178 134 generate a sinewave;
+#X obj 77 178 vasp.u;
+#X text 70 77 samples == 0 stay 0;
+#X text 70 95 samples < 0 become -1;
+#X text 70 61 samples > 0 become 1;
+#X msg 77 135 vasp bufsign;
+#X obj 77 156 vasp.osc 44100;
+#X msg 521 263 vasp bufsign;
+#X obj 77 322 vasp.update;
+#X obj 77 291 vasp.sign;
+#X msg 77 260 vasp bufsign;
+#X text 79 237 use sign to generate a square wave out of a sine wave
+;
+#X obj 46 370 VASP-HELP;
+#X connect 9 0 10 0;
+#X connect 10 0 5 0;
+#X connect 11 0 3 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_size.pd b/externals/grill/vasp/pd-help/vasp_size.pd
new file mode 100644
index 00000000..11fbf1c8
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_size.pd
@@ -0,0 +1,43 @@
+#N canvas 85 111 842 540 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp.size 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 406 282 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 45 symbol bufsize;
+#X msg 33 73 \; \$1 xticks 0 2 5 \; \$1 xlabel 1.1 0 10 20 30 40 50
+\; \$1 yticks 0 0.25 2;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 714 408 pd init;
+#X text 119 392 abbreviation;
+#X obj 62 335 vasp.update;
+#X obj 90 258 prepend set;
+#X msg 62 196 vasp bufsize;
+#X obj 62 225 vasp.size 100;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsize 133 float 0;
+#X coords 0 1 132 -1 300 100 1;
+#X restore 453 153 graph;
+#X text 57 69 change the size of a buffer/array;
+#X obj 62 303 vasp.osc 16;
+#X obj 63 392 vasp.s;
+#X text 62 433 related objects:;
+#X obj 343 460 vasp.frames;
+#X obj 183 460 vasp.size?;
+#X obj 183 436 vasp.s+;
+#X obj 259 460 vasp.size*;
+#X obj 259 437 vasp.size/;
+#X obj 62 504 VASP-HELP;
+#X obj 62 157 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
+10 -24198 -1 -1 133 256;
+#X obj 62 175 t b f;
+#X msg 90 280;
+#X text 58 83 argument/right inlet: value in frames;
+#X connect 4 0 20 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 6 0 9 0;
+#X connect 9 0 3 0;
+#X connect 18 0 19 0;
+#X connect 19 0 5 0;
+#X connect 19 1 6 1;
diff --git a/externals/grill/vasp/pd-help/vasp_soffset.pd b/externals/grill/vasp/pd-help/vasp_soffset.pd
new file mode 100644
index 00000000..8a515a2a
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_soffset.pd
@@ -0,0 +1,153 @@
+#N canvas 31 15 964 662 10;
+#X text 54 77 argument/right inlet: value;
+#X obj 58 27 cnv 15 15 15 empty empty vasp.offset= 0 10 1 14 -262144
+-1 0;
+#X text 68 587 abbreviation;
+#X obj 75 272 prepend set;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsoffs1 1000 float 0;
+#X coords 0 1 999 -1 300 100 1;
+#X restore 551 88 graph;
+#N canvas 466 356 387 251 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 45 symbol bufsoffs1;
+#X msg 151 45 symbol bufsoffs2;
+#X msg 33 71 \; \$1 xticks 0 100 10 \; \$1 xlabel 1.1 0 200 300 500
+700 800 1000 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 1100 -1 -0.5 0 0.5
+1;
+#X connect 0 0 1 0;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 0;
+#X restore 802 556 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsoffs2 1000 float 0;
+#X coords 0 1 999 -1 300 100 1;
+#X restore 551 207 graph;
+#X obj 64 177 vasp.u;
+#X msg 63 130 vasp bufsoffs1;
+#X msg 64 221 vasp bufsoffs1;
+#X msg 75 293 vasp 701 bufsoffs1 299 0;
+#X obj 64 367 vasp.noise;
+#X obj 64 388 vasp.u;
+#X obj 159 591 vasp.o=;
+#X obj 259 592 VASP-HELP;
+#X text 54 95 right outlet: relative offset position in frames;
+#X text 201 128 1 generate a ramp;
+#X text 199 220 2 generate noise \, and start at the point \,;
+#X obj 64 325 vasp.o?;
+#X msg 64 346 vasp bufsoffs2 \$1;
+#X text 54 59 search for a value set it as offset;
+#X floatatom 161 271 5 0 0;
+#X obj 170 130 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 170 221 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#N canvas 0 0 261 214 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 683 549 pd clear_buffer;
+#X msg 683 528 vasp bufsoffs2;
+#X text 703 508 clear second buffer;
+#X obj 683 509 bng 15 250 50 0 empty \$0-clear empty 0 -6 576 8 -262144
+-1 -1;
+#X obj 162 445 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#N canvas 77 60 409 578 dir_and_target 0;
+#X text 46 56 forward;
+#X text 48 154 backward;
+#X text 31 22 search direction;
+#X text 58 369 both;
+#X text 28 401 negative;
+#X text 58 337 positive;
+#X text 28 314 target slope;
+#X text 46 99 both (nearest);
+#X obj 183 210 vasp.noise;
+#X obj 183 231 vasp.u;
+#X msg 183 189 vasp bufsoffs2 \$1;
+#X msg 110 156 dir -1;
+#X msg 111 121 dir 0;
+#X msg 110 59 dir 1;
+#X obj 183 164 vasp.o?;
+#X obj 185 90 t a b;
+#X obj 210 111 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 228 111 (clear);
+#X obj 185 135 vasp.offset= 0.1;
+#X msg 185 71 vasp bufsoffs1 500;
+#X floatatom 276 161 5 0 0;
+#X msg 126 336 slope 1;
+#X msg 110 367 slope 0;
+#X msg 97 399 slope -1;
+#X obj 239 484 vasp.noise;
+#X obj 239 505 vasp.u;
+#X msg 239 463 vasp bufsoffs2 \$1;
+#X obj 239 438 vasp.o?;
+#X obj 239 355 t a b;
+#X obj 264 376 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 282 376 (clear);
+#X obj 239 400 vasp.offset= 0.1;
+#X floatatom 330 426 5 0 0;
+#X text 29 290 find values with positive and/or negative slope;
+#X msg 239 336 vasp bufsoffs1;
+#X connect 8 0 9 0;
+#X connect 10 0 8 0;
+#X connect 11 0 18 0;
+#X connect 12 0 18 0;
+#X connect 13 0 18 0;
+#X connect 14 0 10 0;
+#X connect 15 0 18 0;
+#X connect 15 1 16 0;
+#X connect 18 0 14 0;
+#X connect 18 1 20 0;
+#X connect 19 0 15 0;
+#X connect 21 0 31 0;
+#X connect 22 0 31 0;
+#X connect 23 0 31 0;
+#X connect 24 0 25 0;
+#X connect 26 0 24 0;
+#X connect 27 0 26 0;
+#X connect 28 0 31 0;
+#X connect 28 1 29 0;
+#X connect 31 0 27 0;
+#X connect 31 1 32 0;
+#X connect 34 0 28 0;
+#X restore 612 422 pd dir_and_target;
+#X obj 64 151 vasp.= env -1 0 1 500 -1 1000;
+#X obj 102 496 t a b;
+#X obj 127 517 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 145 517 (clear);
+#X text 148 418 the search always starts at the offsetpoint;
+#X text 566 403 more features!;
+#X obj 564 419 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
+0;
+#X text 214 232 where the ramp is at 0.2;
+#X obj 64 242 vasp.offset= 0.2;
+#X text 189 443 3 start searching at frame 501;
+#X msg 102 475 vasp bufsoffs1 501;
+#X connect 3 0 10 0;
+#X connect 8 0 30 0;
+#X connect 9 0 38 0;
+#X connect 11 0 12 0;
+#X connect 18 0 19 0;
+#X connect 19 0 11 0;
+#X connect 22 0 8 0;
+#X connect 23 0 9 0;
+#X connect 25 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 40 0;
+#X connect 30 0 7 0;
+#X connect 31 0 38 0;
+#X connect 31 1 32 0;
+#X connect 38 0 18 0;
+#X connect 38 0 3 0;
+#X connect 38 1 21 0;
+#X connect 40 0 31 0;
diff --git a/externals/grill/vasp/pd-help/vasp_spit.pd b/externals/grill/vasp/pd-help/vasp_spit.pd
new file mode 100644
index 00000000..be3d60a1
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_spit.pd
@@ -0,0 +1,46 @@
+#N canvas 190 73 663 567 10;
+#X text 62 76 spit out vectors of a vasp (one vector after the other)
+;
+#X text 62 92 argument: number of outlets (if more than 1 \, outputs
+from right to left);
+#X obj 57 19 cnv 15 15 15 empty empty vasp.spit 0 10 1 14 -262144 -1
+0;
+#X text 211 304 spits out one vector after the other from right to
+left;
+#X obj 119 335 print b;
+#X obj 63 335 print a;
+#X obj 63 305 vasp.spit 3;
+#X msg 63 271 vasp bufspit1 bufspit2;
+#X obj 178 335 print c;
+#X obj 234 335 print ready;
+#X obj 118 220 print b;
+#X obj 63 220 print a;
+#X text 63 118 most right outlet: bang when ready;
+#X msg 63 160 vasp bufspit1 bufspit2 bufspit3;
+#X obj 63 188 vasp.spit;
+#X text 144 189 spits out one vector after the other out of 1 outlet
+;
+#X msg 237 271 vasp bufspit1 bufspit2 bufspit3;
+#X text 171 428 if more vectors than outlets \, see what it does!;
+#X obj 118 459 print b;
+#X obj 63 459 print a;
+#X msg 63 399 vasp bufspit1 bufspit2 bufspit3;
+#X obj 63 429 vasp.spit 2;
+#X obj 174 459 print ready;
+#X obj 50 519 VASP-HELP;
+#X obj 487 483 table bufspit1;
+#X obj 487 504 table bufspit2;
+#X obj 487 525 table bufspit3;
+#X connect 6 0 5 0;
+#X connect 6 1 4 0;
+#X connect 6 2 8 0;
+#X connect 6 3 9 0;
+#X connect 7 0 6 0;
+#X connect 13 0 14 0;
+#X connect 14 0 11 0;
+#X connect 14 1 10 0;
+#X connect 16 0 6 0;
+#X connect 20 0 21 0;
+#X connect 21 0 19 0;
+#X connect 21 1 18 0;
+#X connect 21 2 22 0;
diff --git a/externals/grill/vasp/pd-help/vasp_split.pd b/externals/grill/vasp/pd-help/vasp_split.pd
new file mode 100644
index 00000000..44f3f70b
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_split.pd
@@ -0,0 +1,27 @@
+#N canvas 221 195 631 478 10;
+#X text 56 100 most right outlet: rest (if there is one) of vectors
+in a new vasp \, otherwise: bang;
+#X text 56 70 split a vasp into its vectors;
+#X text 56 85 argument: number of vectors to split;
+#X obj 57 38 cnv 15 15 15 empty empty vasp.split 0 10 1 14 -262144
+-1 0;
+#X obj 130 215 prepend set;
+#X obj 63 310 prepend set;
+#X obj 63 278 vasp.join 2;
+#X msg 241 153 vasp bufsplit1 bufsplit2 bufsplit3;
+#X obj 63 187 vasp.split 2;
+#X msg 63 153 vasp bufsplit1 bufsplit2;
+#X obj 53 410 VASP-HELP;
+#X obj 340 367 table bufsplit1;
+#X obj 340 391 table bufsplit2;
+#X obj 340 413 table bufsplit3;
+#X msg 63 339;
+#X msg 130 239;
+#X connect 4 0 15 0;
+#X connect 5 0 14 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 8 1 6 1;
+#X connect 8 2 4 0;
+#X connect 9 0 8 0;
diff --git a/externals/grill/vasp/pd-help/vasp_sqr.pd b/externals/grill/vasp/pd-help/vasp_sqr.pd
new file mode 100644
index 00000000..74f84aed
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_sqr.pd
@@ -0,0 +1,38 @@
+#N canvas 47 54 800 409 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.sqr 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 412 288 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufsqr;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 622 327 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 362 325 pd clear_buffer;
+#X obj 77 173 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsqr 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 363 170 graph;
+#X obj 77 150 vasp.osc 44100;
+#X text 71 63 sample ^ 2;
+#X msg 77 127 vasp bufsqr;
+#X text 184 124 generate a 1 Hz sinewave;
+#X msg 362 303 vasp bufsqr;
+#X obj 77 297 vasp.update;
+#X obj 77 271 vasp.sqr;
+#X msg 77 246 vasp bufsqr;
+#X obj 45 375 VASP-HELP;
+#X connect 5 0 3 0;
+#X connect 7 0 5 0;
+#X connect 9 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
diff --git a/externals/grill/vasp/pd-help/vasp_sqrt.pd b/externals/grill/vasp/pd-help/vasp_sqrt.pd
new file mode 100644
index 00000000..3f940f25
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_sqrt.pd
@@ -0,0 +1,38 @@
+#N canvas 47 54 800 409 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.sqrt 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 414 290 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufsqrt;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 622 327 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 362 325 pd clear_buffer;
+#X obj 77 173 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsqrt 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 363 170 graph;
+#X obj 77 150 vasp.osc 44100;
+#X text 184 124 generate a 1 Hz sinewave;
+#X text 71 63 vasp square root;
+#X msg 77 127 vasp bufsqrt;
+#X msg 362 303 vasp bufsqrt;
+#X obj 77 297 vasp.update;
+#X msg 77 246 vasp bufsqrt;
+#X obj 77 271 vasp.sqrt;
+#X obj 65 354 VASP-HELP;
+#X connect 5 0 3 0;
+#X connect 8 0 5 0;
+#X connect 9 0 2 0;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_ssqr.pd b/externals/grill/vasp/pd-help/vasp_ssqr.pd
new file mode 100644
index 00000000..71630451
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_ssqr.pd
@@ -0,0 +1,96 @@
+#N canvas 47 54 816 469 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.ssqr 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 416 292 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufssqr;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 622 327 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 362 325 pd clear_buffer;
+#X obj 77 173 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufssqr 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 363 170 graph;
+#X obj 77 150 vasp.osc 44100;
+#X text 184 124 generate a 1 Hz sinewave;
+#X msg 77 127 vasp bufssqr;
+#X msg 362 303 vasp bufssqr;
+#X text 71 63 signed sample ^ 2;
+#N canvas 4 20 834 463 listen_to_ssqr 0;
+#X obj 71 32 cnv 15 15 15 empty empty listen_to_ssqr 0 10 1 14 -262144
+-1 0;
+#X obj 391 309 dac~;
+#X obj 391 265 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 413 264 play;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 523 309 pd clear_buffer;
+#X obj 79 99 filelist \$0;
+#N canvas 92 108 394 359 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 66 50 loadbang;
+#X obj 66 178 t b f f;
+#X obj 66 98 filelisthandler \$0;
+#X msg 66 76 4;
+#X msg 66 130 read -resize \$1 bufssqr1;
+#X obj 214 228 s bufssqr1;
+#X connect 0 0 5 0;
+#X connect 3 0 9 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 0 0;
+#X restore 682 310 pd inside;
+#X obj 373 112 wavedisplay-simple bufssqr1 \$0;
+#X obj 391 286 tabplay~ bufssqr1;
+#X msg 523 286 vasp bufssqr1;
+#X obj 73 283 vasp.update;
+#X obj 73 306 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 73 238 vasp.ssqr;
+#X obj 73 259 vasp.opt;
+#X msg 73 215 vasp bufssqr1;
+#X connect 2 0 8 0;
+#X connect 8 0 1 0;
+#X connect 8 0 1 1;
+#X connect 9 0 4 0;
+#X connect 10 0 11 0;
+#X connect 12 0 13 0;
+#X connect 13 0 10 0;
+#X connect 14 0 12 0;
+#X restore 75 352 pd listen_to_ssqr;
+#X text 199 352 <-- click to open;
+#X obj 77 297 vasp.update;
+#X msg 77 247 vasp bufssqr;
+#X obj 77 271 vasp.ssqr;
+#X obj 66 422 VASP-HELP;
+#X connect 5 0 3 0;
+#X connect 7 0 5 0;
+#X connect 8 0 2 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_ssqrt.pd b/externals/grill/vasp/pd-help/vasp_ssqrt.pd
new file mode 100644
index 00000000..c94cfd12
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_ssqrt.pd
@@ -0,0 +1,96 @@
+#N canvas 47 54 818 471 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.ssqrt 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 418 294 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufssqrt;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 622 327 pd init;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 362 325 pd clear_buffer;
+#X obj 77 173 vasp.update;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufssqrt 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 363 170 graph;
+#X obj 77 150 vasp.osc 44100;
+#X text 184 124 generate a 1 Hz sinewave;
+#X text 208 352 <-- click to open;
+#X text 71 63 signed square root;
+#X msg 77 127 vasp bufssqrt;
+#N canvas 4 20 840 469 listen_to_ssqrt 0;
+#X obj 71 32 cnv 15 15 15 empty empty listen_to_ssqrt 0 10 1 14 -262144
+-1 0;
+#X obj 391 309 dac~;
+#X obj 391 265 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 413 264 play;
+#N canvas 40 55 281 170 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 523 309 pd clear_buffer;
+#X obj 79 99 filelist \$0;
+#N canvas 96 128 398 363 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 66 50 loadbang;
+#X obj 66 178 t b f f;
+#X obj 66 98 filelisthandler \$0;
+#X msg 66 76 4;
+#X msg 66 130 read -resize \$1 bufssqrt1;
+#X obj 214 228 s bufssqrt1;
+#X connect 0 0 5 0;
+#X connect 3 0 9 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 0 0;
+#X restore 682 310 pd inside;
+#X obj 391 286 tabplay~ bufssqrt1;
+#X msg 523 286 vasp bufssqrt1;
+#X obj 361 111 wavedisplay-simple bufssqrt1 \$0;
+#X obj 73 283 vasp.update;
+#X obj 73 306 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 73 259 vasp.opt;
+#X msg 73 215 vasp bufssqrt1;
+#X obj 73 238 vasp.ssqrt;
+#X connect 2 0 7 0;
+#X connect 7 0 1 0;
+#X connect 7 0 1 1;
+#X connect 8 0 4 0;
+#X connect 10 0 11 0;
+#X connect 12 0 10 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X restore 75 352 pd listen_to_ssqrt;
+#X msg 362 303 vasp bufssqrt;
+#X obj 77 297 vasp.update;
+#X msg 77 246 vasp bufssqrt;
+#X obj 77 271 vasp.ssqrt;
+#X obj 73 413 VASP-HELP;
+#X connect 5 0 3 0;
+#X connect 9 0 5 0;
+#X connect 11 0 2 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_sub.pd b/externals/grill/vasp/pd-help/vasp_sub.pd
new file mode 100644
index 00000000..2d074d31
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_sub.pd
@@ -0,0 +1,54 @@
+#N canvas 28 239 963 381 10;
+#N canvas 44 75 276 122 clear_buffer 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 738 292 pd clear_buffer;
+#X text 376 62 optional argument/right inlet: right operand;
+#X text 376 45 subtracts a value or a vasp from a vasp;
+#X text 62 62 optional argument/right inlet: right operand;
+#X text 62 45 adds a value or a vasp to a vasp;
+#X obj 62 19 cnv 15 15 15 empty empty vasp.+ 0 10 1 14 -262144 -1 0
+;
+#X obj 378 20 cnv 15 15 15 empty empty vasp.- 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 450 300 graph167 0;
+#X array bufsub 88200 float 0;
+#X coords 0 1 88199 -1 300 120 1;
+#X restore 629 93 graph;
+#X text 139 190 shift all values + 0.5;
+#X text 141 167 half the amplitude;
+#X obj 65 212 vasp.update;
+#X obj 65 189 vasp.+ 0.5;
+#X obj 65 144 vasp.osc 44100;
+#X obj 65 166 vasp.* 0.5;
+#X text 169 145 generate a 1Hz sine wave;
+#X msg 65 112 vasp bufsub;
+#X msg 738 271 vasp bufsub;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufsub;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 881 291 pd init;
+#X text 455 189 shift all values - 0.5;
+#X obj 380 212 vasp.update;
+#X obj 380 189 vasp.- 0.5;
+#X obj 380 144 vasp.osc 44100;
+#X obj 380 166 vasp.* 0.5;
+#X msg 380 112 vasp bufsub;
+#X obj 61 313 VASP-HELP;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 11 0;
+#X connect 15 0 12 0;
+#X connect 16 0 0 0;
+#X connect 20 0 19 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 23 0 21 0;
diff --git a/externals/grill/vasp/pd-help/vasp_subr.pd b/externals/grill/vasp/pd-help/vasp_subr.pd
new file mode 100644
index 00000000..42a6c5c1
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_subr.pd
@@ -0,0 +1,48 @@
+#N canvas 193 184 770 390 10;
+#N canvas 40 55 247 122 clear_buffer 0;
+#X obj 45 79 vasp.update;
+#X obj 45 56 vasp.= 0;
+#X obj 45 26 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 514 282 pd clear_buffer;
+#X text 49 91 optional argument/right inlet: right operand;
+#X text 49 76 subtracts a value or a vasp from a vasp;
+#X text 49 60 reverse subtraction;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufsubr 88200 float 0;
+#X coords 0 1 88199 -1 300 120 1;
+#X restore 370 102 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufsubr;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 647 283 pd init;
+#X msg 514 262 vasp bufsubr;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.!- 0 10 1 14 -262144 -1
+0;
+#X obj 52 236 vasp.update;
+#X msg 52 136 vasp bufsubr;
+#X obj 50 321 VASP-HELP;
+#X obj 52 168 vasp.osc 4410;
+#X obj 182 135 nbx 5 14 -50 50 0 1 empty empty empty 0 -6 0 10 -24198
+-1 -1 0 256;
+#X obj 182 154 * 0.01;
+#X obj 182 193 t b f;
+#X obj 52 213 vasp.!-;
+#X floatatom 182 175 5 0 0;
+#X obj 52 191 vasp.* 0.5;
+#X connect 6 0 0 0;
+#X connect 9 0 11 0;
+#X connect 11 0 17 0;
+#X connect 12 0 13 0;
+#X connect 13 0 16 0;
+#X connect 14 0 9 0;
+#X connect 14 1 15 1;
+#X connect 15 0 8 0;
+#X connect 16 0 14 0;
+#X connect 17 0 15 0;
diff --git a/externals/grill/vasp/pd-help/vasp_sync.pd b/externals/grill/vasp/pd-help/vasp_sync.pd
new file mode 100644
index 00000000..1da5d849
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_sync.pd
@@ -0,0 +1,81 @@
+#N canvas 95 103 854 570 10;
+#N canvas 92 108 403 405 inside 0;
+#X obj 87 206 soundfiler;
+#X obj 105 290 s \$0-sample-length;
+#X obj 87 260 s \$0-draw_display;
+#X msg 235 258 resize \$1;
+#X obj 235 211 loadbang;
+#X obj 235 280 s bufsync1;
+#X obj 245 304 s bufsync2;
+#X msg 235 232 88200;
+#X msg 87 184 read -resize \$1 bufsync1;
+#X obj 87 230 t b f f;
+#X obj 87 112 loadbang;
+#X obj 87 160 filelisthandler \$0;
+#X msg 87 138 3;
+#X connect 0 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 7 0 3 0;
+#X connect 7 0 1 0;
+#X connect 8 0 0 0;
+#X connect 9 0 2 0;
+#X connect 9 1 1 0;
+#X connect 9 2 3 0;
+#X connect 10 0 12 0;
+#X connect 11 0 8 0;
+#X connect 12 0 11 0;
+#X restore 711 485 pd inside;
+#X obj 463 297 wavedisplay-simple bufsync2 \$0;
+#X obj 463 155 wavedisplay-simple bufsync1 \$0;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.sync 0 10 1 14 -262144 -1
+0;
+#X text 53 64 syncs two or more vasps;
+#X msg 61 253 vasp bufsync1 bufsync2;
+#X obj 61 284 vasp.cfft;
+#X obj 122 335 vasp.= 0;
+#X obj 334 440 tabplay~ bufsync1;
+#X obj 353 460 tabplay~ bufsync2;
+#X obj 334 484 dac~;
+#X obj 61 409 vasp.update;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 149 483 pd clear_buffers;
+#X obj 61 431 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 122 313 vasp.upper;
+#X obj 61 388 vasp.c!fft;
+#X msg 149 457 vasp bufsync1 bufsync2;
+#X text 709 137 bufsync1;
+#X text 713 281 bufsync2;
+#X obj 61 366 vasp.sync 2;
+#X text 54 79 vasp.sync waits until all inlets have received a vasp
+and then outputs them and resets its status;
+#X text 143 365 outputs vasps after every inlet received one;
+#X obj 60 156 filelist \$0;
+#X obj 334 416 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 356 413 play;
+#X text 55 111 argument: number of vasps to be synced (default 2);
+#X obj 48 525 VASP-HELP;
+#X connect 5 0 6 0;
+#X connect 6 0 14 0;
+#X connect 6 0 19 0;
+#X connect 7 0 19 1;
+#X connect 8 0 10 0;
+#X connect 9 0 10 1;
+#X connect 11 0 13 0;
+#X connect 14 0 7 0;
+#X connect 15 0 11 0;
+#X connect 16 0 12 0;
+#X connect 19 0 15 0;
+#X connect 23 0 9 0;
+#X connect 23 0 8 0;
diff --git a/externals/grill/vasp/pd-help/vasp_tilt.pd b/externals/grill/vasp/pd-help/vasp_tilt.pd
new file mode 100644
index 00000000..eb80e3b3
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_tilt.pd
@@ -0,0 +1,100 @@
+#N canvas 21 60 945 604 10;
+#X obj 55 36 cnv 15 15 15 empty empty vasp.tilt 0 10 1 14 -262144 -1
+0;
+#N canvas 0 0 261 214 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 672 527 pd clear_buffer;
+#X obj 51 533 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array buftilt1 100 float 1;
+#A 0 0.32 0.32 0.74 0.2 -0.0400002 -0.24 -0.48 -0.0400002 0.2 0.36
+0.0199998 -0.1 -0.18 -0.24 -0.2 -0.0800002 -0.0600002 0.14 -0.0400002
+-0.2 0.0399998 0.0399998 0.0399998 0.0599998 0.0799999 0.0899999 0.0999999
+0.14 0.18 0.24 0.28 0.32 0.38 0.42 0.48 0.5 0.5 0.44 0.36 0.2 0.0599998
+-0.0600002 -0.2 -0.34 -0.44 -0.44 -0.46 -0.4 -0.34 -0.24 -0.12 -0.1
+-0.2 -0.28 -0.36 -0.44 -0.48 -0.48 -0.48 -0.48 -0.46 -0.44 -0.52 -0.52
+-0.48 -0.4 0.46 0.46 0.46 0.46 0.46 0.44 0.34 0.2 0.0999999 -1.3411e-007
+-0.0800002 -0.12 -0.13 -0.14 -0.16 -0.14 -0.0600002 0.56 0.58 0.6 0.6
+0.52 0.44 0.36 0.26 -0.72 0.22 0.68 0.74 0.76 0.66 0.66 0.76 0.82;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 561 61 graph;
+#N canvas 0 0 433 215 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol buftilt1 \, symbol buftilt2;
+#X obj 295 27 loadbang;
+#X obj 295 71 s \$0-ratio;
+#X msg 295 49 1.5;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X connect 3 0 5 0;
+#X connect 5 0 4 0;
+#X restore 811 524 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array buftilt2 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 564 202 graph;
+#X text 501 55 SOURCE;
+#X obj 394 358 pack;
+#X obj 394 332 t b f;
+#X text 331 285 ratio;
+#X text 197 422 needs one or two args;
+#X text 198 439 ratio \, center;
+#X text 231 284 edge;
+#X text 243 168 none;
+#X text 244 195 linear;
+#X text 231 261 zero (default);
+#X text 243 220 4 point (default);
+#X text 243 141 in place (dirty);
+#X obj 127 447 vasp.u;
+#X obj 127 421 vasp.tilt;
+#X obj 394 309 nbx 5 14 -1000 1000 0 1 empty empty empty 0 -6 0 10
+-24198 -1 -1 54 256;
+#X obj 331 309 nbx 5 14 -3 3 0 0 empty \$0-ratio empty 0 -6 576 10
+-24198 -1 -1 1.5 256;
+#X text 394 285 center sample;
+#X msg 181 262 fill 0;
+#X msg 181 288 fill 1;
+#X msg 183 142 inter 0;
+#X msg 183 168 inter 1;
+#X msg 183 194 inter 2;
+#X msg 183 220 inter 3;
+#X obj 36 160 bng 15 250 50 0 empty \$0-trigger empty 0 -6 576 8 -262144
+-1 -1;
+#X obj 394 399 bng 15 250 50 0 \$0-trigger empty empty 0 -6 1152 8
+-262144 -1 -1;
+#X msg 36 179 vasp buftilt1;
+#X obj 36 205 vasp.-> buftilt2;
+#X msg 672 501 vasp buftilt2;
+#X text 55 86 optional argument/right inlet: list of ratio and center
+sample;
+#X obj 160 493 vasp.xtilt;
+#X text 56 492 related object:;
+#X text 55 63 resample buffer data around a center sample;
+#X obj 394 379 t b l;
+#X connect 7 0 38 0;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 19 0 18 0;
+#X connect 20 0 8 0;
+#X connect 21 0 7 0;
+#X connect 23 0 19 0;
+#X connect 24 0 19 0;
+#X connect 25 0 19 0;
+#X connect 26 0 19 0;
+#X connect 27 0 19 0;
+#X connect 28 0 19 0;
+#X connect 29 0 31 0;
+#X connect 31 0 32 0;
+#X connect 32 1 19 0;
+#X connect 33 0 1 0;
+#X connect 38 0 30 0;
+#X connect 38 1 19 1;
diff --git a/externals/grill/vasp/pd-help/vasp_update.pd b/externals/grill/vasp/pd-help/vasp_update.pd
new file mode 100644
index 00000000..ce47a313
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_update.pd
@@ -0,0 +1,36 @@
+#N canvas 213 175 703 499 10;
+#X msg 62 292 vasp bufup;
+#X obj 62 313 vasp.= 0;
+#X text 145 226 update the graphics;
+#X text 136 125 generate a sine wave;
+#X obj 62 185 vasp.osc 22050;
+#X obj 58 41 cnv 15 15 15 empty empty vasp.update 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufup 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 347 141 graph;
+#N canvas 0 0 396 272 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufup;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 607 383 pd init;
+#X obj 62 227 vasp.update;
+#X msg 62 125 vasp bufup;
+#X obj 62 374 vasp.u;
+#X msg 62 351 vasp bufup;
+#X obj 57 424 VASP-HELP;
+#X text 58 92 use vasp.update at the end of a chain of vasp operations
+;
+#X text 57 69 updates the graphic display of the array;
+#X text 145 291 set the buffer to zero;
+#X text 147 345 and display the changes;
+#X text 114 374 (abbreviation);
+#X connect 0 0 1 0;
+#X connect 4 0 8 0;
+#X connect 9 0 4 0;
+#X connect 11 0 10 0;
diff --git a/externals/grill/vasp/pd-help/vasp_v.pd b/externals/grill/vasp/pd-help/vasp_v.pd
new file mode 100644
index 00000000..6f5e1452
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_v.pd
@@ -0,0 +1,50 @@
+#N canvas 44 85 957 492 10;
+#X obj 58 31 cnv 15 15 15 empty empty vasp 0 10 1 14 -262144 -1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufvasp1 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 594 161 graph;
+#N canvas 0 0 396 220 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufvasp1;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 818 420 pd init;
+#X obj 57 375 vasp.update;
+#X obj 57 354 vasp.noise;
+#X text 57 66 stores and outputs a vasp;
+#X obj 58 231 vasp.update;
+#X obj 58 205 vasp.= 0.35;
+#X obj 58 174 vasp 50000 bufvasp1 10000;
+#X obj 57 332 vasp;
+#X msg 101 287 set vasp 2000 bufvasp1 66666;
+#X msg 125 310 vasp 2000 bufvasp1 11111;
+#X text 58 83 syntax: vasp [length] [name] [offset] [channel] \, etc.
+;
+#X obj 58 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 57 286 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 231 169 output vasp referencing a buffer region;
+#X text 231 183 with length of 50000 and starting at frame 10000;
+#X text 231 208 set region to value 0.35;
+#X text 230 232 update graphics;
+#X text 231 149 <-- click to start command chain;
+#X text 292 287 1 use "set" to define region non triggering \, then
+bang;
+#X text 291 307 2 right inlet: alternatively to set message;
+#X text 230 362 bang triggers output of predefined vasp;
+#X text 56 101 (see syntax description of vasp message in VASP-HELP)
+;
+#X obj 59 429 VASP-HELP;
+#X connect 4 0 3 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 4 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 13 0 8 0;
+#X connect 14 0 9 0;
diff --git a/externals/grill/vasp/pd-help/vasp_valleys.pd b/externals/grill/vasp/pd-help/vasp_valleys.pd
new file mode 100644
index 00000000..f2a11fab
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_valleys.pd
@@ -0,0 +1,86 @@
+#N canvas 36 36 847 582 10;
+#X obj 71 32 cnv 15 15 15 empty empty vasp.valleys 0 10 1 14 -262144
+-1 0;
+#X obj 71 131 filelist \$0;
+#N canvas 92 108 424 389 inside 0;
+#X obj 66 169 soundfiler;
+#X obj 84 253 s \$0-sample-length;
+#X obj 66 223 s \$0-draw_display;
+#X msg 214 221 resize \$1;
+#X obj 66 47 loadbang;
+#X obj 66 193 t b f f;
+#X obj 66 113 filelisthandler \$0;
+#X msg 66 91 2;
+#X obj 66 69 t b b;
+#X msg 99 91 88200;
+#X msg 66 145 read \$1 bufvalleys1;
+#X obj 214 243 s bufvalleys1;
+#X obj 225 264 s bufvalleys2;
+#X connect 0 0 5 0;
+#X connect 3 0 11 0;
+#X connect 3 0 12 0;
+#X connect 4 0 8 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 8 1 9 0;
+#X connect 9 0 5 0;
+#X connect 10 0 0 0;
+#X restore 668 495 pd inside;
+#N canvas 40 55 281 170 clear_buffers 0;
+#X obj 54 79 vasp.update;
+#X obj 54 56 vasp.= 0;
+#X obj 54 26 inlet;
+#X obj 54 108 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X restore 485 495 pd clear_buffers;
+#X obj 60 292 vasp.update;
+#X obj 58 433 vasp.update;
+#X obj 58 453 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 60 312 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 337 495 dac~;
+#X obj 337 457 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 358 455 play;
+#X text 69 52 find the local minima of a buffer content;
+#X text 70 66 argument/right inlet: density value 0-1;
+#X obj 446 118 wavedisplay-simple bufvalleys1 \$0;
+#X obj 60 252 vasp.= bufvalleys1;
+#X text 183 231 copy to new buffer \, find valleys;
+#X msg 60 232 vasp bufvalleys2;
+#X floatatom 163 312 12 0 0;
+#X obj 60 272 vasp.valleys 0.001;
+#X obj 163 333 * 88200;
+#X obj 337 475 tabplay~ bufvalleys1;
+#X floatatom 163 355 5 0 0;
+#X obj 447 272 wavedisplay-simple bufvalleys2 \$0;
+#X obj 58 412 vasp.opt;
+#X msg 58 391 vasp bufvalleys2;
+#X msg 485 475 vasp bufvalleys1 bufvalleys2;
+#X text 718 100 source;
+#X text 712 253 valleys;
+#X text 69 81 outlet: current density value;
+#X text 185 389 optimize the buffer content;
+#X obj 44 530 VASP-HELP;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 9 0 20 0;
+#X connect 14 0 18 0;
+#X connect 16 0 14 0;
+#X connect 17 0 19 0;
+#X connect 18 0 4 0;
+#X connect 18 1 17 0;
+#X connect 19 0 21 0;
+#X connect 20 0 8 0;
+#X connect 20 0 8 1;
+#X connect 23 0 5 0;
+#X connect 24 0 23 0;
+#X connect 25 0 3 0;
diff --git a/externals/grill/vasp/pd-help/vasp_vector.pd b/externals/grill/vasp/pd-help/vasp_vector.pd
new file mode 100644
index 00000000..9a669067
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_vector.pd
@@ -0,0 +1,31 @@
+#N canvas 300 150 599 451 10;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.n 0 10 1 14 -262144 -1 0
+;
+#X text 53 55 get a vector of a vasp;
+#X text 53 79 argument/right inlet: index of vector;
+#X obj 58 193 prepend set;
+#X obj 175 166 vasp.n 1;
+#X obj 175 193 prepend set;
+#X obj 54 356 VASP-HELP;
+#X text 445 161 index starts at 0;
+#X obj 315 313 table bufn1;
+#X obj 315 335 table bufn2;
+#X obj 315 357 table bufn3;
+#X msg 58 121 vasp bufn1 bufn2 bufn3;
+#X obj 58 166 vasp.n 0;
+#X obj 300 193 prepend set;
+#X msg 300 219;
+#X msg 175 219;
+#X msg 58 220;
+#X obj 300 166 vasp.n 2;
+#X obj 154 308 vasp.n;
+#X text 58 310 abbreviation:;
+#X connect 3 0 16 0;
+#X connect 4 0 5 0;
+#X connect 5 0 15 0;
+#X connect 11 0 4 0;
+#X connect 11 0 12 0;
+#X connect 11 0 17 0;
+#X connect 12 0 3 0;
+#X connect 13 0 14 0;
+#X connect 17 0 13 0;
diff --git a/externals/grill/vasp/pd-help/vasp_vectors.pd b/externals/grill/vasp/pd-help/vasp_vectors.pd
new file mode 100644
index 00000000..e93cbbb0
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_vectors.pd
@@ -0,0 +1,13 @@
+#N canvas 257 69 509 282 10;
+#X text 52 66 get the number of vectors of a vasp;
+#X obj 51 19 cnv 15 15 15 empty empty vasp.n? 0 10 1 14 -262144 -1
+0;
+#X obj 57 169 cnv 15 44 17 empty empty empty 20 12 0 14 -258699 -66577
+0;
+#X floatatom 57 218 0 0 0;
+#X msg 57 112 vasp bufn?1;
+#X msg 137 112 vasp bufn?1 bufn?2 bufn?3;
+#X obj 57 169 vasp.n?;
+#X connect 4 0 6 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
diff --git a/externals/grill/vasp/pd-help/vasp_window.pd b/externals/grill/vasp/pd-help/vasp_window.pd
new file mode 100644
index 00000000..eefd92cf
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_window.pd
@@ -0,0 +1,62 @@
+#N canvas 44 117 891 565 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.window 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufwindow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 404 280 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufwindow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 771 320 pd init;
+#N canvas 0 0 194 221 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 569 325 pd clear_buffers;
+#X text 173 149 generate a function;
+#X obj 63 495 VASP-HELP;
+#X msg 569 301 vasp bufwindow;
+#X msg 61 149 vasp bufwindow;
+#X obj 61 278 vasp.u;
+#X floatatom 194 186 5 0 0;
+#X text 259 185 0..4;
+#X msg 231 215 lin;
+#X msg 231 240 sin;
+#X msg 231 265 hanning;
+#X msg 231 290 hamming;
+#X msg 231 315 blackman;
+#X text 275 214 0;
+#X text 275 236 1;
+#X text 295 260 2;
+#X text 300 289 3;
+#X text 300 316 4;
+#X obj 132 426 vasp.*window;
+#X obj 225 401 vasp.!window;
+#X text 60 396 see also:;
+#X obj 322 426 vasp.*xwindow;
+#X obj 225 426 vasp.*!window;
+#X obj 61 226 vasp.window lin;
+#X text 60 80 generate window functions;
+#X obj 322 401 vasp.xwindow;
+#X text 60 104 argument/right inlet: name or number of name (def linear)
+;
+#X connect 6 0 3 0;
+#X connect 7 0 26 0;
+#X connect 9 0 26 1;
+#X connect 11 0 26 1;
+#X connect 12 0 26 1;
+#X connect 13 0 26 1;
+#X connect 14 0 26 1;
+#X connect 15 0 26 1;
+#X connect 26 0 8 0;
diff --git a/externals/grill/vasp/pd-help/vasp_xmirr.pd b/externals/grill/vasp/pd-help/vasp_xmirr.pd
new file mode 100644
index 00000000..863ecfaa
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_xmirr.pd
@@ -0,0 +1,86 @@
+#N canvas 48 7 827 616 10;
+#N canvas 92 108 411 413 inside 0;
+#X obj 66 154 soundfiler;
+#X obj 84 238 s \$0-sample-length;
+#X obj 66 208 s \$0-draw_display;
+#X msg 214 206 resize \$1;
+#X obj 67 53 loadbang;
+#X obj 66 178 t b f f;
+#X obj 67 101 filelisthandler \$0;
+#X msg 67 133 read -resize \$1 bufxmirr1;
+#X obj 214 228 s bufxmirr1;
+#X obj 224 252 s bufxmirr2;
+#X msg 67 79 4;
+#X connect 0 0 5 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 10 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 0 0;
+#X connect 10 0 6 0;
+#X restore 643 547 pd inside;
+#X obj 79 100 filelist \$0;
+#X obj 69 234 vasp.cfft;
+#X obj 327 546 dac~;
+#N canvas 0 0 413 295 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 461 546 pd clear_buffers;
+#X obj 327 503 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 349 500 play;
+#X text 461 501 clear;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.xmirr 0 10 1 14 -262144
+-1 0;
+#X text 75 52 mirrors a vasp symmetrical;
+#X obj 472 303 wavedisplay-simple bufxmirr2 \$0;
+#X obj 472 150 wavedisplay-simple bufxmirr1 \$0;
+#X msg 69 213 vasp bufxmirr1 bufxmirr2;
+#X obj 69 298 vasp.update;
+#X obj 69 319 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X obj 69 277 vasp.= 0;
+#X obj 69 256 vasp.upper;
+#X msg 461 523 vasp bufxmirr1 bufxmirr2;
+#X obj 69 484 vasp.update;
+#X obj 69 507 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 69 440 vasp bufxmirr1 bufxmirr2;
+#X obj 69 461 vasp.cfft;
+#X obj 327 523 tabplay~ bufxmirr1;
+#X obj 69 393 vasp.update;
+#X obj 69 414 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X msg 69 351 vasp bufxmirr1 bufxmirr2;
+#X obj 69 372 vasp.xmirr;
+#X obj 57 574 VASP-HELP;
+#X text 332 88 revert the frequency spectrum;
+#X text 332 103 of the example sound;
+#X text 249 226 and clear upper part;
+#X text 247 351 2 revert spectrum;
+#X text 245 440 3 inverse fourier transform;
+#X text 248 209 1 fourier transform;
+#X connect 2 0 16 0;
+#X connect 5 0 22 0;
+#X connect 12 0 2 0;
+#X connect 13 0 14 0;
+#X connect 15 0 13 0;
+#X connect 16 0 15 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 20 0 21 0;
+#X connect 21 0 18 0;
+#X connect 22 0 3 0;
+#X connect 22 0 3 1;
+#X connect 23 0 24 0;
+#X connect 25 0 26 0;
+#X connect 26 0 23 0;
diff --git a/externals/grill/vasp/pd-help/vasp_xrot.pd b/externals/grill/vasp/pd-help/vasp_xrot.pd
new file mode 100644
index 00000000..95b0ed02
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_xrot.pd
@@ -0,0 +1,48 @@
+#N canvas 24 75 779 480 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.xrot 0 10 1 14 -262144 -1
+0;
+#X text 445 307 clear;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 445 352 pd clear_buffer;
+#X text 72 73 optional argument/right inlet: value;
+#X text 71 60 rotate buffer content;
+#X msg 445 329 vasp bufxrot;
+#X obj 68 333 vasp.update;
+#X floatatom 129 281 0 0 0;
+#X msg 68 257 vasp bufxrot;
+#X obj 56 436 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufxrot 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 436 125 graph;
+#N canvas 488 326 314 207 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufxrot;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 683 355 pd init;
+#X obj 69 195 vasp.u;
+#X obj 69 172 vasp.= env 1 0 -1 10 0 50 -1 90 1 99;
+#X msg 69 150 vasp bufxrot;
+#X text 197 148 1 create envelope;
+#X obj 68 305 vasp.xrot 6;
+#X text 197 251 2 rotate symmetrically;
+#X text 54 387 related objects:;
+#X obj 179 388 vasp.xshift;
+#X obj 259 388 vasp.rot;
+#X connect 5 0 2 0;
+#X connect 7 0 16 1;
+#X connect 8 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 16 0 6 0;
diff --git a/externals/grill/vasp/pd-help/vasp_xshift.pd b/externals/grill/vasp/pd-help/vasp_xshift.pd
new file mode 100644
index 00000000..121e43d2
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_xshift.pd
@@ -0,0 +1,57 @@
+#N canvas 24 75 858 509 10;
+#X obj 75 32 cnv 15 15 15 empty empty vasp.xshift 0 10 1 14 -262144
+-1 0;
+#X text 463 343 clear;
+#N canvas 0 0 413 295 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 463 388 pd clear_buffer;
+#X text 72 73 optional argument/right inlet: value;
+#X msg 463 365 vasp bufxshift;
+#X text 71 60 shifts buffer content symmetrically;
+#X obj 68 333 vasp.update;
+#X floatatom 141 279 0 0 0;
+#X msg 68 236 vasp bufxshift;
+#X obj 59 429 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufxshift 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 436 125 graph;
+#N canvas 488 326 312 205 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X msg 33 45 symbol bufxshift;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 683 355 pd init;
+#X obj 68 305 vasp.xshift 9;
+#X obj 69 195 vasp.u;
+#X msg 69 150 vasp bufxshift;
+#X obj 69 172 vasp.= env 1 0 -1 10 0 50 -1 90 1 99;
+#X text 197 148 1 create envelope;
+#X text 196 230 2 shift symmetrically;
+#X obj 262 403 vasp.xrot;
+#X text 57 402 related objects:;
+#X obj 182 403 vasp.xshift;
+#X msg 225 278 fill 0;
+#X msg 225 298 fill 1;
+#X msg 225 318 fill 2;
+#X text 271 278 no filling;
+#X text 270 318 fill with edge-value;
+#X text 271 298 zero filling (default);
+#X connect 4 0 2 0;
+#X connect 7 0 12 1;
+#X connect 8 0 12 0;
+#X connect 12 0 6 0;
+#X connect 14 0 15 0;
+#X connect 15 0 13 0;
+#X connect 21 0 12 0;
+#X connect 22 0 12 0;
+#X connect 23 0 12 0;
diff --git a/externals/grill/vasp/pd-help/vasp_xtilt.pd b/externals/grill/vasp/pd-help/vasp_xtilt.pd
new file mode 100644
index 00000000..c42c69e1
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_xtilt.pd
@@ -0,0 +1,107 @@
+#N canvas 21 60 881 576 10;
+#X obj 55 36 cnv 15 15 15 empty empty vasp.xtilt 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 261 214 clear_buffer 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 575 494 pd clear_buffer;
+#X text 177 472 <-- click to open more examples;
+#X obj 51 533 VASP-HELP;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufxtilt1 100 float 1;
+#A 0 1 -0.113512 0.171341 0.733251 -0.444804 0.13461 0.0181519 0.0751111
+-0.291489 -0.0661841 0.0808672 0.10525 -0.0372648 0.00712331 0.0321534
+0.00104712 -0.0797996 -0.0100332 0.038871 -0.00962814 -0.00245443 -0.0208043
+0.0418052 -0.0442626 -0.010092 -0.000713352 0.0310329 -0.0158379 -0.0325648
+0.0180381 -0.0174225 -0.0255639 -0.0137052 0.0219752 -0.00454053 -0.0387019
+-0.00129492 -0.00332361 -6.52102e-005 -0.0333087 0.00495665 0.00179575
+-0.0311061 -0.0221767 -0.00117427 0.000104884 -0.033587 -0.00918416
+0.00931789 -0.0172503 -0.0146257 0.0200174 0.00741167 -9.19656e-005
+-0.0248526 0.0180017 0.0184785 -0.000738001 0.00187258 0.0148586 0.0289194
+-0.0124819 0.000630443 0.0266685 0.0156491 0.0058523 0.0141721 0.0336186
+-0.00179237 -0.00582341 0.0232202 0.0428296 0.0249123 -0.00400539 0.0269429
+0.0367591 0.000278026 0.0241991 0.039058 0.0259654 -0.015077 0.0321762
+0.0799587 -0.035893 0.038519 0.024746 0.189796 -0.054207 -0.0128485
+-0.0301806 0.0762237 0.106943 0.0307454 0.226911 -0.221356 0.172835
+0.0519878 0.4068 -0.293863 -0.035514;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 481 75 graph;
+#N canvas 0 0 435 217 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 1 10 \; \$1 xlabel 1.1 0 20 40 60 80 100
+\; \$1 yticks 0 0.25 2 \; \$1 ylabel 105 -1 -0.5 0 0.5 1;
+#X obj 295 27 loadbang;
+#X obj 295 71 s \$0-ratio;
+#X msg 33 45 symbol bufxtilt1 \, symbol bufxtilt2;
+#X msg 295 49 1.5;
+#X connect 0 0 4 0;
+#X connect 2 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X restore 712 492 pd init;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufxtilt2 100 float 0;
+#X coords 0 1 99 -1 300 100 1;
+#X restore 483 205 graph;
+#X text 420 58 SOURCE;
+#X obj 344 357 pack;
+#X obj 344 331 t b f;
+#X text 281 284 ratio;
+#X text 201 404 needs one or two args;
+#X text 201 427 ratio \, center;
+#X text 236 264 edge;
+#X text 243 144 none;
+#X text 243 173 linear;
+#X text 236 241 zero (default);
+#X text 242 199 4 point (default);
+#X text 243 121 in place (dirty);
+#X obj 128 435 vasp.u;
+#X obj 344 308 nbx 5 14 -1000 1000 0 0 empty empty empty 0 -6 0 10
+-24198 -1 -1 0 256;
+#X obj 281 308 nbx 5 14 -3 3 0 0 empty \$0-ratio empty 0 -6 576 10
+-24198 -1 -1 1.5 256;
+#X text 344 284 center sample;
+#X msg 181 242 fill 0;
+#X msg 181 268 fill 1;
+#X msg 183 122 inter 0;
+#X msg 183 148 inter 1;
+#X msg 183 174 inter 2;
+#X msg 183 200 inter 3;
+#X obj 36 135 bng 15 250 50 0 empty \$0-trigger empty 0 -6 576 8 -262144
+-1 -1;
+#X obj 344 401 bng 15 250 50 0 \$0-trigger empty empty 0 -6 1152 8
+-262144 -1 -1;
+#X text 55 82 optional argument/right inlet: list of ratio and center
+sample;
+#X obj 53 473 xtilt_example;
+#X text 575 444 clear;
+#X msg 575 468 vasp bufxtilt2;
+#X text 55 59 resample buffer data symmetrically;
+#X msg 36 159 vasp bufxtilt1;
+#X obj 36 185 vasp.-> bufxtilt2;
+#X obj 128 409 vasp.xtilt;
+#X obj 344 379 t b l;
+#X connect 8 0 39 0;
+#X connect 9 0 8 0;
+#X connect 9 1 8 1;
+#X connect 20 0 9 0;
+#X connect 21 0 8 0;
+#X connect 23 0 38 0;
+#X connect 24 0 38 0;
+#X connect 25 0 38 0;
+#X connect 26 0 38 0;
+#X connect 27 0 38 0;
+#X connect 28 0 38 0;
+#X connect 29 0 36 0;
+#X connect 34 0 1 0;
+#X connect 36 0 37 0;
+#X connect 37 1 38 0;
+#X connect 38 0 19 0;
+#X connect 39 0 30 0;
+#X connect 39 1 38 1;
diff --git a/externals/grill/vasp/pd-help/vasp_xwindow.pd b/externals/grill/vasp/pd-help/vasp_xwindow.pd
new file mode 100644
index 00000000..7d6e4179
--- /dev/null
+++ b/externals/grill/vasp/pd-help/vasp_xwindow.pd
@@ -0,0 +1,61 @@
+#N canvas 58 39 897 607 10;
+#X obj 62 41 cnv 15 15 15 empty empty vasp.xwindow 0 10 1 14 -262144
+-1 0;
+#N canvas 0 0 450 300 graph1 0;
+#X array bufxwindow 88200 float 0;
+#X coords 0 1 88199 -1 300 100 1;
+#X restore 512 119 graph;
+#N canvas 0 0 406 282 init 0;
+#X obj 33 19 loadbang;
+#X msg 33 73 \; \$1 xticks 0 4410 10 \; \$1 xlabel 1.1 0 22050 44100
+66150 88200 \; \$1 yticks 0 0.25 2 \; \$1 ylabel 94000 -1 -0.5 0 0.5
+1;
+#X msg 33 45 symbol bufxwindow;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 771 320 pd init;
+#N canvas 0 0 194 221 clear_buffers 0;
+#X obj 49 73 vasp.= 0;
+#X obj 49 49 inlet;
+#X obj 49 97 vasp.u;
+#X obj 49 118 bng 15 250 50 0 \$0-draw_display empty empty 0 -6 1152
+8 -262144 -1 -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X restore 569 326 pd clear_buffers;
+#X text 173 148 generate a function;
+#X obj 60 503 VASP-HELP;
+#X msg 61 149 vasp bufxwindow;
+#X msg 569 301 vasp bufxwindow;
+#X obj 61 278 vasp.u;
+#X floatatom 194 186 5 0 0;
+#X text 259 185 0..4;
+#X msg 231 215 lin;
+#X msg 231 240 sin;
+#X msg 231 265 hanning;
+#X msg 231 290 hamming;
+#X msg 231 315 blackman;
+#X text 275 214 0;
+#X text 275 236 1;
+#X text 295 260 2;
+#X text 300 289 3;
+#X text 300 316 4;
+#X obj 61 226 vasp.xwindow lin;
+#X obj 132 401 vasp.window;
+#X obj 132 426 vasp.*window;
+#X obj 225 401 vasp.!window;
+#X text 60 396 see also:;
+#X obj 322 426 vasp.*xwindow;
+#X obj 225 426 vasp.*!window;
+#X text 60 104 argument/right inlet: name or number of name;
+#X text 60 80 generate window functions;
+#X connect 6 0 21 0;
+#X connect 7 0 3 0;
+#X connect 9 0 21 1;
+#X connect 11 0 21 1;
+#X connect 12 0 21 1;
+#X connect 13 0 21 1;
+#X connect 14 0 21 1;
+#X connect 15 0 21 1;
+#X connect 21 0 8 0;