Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • jwilkes/purr-data
  • aggraef/purr-data
  • samthursfield/purr-data
  • prakhar/purr-data
  • yadu05/purr-data
  • NegiAkash890/purr-data
  • prateekpardeshi/purr-data
  • Shruti3004/purr-data
  • hidimpu/purr-data
  • Atseosi/purr-data
  • piyushjasaiwal/purr-data
  • deveshprasad/purr-data
  • skm_7/purr-data
  • sankt/purr-data
  • ashim_tom/purr-data
  • dineshsoni02/purr-data
  • chaitanya1-coder/purr-data
  • Nitish0007/purr-data
  • nitin/purr-data
  • shuvam09/purr-data
  • gabrielabittencourt/purr-data
  • sivasai/purr-data
  • flachyjoe/purr-data
  • ishankaler/purr-data
  • prateek/purr-data
  • RukshanJS/purr-data
  • rajatshrm648/purr-data
  • Srashti/purr-data
  • Paarth/purr-data
  • AniruddhaGawali/purr-data
  • brittneyjuliet/purr-data
  • prakharagarwal1/purr-data
  • Shreyanshpaliwalcmsmn/purr-data
  • k_amrut/purr-data
  • AyushAnand/purr-data
  • Va16hav07/purr-data
36 results
Show changes
Showing
with 161 additions and 1305 deletions
# The Pd-L2Ork version number used in this build. XXXFIXME: Is there a way to
# grab this from the source somewhere?
version = 0.42.6
# This is a GNU Makefile. Special tools needed: GNU make and awk, git.
# Make Debian packages. This builds a package from the current HEAD in a
# subdirectory named $(debdist). It also creates the source archive that goes
# along with it. All files will be created in the toplevel source directory.
# along with it. All files will be created in the debuild directory.
# To make this work, you need to have the Debian package toolchain (debuild
# and friends) installed. Also make sure you have your DEBEMAIL and
# DEBFULLNAME environment variables set up as explained in the debchange(1)
# manual page. These are needed to create changelog entries and in order to
# sign the Debian packages created with 'make deb' and 'make debsrc'.
# and friends) installed. You should also set the DEBEMAIL environment (or
# make) variable to your full name and email address as explained in the
# debchange(1) manual page, e.g.: DEBEMAIL="John Doe <johndoe@mail.com>"
# This information is used to create changelog entries with 'make debchange',
# which in turn are used to sign the Debian packages created with 'make deb'
# and 'make debsrc'. (Otherwise some generic information supplied by the
# system will be used, and you may not be able to sign the package.)
# The typical workflow is as follows:
# 1. Run 'make debchange' once to create a new debian/changelog entry. You
# *must* do this once so that debuild knows about the proper version number of
# the package.
# *must* do this once after changes in the source repository so that debuild
# knows about the proper version number of the package.
# 2. Run 'make deb' to build a signed binary package. Or 'make deb-us' for an
# unsigned one.
......@@ -32,25 +32,45 @@ version = 0.42.6
# 4. Run 'make debclean' to get rid of any files that were created in steps 2
# and 3.
# The Debian version gets derived from the package version $(version) as well
# as the date and serial number of the last commit.
debversion = $(version)+git$(shell git log -1 --format=%cd --date=short | sed -e 's/-//g')+$(shell git rev-list --count HEAD)
# Determine the version number of this build. We get this from m_pd.h.
PD_L2ORK_VERSION := $(shell grep PD_L2ORK_VERSION ../pd/src/m_pd.h | sed 's|^.define *PD_L2ORK_VERSION *"\(.*\)".*|\1|')
# Determine the build version which needs git to be computed, so we can't do
# it in a stand-alone build from a tarball
PD_BUILD_VERSION := $(shell git log -1 --format=%cd --date=short | sed -e 's/-//g')-rev.$(shell git rev-parse --short HEAD)
# The Debian version gets derived from the date and serial number of the last
# commit. You can print it with 'make debversion'.
debversion = $(PD_L2ORK_VERSION)+git$(shell git rev-list --count HEAD)+$(shell git rev-parse --short HEAD)
# Debian revision number of the package.
debrevision = 1
# Source tarball and folder.
debsrc = pd-l2ork_$(debversion).orig.tar.gz
debdist = pd-l2ork-$(debversion)
# Secondary sources (Gem, wiringPi).
gemdebsrc = pd-l2ork_$(debversion).orig-Gem.tar.gz
pidebsrc = pd-l2ork_$(debversion).orig-wiringPi.tar.gz
debsrc = purr-data_$(debversion).orig.tar.gz
debdist = purr-data-$(debversion)
# nw.js sdk
# NOTE: arm packages need some special-casing, since they are released
# separately, and the version numbers do not always match up.
nwjsver = 0.55.0
nwjspkg = nwjs-sdk-v$(nwjsver)-linux
nwjsver_arm = 0.27.6
nwjspkg_arm = nwjs-sdk-v$(nwjsver_arm)-linux
nwjsver_arm64 = 0.23.7
nwjspkg_arm64 = nwjs-sdk-without-nacl-v$(nwjsver_arm64)-linux
nwjs = $(nwjspkg)-ia32.tar.gz $(nwjspkg)-x64.tar.gz $(nwjspkg_arm)-arm.tar.gz $(nwjspkg_arm64)-arm64.tar.gz
# Submodules (Gem, etc.). You can list them with 'make submodules'.
#submodules = Gem externals/miXed $(addprefix l2ork_addons/, cwiid fftease3.0-32bit lyonpotpourri rtcmix-in-pd)
submodules = $(sort $(shell git -C .. config --file .gitmodules --get-regexp path | awk '{ print $$2 }') externals/pd-lua/lua)
# This is used for automatically generated debian/changelog entries (cf. 'make
# debchange'). Adjust as needed.
debmsg = "Build from latest upstream source."
debprio = "low"
.PHONY: debversion debchange debclean deb debsrc deb-us debsrc-us
.PHONY: submodules debversion debchange debclean deb debsrc deb-us debsrc-us
submodules:
@echo $(submodules)
debversion:
@echo $(debversion)
......@@ -60,19 +80,14 @@ debchange:
debclean:
rm -rf $(debdist)
rm -f pd-l2ork_$(version)+git* pd-l2ork-*.tar.bz2
rm -f purr-data_*+git* purr-data-dbgsym_*+git*
deb: $(debsrc) $(gemdebsrc) $(pidebsrc)
# Unpack the primary source into our temporary build directory.
deb: $(debsrc) $(addprefix debian/nwjs/, $(nwjs))
# Unpack the source into our temporary build directory.
rm -rf $(debdist)
tar xfz $(debsrc)
# This works around some problems compiling externals on Precise and earlier
# (patch from pd-extended by Hans-Christoph Steiner, modified for pd-l2ork).
# This can be removed once Ubuntu 12.04 finally goes the way of the dodo.
cd $(debdist) && patch -p1 < ../precise-configure.patch
# Unpack the secondary sources.
cd $(debdist) && rm -Rf Gem && tar xfz ../$(gemdebsrc)
cd $(debdist) && rm -Rf wiringPi && tar xfz ../$(pidebsrc)
# Add the NW.js binaries to the source package.
cd debian/source && rm -f include-binaries && for x in $(addprefix debian/nwjs/, $(nwjs)); do echo "$$x" >> include-binaries; done
# Make sure to copy the Debian files which may have uncommitted changes.
# Then run debuild to create the package.
cd $(debdist) && cp -R ../debian . && debuild $(DEBUILD_FLAGS)
......@@ -80,29 +95,41 @@ deb: $(debsrc) $(gemdebsrc) $(pidebsrc)
rm -rf $(debdist)
debsrc:
$(MAKE) deb DEBUILD_FLAGS=-S
$(MAKE) deb DEBUILD_FLAGS="-S -d"
deb-us:
$(MAKE) deb DEBUILD_FLAGS="-us -uc"
debsrc-us:
$(MAKE) deb DEBUILD_FLAGS="-S -us -uc"
$(MAKE) deb DEBUILD_FLAGS="-S -d -us -uc"
$(debsrc):
git -C .. archive --format=tar.gz -o $(CURDIR)/$(debsrc) --prefix=$(debdist)/ HEAD
$(gemdebsrc): ../Gem/ChangeLog
# Make sure that the Gem submodule is updated.
git -C .. submodule update
git -C ../Gem archive --format=tar.gz -o $(CURDIR)/$(gemdebsrc) --prefix=Gem/ HEAD
rm -rf $(debdist)
# Make sure that the submodules are initialized.
git -C .. submodule update --init --recursive
# Grab the main source.
git -C .. archive --format=tar.gz --prefix=$(debdist)/ HEAD | tar xfz -
# Grab the submodules.
for x in $(submodules); do (cd $(debdist) && rm -rf $$x && git -C ../../$$x archive --format=tar.gz --prefix=$$x/ HEAD | tar xfz -); done
# Pre-generate and put s_version.h into the tarball (see above; the build
# version is generated using git which can't be done outside the git repo).
sed 's|^\(#define PD_BUILD_VERSION "\).*"|\1$(PD_BUILD_VERSION)"|' ../pd/src/s_version.h.in > $(debdist)/pd/src/s_version.h
# Pre-generate the markdown and html docs so that they will be included in the
# source. This means that we don't need any special tools as a build
# dependency, which makes live a lot easier.
make -C ../packages/gendoc version="$(PD_L2ORK_VERSION)" build_version="$(PD_BUILD_VERSION)"
mv ../packages/gendoc/*-Linux* $(debdist)/packages/gendoc
make -C ../packages/gendoc clean
ls -l $(debdist)/packages/gendoc/*.html
# Create the source tarball.
tar cfz $(debsrc) $(debdist)
rm -rf $(debdist)
../Gem/ChangeLog:
# Make sure that the Gem submodule is initialized.
git -C .. submodule init
debian/nwjs/$(nwjspkg_arm)-arm.tar.gz:
mkdir -p debian/nwjs && cd debian/nwjs && wget https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/download/v$(nwjsver_arm)/$(notdir $@)
$(pidebsrc): wiringPi/INSTALL
git -C wiringPi pull
git -C wiringPi archive --format=tar.gz -o $(CURDIR)/$(pidebsrc) --prefix=wiringPi/ HEAD
debian/nwjs/$(nwjspkg_arm64)-arm64.tar.gz:
mkdir -p debian/nwjs && cd debian/nwjs && wget https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/download/v$(nwjsver_arm64)/$(notdir $@)
wiringPi/INSTALL:
git clone git://git.drogon.net/wiringPi
debian/nwjs/$(nwjspkg)-%.tar.gz:
mkdir -p debian/nwjs && cd debian/nwjs && wget http://dl.nwjs.io/v$(nwjsver)/$(notdir $@)
pd-l2ork (0.42.6+git20141114+1491-1) trusty; urgency=low
purr-data (2.4.9+git3840+b9f17566-1) bionic; urgency=low
* Build from latest upstream source.
-- Albert Graef <aggraef@gmail.com> Sat, 15 Nov 2014 12:03:02 +0100
-- Albert Graef <aggraef@gmail.com> Fri, 09 Mar 2018 10:45:41 +0100
pd-l2ork (0.42.6+git20141114+1487-1) trusty; urgency=low
purr-data (2.0+git3322+50e3805-1) xenial; urgency=low
* Build from latest upstream source.
-- Albert Graef <aggraef@gmail.com> Fri, 14 Nov 2014 01:51:22 +0100
pd-l2ork (0.42.6+git20141112+1479-1) trusty; urgency=low
* Build from latest upstream source.
-- Albert Graef <aggraef@gmail.com> Wed, 12 Nov 2014 19:06:22 +0100
-- Albert Graef <aggraef@gmail.com> Wed, 08 Feb 2017 10:33:38 +0100
Source: pd-l2ork
Source: purr-data
Section: sound
Priority: extra
Maintainer: Albert Graef <aggraef@gmail.com>
Build-Depends: debhelper (>= 7.0.50~), autoconf, automake, libtool, pkg-config, bison, flex, tcl-dev, tk-dev, libgtk2.0-dev, python-dev, python-support, flite1-dev, ladspa-sdk, libasound2-dev, libjack-dev, libbluetooth-dev, libcairo2-dev, libglew-dev, libgsl0-dev, libmagick++-dev, libavifile-0.7-dev, libdc1394-22-dev, libfftw3-dev, libfluidsynth-dev, libftgl-dev, libgmerlin-dev, libgsm1-dev, libjpeg-dev, libmp3lame-dev, libmpeg3-dev, libquicktime-dev, libraw1394-dev, libsmpeg-dev, libsndobj-dev, libspeex-dev, libstk0-dev, libv4l-dev, libvorbis-dev, libxv-dev, rsync, curl
Build-Depends: debhelper (>= 7.0.50~), autoconf, automake, libtool, pkg-config, bison, flex, libgtk2.0-dev, libgtk-3-dev, dh-python, ladspa-sdk, libasound2-dev, libjack-dev, libbluetooth-dev, libcairo2-dev, libgl1-mesa-dev | libgl-dev, libglew1.6-dev | libglew-dev, libgsl-dev | libgsl0-dev, libmagick++-dev, libavifile-0.7-dev, libdc1394-dev | libdc1394-22-dev, libfftw3-dev, libfluidsynth-dev, libftgl-dev, libgsm1-dev, libjpeg-dev, libmp3lame-dev, libmpeg3-dev, libquicktime-dev, libraw1394-dev, libsmpeg-dev, libspeex-dev, libstk-dev | libstk0-dev, libtiff5-dev, libv4l-dev, libdv4-dev, libiec61883-dev, libxv-dev, libxxf86vm-dev, libvorbis-dev, zlib1g-dev (>= 1:1.1.3), rsync, libgconf2-dev, libnss3-dev, libxtst-dev, libxss-dev, libtirpc-dev
Standards-Version: 3.9.5
Homepage: http://l2ork.music.vt.edu
Homepage: https://git.purrdata.net/jwilkes/purr-data
Package: pd-l2ork
Package: purr-data
Architecture: any
# XXXTODO: Not sure whether it's really necessary to explicitly list these,
# since most of the corresponding development packages are already in the build
# dependencies. However, some of these might be loaded dynamically rather than
# being linked at compile time, so for safety we just include them all.
Depends: ${shlibs:Depends}, ${misc:Depends}, python, tkpng, tclxapian, ttf-dejavu-core, libavifile-0.7c2, libbluetooth3, libdc1394-22, libfftw3-3, libflite1, libftgl2, libgmerlin0, libgmerlin-avdec1, libgsl0ldbl, libgsm1, libjpeg62, libmp3lame0, libmpeg3-1, libquicktime2, libraw1394-11, libsmpeg0, libspeex1, libv4l-0, libvorbis0a, libxv1
Depends: ${shlibs:Depends}, ${misc:Depends}, liblua5.3-0 | liblua5.2-0
Recommends: xdg-utils, pulseaudio-utils, tap-plugins, ladspa-foo-plugins, invada-studio-plugins-ladspa, blepvco, swh-plugins, mcp-plugins, cmt, blop, omins, ubuntustudio-audio-plugins, rev-plugins, dssi-utils, vco-plugins, wah-plugins, fil-plugins, mda-lv2
Provides: pd-l2ork
Replaces: pd-l2ork
Description: Interactive multimedia programming environment
Suggests: python, fluid-soundfont-gm
Description: Interactive multimedia programming environment (NW.js variant)
This is Jonathan Wilkes' nw.js variant of Pd-L2Ork, nick-named
"Purr-Data". Basically, it is Pd-L2Ork with the Tk GUI replaced
with a JavaScript GUI implemented using nw.js (http://nwjs.io/).
.
Pd-L2Ork is Linux Laptop Orchestra's (L2Ork) real-time visual
programming environment for interactive multimedia. It also offers
a unique K-12 educational module for teaching children basics
......
scripts/bash_completion/pd-l2ork etc/bash_completion.d
l2ork_addons/K12 usr/lib/pd-l2ork/extra
packages/linux_make/default.settings usr/lib/pd-l2ork
packages/linux_make/pd-l2ork.gif usr/lib/pd-l2ork
packages/linux_make/pd-l2ork*.png usr/share/icons/hicolor/128x128/apps
packages/linux_make/text-x-puredata.png usr/share/icons/hicolor/128x128/mimetypes
packages/linux_make/pd-l2ork*.desktop usr/share/applications
#!/bin/sh
# postrm script for pd-l2ork
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postrm> `remove'
# * <postrm> `purge'
# * <old-postrm> `upgrade' <new-version>
# * <new-postrm> `failed-upgrade' <old-version>
# * <new-postrm> `abort-install'
# * <new-postrm> `abort-install' <old-version>
# * <new-postrm> `abort-upgrade' <old-version>
# * <disappearer's-postrm> `disappear' <overwriter>
# <overwriter-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
if [ remove = "$1" -o abort-install = "$1" -o disappear = "$1" ]; then
dpkg-divert --package pd-l2ork --remove --rename --divert /usr/share/icons/hicolor/128x128/mimetypes/text-x-puredata.png.orig /usr/share/icons/hicolor/128x128/mimetypes/text-x-puredata.png
fi
;;
*)
echo "postrm called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0
#!/bin/sh
# preinst script for pd-l2ork
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <new-preinst> `install'
# * <new-preinst> `install' <old-version>
# * <new-preinst> `upgrade' <old-version>
# * <old-preinst> `abort-upgrade' <new-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
# Move files out of the way which are also in the vanilla Pd package.
case "$1" in
install|upgrade)
dpkg-divert --package pd-l2ork --add --rename --divert /usr/share/icons/hicolor/128x128/mimetypes/text-x-puredata.png.orig /usr/share/icons/hicolor/128x128/mimetypes/text-x-puredata.png
;;
abort-upgrade)
;;
*)
echo "preinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0
......@@ -4,40 +4,88 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
nwjsver = 0.55.0
nwjspkg = nwjs-sdk-v$(nwjsver)-linux
nwjsdir = nwjs-sdk-v$(nwjsver)-linux
ifeq ("$(shell dpkg-architecture -qDEB_HOST_ARCH)","armhf")
arch = arm
nwjsver = 0.27.6
else ifeq ("$(shell dpkg-architecture -qDEB_HOST_ARCH)","arm64")
arch = arm64
nwjsver = 0.23.7
nwjspkg = nwjs-sdk-without-nacl-v$(nwjsver)-linux
else ifeq ("$(shell dpkg-architecture -qDEB_HOST_ARCH)","amd64")
arch = x64
else
arch = ia32
endif
# Installation prefix. This must be something other than /usr if you want to
# install Purr Data alongside Pd-L2Ork. Note that some items such as desktop
# files and icons will still be installed under /usr so that the system finds
# them, but they will be renamed to prevent name clashes with files from the
# pd-l2ork package.
prefix = /opt/purr-data
%:
dh $@
override_dh_auto_configure:
override_dh_auto_clean:
# This runs too late, 'make check' then fails, probably due to our meddling
# with the directory layout, executable names, etc., during 'make install'.
# Instead we invoke 'make check' right after the build, see below.
override_dh_auto_test:
override_dh_auto_build:
cd wiringPi/wiringPi && make static
cd l2ork_addons/raspberry_pi/disis_gpio && ln -sf $(CURDIR)/wiringPi .
cd l2ork_addons && inst_dir=/usr ./tar_em_up.sh -F -n
# Copy the nw.js sources to where purr-data wants them.
@echo "DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH)"
tar -xf debian/nwjs/$(nwjspkg)-$(arch).tar.gz && rm -rf pd/nw/nw && mv $(nwjsdir)-$(arch) pd/nw/nw
# Make sure that the html docs in packages/gendoc are current so that we don't
# accidentally try to rebuild them.
cd packages/gendoc && touch *-Linux*.html
cd l2ork_addons && (export V=0 inst_dir=$(prefix); ./tar_em_up.sh -Bn)
make check prefix=$(prefix)
override_dh_auto_install:
mkdir -p debian/pd-l2ork && mv packages/linux_make/build/usr debian/pd-l2ork
mkdir -p debian/purr-data && mv packages/linux_make/build/* debian/purr-data
# Create a link to the executable.
mkdir -p debian/purr-data/usr/bin && ln -sf $(prefix)/bin/pd-l2ork debian/purr-data/usr/bin/purr-data
# Create links to the include and lib directories.
mkdir -p debian/purr-data/usr/include && ln -sf $(prefix)/include/pd-l2ork debian/purr-data/usr/include/purr-data
mkdir -p debian/purr-data/usr/lib && ln -sf $(prefix)/lib/pd-l2ork debian/purr-data/usr/lib/purr-data
# Remove some unneeded files.
cd debian/pd-l2ork/ && rm -f Makefile README.txt
cd debian/pd-l2ork/usr/lib/pd-l2ork/extra && rm -rf */*.pd_linux_o */*.la
# Remove cyclist and pdsend/pdreceive which are provided by other packages.
cd debian/pd-l2ork/usr/bin && rm -rf pdsend pdreceive cyclist
cd debian/pd-l2ork/usr/share/man/man1 && rm -rf pdsend.* pdreceive.*
# Move the Gem include files into the pd-l2ork include directory to prevent
# conflicts with other packages providing these files.
cd debian/pd-l2ork/usr && mv include/Gem include/pd-l2ork
# Edit the Gem pkgconfig file accordingly and rename it.
cd debian/pd-l2ork/usr/lib/pkgconfig && sed -e 's?/include?/include/pd-l2ork?g' -e 's?/lib/pd/extra?/lib/pd-l2ork/extra?g' < Gem.pc > pd-l2ork-Gem.pc && rm -f Gem.pc
# Default preferences file.
install -d debian/pd-l2ork/etc/pd-l2ork && ln -s -f /usr/lib/pd-l2ork/default.settings debian/pd-l2ork/etc/pd-l2ork/default.settings
# XXXTODO: This is deprecated, so we might have to migrate to dh_python2 in
# the future. See http://deb.li/dhs2p.
override_dh_pysupport:
dh_pysupport -n -Xxmlrpc-test.py
cd debian/purr-data/ && rm -rf Makefile README.txt etc usr/share/emacs
cd debian/purr-data$(prefix)/lib/pd-l2ork/extra && rm -rf */*.pd_linux_o */*.la
ifeq ($(arch),ia32)
# This causes trouble in 32 bit builds (64 bit executable in the 32 bit nw.js distribution?), remove it.
cd debian/purr-data$(prefix)/lib/pd-l2ork && rm -rf bin/nw/minidump_stackwalk
endif
ifeq ($(arch),arm64)
# Same issue in arm64 builds.
cd debian/purr-data$(prefix)/lib/pd-l2ork && rm -rf bin/nw/minidump_stackwalk
endif
# Add the bash completion file again, and edit it accordingly.
mkdir -p debian/purr-data/etc/bash_completion.d
sed -e 's/pd-l2ork/purr-data/g' < scripts/bash_completion/pd-l2ork > debian/purr-data/etc/bash_completion.d/purr-data
# Edit the library paths in the default user.settings file.
cd debian/purr-data$(prefix)/lib/pd-l2ork && sed -e "s!/usr/lib/pd-l2ork!$(prefix)/lib/pd-l2ork!g" -i default.settings
# NOTE: Older systems use dh_pysupport instead of dh_python2. See
# http://deb.li/dhs2p.
override_dh_python2:
dh_python2 -n -Xxmlrpc-test.py
override_dh_compress:
dh_compress -X.pd -X.wav -X.aiff -X.txt -X.md
override_dh_fixperms:
dh_fixperms
chmod 0755 debian/pd-l2ork/usr/lib/pd-l2ork/bin/pd.tk
override_dh_strip:
dh_strip -Xbin/nw
# Supply some options to get rid of a gazillion of warnings about shared
# library files which are really externals.
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params="--ignore-missing-info --warnings=0"
Fix up LDFLAGS for Precise and earlier (patch by Hans-Christoph Steiner,
updated to pd-l2ork by Albert Graef).
Description: fix ./configure dying thinking we're cross-compiling
When building using debuild on Debian/squeeze or Ubuntu < quantal,
./configure somehow gets some LDFLAGS for shared libraries and uses them in
the gcc tests. The executable then fails to run since its a shared library,
and ./configure thinks we're cross-compiling. This patch forces no LDFLAGS.
diff --git a/externals/Makefile b/externals/Makefile
index 7b64f45..6b7c49b 100644
--- a/externals/Makefile
+++ b/externals/Makefile
@@ -611,6 +611,7 @@ $(gem_src)/Gem.pd_linux: $(gem_src)/configure
test -s $(gem_src)/Gem.pd_linux || \
cd $(gem_src) && ./configure \
CXXFLAGS="-DHAVE_S_STUFF_H" \
+ LDFLAGS= \
--prefix=$(prefix) \
--with-video=plugins \
--with-film=plugins \
@@ -649,7 +650,7 @@ $(externals_src)/gem2pdp/configure: $(externals_src)/gem2pdp/configure.ac
cd $(externals_src)/gem2pdp && aclocal && autoconf
$(externals_src)/gem2pdp/Makefile: $(externals_src)/gem2pdp/Makefile.in
- cd $(externals_src)/gem2pdp && ./configure --with-pddir=$(pd_src) \
+ cd $(externals_src)/gem2pdp && ./configure LDFLAGS= --with-pddir=$(pd_src) \
--with-gemdir=$(gem_src) --with-pdpdir=$(externals_src)/pdp
gem2pdp: $(externals_src)/gem2pdp/configure $(externals_src)/gem2pdp/Makefile
@@ -885,7 +886,7 @@ $(IEM16_DIR)/configure: $(IEM16_DIR)/configure.ac $(IEM16_DIR)/aclocal.m4
$(IEM16_DIR)/Make.config: $(IEM16_DIR)/Make.config.in \
$(IEM16_DIR)/configure
- cd $(IEM16_DIR) && ./configure --disable-library \
+ cd $(IEM16_DIR) && ./configure LDFLAGS= --disable-library \
--with-pd=$(pd_src)
iem16: $(IEM16_DIR)/Make.config
@@ -1269,11 +1270,11 @@ $(externals_src)/OSCx/configure: $(externals_src)/OSCx/configure.ac
cd $(externals_src)/OSCx && autoconf
$(externals_src)/OSCx/Makefile: $(externals_src)/OSCx/Makefile.in
- cd $(externals_src)/OSCx && ./configure
+ cd $(externals_src)/OSCx && ./configure LDFLAGS=
$(externals_src)/OSCx/libOSC/Makefile: $(externals_src)/OSCx/libOSC/Makefile.in
- cd $(externals_src)/OSCx && ./configure
+ cd $(externals_src)/OSCx && ./configure LDFLAGS=
$(externals_src)/OSCx/src/Makefile: $(externals_src)/OSCx/src/Makefile.in
- cd $(externals_src)/OSCx && ./configure
+ cd $(externals_src)/OSCx && ./configure LDFLAGS=
$(externals_src)/OSCx/src/OSCroute.$(EXTENSION): $(externals_src)/OSCx/configure \
$(externals_src)/OSCx/Makefile
@@ -1356,7 +1357,7 @@ $(externals_src)/pdp/configure: $(externals_src)/pdp/configure.ac
cd $(externals_src)/pdp && autoconf
$(externals_src)/pdp/Makefile.config: $(externals_src)/pdp/configure $(externals_src)/pdp/Makefile.config.in
- cd $(externals_src)/pdp && ./configure PD_CPPFLAGS="-I$(pd_src)/src" \
+ cd $(externals_src)/pdp && ./configure LDFLAGS= PD_CPPFLAGS="-I$(pd_src)/src" \
$(PDP_OPTIONS)
$(externals_src)/pdp/pdp.$(EXTENSION): $(externals_src)/pdp/Makefile.config
@@ -1770,6 +1771,7 @@ $(zexy_src)/configure: $(zexy_src)/configure.ac
$(zexy_src)/Makefile: $(zexy_src)/configure $(zexy_src)/Makefile.am $(zexy_src)/src/Makefile.am
cd $(zexy_src) && ./configure --disable-library \
+ LDFLAGS= \
--with-extension=$(EXTENSION) \
--prefix=$(prefix) \
--libdir=$(objectsdir) \
diff --git a/externals/iem16/src/Makefile b/externals/iem16/src/Makefile
index 25e5bbe..5be876d 100644
--- a/externals/iem16/src/Makefile
+++ b/externals/iem16/src/Makefile
@@ -22,7 +22,7 @@ aclocal.m4: acinclude.m4
aclocal
Make.config: Make.config.in configure
- ./configure $(CONFIGUREFLAGS)
+ ./configure $(CONFIGUREFLAGS) LDFLAGS=
-include $(SOURCES:.c=.d)
diff --git a/externals/moocow/extended/Makefile b/externals/moocow/extended/Makefile
index 2726d1a..9da4944 100644
--- a/externals/moocow/extended/Makefile
+++ b/externals/moocow/extended/Makefile
@@ -36,7 +36,7 @@ MOOCOW_BUILD_VERSION ?=2009-04-27.002
# CFLAGS="$(shell echo $(CFLAGS))" ##-- works
CONFIGURE_ARGS=\
CFLAGS="$(CFLAGS) -I/sw/include" \
- LDFLAGS="$(LDFLAGS) -L$(pd_src)/src -L$(pd_src)/bin -L$(pd_src)/obj -L/sw/lib" \
+ LDFLAGS="-L$(pd_src)/src -L$(pd_src)/bin -L$(pd_src)/obj -L/sw/lib" \
--with-pd-include="$(pd_src)/src" \
--with-pd-dir="$(MOOCOW_BUILD)" \
--disable-dependency-tracking
#==============================================================================#
#
# 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 pddp \
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:
#------------------------------------------------------------------------------#
# PDDP
pddp_install: $(helpdir)
install -p $(doc_src)/pddp/*.pd $(DESTDIR)$(helpdir)
# this file is used in key-help.pd
install -p $(doc_src)/pddp/glossary.txt $(DESTDIR)$(helpdir)
install -p $(doc_src)/pddp/keyboard_fun.txt $(DESTDIR)$(helpdir)
pddp_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;
#X connect 6 0 0 0;
#X connect 7 0 0 0;
#X connect 9 0 0 0;
#N canvas 414 90 494 642 10;
#X obj 334 314 route symbol;
#X obj 336 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 413 335 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 331 361 route symbol;
#X obj 333 381 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 410 382 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 318 269 test;
#X msg 357 269 symbol test;
#X obj 58 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 135 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 55 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 132 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 89 266 bang;
#X obj 56 311 route bang;
#X obj 53 358 route bang;
#X text 14 5 routing based on reserved words:;
#X obj 188 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 265 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 185 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 262 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 186 311 route float;
#X obj 183 358 route float;
#X msg 170 266 1;
#X msg 209 266 float 12;
#X obj 181 542 route list;
#X obj 181 561 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 249 562 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 168 580 route list;
#X obj 168 599 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 236 600 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 184 493 list 1 two 3;
#X msg 167 473 1 two 3;
#X msg 200 513 list one 2 three;
#X msg 365 289 symbol;
#X msg 113 484 list;
#X msg 224 287 float test;
#X text 26 245 These all output the as same atom type that is routed:
;
#X msg 15 266 bang test;
#X obj 71 131 route 1;
#X msg 71 183 2 3 4;
#X obj 71 164 prepend set;
#X msg 71 100 1 2 3 4;
#X msg 218 183 is not a list;
#X obj 218 164 prepend set;
#X obj 218 131 route this;
#X msg 218 100 this is not a list;
#X text 21 50 [route] has three modes \, first is float \, second is
symbol \, and third is data type. In the first two modes \, the first
element of the set is stripped off by [route].;
#X text 26 206 In the third mode \, [route] outputs the same atom type
(bang->bang \, float->float \, symbol->symbol).;
#X text 26 419 Lists do not behave the same with [route list] even
though it is interpreting incoming lists \, not just routing by keyword
\, as in the second symbol mode.;
#X msg 174 164 set;
#X text 157 164 re;
#X text 164 24 "bang" \, "float" \, "symbol" \, and "list";
#X connect 0 0 1 0;
#X connect 0 0 3 0;
#X connect 0 1 2 0;
#X connect 3 0 4 0;
#X connect 3 1 5 0;
#X connect 6 0 0 0;
#X connect 7 0 0 0;
#X connect 12 0 13 0;
#X connect 13 0 8 0;
#X connect 13 0 14 0;
#X connect 13 1 9 0;
#X connect 14 0 10 0;
#X connect 14 1 11 0;
#X connect 20 0 16 0;
#X connect 20 0 21 0;
#X connect 20 1 17 0;
#X connect 21 0 18 0;
#X connect 21 1 19 0;
#X connect 22 0 20 0;
#X connect 23 0 20 0;
#X connect 24 0 25 0;
#X connect 24 0 27 0;
#X connect 24 1 26 0;
#X connect 27 0 28 0;
#X connect 27 1 29 0;
#X connect 30 0 24 0;
#X connect 31 0 24 0;
#X connect 32 0 24 0;
#X connect 33 0 0 0;
#X connect 34 0 24 0;
#X connect 35 0 20 0;
#X connect 37 0 13 0;
#X connect 38 0 40 0;
#X connect 40 0 39 0;
#X connect 41 0 38 0;
#X connect 43 0 42 0;
#X connect 44 0 43 0;
#X connect 45 0 44 0;
#X connect 49 0 42 0;
#X connect 49 0 39 0;
#N canvas 514 341 621 440 10;
#X obj 57 205 select;
#X msg 52 108 symbol twenty;
#X msg 7 109 23;
#X msg 99 179 symbol twenty;
#X obj 57 250 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 93 250 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 86 158 23;
#X msg 402 108 symbol twenty;
#X msg 357 109 23;
#X msg 509 179 symbol twenty;
#X obj 407 250 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 493 250 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 496 158 23;
#X obj 407 205 select twenty;
#X msg 218 108 symbol twenty;
#X msg 177 109 23;
#X msg 289 179 symbol twenty;
#X obj 217 250 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 253 250 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 276 158 23;
#X obj 217 205 select 23;
#X text 68 59 a [select] without a creation argument cannot use a symbol
selector (you get an error in the Pd window);
#X connect 0 0 4 0;
#X connect 0 1 5 0;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 3 0 0 1;
#X connect 6 0 0 1;
#X connect 7 0 13 0;
#X connect 8 0 13 0;
#X connect 9 0 13 1;
#X connect 12 0 13 1;
#X connect 13 0 10 0;
#X connect 13 1 11 0;
#X connect 14 0 20 0;
#X connect 15 0 20 0;
#X connect 16 0 20 1;
#X connect 19 0 20 1;
#X connect 20 0 17 0;
#X connect 20 1 18 0;
#N canvas 366 31 565 405 10;
#X msg 168 46 anything 1 two three;
#X msg 180 66 one 2 3;
#X obj 167 308 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 362 305 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 190 114 list one 2 3;
#X msg 191 136 1 2 3;
#X obj 167 285 trigger anything bang float list pointer symbol;
#X obj 424 306 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 491 307 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 296 305 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 230 305 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 35 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 111 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 137 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 164 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 85 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 59 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 35 340 trigger a b f l p s;
#X text 48 20 how [trigger] interprets and converts data can be tricky:
;
#X text 315 59 "undefined lists";
#X text 288 127 lists;
#X msg 199 175 4;
#X msg 202 196 float 234;
#X text 280 181 floats;
#X msg 208 229 symbol blah;
#X text 303 242 symbols;
#X msg 188 84 asdf;
#X msg 208 251 symbol four;
#X connect 0 0 6 0;
#X connect 1 0 6 0;
#X connect 4 0 6 0;
#X connect 5 0 6 0;
#X connect 6 0 2 0;
#X connect 6 0 17 0;
#X connect 6 1 10 0;
#X connect 6 2 9 0;
#X connect 6 3 3 0;
#X connect 6 4 7 0;
#X connect 6 5 8 0;
#X connect 17 0 11 0;
#X connect 17 1 16 0;
#X connect 17 2 15 0;
#X connect 17 3 12 0;
#X connect 17 4 13 0;
#X connect 17 5 14 0;
#X connect 21 0 6 0;
#X connect 22 0 6 0;
#X connect 24 0 6 0;
#X connect 26 0 6 0;
#X connect 27 0 6 0;
#N canvas 242 94 461 496 10;
#X floatatom 161 180 5 0 0 0 - - -;
#X symbolatom 209 179 10 0 0 0 - - -;
#X obj 114 200 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144
-1 -1;
#X obj 114 156 route bang float symbol list;
#X obj 161 200 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 209 200 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 257 200 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X obj 305 200 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
-1 -1;
#X msg 151 83 lots of pie;
#X floatatom 191 405 5 0 0 0 - - -;
#X symbolatom 259 404 10 0 0 0 - - -;
#X obj 124 425 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144
-1 -1;
#X obj 191 425 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 259 425 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 328 425 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X msg 156 104 is this a list 2?;
#X text 144 61 [route] says these are not lists:;
#X msg 147 29 list lots of pie;
#X text 268 30 a list;
#X obj 123 381 trigger bang float symbol list;
#X msg 124 274 list lots of pie;
#X text 251 274 a list;
#X msg 158 330 lots of pie;
#X msg 158 349 is this a list 2?;
#X text 15 316 [trigger] says these are not floats \, lists \, symbols
or 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 8 0 3 0;
#X connect 9 0 12 0;
#X connect 10 0 13 0;
#X connect 15 0 3 0;
#X connect 17 0 3 0;
#X connect 19 0 11 0;
#X connect 19 1 9 0;
#X connect 19 2 10 0;
#X connect 19 3 14 0;
#X connect 20 0 19 0;
#X connect 22 0 19 0;
#X connect 23 0 19 0;
#N canvas 312 241 798 505 10;
#X floatatom 80 298 5 0 0 0 - - -;
#X symbolatom 128 297 10 0 0 0 - - -;
#X obj 33 318 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144 -1
-1;
#X obj 33 274 route bang float symbol list;
#X obj 80 318 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 128 318 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 176 318 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X obj 224 318 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
-1 -1;
#X msg 32 21 bang;
#X obj 46 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 72 31 element;
#X obj 68 54 bang;
#X msg 81 96 float bang;
#X text 164 96 invalid;
#X msg 86 118 symbol bang;
#X text 173 118 not a bang \, but a symbol;
#X msg 92 142 list bang;
#X msg 94 169 list bang bang bang;
#X text 163 141 not a bang \, but a symbol;
#X text 235 170 not a bang \, but a list;
#X msg 87 203 bang bang bang;
#X text 195 203 this is a bang;
#X msg 91 226 bang 1 2;
#X msg 92 247 bang one two;
#X text 160 226 this is a bang;
#X text 191 247 this is a bang;
#X msg 422 27 bang;
#X obj 436 46 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 469 43 element;
#X obj 447 74 bang;
#X msg 471 102 float bang;
#X text 554 102 invalid;
#X msg 476 124 symbol bang;
#X text 563 124 not a bang \, but a symbol;
#X msg 482 148 list bang;
#X msg 484 175 list bang bang bang;
#X text 553 147 not a bang \, but a symbol;
#X text 625 176 not a bang \, but a list;
#X msg 477 209 bang bang bang;
#X text 585 209 this is a bang;
#X msg 481 232 bang 1 2;
#X msg 482 253 bang one two;
#X text 550 232 this is a bang;
#X text 581 253 this is a bang;
#X obj 423 280 print;
#X text 482 74 this turns [element( into a bang;
#X msg 47 392 list bang;
#X obj 47 416 list trim;
#X obj 47 440 print;
#X text 124 414 another way to convert a list to a bang;
#X msg 77 77 list;
#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 8 0 3 0;
#X connect 9 0 3 0;
#X connect 10 0 11 0;
#X connect 11 0 3 0;
#X connect 12 0 3 0;
#X connect 14 0 3 0;
#X connect 16 0 3 0;
#X connect 17 0 3 0;
#X connect 20 0 3 0;
#X connect 22 0 3 0;
#X connect 23 0 3 0;
#X connect 26 0 44 0;
#X connect 27 0 44 0;
#X connect 28 0 29 0;
#X connect 29 0 44 0;
#X connect 30 0 44 0;
#X connect 32 0 44 0;
#X connect 34 0 44 0;
#X connect 35 0 44 0;
#X connect 38 0 44 0;
#X connect 40 0 44 0;
#X connect 41 0 44 0;
#X connect 46 0 47 0;
#X connect 47 0 48 0;
#X connect 50 0 3 0;
#N canvas 146 67 812 610 10;
#X msg 48 49 symbol pie;
#X msg 67 101 pie;
#X text 127 49 a symbol;
#X floatatom 96 297 5 0 0 0 - - -;
#X symbolatom 144 296 10 0 0 0 - - -;
#X obj 49 317 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144 -1
-1;
#X obj 49 273 route bang float symbol list;
#X obj 96 317 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 144 317 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 192 317 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X obj 240 317 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
-1 -1;
#X msg 86 220 lots of pie;
#X obj 142 538 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 233 538 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 370 96 symbol pie;
#X msg 387 142 pie;
#X text 449 96 a symbol;
#X floatatom 438 299 5 0 0 0 - - -;
#X symbolatom 504 298 10 0 0 0 - - -;
#X obj 371 319 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144
-1 -1;
#X obj 438 319 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 504 319 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 572 319 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X text 28 566 [select] requires a atom type selector in order to understand
the data (the float selector is implied);
#X text 54 79 [route] says these are not symbols:;
#X msg 74 121 word;
#X msg 91 241 is this a list 2?;
#X text 79 198 [route] says these are not lists:;
#X msg 82 166 list lots of pie;
#X text 203 167 a list;
#X msg 397 161 word;
#X msg 414 189 list lots of pie;
#X text 541 189 a list;
#X msg 415 214 lots of pie;
#X msg 416 238 is this a list 2?;
#X msg 474 444 symbol pie;
#X msg 505 497 pie;
#X msg 541 497 word;
#X symbolatom 473 554 10 0 0 0 - - -;
#X obj 473 571 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 616 486 (check Pd Window):;
#X text 482 474 symbolatom says these are not symbols;
#X obj 370 275 trigger bang float symbol list anything;
#X obj 639 319 bng 15 250 50 0 empty empty anything -15 23 1 12 -262144
-1 -1;
#X text 390 122 [trigger] says these are not symbols:;
#X text 360 16 The Pd window reports that it 'can only convert "s"
to "b" or "a"'. So it considers the non-symbols of type "s" since they
are converted only to "bang" and "anything". But type "s" is not the
same as "symbol" because the symbol is converted to all of the types.
;
#X msg 132 473 element;
#X msg 140 492 symbol element;
#X obj 141 517 select element;
#X obj 71 538 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 119 538 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 70 517 select 1;
#X text 190 472 not a symbol or a float;
#X text 15 444 [select] considers [element( as something other than
a symbol or a float:;
#X msg 433 512 bang;
#X symbolatom 60 417 10 0 0 0 - - -;
#X msg 60 367 symbol bang;
#X text 148 368 this is a symbol \, not a bang;
#X msg 76 390 symbol 5;
#X text 145 391 this is a blank symbol;
#X msg 377 365 symbol bang;
#X text 465 366 this is a symbol \, not a bang;
#X msg 393 388 symbol 5;
#X text 462 389 this is a blank symbol;
#X obj 376 416 print;
#X connect 0 0 6 0;
#X connect 1 0 6 0;
#X connect 3 0 7 0;
#X connect 4 0 8 0;
#X connect 6 0 5 0;
#X connect 6 1 3 0;
#X connect 6 2 4 0;
#X connect 6 3 9 0;
#X connect 6 4 10 0;
#X connect 11 0 6 0;
#X connect 14 0 42 0;
#X connect 15 0 42 0;
#X connect 17 0 20 0;
#X connect 18 0 21 0;
#X connect 25 0 6 0;
#X connect 26 0 6 0;
#X connect 28 0 6 0;
#X connect 30 0 42 0;
#X connect 31 0 42 0;
#X connect 33 0 42 0;
#X connect 34 0 42 0;
#X connect 35 0 38 0;
#X connect 36 0 38 0;
#X connect 37 0 38 0;
#X connect 38 0 39 0;
#X connect 42 0 19 0;
#X connect 42 1 17 0;
#X connect 42 2 18 0;
#X connect 42 3 22 0;
#X connect 42 4 43 0;
#X connect 46 0 48 0;
#X connect 46 0 51 0;
#X connect 47 0 48 0;
#X connect 48 0 12 0;
#X connect 48 1 13 0;
#X connect 51 0 49 0;
#X connect 51 1 50 0;
#X connect 54 0 38 0;
#X connect 56 0 55 0;
#X connect 58 0 55 0;
#X connect 60 0 64 0;
#X connect 62 0 64 0;