#N canvas 1 22 450 300 10; #N canvas 0 22 450 300 \$0data 0; #X restore 313 163 pd \$0data; #N canvas 535 125 450 300 createdata 0; #X obj 212 101 \$0; #X msg 212 125 traverse pd-\$1data \, bang; #X obj 212 148 pointer; #X obj 23 181 append \$0mytemplate x y velocity; #X obj 23 23 loadbang; #X obj 23 44 t b b; #X msg 23 116 50 60 70; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 3; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 5 1 0 0; #X connect 6 0 3 0; #X restore 312 199 pd createdata; #N canvas 479 22 359 135 \$0mytemplate 0; #X obj 17 18 struct \$0mytemplate float x float y float velocity; #X obj 17 48 drawpolygon 900 1 0 0 0 10 10 10 10 0 0 0; #X restore 312 136 pd \$0mytemplate; #X obj 19 129 ds-dump pd-\$0data; #X obj 19 91 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 19 163 ds-select \$0mytemplate velocity 52; #X obj 19 188 get \$0mytemplate x y; #X floatatom 19 218 5 0 0 0 - - -; #X floatatom 136 218 5 0 0 0 - - -; #X text 7 5 [ds-select] outputs pointers to elements whose attribute value matches its arguments. Non-matching pointers are sent to the right outlet. Call like [ds-select