Commit 5e7231b9 authored by Jonathan Wilkes's avatar Jonathan Wilkes
Browse files

Merge branch 'repo-cleanup'

parents f6844c7b f5a9335e
......@@ -216,9 +216,14 @@ Contributing is easy:
turn an idea into working code very quickly. But a prototyping language that
is itself a prototype isn't very useful. That means Purr Data's core code
and libraries must be stable, consistent, well-documented, and easy to use.
4. Make sure you aren't duplicating existing functionality, especially core
functionality.
5. Send us a merge request and we'll test it. If it's well-documented and
4. Develop incrementally. Small, solid improvements to the software are
preferable to large, disruptive ones.
5. Make sure you aren't duplicating existing functionality, especially core
functionality. For backwards compatibility Purr Data ships many legacy
libraries which unfortunately duplicate the same functionality. This makes
it harder to learn how to use Pd, and makes it burdensome to read patches
and keep track of all the disparate implementations.
6. Send us a merge request and we'll test it. If it's well-documented and
there aren't any bugs we'll add it to the software.
Here are some of the current tasks:
......
......@@ -126,9 +126,6 @@ memento_install:
--author "Frank Barknecht" \
--license "GNU GPL" \
--description "a collection of objects for managing state saving"
install -d $(DESTDIR)$(manualsdir)/$(MEMENTO_NAME)
install -p $(abstractions_src)/rradical/memento/tutorial/*.* \
$(DESTDIR)$(manualsdir)/$(MEMENTO_NAME)
install -d $(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)/manual
install -p $(abstractions_src)/rradical/memento/tutorial/*.* \
$(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)/manual
......@@ -236,11 +233,6 @@ pixeltango_install:
install -d $(DESTDIR)$(examplesdir)/$(PIXELTANGO_NAME)
install -p $(abstractions_src)/pixelTANGO/Example-Patches/*.* \
$(DESTDIR)$(examplesdir)/$(PIXELTANGO_NAME)
install -d $(DESTDIR)$(manualsdir)/$(PIXELTANGO_NAME)
install -p $(abstractions_src)/pixelTANGO/*.txt \
$(DESTDIR)$(manualsdir)/$(PIXELTANGO_NAME)
install -p $(abstractions_src)/pixelTANGO/dev-notes/*.txt \
$(DESTDIR)$(manualsdir)/$(PIXELTANGO_NAME)
install -d $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/manual
install -p $(abstractions_src)/pixelTANGO/*.txt \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/manual
......@@ -352,10 +344,6 @@ timestretch_install:
# install -d $(DESTDIR)$(manualsdir)/$(TIMESTRETCH_NAME)
# install -p $(abstractions_src)/timestretch/doc/*.txt \
# $(DESTDIR)$(manualsdir)/$(TIMESTRETCH_NAME)
# install -d $(DESTDIR)$(readmesdir)
# install -p $(abstractions_src)/timestretch/README \
# $(DESTDIR)$(readmesdir)/$(TIMESTRETCH_NAME).txt
#-------------------------------------------------------------------------------
......@@ -369,42 +357,15 @@ pd-wavelet_install:
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
install -p $(abstractions_src)/pd-wavelet/main.pd \
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
install -p $(abstractions_src)/pd-wavelet/README.txt \
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(PDWAVELET_NAME) \
--author "Raul Diaz Poblete" \
--description "manipulation of audio in the wavelet domain" \
--license "GNU GPL v2" \
--version ""
install -d $(DESTDIR)$(readmesdir)
install -p $(abstractions_src)/pd-wavelet/README.txt \
$(DESTDIR)$(readmesdir)/$(PDWAVELET_NAME).txt
#==============================================================================#
#
# DEVELOPER'S TARGETS
#
#==============================================================================#
# make the symlinks necessary to simulate the installed environment
devsymlinks:
# make symlinks for help patches
test -e $(abstractions_src)/../2.control.examples || \
ln -s $(pd_src)/doc/2.control.examples \
$(abstractions_src)/../2.control.examples
test -e $(abstractions_src)/../3.audio.examples || \
ln -s $(pd_src)/doc/3.audio.examples \
$(abstractions_src)/../3.audio.examples
# pd <= 0.38-4 has 4.fft.examples
test -e $(abstractions_src)/../4.fft.examples || \
ln -s $(pd_src)/doc/4.fft.examples $(abstractions_src)/../4.fft.examples
# pd > 0.38-4 has 4.data.structures
test -e $(abstractions_src)/../4.data.structures || \
ln -s $(pd_src)/doc/4.data.structures \
$(abstractions_src)/../4.data.structures
test -e $(abstractions_src)/../7.stuff || \
ln -s $(pd_src)/doc/7.stuff $(abstractions_src)/../7.stuff
test -e $(abstractions_src)/../sound || \
ln -s $(pd_src)/doc/sound $(abstractions_src)/../sound
#==============================================================================#
#
......
#==============================================================================#
#
# Centralized build system for "doc".
#
# see for instructions: http://puredata.org/docs/developer/build
# <hans@at.or.at>
#
#==============================================================================#
CWD := $(shell pwd)
# these are designed to be overridden by the packages/Makefile
cvs_root_dir := $(shell cd $(CWD)/.. && pwd)
DESTDIR = $(CWD)/build/
BUILDLAYOUT_DIR = $(cvs_root_dir)/packages
CURL := curl --connect-timeout 600 --max-time 3600
# default target
all:
@echo "this currently does nothing"
include $(BUILDLAYOUT_DIR)/Makefile.buildlayout
#==============================================================================#
#
# OVERARCHING BUILD TARGETS
#
#==============================================================================#
DOC_TARGETS = media messageoddness pd_fileformat pd-msg \
tutorials
# clean up after everything is installed
final_setup:
chmod -R ugo-w $(pddocdir)
install: $(objectsdir) $(helpdir) $(manualsdir) $(examplesdir) \
$(patsubst %, %_install,$(DOC_TARGETS))
@echo " "
@echo "doc install succeeded!"
#==============================================================================#
#
# PROJECT-SPECIFIC TARGETS
#
#==============================================================================#
#------------------------------------------------------------------------------#
# TEMPLATE
TEMPLATE_NAME = template
template_install: $(manualsdir)
install -d $(helpdir)$(manualsdir)/$(TEMPLATE_NAME)
install -p $(doc_src)/template/*.* \
$(helpdir)$(manualsdir)/$(TEMPLATE_NAME)
template_clean:
-rm -f -- $(helpdir)$(manualsdir)/$(TEMPLATE_NAME)/*.*
-rmdir -- $(helpdir)$(manualsdir)/$(TEMPLATE_NAME)
#------------------------------------------------------------------------------#
# EXTERNALS-HOWTO
EXTERNALS-HOWTO_NAME = Externals-HOWTO
externals-howto_install: $(manualsdir)
install -d $(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/pd-externals-HOWTO.pdf > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/pd-externals-HOWTO.pdf
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/HOWTO-externals-en.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/HOWTO-externals-en.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node1.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node1.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node2.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node2.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node3.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node3.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node4.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node4.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node5.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node5.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node6.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node6.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node7.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node7.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node8.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node8.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node9.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node9.html
-$(CURL) http://iem.kug.ac.at/pd/externals-HOWTO/node10.html > \
$(DESTDIR)$(manualsdir)/$(EXTERNALS-HOWTO_NAME)/node10.html
externals-howto_clean:
#------------------------------------------------------------------------------#
# MEDIA
MEDIA_NAME = media
media_install: $(pddocdir)
install -d $(DESTDIR)$(pddocdir)/$(MEDIA_NAME)
install -p $(doc_src)/media/*.* \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)
# ln is cp on MinGW, so these won't work since the target files don't exist at
# the time that the media_install target is generally run. For MinGW, this is
# instead handled in packages/win32_inno/pd-inno.iss.in
ifneq (MINGW,$(findstring MINGW,$(UNAME)))
# random sound files
ln -sf ../../doc/sound/bell.aiff \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/bell.aiff
ln -sf ../../doc/sound/voice.wav \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/voice.wav
ln -sf ../../doc/sound/voice2.wav \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/voice2.wav
ln -sf ../../extra/bsaylor/examples/noiseburst.wav \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/noiseburst.wav
ln -sf ../../extra/ekext/examples/stink.wav \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/stink.wav
ln -sf ../../extra/ekext/examples/beauty.wav \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/beauty.wav
ln -sf ../../extra/ekext/examples/drummach.wav \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/drummach.wav
# Gem videos
ln -sf ../../extra/Gem/examples/data/alea.mpg \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/alea.mpg
ln -sf ../../extra/Gem/examples/data/homer.avi \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/homer.avi
ln -sf ../../extra/Gem/examples/data/anim-1.mov \
$(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/anim-1.mov
endif
media_clean:
-rm -f -- $(DESTDIR)$(pddocdir)/$(MEDIA_NAME)/*.*
-rmdir -- $(DESTDIR)$(pddocdir)/$(MEDIA_NAME)
#------------------------------------------------------------------------------#
# MESSAGEODDNESS
MESSAGEODDNESS_NAME = MessageOddness
messageoddness_install: $(manualsdir)
install -d $(DESTDIR)$(manualsdir)/$(MESSAGEODDNESS_NAME)
install -p $(doc_src)/additional/messageoddness/*.* \
$(DESTDIR)$(manualsdir)/$(MESSAGEODDNESS_NAME)
messageoddness_clean:
-rm -f -- $(DESTDIR)$(manualsdir)/$(MESSAGEODDNESS_NAME)/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/$(MESSAGEODDNESS_NAME)
#------------------------------------------------------------------------------#
# PD-MSG
PD-MSG_NAME = pd-msg
pd-msg_install: $(manualsdir)
install -d $(DESTDIR)$(manualsdir)/$(PD-MSG_NAME)
install -p $(doc_src)/additional/pd-msg/*.txt \
$(DESTDIR)$(manualsdir)/$(PD-MSG_NAME)
for dir in $(shell cd $(doc_src)/additional/pd-msg && ls -d [1-5].*); do \
echo "Including $$dir in $(PD-MSG_NAME)"; \
install -d $(DESTDIR)$(manualsdir)/$(PD-MSG_NAME)/$$dir; \
install -p $(doc_src)/additional/pd-msg/$$dir/*.* \
$(DESTDIR)$(manualsdir)/$(PD-MSG_NAME)/$$dir; \
done
pd-msg_clean:
#------------------------------------------------------------------------------#
# PD_FILEFORMAT
PD_FILEFORMAT_NAME = Pd
pd_fileformat_install: $(manualsdir)
install -d $(DESTDIR)$(manualsdir)/$(PD_FILEFORMAT_NAME)
install -p $(doc_src)/additional/pd-fileformat.html \
$(DESTDIR)$(manualsdir)/$(PD_FILEFORMAT_NAME)/Pd_File_Format.html
pd_fileformat_clean:
#------------------------------------------------------------------------------#
# TUTORIALS
tutorials_install: $(manualsdir)
# start-here
install -d "$(DESTDIR)$(manualsdir)/StartHere"
install -p $(doc_src)/tutorials/start-here/*.* "$(DESTDIR)$(manualsdir)/StartHere"
# pddrums
install -d $(DESTDIR)$(manualsdir)/PdDrums
install -p $(doc_src)/tutorials/footils/pddrums/*.* $(DESTDIR)$(manualsdir)/PdDrums
# playnow
install -d $(DESTDIR)$(manualsdir)/PlayNow
install -p $(doc_src)/tutorials/playnow/*.* $(DESTDIR)$(manualsdir)/PlayNow
# cognition
install -d $(DESTDIR)$(manualsdir)/Cognition
install -p $(doc_src)/tutorials/cognition/*.* $(DESTDIR)$(manualsdir)/Cognition
# intro
install -d $(DESTDIR)$(manualsdir)/0.Intro
install -p $(doc_src)/tutorials/intro/*.* $(DESTDIR)$(manualsdir)/0.Intro
install -p $(externals_src)/pddp/+pager.pd $(DESTDIR)$(manualsdir)/0.Intro
# sound
install -d $(DESTDIR)$(manualsdir)/1.Sound
install -p $(doc_src)/tutorials/sound/*.* $(DESTDIR)$(manualsdir)/1.Sound
install -p $(externals_src)/pddp/+pager.pd $(DESTDIR)$(manualsdir)/1.Sound
# visual
install -d $(DESTDIR)$(manualsdir)/2.Image
install -p $(doc_src)/tutorials/visual/*.* $(DESTDIR)$(manualsdir)/2.Image
install -p $(externals_src)/pddp/+pager.pd $(DESTDIR)$(manualsdir)/2.Image
# networking
install -d $(DESTDIR)$(manualsdir)/3.Networking
install -p $(doc_src)/tutorials/networking/*.* $(DESTDIR)$(manualsdir)/3.Networking
install -p $(externals_src)/pddp/+pager.pd $(DESTDIR)$(manualsdir)/3.Networking
# physical
# install -d $(manualsdir)/4.Physical
# install -p $(doc_src)/tutorials/physical/*.* $(manualsdir)/4.Physical
# install -p $(externals_src)/pddp/+pager.pd $(manualsdir)/4.Physical
tutorials_clean:
-rm -f -- $(DESTDIR)$(manualsdir)/PdDrums/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/PdDrums
-rm -f -- $(DESTDIR)$(manualsdir)/PlayNow/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/PlayNow
-rm -f -- $(DESTDIR)$(manualsdir)/0.Intro/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/0.Intro
-rm -f -- $(DESTDIR)$(manualsdir)/1.Sound/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/1.Sound
-rm -f -- $(DESTDIR)$(manualsdir)/0.Intro/Visual/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/0.Intro/Visual
-rm -f -- $(DESTDIR)$(manualsdir)/3.Networking/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/3.Networking
-rm -f -- $(DESTDIR)$(manualsdir)/4.Physical/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/4.Physical
#==============================================================================#
#
# DEVELOPER'S TARGETS
#
#==============================================================================#
# make the symlinks necessary to simulate the installed environment
devsymlinks:
test -e $(doc_src)/2.control.examples || \
ln -sf $(pd_src)/doc/2.control.examples $(doc_src)/2.control.examples
test -e $(doc_src)/3.audio.examples || \
ln -sf $(pd_src)/doc/3.audio.examples $(doc_src)/3.audio.examples
# pd <= 0.38-4 has 4.fft.examples
test -e $(doc_src)/4.fft.examples || \
ln -sf $(pd_src)/doc/4.fft.examples $(doc_src)/4.fft.examples
# pd > 0.38-4 has 4.data.structures
test -e $(doc_src)/4.data.structures || \
ln -sf $(pd_src)/doc/4.data.structures $(doc_src)/4.data.structures
test -e $(doc_src)/7.stuff || \
ln -sf $(pd_src)/doc/7.stuff $(doc_src)/7.stuff
test -e $(doc_src)/sound || \
ln -sf $(pd_src)/doc/sound $(doc_src)/sound
# put the pddp support objects in the path
test -e $(doc_src)/pddp/pddp || \
ln -sf $(externals_src)/pddp $(doc_src)/pddp/pddp
#==============================================================================#
#
# CLEAN TARGETS
#
#==============================================================================#
# the destination-specific clean targets are in Makefile.buildlayout
clean: $(patsubst %, %_clean,$(DOC_TARGETS))
distclean: clean cruft_clean
test_locations:
@echo "PD_VERSION: $(PD_VERSION)"
@echo "PACKAGE_VERSION: $(PACKAGE_VERSION)"
@echo "CWD $(CWD)"
@echo "DESTDIR $(DESTDIR)"
@echo "PREFIX $(prefix)"
@echo "BINDIR $(bindir)"
@echo "LIBDIR $(libdir)"
@echo "OBJECTSDIR $(objectsdir)"
@echo "PDDOCDIR $(pddocdir)"
@echo "LIBPDDIR $(libpddir)"
@echo "LIBPDBINDIR $(libpdbindir)"
@echo "HELPDIR $(helpdir)"
@echo "MANUALSDIR $(manualsdir)"
@echo "EXAMPLESDIR $(examplesdir)"
- add externals HOWTO to manuals/Pd
- create Makefile for Pd-extended build system
- add pd-fileformat doc: http://student-kmt.hku.nl/%7Etjeerd/pd/pd_fileformat.html
- replace [pddp] with "pddp" in all help files so that it doesn't cause bugs
with the pddp/pddp.pd meta file, and other things in the future. Here's a
pattern: sed -n 's|obj \([0-9]*\) \([0-9]*\) pddp;|msg \1 \2 pddp;|p' *.pd
- add doc/pddp/about, help, etc. to doc/Makefile
- mv doc/pddp/pddp.pd to doc/pddp/about/pddp-about.pd
- add [symbol 1( and [1 ( test messages to the bottom right example in
[pd some odd cases of list handling] in
doc/pddp/all_about_lists_vs_anythings.pd
#N canvas 271 55 464 710 10;
#X floatatom 243 167 5 0 0 0 - - -;
#X symbolatom 291 166 10 0 0 0 - - -;
#X obj 196 187 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144
-1 -1;
#X obj 196 143 route bang float symbol list;
#X obj 243 187 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 291 187 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 339 187 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X obj 387 187 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
-1 -1;
#X text 24 35 There are no 0- or 1-element lists. These are immediately
converted to other types:;
#X msg 195 75 list;
#X msg 202 96 list 2;
#X msg 207 115 list word;
#X floatatom 11 147 5 0 0 0 - - -;
#X symbolatom 77 147 10 0 0 0 - - -;
#X obj 11 165 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 77 165 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 19 244 Therefore \, the definition of list is: a series of
elements with a selector of "list" and 2 or more elements. (But don't
forget! A series whose element is a float has an implied "list" selector!)
;
#X obj 123 373 select;
#X msg 157 343 list;
#X msg 122 344 bang;
#X msg 247 343 list;
#X msg 212 344 bang;
#X obj 213 373 print;
#X msg 73 429 3;
#X msg 106 428 list 3;
#X obj 59 471 *;
#X msg 223 429 3;
#X msg 256 428 list 3;
#X obj 208 481 *~;
#X text 19 311 These two disagree about 0 element lists:;
#X text 19 401 These two disagree about 1 element lists:;
#X obj 140 597 route 1;
#X msg 140 575 1 3;
#X obj 125 622 *~;
#X text 24 528 [route] doesn't seem to automatically convert 1 element
lists:;
#X connect 0 0 4 0;
#X connect 1 0 5 0;
#X connect 3 0 2 0;
#X connect 3 1 0 0;
#X connect 3 2 1 0;
#X connect 3 3 6 0;
#X connect 3 4 7 0;
#X connect 9 0 3 0;
#X connect 9 0 13 0;
#X connect 9 0 12 0;
#X connect 10 0 3 0;
#X connect 10 0 12 0;
#X connect 11 0 3 0;
#X connect 11 0 13 0;
#X connect 12 0 14 0;
#X connect 13 0 15 0;
#X connect 18 0 17 1;
#X connect 19 0 17 1;
#X connect 20 0 22 0;
#X connect 21 0 22 0;
#X connect 23 0 25 1;
#X connect 24 0 25 1;
#X connect 26 0 28 1;
#X connect 27 0 28 1;
#X connect 31 0 33 1;
#X connect 32 0 31 0;
#N canvas 220 136 605 423 10;
#X obj 190 245 print message;
#X msg 190 58 list x.wav 44100;
#X msg 223 118 x.wav 44100;
#X msg 189 159 read \$1 \$2;
#X msg 202 79 44100 x.wav;
#X text 119 33 message arguments only work with lists.;
#X text 318 56 declared list;
#X text 314 79 implied list;
#X text 307 118 undefined list;
#X text 77 68 these work -->;
#X text 68 120 this does not -->;
#X connect 1 0 3 0;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X connect 4 0 3 0;
#N canvas 238 303 753 580 10;
#X obj 63 224 float;
#X floatatom 63 252 5 0 0 0 - - -;
#X obj 102 224 + 1;
#X obj 62 274 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1
-1;
#X obj 35 166 bang;
#X obj 81 167 bang;
#X obj 59 124 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1
-1;
#X obj 220 232 float;
#X floatatom 220 260 5 0 0 0 - - -;
#X obj 259 232 + 1;
#X obj 219 282 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144
-1 -1;
#X obj 224 123 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144
-1 -1;
#X obj 180 165 delay 1000;
#X obj 261 166 delay 1000;
#X msg 90 199 0;
#X text 118 199 reset;
#X msg 247 208 0;
#X text 275 208 reset;
#X obj 550 231 float;
#X floatatom 550 259 5 0 0 0 - - -;
#X obj 589 231 + 1;
#X obj 549 281 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144
-1 -1;
#X obj 554 122 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144
-1 -1;
#X obj 510 164 delay 1000;
#X obj 591 165 delay 1000;
#X msg 577 207 0;
#X text 605 207 reset;
#X obj 449 171 bang;
#X text 80 68 counts twice per bang button click:;
#X text 451 70 but this counts once:;
#X obj 102 445 float;
#X floatatom 102 473 5 0 0 0 - - -;
#X obj 141 445 + 1;
#X obj 101 495 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144
-1 -1;
#X obj 106 336 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144
-1 -1;
#X msg 129 421 0;
#X text 157 421 reset;
#X obj 62 378 metro 1000;
#X obj 143 379 metro 1000;
#X text 317 334 The first [delay] triggers the execution \, which ultimately
sends a bang to the second [delay] \, which hasn't fired yet. When
the second [delay] receives that bang \, it resets its timer. Therefore
\, the second [delay] never fires.;
#X connect 0 0 1 0;
#X connect 0 0 2 0;
#X connect 1 0 3 0;
#X connect 2 0 0 1;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 4 0;
#X connect 6 0 5 0;
#X connect 7 0 8 0;
#X connect 7 0 9 0;
#X connect 8 0 10 0;
#X connect 9 0 7 1;
#X connect 11 0 12 0;
#X connect 11 0 13 0;
#X connect 12 0 7 0;
#X connect 13 0 7 0;
#X connect 14 0 0 1;
#X connect 16 0 7 1;
#X connect 18 0 19 0;
#X connect 18 0 20 0;
#X connect 18 0 27 0;
#X connect 19 0 21 0;
#X connect 20 0 18 1;
#X connect 22 0 23 0;
#X connect 22 0 24 0;
#X connect 23 0 18 0;
#X connect 24 0 18 0;
#X connect 25 0 18 1;
#X connect 27 0 22 0;
#X connect 30 0 31 0;
#X connect 30 0 32 0;
#X connect 31 0 33 0;
#X connect 32 0 30 1;
#X connect 34 0 37 0;
#X connect 34 0 38 0;
#X connect 35 0 30 1;
#X connect 37 0 30 0;
#X connect 38 0 30 0;
#N canvas 793 278 453 550 10;
#X obj 122 255 route 1 bla;
#X msg 118 113 list bla hu;
#X obj 114 293 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 149 297 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 197 296 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 86 85 bla hu;
#X msg 159 147 1 two;
#X msg 203 147 list 1 two;
#X text 32 22 mixing different data types in one route object is not
supported and thus leads to unexpected behaviour.;
#X msg 169 220 0;
#X text 197 218 <- unexpectedly matches 'bla';
#X text 134 83 <- unexpectedly not matching;
#X text 200 113 unexpectedly matches 'bla';
#X connect 0 0 2 0;
#X connect 0 1 3 0;
#X connect 0 2 4 0;
#X connect 1 0 0 0;
#X connect 5 0 0 0;