[SCM] pd-cyclone/master: New upstream version 0.2~beta2

umlaeute at users.alioth.debian.org umlaeute at users.alioth.debian.org
Wed Aug 24 20:08:49 UTC 2016


The following commit has been merged in the master branch:
commit 6b7ab726c88d51ba366effd04be1e9fa17021521
Author: IOhannes m zmölnig <zmoelnig at umlautQ.umlaeute.mur.at>
Date:   Wed Aug 24 21:56:12 2016 +0200

    New upstream version 0.2~beta2

diff --git a/Makefile b/Makefile
index f704fd3..ab781a6 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,7 @@ cflags = -Ishared -DHAVE_STRUCT_TIMESPEC
 uname := $(shell uname -s)
 ifeq (MINGW,$(findstring MINGW,$(uname)))
     ldlibs += -lpthread
+    exe.extension = .exe
 endif
 
 ################################################################################
@@ -334,6 +335,7 @@ spike~.class.sources := sickle/spike.c $(ssic)
 svf~.class.sources := sickle/svf.c $(ssic)
 tanh~.class.sources := sickle/tanh.c $(ssic)
 tanx~.class.sources := sickle/tanx.c $(ssic)
+teeth~.class.sources := sickle/teeth.c $(ssic)
 train~.class.sources := sickle/train.c $(ssic)
 trapezoid~.class.sources := sickle/trapezoid.c $(ssic)
 triangle~.class.sources := sickle/triangle.c $(ssic)
@@ -352,9 +354,14 @@ help/test.mid \
 help/voice.wav \
 LICENSE.txt \
 README.md \
-cyclone-meta.pd \
-$(wildcard abstractions/*.pd)
+cyclone-meta.pd
 
+# pthreadGC2.dll is required for Windows installation. It can be found in
+# the MinGW directory (usually C:\MinGW\bin) directory and should be 
+# copied to the current directory before installation or packaging.
+ifeq (MINGW,$(findstring MINGW,$(uname)))
+  datafiles += pthreadGC2.dll
+endif
 
 ################################################################################
 ### pdlibbuilder ###############################################################
@@ -374,7 +381,7 @@ include $(firstword $(wildcard Makefile.pdlibbuilder \
 ### cyclone extra targets ######################################################
 ################################################################################
 
-install: install-aliases
+install: install-aliases install-cyclist
 
 # on Linux, add symbolic links for lower case aliases
 install-aliases: all
@@ -415,3 +422,22 @@ ifeq ($(uname), Linux)
         ln -s -f Snapshot~-help.pd snapshot~-help.pd
 endif
 
+all: cyclist
+
+SHARED_DIR=shared
+cyclist$(exe.extension): $(SHARED_DIR)/common/binport.c \
+	$(SHARED_DIR)/common/lex.c \
+	$(SHARED_DIR)/unstable/standalone.c 
+	$(CC) -I$(SHARED_DIR) -DMIXED_STANDALONE $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
+install-cyclist: cyclist
+	$(INSTALL_DIR) -v "$(installpath)"
+	$(INSTALL_PROGRAM) cyclist* "$(installpath)"
+
+clean: clean-cyclist
+
+clean-cyclist:
+	rm -f cyclist$(exe.extension)
+	rm -f $(SHARED_DIR)/common/lex.o
+	rm -f $(SHARED_DIR)/unstable/standalone.o
+	rm -f $(SHARED_DIR)/common/binport.o
diff --git a/Makefile.pdlibbuilder b/Makefile.pdlibbuilder
index 79f2d51..a91bb39 100644
--- a/Makefile.pdlibbuilder
+++ b/Makefile.pdlibbuilder
@@ -1,4 +1,4 @@
-# Makefile.pdlibbuilder version 0.0.0, dated 2015-06-25
+# Makefile.pdlibbuilder version 0.2.3, dated 2016-03-29
 #
 # Helper makefile for Pure Data external libraries.
 # Written by Katja Vetter March-June 2015 for the public domain. No warranties.
@@ -66,6 +66,13 @@
 # - makefiledirs
 # - externalsdir
 #
+# Optional multiline defines evaluated per operating system:
+#
+# - forLinux
+# - forDarwin
+# - forWindows
+#
+#
 # Variables avaialable for (re)definition via command arguments:
 #
 # - pdbinpath (Windows only)
@@ -74,7 +81,9 @@
 # - prefix
 # - libdir
 # - pkglibdir
+# - CPPFLAGS
 # - CFLAGS
+# - LDFLAGS
 # - CC
 # - CXX
 # - INSTALL
@@ -140,6 +149,13 @@
 # is '..', meaning the direct parent. The value is used in search paths for 
 # pd core components (header files, and executable in the case of Windows).
 #
+# forLinux, forDarwin, forWindows:
+# Shorthand for 'variable definitions for Linux only' etc. Use like:
+#    define forLinux
+#      cflags += -DLINUX
+#      class.sources += linuxthing.c
+#    endef
+#
 # makefiles and makefiledirs: 
 # Extra makefiles or directories with makefiles that should be made in sub-make
 # processes.
@@ -161,9 +177,18 @@
 # Alias of pkglibdir. Can be defined in your makefile to enable project-
 # dependent relative install locations.
 #
+# CPPFLAGS:
+# Preprocessor flags which are not strictly required for building.
+#
 # CFLAGS:
-# Compiler (notably optimization) flags which are defined by 
-# Makefile.pdlibbuilder, but may be overriden via command argument.
+# Compiler flags which are not strictly required for building. Compiler flags
+# defined by Makefile.pdlibbuilder for warning, optimization and architecture
+# specification are overriden by CFLAGS.
+#
+# LDFLAGS:
+# Linker flags which are not strictly required for building. Linker flags
+# defined by Makefile.pdlibbuilder for architecture specification are overriden
+# by LDFLAGS.
 #
 # CC and CXX:
 # C and C++ compiler programs as defined in your build environment.
@@ -193,19 +218,19 @@
 # Object (.o) files are built in the directory of their source files.
 # Executables are built in current working directory. 
 #
-# Variable 'pdincludepath' stores the location where m_pd.h was found.
+# Variable 'pdincludepath' stores a location where m_pd.h is expected to reside.
 # Locations where Makefile.pdlibbuilder tries to find it, in order of priority:
 #
-# any OS:   $(externalsdir)../pd/src/
+# any OS:   $(externalsdir)../pd/src
 #
-# Linux:    /usr/include/pdextended/
-#           /usr/include/pd/
+# Linux:    /usr/include/pdextended
+#           /usr/include/pd
 #
-# OSX:      /Applications/Pd-extended.app/Contents/Resources/include/pdextended/
-#           /Applications/Pd.app/Contents/Resources/src/
+# OSX:      /Applications/Pd-extended.app/Contents/Resources/include/pdextended
+#           /Applications/Pd.app/Contents/Resources/src
 #
-# Windows:  %PROGRAMFILES%/pd/include/pdextended/
-#           %PROGRAMFILES%/pd/src/
+# Windows:  %PROGRAMFILES%/pd/include/pdextended
+#           %PROGRAMFILES%/pd/src
 #
 # The path for installation of all library components is constructed as:
 #
@@ -225,7 +250,8 @@
 #=== targets ===================================================================
 #
 #
-# all: build classes (default) or library blob (if make-lib-executable=true)
+# all: build $(executables) plus optional post target
+# post: target to build after $(executables)
 # alldebug: build all with -g option turned on for debug symbols
 # <classname>: force clean build of an individual class
 # <sourcefile>.pre: make preprocessor output file in current working directory
@@ -240,6 +266,11 @@
 # depend: print generated prerequisites
 # coffee: dummy target
 #
+# Variable $(executables) expands to class executables plus optional shared lib,
+# or alternatively to single lib executable when make-lib-executable=true.
+# Targets pre and post can be defined by library makefile. Make sure to include
+# Makefile.pdlibbuilder first so default target all will not be redefined.
+#
 #
 #=== Pd-extended libdir concept ================================================
 #
@@ -314,13 +345,27 @@ Makefile.pdlibbuilder = true
 
 
 ################################################################################
-### variables: files ###########################################################
+### variables: library name and version ########################################
 ################################################################################
 
 
 # strip possibles spaces from lib.name, they mess up calculated file names
 lib.name := $(strip $(lib.name))
 
+# if meta file exists, check library version 
+metafile := $(wildcard $(lib.name)-meta.pd)
+
+ifdef metafile
+  lib.version := $(shell sed -n \
+    's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
+    $(metafile))
+endif
+
+
+################################################################################
+### variables: files ###########################################################
+################################################################################
+
 
 #=== sources ===================================================================
 
@@ -379,29 +424,29 @@ endif
 #=== flags per architecture ====================================================
 
 
-# Set architecture-dependent flags, mainly for Linux. For Mac and Windows, 
-# arch.flags are overriden below.
+# Set architecture-dependent cflags, mainly for Linux. For Mac and Windows, 
+# arch.c.flags are overriden below.
 
 machine := $(shell uname -m)
 
 # Raspberry Pi 1st generation
 ifeq ($(machine), armv6l)
-  arch.flags = -march=armv6 -mfpu=vfp -mfloat-abi=hard
+  arch.c.flags = -march=armv6 -mfpu=vfp -mfloat-abi=hard
 endif
 
 # Beagle, Udoo, RPi2 etc.
 ifeq ($(machine), armv7l)
-  arch.flags = -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard
+  arch.c.flags = -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard
 endif
 
 # Intel 32 bit, build with SSE and SSE2 instructions
 ifeq ($(findstring $(machine), i386 i686), $(machine))
-  arch.flags = -march=pentium4 -mfpmath=sse -msse -msse2
+  arch.c.flags = -march=pentium4 -mfpmath=sse -msse -msse2
 endif
 
 # Intel/AMD 64 bit, build with SSE, SSE2 and SSE3 instructions
 ifeq ($(findstring $(machine), ia64 x86_64), $(machine))
-  arch.flags = -march=core2 -mfpmath=sse -msse -msse2 -msse3 
+  arch.c.flags = -march=core2 -mfpmath=sse -msse -msse2 -msse3 
 endif
 
 
@@ -409,20 +454,25 @@ endif
 
 
 # The following systems are defined: Linux, Darwin, Windows. GNU and
-# GNU/kFreeBSD are treated as Linux to get the same options. 
+# GNU/kFreeBSD are treated as Linux to get the same options. System-specific
+# multiline defines (optionally set in library makefile) are conditionally
+# evaluated here.
 
 uname := $(shell uname)
 
 ifeq ($(findstring $(uname), Linux GNU GNU/kFreeBSD), $(uname))
   system = Linux
+  $(eval $(forLinux))
 endif
 
 ifeq ($(uname), Darwin)
   system = Darwin
+  $(eval $(forDarwin))
 endif
 
 ifeq ($(findstring MINGW, $(uname)), MINGW)
   system = Windows
+  $(eval $(forWindows))
 endif
 
 # TODO: Cygwin, Android
@@ -435,10 +485,10 @@ ifeq ($(system), Linux)
   prefix = /usr/local
   libdir := $(prefix)/lib
   pkglibdir = $(libdir)/pd-externals
-  pdincludepath := $(firstword $(dir $(wildcard \
-    $(externalsdir)/../pd/src/m_pd.h \
-    /usr/include/pdextended/m_pd.h \
-    /usr/include/pd/m_pd.h)))
+  pdincludepath := $(firstword $(wildcard \
+    $(externalsdir)/../pd/src \
+    /usr/include/pdextended \
+    /usr/include/pd))
   extension = pd_linux
   cpp.flags := -DUNIX
   c.flags := -fpic
@@ -463,12 +513,11 @@ endif
 
 ifeq ($(system), Darwin)
   pkglibdir = $(HOME)/Library/Pd
-  pdincludepath := $(firstword $(dir $(wildcard \
-    $(externalsdir)/../pd/src/m_pd.h \
-    /Applications/Pd-extended.app/Contents/Resources/include/pdextended/m_pd.h \
-    /Applications/Pd.app/Contents/Resources/src/m_pd.h)))
+  pdincludepath := $(firstword $(wildcard \
+    $(externalsdir)/../pd/src \
+    /Applications/Pd-extended*.app/Contents/Resources/include/pdextended \
+    /Applications/Pd*.app/Contents/Resources/src))
   extension = pd_darwin
-  arch.flags =
   cpp.flags := -DUNIX -DMACOSX -I /sw/include
   c.flags := 
   c.ldflags := -undefined suppress -flat_namespace -bundle
@@ -482,10 +531,12 @@ ifeq ($(system), Darwin)
   stripflags = -x
   ifeq ($(machine), i386)
     cxx.flags := -fcheck-new
-    arch.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
+    arch.c.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
+    arch.ld.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
   endif
   ifeq ($(machine), x86_64)
-    arch.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5
+    arch.c.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5
+    arch.ld.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5
   endif
 endif
 
@@ -503,16 +554,16 @@ endif
 # paths for 32-bit executables on 64-bit Windows aren't yet defined here (TODO)
 ifeq ($(system), Windows)
   pkglibdir := $(APPDATA)/Pd
-  pdbinpath := $(wildcard $(externalsdir)/../pd/bin/)
-  pdincludepath := $(wildcard $(externalsdir)/../pd/src/)
+  pdbinpath := $(wildcard $(externalsdir)/../pd/bin)
+  pdincludepath := $(wildcard $(externalsdir)/../pd/src)
   ifndef pdbinpath
-    pdbinpath := $(shell ls -d "$(PROGRAMFILES)/pd/bin/")
+    pdbinpath := $(shell ls -d "$(PROGRAMFILES)/pd/bin")
   endif
   ifndef pdincludepath
-    pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/include/pdextended/")
+    pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/include/pdextended")
   endif
   ifndef pdincludepath
-    pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/src/")
+    pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/src")
   endif
 endif
 
@@ -523,18 +574,18 @@ ifeq ($(system), Windows)
   extension = dll
   CC = gcc
   CXX = g++
-  arch.flags := -march=pentium4 -msse -msse2 -mfpmath=sse
+  arch.c.flags := -march=pentium4 -msse -msse2 -mfpmath=sse
   cpp.flags := -DMSW -DNT
   c.flags :=
   c.ldflags := -static-libgcc -shared \
-    -Wl,--enable-auto-import "$(pdbinpath)pd.dll"
+    -Wl,--enable-auto-import "$(pdbinpath)/pd.dll"
   c.ldlibs :=
   cxx.flags := -fcheck-new
   cxx.ldflags := -static-libstdc++ -shared \
-    -Wl,--enable-auto-import "$(pdbinpath)pd.dll"
+    -Wl,--enable-auto-import "$(pdbinpath)/pd.dll"
   cxx.ldlibs :=
   shared.extension = dll
-  shared.ldflags := -static-libgcc -shared "$(pdbinpath)pd.dll"
+  shared.ldflags := -static-libgcc -shared "$(pdbinpath)/pd.dll"
   stripflags = --strip-unneeded -R .note -R .comment
 endif
 
@@ -560,9 +611,9 @@ pdincludepathwithspaces := $(if $(word 2, $(pdincludepath)), $(pdincludepath))
 
 
 # From GNU make docs: 'Users expect to be able to specify CFLAGS freely
-# themselves.' So we use CFLAGS to define platform-independent options which 
-# are not strictly required for compilation: optimizations and warnings. CFLAGS
-# can be safely overriden using a make command argument.
+# themselves.' So we use CFLAGS to define options which  are not strictly
+# required for compilation: optimizations, architecture specifications, and 
+# warnings. CFLAGS can be safely overriden using a make command argument.
 # Variables cflags, ldflags and ldlibs may be defined in including makefile.
 
 optimization.flags = -O3 -ffast-math -funroll-loops -fomit-frame-pointer
@@ -573,19 +624,25 @@ ifdef suppress-wunused
   warn.flags += $(addprefix -Wno-unused-, function parameter value variable)
 endif
 
-CFLAGS = $(warn.flags) $(optimization.flags)
+CFLAGS = $(warn.flags) $(optimization.flags) $(arch.c.flags)
 
 # preprocessor flags
-cpp.flags += -DPD -I "$(pdincludepath)"
+cpp.flags += -DPD -I "$(pdincludepath)" $(CPPFLAGS)
 
-# flags for C compiler / linker
+# architecture specifications for linker are overridable by LDFLAGS
+LDFLAGS := $(arch.ld.flags)
+
+# now add the same ld flags to shared dynamic lib
+shared.ldflags := $(shared.ldflags) $(LDFLAGS)
+
+# accumulated flags for C compiler / linker
 c.flags := $(cpp.flags) $(c.flags) $(cflags) $(CFLAGS)
-c.ldflags := $(c.ldflags) $(ldflags)
+c.ldflags := $(c.ldflags) $(ldflags) $(LDFLAGS)
 c.ldlibs := $(c.ldlibs) $(ldlibs)
 
-# flags for C++ compiler / linker
+# accumulated flags for C++ compiler / linker
 cxx.flags := $(cpp.flags) $(cxx.flags) $(cflags) $(CFLAGS)
-cxx.ldflags := $(cxx.ldflags) $(ldflags)
+cxx.ldflags := $(cxx.ldflags) $(ldflags) $(LDFLAGS)
 cxx.ldlibs := $(cxx.ldlibs) $(ldlibs)
 
 
@@ -623,10 +680,17 @@ else
   goals := all
 endif
 
-# check if m_pd.h is found and print info about it
-$(if $(shell ls "$(pdincludepath)m_pd.h"), \
-  $(info ++++ info: using Pd API $(pdincludepath)m_pd.h), \
-  $(warning Where is your m_pd.h? Do 'make help' for info.))
+# store path to Pd API m_pd.h if it is found
+ifdef pdincludepath
+  mpdh := $(shell ls "$(pdincludepath)/m_pd.h")
+endif
+
+# when making target all, check if m_pd.h is found and print info about it
+ifeq ($(goals), all)
+  $(if $(mpdh), \
+    $(info ++++ info: using Pd API $(mpdh)), \
+    $(warning Where is Pd API m_pd.h? Do 'make help' for info.))
+endif
 
 # print target info
 $(info ++++ info: making target $(goals) $(if $(lib.name),in lib $(lib.name)))
@@ -652,20 +716,6 @@ else
 endif
 
 
-#=== library version ===========================================================
-
-
-# if meta file exists, check library version 
-
-metafile := $(wildcard $(lib.name)-meta.pd)
-
-ifdef metafile
-  lib.version := $(shell sed -n \
-    's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
-    $(lib.name)-meta.pd)
-endif
-
-
 ################################################################################
 ### rules: special targets #####################################################
 ################################################################################
@@ -677,7 +727,8 @@ MAKEFLAGS += --no-builtin-rules
 
 .PRECIOUS:
 .SUFFIXES:
-.PHONY: all build-classes build-lib $(classes) $(makefiledirs) $(makefiles)\
+.PHONY: all post build-lib \
+        $(classes) $(makefiledirs) $(makefiles) \
         install install-executables install-datafiles install-datadirs \
         force clean vars allvars depend help
 
@@ -687,10 +738,17 @@ MAKEFLAGS += --no-builtin-rules
 ################################################################################
 
 
-# target all builds class executables plus optional shared lib
-# or alternatively a single lib executable when make-lib-executable=true
-all: $(executables)
-	$(info ++++ info: $(if $(executables),executables in $(lib.name) completed))
+# Target all forces the build of targets [$(executables) post] in
+# deterministic order. Target $(executables) builds class executables plus 
+# optional shared lib or alternatively a single lib executable when 
+# make-lib-executable=true. Target post is optionally defined by
+# library makefile.
+
+all: post
+post: $(executables)
+
+all:
+	$(info ++++info: target all in lib $(lib.name) completed)
 
 # build all with -g option turned on for debug symbols
 alldebug: c.flags += -g
@@ -706,7 +764,6 @@ alldebug: all
 # argument $2 = class basename
 define link-class
   $(compile-$1) \
-  $(arch.flags) \
   $($1.ldflags) $($2.class.ldflags) \
   -o $2.$(extension) \
   $(addsuffix .o, $(basename $($2.class.sources))) \
@@ -733,7 +790,6 @@ build-lib: $(lib.name).$(extension)
 # argument $1 = compiler type (c or cxx)
 define link-lib
   $(compile-$1) \
-  $(arch.flags) \
   $($1.ldflags) $(lib.ldflags) \
   -o $(lib.name).$(extension) $(all.objects) \
   $($1.ldlibs) $(lib.ldlibs)
@@ -756,7 +812,6 @@ endif
 # argument $1 = compiler type (c or cxx)
 define link-shared
   $(compile-$1) \
-  $(arch.flags) \
   $(shared.ldflags) \
   -o lib$(lib.name).$(shared.extension) $(shared.objects) \
   $($1.ldlibs) $(shared.ldlibs)
@@ -780,7 +835,7 @@ define make-object-file
   $(info ++++ info: making $@ in lib $(lib.name))
   $(compile-$1) \
   $($1.flags) \
-  $(arch.flags) -o $@ -c $<
+  -o $@ -c $<
 endef
 
 # Three rules to create .o files. These are double colon 'terminal' rules,
@@ -829,10 +884,17 @@ $(foreach v, $(classes), $(eval $(declare-class-executable-target)))
 # which case implicit prerequisites are not checked.
 
 # When the Pd include path contains spaces it will mess up the implicit
-# prerequisites rules so we do not evaluate them in that case.
+# prerequisites rules. Also it is known that multiple arch flags are
+# incompatible with preprocessor option -MM on OSX <= 10.5. Dependency
+# tracking must be disabled in those cases.
+
+oldfat := $(and $(filter ppc i386, $(machine)), \
+          $(filter-out 0 1, $(words $(filter -arch, $(c.flags)))))
 
-ifndef pdincludepathwithspaces
-  must-build-everything := $(filter all default lib, $(goals))
+disable-dependency-tracking := pdincludepathwithspaces oldfat
+
+ifndef disable-dependency-tracking
+  must-build-everything := $(filter all, $(goals))
   must-build-class := $(filter $(classes), $(goals))
   must-build-sources := $(foreach v, $(must-build-class), $($v.class.sources))
 endif
@@ -904,7 +966,6 @@ define make-assembly-file
   $(compile-$1) \
   -c -Wa,-a,-ad -fverbose-asm \
   $($1.flags) \
-  $(arch.flags) \
   $< > $(notdir $*.lst)
 endef
 
@@ -1094,9 +1155,11 @@ depend:
 
 # brief info about targets and paths
 
-mpdh := $(shell ls "$(pdincludepath)m_pd.h")
-mpdh := $(if $(mpdh), $(mpdh),  m_pd.h not found. Is Pd(-extended) installed?)
-
+ifdef mpdh
+  mpdhinfo := $(mpdh)
+else
+  mpdhinfo := m_pd.h was not found. Is Pd(-extended) installed?
+endif
 
 help:
 	@echo
@@ -1108,15 +1171,16 @@ help:
 	@echo "    help:    print this help text"
 	@echo
 	@echo "  Pd API m_pd.h:"
-	@echo "    $(shell ls "$(pdincludepath)m_pd.h")"
-	@echo "  You may specify your preferred include path as argument to"
+	@echo "    $(mpdhinfo)"
+	@echo "  You may specify your preferred Pd include path as argument to"
 	@echo "  the make command, like 'pdincludepath=path/to/pd/src'."
 	@echo
 	@echo "  Path for installation of your libdir(s):"
 	@echo "    $(objectsdir)"
 	@echo "  Alternatively you may specify your path for installation as argument"
 	@echo "  to the make command, like 'objectsdir=path/to/pd-externals'."
-	@echo "  For detailed info read the doc sections in Makefile.pdlibbuilder."
+	@echo
+	@echo "  Default paths are listed in the doc sections in Makefile.pdlibbuilder."
 	@echo
 
 
diff --git a/README.md b/README.md
index 6b767ee..f0df43c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,8 @@
-pd-cyclone is a 'fork' of the https://git.puredata.info/cgit/svn2git/libraries/miXed.git/ migrated repository. It is cleaned to contain only the cyclone functionality. Other parts of the miXed library are either moved (pddp) or unmaintained (toxy, ViCious, riddle).
+This is a forked version of https://svn.code.sf.net/p/pure-data/svn/trunk/externals/miXed/cyclone. For active development see https://github.com/porres/pd-cyclone. The local repository is in 'maintainance' only mode.
+
+<hr>
+
+pd-cyclone is a 'fork' of https://svn.code.sf.net/p/pure-data/svn/trunk/externals/miXed/cyclone (via the https://git.puredata.info/cgit/svn2git/libraries/miXed.git/ migrated repository). It is cleaned to contain only the cyclone functionality. Other parts of the miXed library are either moved (pddp) or unmaintained (toxy, ViCious, riddle).
 
 Within the cyclone file set, the transition to a new build system, started with 0.1-alpha57 is completed. The initial version at this github repository will be 0.2beta1.
 
diff --git a/abstractions/teeth~.pd b/abstractions/teeth~.pd
deleted file mode 100644
index a981c59..0000000
--- a/abstractions/teeth~.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#N canvas 34 122 606 523 10;
-#X obj 186 308 +~;
-#X obj 186 348 +~;
-#X obj 278 316 *~;
-#X obj 201 279 *~;
-#X obj 153 227 *~;
-#X obj 153 85 inlet~;
-#X obj 364 313 block~ 1;
-#X obj 186 419 outlet~;
-#X obj 202 387 delwrite~ \$0-y2 1000;
-#X obj 24 312 delwrite~ \$0-x2 1000;
-#X obj 201 213 vd~ \$0-x2;
-#X obj 278 228 vd~ \$0-y2;
-#X obj 201 85 inlet~;
-#X obj 278 85 inlet~;
-#X obj 327 85 inlet~;
-#X obj 381 85 inlet~;
-#X obj 430 85 inlet~;
-#X connect 0 0 1 0;
-#X connect 1 0 7 0;
-#X connect 1 0 8 0;
-#X connect 2 0 1 1;
-#X connect 3 0 0 1;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 5 0 9 0;
-#X connect 10 0 3 0;
-#X connect 11 0 2 0;
-#X connect 12 0 10 0;
-#X connect 13 0 11 0;
-#X connect 14 0 4 1;
-#X connect 15 0 3 1;
-#X connect 16 0 2 1;
diff --git a/build_counter b/build_counter
index 6a681d3..8a5cdca 100644
--- a/build_counter
+++ b/build_counter
@@ -1,7 +1,7 @@
 #define CYCLONE_VERSION "0.2"
 #define CYCLONE_RELEASE "beta"
-#define CYCLONE_BUILD 1
+#define CYCLONE_BUILD 2
 
 #if 0
-CYCLONE_SNAPSHOT = 0.2beta1
+CYCLONE_SNAPSHOT = 0.2beta2
 #endif
diff --git a/cyclone-meta.pd b/cyclone-meta.pd
index 4562f9f..0193b76 100644
--- a/cyclone-meta.pd
+++ b/cyclone-meta.pd
@@ -7,7 +7,7 @@
 #X text 16 52 DESCRIPTION variable size wavetable;
 #X text 16 88 INLET_1 float signal;
 #X text 16 106 INLET_2 float signal;
-#X text 15 160 VERSION 0.1-alpha56;
+#X text 15 160 VERSION 0.2-beta1;
 #X text 15 178 AUTHOR Krzysztof Czaja;
 #X text 16 196 RELEASE_DATE 2002;
 #X text 17 215 WEBSITE http://suita.chopin.edu.pl/~czaja/miXed/externs/cyclone.html
diff --git a/help/Scope~-help.pd b/help/Scope~-help.pd
index cceadd3..4018da3 100644
--- a/help/Scope~-help.pd
+++ b/help/Scope~-help.pd
@@ -1,4 +1,4 @@
-#N canvas 950 149 574 532 10;
+#N canvas 390 99 574 532 10;
 #X obj 0 959 cnv 15 552 21 empty empty empty 20 12 0 14 -233017 -33289
 0;
 #X obj 0 407 cnv 3 550 3 empty empty inlets 8 12 0 13 -228856 -1 0
@@ -34,7 +34,6 @@ adapted the patch to pd-extended 2015-02-02;
 #X text 12 23 Graphic Signal Display;
 #X text 99 416 signal;
 #X text 265 417 - signal to display;
-#X text 99 463 buffsize <int>;
 #X text 99 504 range <int> <int>;
 #X text 265 504 - change range of display;
 #X text 99 525 frgb <int> <int> <int>;
@@ -170,19 +169,20 @@ color (102 \, 255 \, 51) \, 14/16-background color (135 \, 135 \, 135)
 #X restore 172 382 pd powOf2;
 #X text 98 856 The Max scope~ object has no arguments \, but many attributes.
 ;
-#X connect 20 0 40 0;
-#X connect 20 0 63 0;
-#X connect 22 0 19 0;
-#X connect 26 0 19 0;
-#X connect 27 0 26 0;
-#X connect 30 0 19 0;
-#X connect 31 0 32 0;
-#X connect 31 0 33 0;
-#X connect 32 0 19 0;
-#X connect 40 0 66 0;
-#X connect 44 0 19 0;
-#X connect 45 0 19 0;
-#X connect 47 0 19 0;
-#X connect 62 0 66 1;
-#X connect 66 0 19 0;
-#X connect 70 0 72 0;
+#X text 99 463 bufsize <int>;
+#X connect 19 0 39 0;
+#X connect 19 0 62 0;
+#X connect 21 0 18 0;
+#X connect 25 0 18 0;
+#X connect 26 0 25 0;
+#X connect 29 0 18 0;
+#X connect 30 0 31 0;
+#X connect 30 0 32 0;
+#X connect 31 0 18 0;
+#X connect 39 0 65 0;
+#X connect 43 0 18 0;
+#X connect 44 0 18 0;
+#X connect 46 0 18 0;
+#X connect 61 0 65 1;
+#X connect 65 0 18 0;
+#X connect 69 0 71 0;
diff --git a/help/lookup~-help.pd b/help/lookup~-help.pd
index 1677c6c..c9c0e5e 100644
--- a/help/lookup~-help.pd
+++ b/help/lookup~-help.pd
@@ -1,4 +1,4 @@
-#N canvas 521 82 568 529 10;
+#N canvas 497 80 568 529 10;
 #X obj 0 577 cnv 15 552 21 empty empty empty 20 12 0 14 -233017 -33289
 0;
 #X obj 0 345 cnv 3 550 3 empty empty inlets 8 12 0 13 -228856 -1 0
@@ -76,13 +76,11 @@ adapted the patch to pd-extended 2015-02-02;
 #X connect 8 0 6 0;
 #X restore 97 165 pd mux;
 #X obj 158 126 vradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144
--1 -1 1;
+-1 -1 0;
 #X text 175 122 osc~;
 #X text 175 141 phasor~;
 #X obj 157 98 phasor~ 1;
-#X obj 380 104 vsl 15 128 -1 1 0 0 empty \$0-slider empty 0 -9 0 10
--262144 -1 -1 4241 1;
-#N canvas 540 424 431 275 visualise 0;
+#N canvas 536 426 431 275 visualise 0;
 #X obj 159 121 cyclone/Snapshot~ 100;
 #X obj 159 157 s \$0-slider;
 #X obj 159 81 inlet~;
@@ -93,15 +91,16 @@ adapted the patch to pd-extended 2015-02-02;
 #X restore 380 238 pd visualise;
 #X floatatom 97 76 5 0 0 0 - - -, f 5;
 #X text 101 517 1) symbol;
-#N canvas 395 679 433 286 load 0;
-#X obj 120 98 soundfiler;
-#X obj 120 49 f \$0;
+#N canvas 392 693 433 286 load 1;
+#X obj 120 110 soundfiler;
+#X obj 120 61 f \$0;
 #X obj 120 27 loadbang;
-#X msg 120 70 read -resize voice.wav \$1-voice;
-#X floatatom 120 119 8 0 0 0 - - -, f 8;
+#X msg 120 82 read -resize voice.wav \$1-voice;
+#X floatatom 120 131 8 0 0 0 - - -, f 8;
 #X obj 1 2 cnv 15 425 20 empty empty empty 3 12 0 14 -204280 -1 0;
 #X text 4 3 Load the voice.wav file;
-#X obj 120 138 table \$0-voice;
+#X obj 120 150 table \$0-voice;
+#X obj 121 172 table \$0-dummy;
 #X connect 0 0 4 0;
 #X connect 1 0 3 0;
 #X connect 2 0 1 0;
@@ -116,8 +115,6 @@ adapted the patch to pd-extended 2015-02-02;
 #X obj 111 122 *~ 2;
 #X obj 112 144 -~ 1;
 #X msg 293 183 42079;
-#X text 118 374 set;
-#X text 183 374 - sets the array/table used;
 #X msg 198 183 20000;
 #X msg 192 162 0;
 #X text 101 553 3) float;
@@ -128,20 +125,39 @@ adapted the patch to pd-extended 2015-02-02;
 #X text 182 534 - initial offset in array/table (default 0);
 #X text 183 552 - initial end-point array/table (default 512);
 #X text 183 404 - offset in the array/table;
-#X connect 22 0 28 0;
-#X connect 22 0 36 0;
+#X obj 376 205 hsl 160 15 -1 1 0 0 empty \$0-slider empty -2 -8 0 10
+-262144 -1 -1 15614 1;
+#X text 366 190 "continous soft and relaxing";
+#X text 183 374 - sets the used array/table to <arg>;
+#X text 118 374 set <arg>;
+#X obj 327 83 \$0;
+#X obj 307 84 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 307 103 set \$1-dummy;
+#X obj 414 83 \$0;
+#X obj 394 84 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 394 103 set \$1-voice;
+#X connect 22 0 27 0;
+#X connect 22 0 35 0;
 #X connect 23 0 22 2;
-#X connect 26 0 37 0;
-#X connect 29 0 45 0;
-#X connect 32 0 36 2;
-#X connect 33 0 29 0;
-#X connect 33 0 46 0;
-#X connect 36 0 21 0;
-#X connect 36 0 21 1;
-#X connect 37 0 38 0;
-#X connect 38 0 22 1;
-#X connect 39 0 36 2;
-#X connect 42 0 36 1;
-#X connect 43 0 36 1;
-#X connect 45 0 22 0;
-#X connect 46 0 26 0;
+#X connect 26 0 36 0;
+#X connect 28 0 42 0;
+#X connect 31 0 35 2;
+#X connect 32 0 28 0;
+#X connect 32 0 43 0;
+#X connect 35 0 21 0;
+#X connect 35 0 21 1;
+#X connect 36 0 37 0;
+#X connect 37 0 22 1;
+#X connect 38 0 35 2;
+#X connect 39 0 35 1;
+#X connect 40 0 35 1;
+#X connect 42 0 22 0;
+#X connect 43 0 26 0;
+#X connect 53 0 55 0;
+#X connect 54 0 53 0;
+#X connect 55 0 35 0;
+#X connect 56 0 58 0;
+#X connect 57 0 56 0;
+#X connect 58 0 35 0;
diff --git a/help/mstosamps~-help.pd b/help/mstosamps~-help.pd
index 99a8a03..d50db32 100644
--- a/help/mstosamps~-help.pd
+++ b/help/mstosamps~-help.pd
@@ -1,4 +1,4 @@
-#N canvas 615 83 558 489 10;
+#N canvas 581 79 558 489 10;
 #X obj 0 461 cnv 15 552 21 empty empty empty 20 12 0 14 -233017 -33289
 0;
 #X obj 0 287 cnv 3 550 3 empty empty inlets 8 12 0 13 -228856 -1 0
@@ -26,9 +26,10 @@ adapted the patch to pd-extended 2015-02-02;
 ;
 #X obj 0 405 cnv 3 550 3 empty empty arguments 8 12 0 13 -228856 -1
 0;
-#N canvas 319 385 428 109 Related_objects 0;
+#N canvas 317 386 428 109 Related_objects 0;
 #X obj 0 0 cnv 15 425 20 empty empty empty 3 12 0 14 -204280 -1 0;
 #X text 6 1 Related Objects;
+#X obj 8 31 cyclone/sampstoms~;
 #X restore 205 463 pd Related_objects;
 #X obj 79 298 cnv 17 3 35 empty empty 0 5 9 0 16 -228856 -162280 0
 ;
@@ -39,10 +40,10 @@ adapted the patch to pd-extended 2015-02-02;
 #X obj 479 6 mstosamps~;
 #X msg 286 74 0 \, 1000 3000;
 #X floatatom 286 257 0 0 0 0 - - -;
-#X floatatom 155 231 0 0 0 0 - - -;
+#X floatatom 155 220 0 0 0 0 - - -;
 #X floatatom 50 98 0 0 0 0 - - -;
 #X text 278 49 or convert signal values;
-#X text 327 260 number of samples;
+#X text 340 258 number of samples;
 #X text 112 297 float;
 #X text 179 297 - number of milliseconds;
 #X text 112 318 signal;
@@ -51,20 +52,27 @@ adapted the patch to pd-extended 2015-02-02;
 #X text 179 357 - number of samples out (as signal);
 #X text 112 426 (none);
 #X text 112 379 float;
-#X text 179 379 - number of samples (given float);
 #X obj 81 379 cnv 17 3 17 empty empty 1 5 9 0 16 -228856 -162280 0
 ;
 #X text 12 23 Convert milliseconds to number of samples;
 #X text 47 50 Use as a calculator;
 #X text 47 62 or for float parameters;
-#X obj 50 164 cyclone/mstosamps~;
-#X obj 286 164 cyclone/mstosamps~;
+#X obj 50 160 cyclone/mstosamps~;
+#X obj 286 160 cyclone/mstosamps~;
 #X obj 286 235 cyclone/Snapshot~ 100;
 #X obj 519 252 dspSwitch~;
 #X obj 286 94 cyclone/Line~;
-#X connect 10 0 33 0;
-#X connect 13 0 29 0;
-#X connect 29 1 12 0;
-#X connect 30 0 31 0;
-#X connect 31 0 11 0;
-#X connect 33 0 30 0;
+#X floatatom 51 263 0 0 0 0 - - -;
+#X obj 51 241 cyclone/Snapshot~ 100;
+#X floatatom 391 216 8 0 0 0 - - -, f 8;
+#X text 179 379 - number of samples (equal to the last sample of the
+block);
+#X connect 10 0 32 0;
+#X connect 13 0 28 0;
+#X connect 28 0 34 0;
+#X connect 28 1 12 0;
+#X connect 29 0 30 0;
+#X connect 29 1 35 0;
+#X connect 30 0 11 0;
+#X connect 32 0 29 0;
+#X connect 34 0 33 0;
diff --git a/help/sampstoms~-help.pd b/help/sampstoms~-help.pd
index 92ba039..6086edc 100644
--- a/help/sampstoms~-help.pd
+++ b/help/sampstoms~-help.pd
@@ -1,4 +1,4 @@
-#N canvas 618 82 556 460 10;
+#N canvas 581 79 556 460 10;
 #X obj 0 433 cnv 15 552 21 empty empty empty 20 12 0 14 -233017 -33289
 0;
 #X obj 0 266 cnv 3 550 3 empty empty inlets 8 12 0 13 -228856 -1 0
@@ -27,9 +27,10 @@ adapted the patch to pd-extended 2015-02-02;
 ;
 #X obj 0 388 cnv 3 550 3 empty empty arguments 8 12 0 13 -228856 -1
 0;
-#N canvas 316 355 428 109 Related_objects 0;
+#N canvas 364 623 428 109 Related_objects 0;
 #X obj 0 0 cnv 15 425 20 empty empty empty 3 12 0 14 -204280 -1 0;
 #X text 6 1 Related Objects;
+#X obj 10 31 cyclone/mstosamps~;
 #X restore 201 435 pd Related_objects;
 #X obj 79 275 cnv 17 3 35 empty empty 0 5 9 0 16 -228856 -162280 0
 ;
@@ -43,7 +44,7 @@ adapted the patch to pd-extended 2015-02-02;
 #X text 106 334 signal;
 #X msg 292 71 0 \, 44100 3000;
 #X floatatom 292 241 0 0 0 0 - - -;
-#X floatatom 137 233 0 0 0 0 - - -;
+#X floatatom 137 186 0 0 0 0 - - -;
 #X floatatom 32 83 0 0 0 0 - - -;
 #X text 106 399 (none);
 #X text 106 360 float;
@@ -54,18 +55,25 @@ adapted the patch to pd-extended 2015-02-02;
 ;
 #X text 13 44 Use as a calculator;
 #X text 13 57 or for float parameters:;
-#X obj 32 160 cyclone/sampstoms~;
-#X obj 292 162 cyclone/sampstoms~;
+#X obj 32 143 cyclone/sampstoms~;
+#X obj 292 145 cyclone/sampstoms~;
 #X obj 292 96 cyclone/Line~;
 #X obj 292 219 cyclone/Snapshot~ 100;
 #X obj 518 229 dspSwitch~;
 #X text 179 274 - duration in samples;
-#X text 179 360 - duration in ms;
 #X text 179 294 - duration in samples;
 #X text 179 334 - duration in ms;
+#X floatatom 397 198 0 0 0 0 - - -;
+#X floatatom 33 229 0 0 0 0 - - -;
+#X obj 33 207 cyclone/Snapshot~ 100;
+#X text 179 360 - duration in ms (equal to the last sample of the block)
+;
 #X connect 13 0 26 0;
 #X connect 16 0 24 0;
+#X connect 24 0 34 0;
 #X connect 24 1 15 0;
 #X connect 25 0 27 0;
+#X connect 25 1 32 0;
 #X connect 26 0 25 0;
 #X connect 27 0 14 0;
+#X connect 34 0 33 0;
diff --git a/help/teeth~-help.pd b/help/teeth~-help.pd
index 85baa08..5dffe43 100644
--- a/help/teeth~-help.pd
+++ b/help/teeth~-help.pd
@@ -1,55 +1,55 @@
-#N canvas 628 79 571 530 10;
-#X obj 237 224 cnv 15 290 140 empty empty empty 20 12 0 14 -233017
+#N canvas 624 81 571 530 10;
+#X obj 237 206 cnv 15 290 140 empty empty empty 20 12 0 14 -233017
 -66577 0;
-#X text 290 242 |;
-#X text 290 254 |;
-#X text 290 266 |;
-#X text 271 277 |;
-#X text 313 277 |;
-#X text 313 297 |;
-#X text 271 297 |;
-#X text 274 268 _______;
-#X text 274 297 _______;
-#X text 290 269 v;
-#X text 352 269 |;
-#X text 352 280 |;
-#X text 352 250 |;
-#X text 352 259 |;
-#X text 352 245 ^;
-#X text 436 243 |;
-#X text 436 255 |;
-#X text 436 267 |;
-#X text 417 278 |;
-#X text 459 278 |;
-#X text 459 298 |;
-#X text 417 298 |;
-#X text 420 269 _______;
-#X text 420 298 _______;
-#X text 436 270 v;
-#X text 382 271 |;
-#X text 382 281 |;
-#X text 382 249 |;
-#X text 382 259 |;
-#X text 382 244 ^;
-#X text 459 235 >;
-#X text 271 287 |z^-d1 |;
-#X text 417 288 |z^-d2 |;
-#X text 251 334 y[n] = a * x[n] + b * x[n-d1] + c * y[n-d2];
-#X text 319 286 -(*b)-;
-#X text 383 287 -(*c)-;
-#X text 250 236 x[n] -----(*a)--(+)--(+)----------- y[n];
-#X floatatom 67 112 5 0 0 0 - del -, f 5;
-#X obj 47 312 output~;
-#X floatatom 105 153 5 -1 1 0 - a -, f 5;
-#X floatatom 124 173 5 -1 1 0 - b -, f 5;
-#X floatatom 144 193 5 -1 1 0 - c -, f 5;
-#X floatatom 86 133 5 0 0 0 - del -, f 5;
-#X text 105 113 ff del (d1);
-#X text 124 134 fb del (d2);
-#X text 143 151 gain (a);
-#X text 157 173 ff gain (b);
-#X text 178 192 fb gain (c);
-#X obj 48 88 noise~;
+#X text 290 224 |;
+#X text 290 236 |;
+#X text 290 248 |;
+#X text 271 259 |;
+#X text 313 259 |;
+#X text 313 279 |;
+#X text 271 279 |;
+#X text 274 250 _______;
+#X text 274 279 _______;
+#X text 290 251 v;
+#X text 352 251 |;
+#X text 352 262 |;
+#X text 352 232 |;
+#X text 352 241 |;
+#X text 352 227 ^;
+#X text 436 225 |;
+#X text 436 237 |;
+#X text 436 249 |;
+#X text 417 260 |;
+#X text 459 260 |;
+#X text 459 280 |;
+#X text 417 280 |;
+#X text 420 251 _______;
+#X text 420 280 _______;
+#X text 436 252 v;
+#X text 382 253 |;
+#X text 382 263 |;
+#X text 382 231 |;
+#X text 382 241 |;
+#X text 382 226 ^;
+#X text 459 217 >;
+#X text 271 269 |z^-d1 |;
+#X text 417 270 |z^-d2 |;
+#X text 251 316 y[n] = a * x[n] + b * x[n-d1] + c * y[n-d2];
+#X text 319 268 -(*b)-;
+#X text 383 269 -(*c)-;
+#X text 250 218 x[n] -----(*a)--(+)--(+)----------- y[n];
+#X floatatom 67 94 5 0 0 0 - del -, f 5;
+#X obj 47 294 output~;
+#X floatatom 105 135 5 -1 1 0 - a -, f 5;
+#X floatatom 124 155 5 -1 1 0 - b -, f 5;
+#X floatatom 144 175 5 -1 1 0 - c -, f 5;
+#X floatatom 86 115 5 0 0 0 - del -, f 5;
+#X text 105 95 ff del (d1);
+#X text 124 116 fb del (d2);
+#X text 143 133 gain (a);
+#X text 157 155 ff gain (b);
+#X text 178 174 fb gain (c);
+#X obj 48 70 noise~;
 #X obj 1 0 cnv 15 552 40 empty empty teeth~ 3 12 0 18 -204280 -1 0
 ;
 #X text 13 23 teeth filter;
@@ -58,7 +58,7 @@
 0;
 #X obj 2 379 cnv 3 550 3 empty empty inlets 8 12 0 13 -228856 -1 0
 ;
-#N canvas 548 278 413 321 META 0;
+#N canvas 544 280 413 321 META 0;
 #X text 0 20 LICENSE SIBSD;
 #X text 0 200 LIBRARY cyclone;
 #X text 0 180 OUTLET_0 signal;
@@ -74,9 +74,9 @@ adapted the patch to pd-extended 2015-02-02;
 #X text 0 100 INLET_2 float signal;
 #X text 0 120 INLET_3 float signal;
 #X text 0 140 INLET_4 float signal;
-#X text 1 256 RELEASE_DATE 2015;
 #X text 0 159 INLET_5 float signal;
-#X text 0 238 AUTHOR Alexandre Torres Porres;
+#X text 1 257 RELEASE_DATE 2016;
+#X text 0 238 AUTHOR F.J. Kraan;
 #X restore 500 646 pd META;
 #X obj 2 570 cnv 3 550 3 empty empty outlets 8 12 0 13 -228856 -1 0
 ;
@@ -108,7 +108,6 @@ adapted the patch to pd-extended 2015-02-02;
 #X obj 80 474 cnv 17 3 17 empty empty 3 5 9 0 16 -228856 -162280 0
 ;
 #X text 113 577 signal;
-#X text 113 615 This abstraction does not support arguments;
 #X obj 81 526 cnv 17 3 17 empty empty 5 5 9 0 16 -228856 -162280 0
 ;
 #X text 114 526 float or signal;
@@ -116,10 +115,10 @@ adapted the patch to pd-extended 2015-02-02;
 #X text 225 500 - forward delay amplitude coefficient (b);
 #X text 226 526 - feedback amplitude coefficient (c);
 #X text 225 577 - output from teeth filter;
-#X obj 48 274 cyclone/teeth~;
+#X obj 48 256 cyclone/teeth~;
 #X text 225 416 - forward delay time in milliseconds (d1);
 #X text 224 445 - feedback delay time in milliseconds (d2);
-#N canvas 948 239 450 526 radio 0;
+#N canvas 716 228 450 526 radio 0;
 #X obj 130 470 output~;
 #X obj 131 432 cyclone/teeth~;
 #X obj 56 145 noise~;
@@ -158,12 +157,13 @@ adapted the patch to pd-extended 2015-02-02;
 #X connect 15 0 5 0;
 #X connect 16 0 12 0;
 #X connect 17 0 7 0;
-#X restore 372 142 pd radio whale beach song;
-#X connect 38 0 80 1;
-#X connect 40 0 80 3;
-#X connect 41 0 80 4;
-#X connect 42 0 80 5;
-#X connect 43 0 80 2;
-#X connect 49 0 80 0;
-#X connect 80 0 39 1;
-#X connect 80 0 39 0;
+#X restore 372 124 pd radio whale beach song;
+#X text 113 615 Default values for the inlets 1 to 5, f 61;
+#X connect 38 0 79 1;
+#X connect 40 0 79 3;
+#X connect 41 0 79 4;
+#X connect 42 0 79 5;
+#X connect 43 0 79 2;
+#X connect 49 0 79 0;
+#X connect 79 0 39 1;
+#X connect 79 0 39 0;
diff --git a/help/wave~-help.pd b/help/wave~-help.pd
index 6ca2775..c1f226a 100644
--- a/help/wave~-help.pd
+++ b/help/wave~-help.pd
@@ -1,5 +1,5 @@
-#N canvas 499 79 573 530 10;
-#X obj 0 661 cnv 15 552 21 empty empty empty 20 12 0 14 -233017 -33289
+#N canvas 554 79 573 530 10;
+#X obj 0 676 cnv 15 552 21 empty empty empty 20 12 0 14 -233017 -33289
 0;
 #X obj 0 373 cnv 3 550 3 empty empty inlets 8 12 0 13 -228856 -1 0
 ;
@@ -21,74 +21,70 @@
 Wilkes for Pd-extended 0.42 to conform to the PDDP template. Alex Cleveland
 updated this patch for Pd-l2ork version 2013.05.28. Fred Jan Kraan
 adapted the patch to pd-extended 2015-02-02;
-#X restore 496 663 pd META;
-#X obj 0 527 cnv 3 550 3 empty empty outlets 8 12 0 13 -228856 -1 0
+#X restore 496 678 pd META;
+#X obj 0 543 cnv 3 550 3 empty empty outlets 8 12 0 13 -228856 -1 0
 ;
-#X obj 0 564 cnv 3 550 3 empty empty arguments 8 12 0 13 -228856 -1
+#X obj 0 580 cnv 3 550 3 empty empty arguments 8 12 0 13 -228856 -1
 0;
 #N canvas 320 422 428 109 Related_objects 0;
 #X obj 0 0 cnv 15 425 20 empty empty empty 3 12 0 14 -204280 -1 0;
 #X text 6 1 Related Objects;
-#X restore 205 663 pd Related_objects;
-#X obj 86 384 cnv 17 3 35 empty empty 0 5 9 0 16 -228856 -162280 0
+#X restore 205 678 pd Related_objects;
+#X obj 86 384 cnv 17 3 50 empty empty 0 5 9 0 16 -228856 -162280 0
 ;
-#X obj 86 482 cnv 17 3 35 empty empty 2 5 9 0 16 -228856 -162280 0
+#X obj 86 498 cnv 17 3 35 empty empty 2 5 9 0 16 -228856 -162280 0
 ;
 #X obj 0 0 cnv 15 552 40 empty empty wave~ 3 12 0 18 -204280 -1 0;
 #X obj 505 10 wave~;
 #X text 12 23 variable size wavetable;
 #X text 110 381 signal;
 #X text 224 381 - signal to turn into wavetable;
-#X obj 86 435 cnv 17 3 35 empty empty 1 5 9 0 16 -228856 -162280 0
+#X obj 86 451 cnv 17 3 35 empty empty 1 5 9 0 16 -228856 -162280 0
 ;
-#X obj 86 536 cnv 17 3 17 empty empty 0 5 9 0 16 -228856 -162280 0
+#X obj 86 552 cnv 17 3 17 empty empty 0 5 9 0 16 -228856 -162280 0
 ;
-#X text 111 434 float;
-#X text 110 481 float;
+#X text 111 450 float;
+#X text 110 497 float;
 #X obj 74 117 phasor~;
-#X floatatom 177 166 5 0 0 0 - - -;
+#X floatatom 177 166 5 0 0 0 - - -, f 5;
 #X text 417 122 startpoint (msec);
 #X text 418 141 endpoint (msec);
 #X obj 85 147 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
 #X msg 85 168 interp \$1;
-#X text 110 536 signal;
-#X text 224 536 - ouput of wavetable;
-#X text 224 570 - initial table name;
-#X text 93 592 2) float;
-#X text 224 592 - initial startpoint;
-#X text 93 613 3) float;
-#X text 224 613 - initial endpoint;
-#X text 93 634 4) float;
-#X text 224 634 - channel number;
-#X text 110 456 signal;
-#X text 110 502 signal;
-#X text 93 570 1) table;
-#X text 224 404 - change table \, en/disable object or interpolation
-;
-#X text 224 433 - set startpoint as float (ms);
-#X text 224 456 - set startpoint as signal (ms);
-#X text 224 479 - set endpoint as float (ms);
-#X text 224 502 - set endpoint as signal (ms);
-#X text 112 403 message;
+#X text 110 552 signal;
+#X text 224 552 - ouput of wavetable;
+#X text 224 586 - initial table name;
+#X text 93 608 2) float;
+#X text 224 608 - initial startpoint;
+#X text 93 629 3) float;
+#X text 224 629 - initial endpoint;
+#X text 93 650 4) float;
+#X text 110 472 signal;
+#X text 110 518 signal;
+#X text 93 586 1) table;
+#X text 224 449 - set startpoint as float (ms);
+#X text 224 472 - set startpoint as signal (ms);
+#X text 224 495 - set endpoint as float (ms);
+#X text 224 518 - set endpoint as signal (ms);
 #X obj 74 315 output~;
 #X text 134 85 frequency;
-#X floatatom 281 168 5 0 0 0 - - -;
+#X floatatom 281 168 5 0 0 0 - - -, f 5;
 #X obj 284 144 hsl 128 15 0 1407 0 0 endS endR empty -2 -8 0 10 -262144
--1 -1 8000 1;
+-1 -1 0 1;
 #X obj 284 125 hsl 128 15 0 1407 0 0 startS startR empty -2 -8 0 10
--262144 -1 -1 7300 1;
+-262144 -1 -1 0 1;
 #N canvas 832 517 450 300 ranger 0;
 #X obj 86 44 r startS;
 #X obj 157 44 r endS;
 #X obj 89 221 s startR;
 #X obj 155 222 s endR;
-#X floatatom 68 171 5 0 0 0 - - -;
-#X floatatom 166 173 5 0 0 0 - - -;
+#X floatatom 68 171 5 0 0 0 - - -, f 5;
+#X floatatom 166 173 5 0 0 0 - - -, f 5;
 #X obj 68 118 moses 0;
 #X obj 166 121 moses 0;
-#X floatatom 107 171 5 0 0 0 - - -;
-#X floatatom 205 172 5 0 0 0 - - -;
+#X floatatom 107 171 5 0 0 0 - - -, f 5;
+#X floatatom 205 172 5 0 0 0 - - -, f 5;
 #X obj 119 90 + 1;
 #X text 223 211 keeps start before end;
 #X text 223 226 and end after start;
@@ -107,33 +103,53 @@ adapted the patch to pd-extended 2015-02-02;
 #X connect 10 0 6 1;
 #X restore 356 163 pd ranger;
 #X obj 77 68 hsl 128 15 -2 2 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 4300 1;
-#X floatatom 81 93 5 0 0 0 - - -;
+-1 -1 0 1;
+#X floatatom 81 93 5 0 0 0 - - -, f 5;
 #X text 198 48 2;
 #X text 72 47 -2;
-#X obj 349 90 table 0-\$0-waveTable;
+#X obj 427 325 table 0-\$0-waveTable;
 #X obj 74 244 cyclone/wave~ \$0-waveTable 0 1407 1;
 #X text 134 99 (1=normal speed \, negative;
 #X text 134 114 is backwards);
-#N canvas 528 380 450 300 load 0;
+#N canvas 526 381 450 300 load 0;
 #X obj 118 168 soundfiler;
-#X obj 118 122 f \$0;
 #X obj 118 98 loadbang;
 #X msg 118 144 read -resize voice.wav 0-\$1-waveTable;
 #X obj 3 3 cnv 15 425 20 empty empty empty 3 12 0 14 -204280 -1 0;
 #X text 9 4 load voice.wav file;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X restore 348 69 pd load voice;
-#X connect 17 0 52 0;
-#X connect 18 0 52 1;
+#X obj 118 122 \$0;
+#X connect 1 0 5 0;
+#X connect 2 0 0 0;
+#X connect 5 0 2 0;
+#X restore 427 304 pd load voice;
+#X obj 276 50 \$0;
+#X obj 256 51 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 256 70 set \$1-dummy;
+#X obj 427 346 table 0-\$0-dummy;
+#X obj 363 50 \$0;
+#X obj 343 51 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 343 70 set \$1-waveTable;
+#X text 111 421 set <tableName>;
+#X text 111 401 interp n;
+#X text 223 422 - change table;
+#X text 223 402 - en/disable interpolation: 0 is off \, 1 is on;
+#X text 224 650 - channel number (not used in Pd);
+#X connect 17 0 49 0;
+#X connect 18 0 49 1;
 #X connect 21 0 22 0;
-#X connect 22 0 52 0;
-#X connect 43 0 52 2;
-#X connect 44 0 43 0;
-#X connect 45 0 18 0;
-#X connect 47 0 17 0;
-#X connect 47 0 48 0;
-#X connect 52 0 41 0;
-#X connect 52 0 41 1;
+#X connect 22 0 49 0;
+#X connect 40 0 49 2;
+#X connect 41 0 40 0;
+#X connect 42 0 18 0;
+#X connect 44 0 17 0;
+#X connect 44 0 45 0;
+#X connect 49 0 38 0;
+#X connect 49 0 38 1;
+#X connect 53 0 55 0;
+#X connect 54 0 53 0;
+#X connect 55 0 49 0;
+#X connect 57 0 59 0;
+#X connect 58 0 57 0;
+#X connect 59 0 49 0;
diff --git a/shared/common/binport.c b/shared/common/binport.c
index b5f5e72..3b7ccf3 100644
--- a/shared/common/binport.c
+++ b/shared/common/binport.c
@@ -462,7 +462,6 @@ static t_symbol *binport_makesymbol(t_binport *bp, int id)
 static int binport_setbysymtable(t_binport *bp, t_atom *ap, int id)
 {
     t_symbol *s;
-    if(id<0) return 0;
     if (id < bp->b_nsymbols)
 	s = bp->b_symtable[id];
     else
@@ -809,6 +808,14 @@ void binport_write(t_binbuf *bb, char *filename, char *dirname)
 
 #else
 
+void binport_usage()
+{
+        binport_warning("Cyclist converts binary Max 4.x patches to Max text format.");
+        binport_warning("These can be read into Pure Data.");
+        binport_warning("Usage: cyclist MaxBinPatch > MaxTxtPatch");
+        return;
+}
+
 int main(int ac, char **av)
 {
     if (ac > 1)
@@ -847,7 +854,11 @@ int main(int ac, char **av)
 	}
 	else binport_error("cannot open file \"%s\"", av[1]);
     }
-    else binport_error("what file?");
+    else 
+    {
+//            binport_error("what file?");
+            binport_usage();
+    }
     return (0);
 }
 
diff --git a/sickle/mstosamps.c b/sickle/mstosamps.c
index 37b2cc5..fb25e69 100644
--- a/sickle/mstosamps.c
+++ b/sickle/mstosamps.c
@@ -4,19 +4,23 @@
 
 #include "m_pd.h"
 #include "sickle/sic.h"
+#include "shared.h"
+#define MILLIS 0.001
 
 typedef struct _mstosamps
 {
     t_sic      x_sic;
-    float      x_ksr;
+    t_float    x_ksr;
     t_outlet  *x_floatout;
+    t_float    x_sampleCount;
+    t_clock   *x_clock;
 } t_mstosamps;
 
 static t_class *mstosamps_class;
 
-static void mstosamps_float(t_mstosamps *x, t_float f)
+static void mstosamps_tick(t_mstosamps *x)
 {
-    outlet_float(x->x_floatout, f * x->x_ksr);
+    outlet_float(x->x_floatout, x->x_sampleCount);
 }
 
 static t_int *mstosamps_perform(t_int *w)
@@ -25,31 +29,49 @@ static t_int *mstosamps_perform(t_int *w)
     int nblock = (int)(w[2]);
     t_float *in = (t_float *)(w[3]);
     t_float *out = (t_float *)(w[4]);
-    float ksr = x->x_ksr;
-    while (nblock--) *out++ = *in++ * ksr;
+    t_float sc;
+    t_float ksr = x->x_ksr;
+    while (nblock--) {
+        sc = *in++ * ksr;
+        *out++ = sc;
+    }
+    x->x_sampleCount = sc;
+    clock_delay(x->x_clock, 0);
     return (w + 5);
 }
 
 static void mstosamps_dsp(t_mstosamps *x, t_signal **sp)
 {
-    x->x_ksr = sp[0]->s_sr * .001;
+    x->x_ksr = sp[0]->s_sr * MILLIS;
     dsp_add(mstosamps_perform, 4, x,
 	    sp[0]->s_n, sp[0]->s_vec, sp[1]->s_vec);
 }
 
+static void mstosamps_free(t_mstosamps *x)
+{
+    if (x->x_clock) clock_free(x->x_clock);
+}
+
 static void *mstosamps_new(void)
 {
     t_mstosamps *x = (t_mstosamps *)pd_new(mstosamps_class);
-    x->x_ksr = sys_getsr() * .001;  /* LATER rethink */
+    x->x_ksr = sys_getsr() * MILLIS;  /* LATER rethink */
     outlet_new((t_object *)x, &s_signal);
     x->x_floatout = outlet_new((t_object *)x, &s_float);
+    x->x_clock = clock_new(x, (t_method)mstosamps_tick);
     return (x);
 }
 
 void mstosamps_tilde_setup(void)
 {
     mstosamps_class = class_new(gensym("mstosamps~"),
-				(t_newmethod)mstosamps_new, 0,
+				(t_newmethod)mstosamps_new, 
+                                (t_method)mstosamps_free,
 				sizeof(t_mstosamps), 0, 0);
-    sic_setup(mstosamps_class, mstosamps_dsp, mstosamps_float);
+    sic_setup(mstosamps_class, mstosamps_dsp, SIC_FLOATTOSIGNAL);
+    int major, minor, bugfix;
+    sys_getversion(&major, &minor, &bugfix);
+    if (major > 0 || minor > 42) 
+        logpost(NULL, 4, "this is cyclone/mstosamps~ %s, %dth %s build",
+            CYCLONE_VERSION, CYCLONE_BUILD, CYCLONE_RELEASE);    
 }
diff --git a/sickle/sampstoms.c b/sickle/sampstoms.c
index 36b686c..586d5e8 100644
--- a/sickle/sampstoms.c
+++ b/sickle/sampstoms.c
@@ -4,52 +4,78 @@
 
 #include "m_pd.h"
 #include "sickle/sic.h"
+#include "shared.h"
+#define KILOS 1000.
 
 typedef struct _sampstoms
 {
     t_sic      x_sic;
-    float      x_rcpksr;
+    t_float    x_rcpksr;
     t_outlet  *x_floatout;
+    t_float    x_millisecs;
+    t_clock   *x_clock;
 } t_sampstoms;
 
 static t_class *sampstoms_class;
 
-static void sampstoms_float(t_sampstoms *x, t_float f)
+static void sampstoms_tick(t_sampstoms *x)
 {
-    outlet_float(x->x_floatout, f * x->x_rcpksr);
+    outlet_float(x->x_floatout, x->x_millisecs);
 }
 
+/*static void sampstoms_float(t_sampstoms *x, t_float f)
+{
+    outlet_float(x->x_floatout, f * x->x_rcpksr);
+} */
+
 static t_int *sampstoms_perform(t_int *w)
 {
     t_sampstoms *x = (t_sampstoms *)(w[1]);
     int nblock = (int)(w[2]);
     t_float *in = (t_float *)(w[3]);
     t_float *out = (t_float *)(w[4]);
-    float rcpksr = x->x_rcpksr;
-    while (nblock--) *out++ = *in++ * rcpksr;
+    t_float rcpksr = x->x_rcpksr;
+    t_float ms;
+    while (nblock--) {
+        ms = *in++ * rcpksr;
+        *out++ = ms;
+    }
+    x->x_millisecs = ms;
+    clock_delay(x->x_clock, 0);
     return (w + 5);
 }
 
 static void sampstoms_dsp(t_sampstoms *x, t_signal **sp)
 {
-    x->x_rcpksr = 1000. / sp[0]->s_sr;
+    x->x_rcpksr = KILOS / sp[0]->s_sr;
     dsp_add(sampstoms_perform, 4, x,
 	    sp[0]->s_n, sp[0]->s_vec, sp[1]->s_vec);
 }
 
+static void sampstoms_free(t_sampstoms *x)
+{
+    if (x->x_clock) clock_free(x->x_clock);
+}
+
 static void *sampstoms_new(void)
 {
     t_sampstoms *x = (t_sampstoms *)pd_new(sampstoms_class);
-    x->x_rcpksr = 1000. / sys_getsr();  /* LATER rethink */
+    x->x_rcpksr = KILOS / sys_getsr();  /* LATER rethink */
     outlet_new((t_object *)x, &s_signal);
     x->x_floatout = outlet_new((t_object *)x, &s_float);
+    x->x_clock = clock_new(x, (t_method)sampstoms_tick);
     return (x);
 }
 
 void sampstoms_tilde_setup(void)
 {
     sampstoms_class = class_new(gensym("sampstoms~"),
-				(t_newmethod)sampstoms_new, 0,
+				(t_newmethod)sampstoms_new, 
+                                (t_method)sampstoms_free,
 				sizeof(t_sampstoms), 0, 0);
-    sic_setup(sampstoms_class, sampstoms_dsp, sampstoms_float);
-}
+    sic_setup(sampstoms_class, sampstoms_dsp, SIC_FLOATTOSIGNAL);
+    int major, minor, bugfix;
+    sys_getversion(&major, &minor, &bugfix);
+    if (major > 0 || minor > 42) 
+        logpost(NULL, 4, "this is cyclone/sampstoms~ %s, %dth %s build",
+            CYCLONE_VERSION, CYCLONE_BUILD, CYCLONE_RELEASE);}
diff --git a/sickle/teeth.c b/sickle/teeth.c
new file mode 100644
index 0000000..eb46804
--- /dev/null
+++ b/sickle/teeth.c
@@ -0,0 +1,163 @@
+/*
+This teeth~ is not yet complete:
+- interpolation is not implemented. 
+Otherwise it works nice, but strange things happen at extreme settings. 
+Maybe this is to be expected with a filter like this, but this is my 
+first filter. fjkraan at xs4all.nl, 2015-06-23
+*/
+
+#include "m_pd.h"
+#include "sickle/sic.h"
+#include "shared.h"
+
+static t_class *teeth_class;
+
+#define MAXDELAYMS 20
+
+typedef struct _teeth_tilde {
+  t_object   x_obj;
+  t_sample   f;
+  t_sample  *x_bufFW;    /* pointer to forward buffer */
+  t_sample  *x_bufFB;    /* pointer to feedback buffer */
+  t_int      x_fwWrite;  /* relative write pointer to FW buffer*/
+  t_int      x_fbWrite;  /* relative write pointer to FB buffer */
+  t_int      x_bufsize;  /* buffer size  */
+  t_float    x_ksr;      /* 'kilo-samplerate', like 44.1 */
+} t_teeth;
+
+/* The actual work is done here */
+static t_int *teeth_perform(t_int *w)
+{
+    t_teeth  *x      =  (t_teeth *)(w[1]);   /* pointer to instance struct */
+    t_sample *in1    = (t_sample *)(w[2]);   /* input vector/array */
+    t_sample *fw_delay = (t_sample *)(w[3]); /* fw read delay in ms */
+    t_sample *fb_delay = (t_sample *)(w[4]); /* fb read delay in ms */
+    t_sample *a_gain = (t_sample *)(w[5]);   /* inlet gain */
+    t_sample *b_gain = (t_sample *)(w[6]);   /* bufFW read gain */
+    t_sample *c_gain = (t_sample *)(w[7]);   /* bufFB read gain */
+    t_sample *out1   = (t_sample *)(w[8]);   /* first output vector/array */
+    int       n      = (int)(w[9]);          /* vector/array size */
+    int       p;
+    int       fwRead;
+    int       fbRead;
+    int       fwWrite = x->x_fwWrite;
+    int       fbWrite = x->x_fbWrite;
+    int       bufsize = x->x_bufsize;
+    t_float   ksr     = x->x_ksr;
+
+    for (p = 0; p < n; p++) {
+	fwRead = (int)(fw_delay[p] < 0) ? 0 : fw_delay[p] * ksr + 0.5;     // inlet safe guard
+	fwRead = (int)(fwWrite - fwRead);            // relate to integer write position
+	fwRead = (fwRead < 0) ? bufsize + fwRead : fwRead;       // compensate for circular buffer lower boundary
+	fwRead = (fwRead > bufsize) ? fwRead - bufsize : fwRead; // compensate for circular buffer upper boundary
+	fbRead = (int)(fb_delay[p] < 0) ? 0 : fb_delay[p] * ksr + 0.5;
+	fbRead = (int)(fbWrite - fbRead);
+	fbRead = (fbRead < 0) ? bufsize + fbRead : fbRead;
+	fbRead = (fbRead > bufsize) ? fbRead - bufsize : fbRead;
+	
+	out1[p] = in1[p] * a_gain[p] + x->x_bufFW[fwRead] * b_gain[p] + 
+	    x->x_bufFB[fbRead] * c_gain[p];
+	    
+	x->x_bufFW[fwWrite++] = in1[p];
+	x->x_bufFB[fbWrite++] = out1[p];
+	fwWrite = (fwWrite < bufsize) ? fwWrite : 0;
+	fbWrite = (fbWrite < bufsize) ? fbWrite : 0;
+    }
+    x->x_fwWrite = fwWrite;
+    x->x_fbWrite = fbWrite;
+    return (w+10);
+}
+
+#define MILLI 0.001
+static void teeth_dsp(t_teeth *x, t_signal **sp)
+{
+    x->x_ksr = sp[0]->s_sr * MILLI;
+    int newBufsize = (int)(x->x_ksr * MAXDELAYMS);
+    if (x->x_bufsize == 0 || x->x_bufsize != newBufsize)
+    {
+	t_float *bufFW;
+	t_float *bufFB;
+	
+	x->x_bufsize = newBufsize;
+	bufFW = (t_float *)getbytes(x->x_bufsize * sizeof(*bufFW));
+	bufFB = (t_float *)getbytes(x->x_bufsize * sizeof(*bufFB));
+	
+	int i;
+	for (i = 0; i < x->x_bufsize; i++) {
+	    bufFW[i] = 0;
+	    bufFB[i] = 0;
+	}
+	x->x_bufFW = bufFW;
+	x->x_bufFB = bufFB;
+	x->x_fwWrite = 0;
+	x->x_fbWrite = 0;
+    }
+
+    dsp_add(teeth_perform, 	/* register the perform method */
+        9, 			/* number of following parameters */
+        x,			/* pointer to the object struct */
+        sp[0]->s_vec, 	        /* first inlet signal */
+        sp[1]->s_vec, 	     	/* fw_delay */
+        sp[2]->s_vec, 	     	/* fb_delay */
+        sp[3]->s_vec, 	    	/* a_gain */
+        sp[4]->s_vec, 	    	/* b_gain */
+        sp[5]->s_vec, 	    	/* c_gain */
+        sp[6]->s_vec, 	        /* first outlet signal */
+        sp[0]->s_n);		/* the size of the vectors/arrays */
+}
+
+static void *teeth_new(t_floatarg a_gain, t_floatarg b_gain, 
+    t_floatarg c_gain, t_floatarg fw_delay, t_floatarg fb_delay)
+{
+    t_teeth *x = (t_teeth *)pd_new(teeth_class);  
+    x->x_bufsize = 0;
+  
+    /* create signal inlets */
+    sic_newinlet((t_sic *)x, fw_delay);
+    sic_newinlet((t_sic *)x, fb_delay);
+    sic_newinlet((t_sic *)x, a_gain);
+    sic_newinlet((t_sic *)x, b_gain);
+    sic_newinlet((t_sic *)x, c_gain);
+    
+    /* create a signal outlet */
+    outlet_new(&x->x_obj, &s_signal);
+  
+    return (void *)x;
+}
+
+static void teeth_free(t_teeth *x)
+{
+    if (x->x_bufFW) 
+        freebytes(x->x_bufFW, x->x_bufsize * sizeof(*x->x_bufFW));
+    if (x->x_bufFB) 
+        freebytes(x->x_bufFB, x->x_bufsize * sizeof(*x->x_bufFB));
+}
+
+void teeth_tilde_setup(void) 
+{
+  teeth_class = 
+	class_new(gensym("teeth~"),	/* register the 'teeth~' symbol */
+					/* declare initialization method */
+        	(t_newmethod)teeth_new, /* method to initialize objects */	
+        	(t_method)teeth_free, 			/* method to cleanup or 0 */	
+		sizeof(t_teeth),	/* size of the object struct */
+       	 	CLASS_DEFAULT, 	/* make it type CLASS_PATCHABLE */
+        	A_DEFFLOAT, 		/* fw_delay */
+        	A_DEFFLOAT, 		/* fb_delay */
+               	A_DEFFLOAT, 		/* a_gain */
+        	A_DEFFLOAT, 		/* b_gain */ 
+		A_DEFFLOAT, 		/* c_gain */
+		0);			/*  */
+
+  class_addmethod(teeth_class,	/*  */
+        	  (t_method)teeth_dsp, /*  */
+		  gensym("dsp"),	/* declare this is a signal class */
+		  0);			/*  */
+
+  CLASS_MAINSIGNALIN(teeth_class, /* pointer to the class struct */
+		     t_teeth,    /* pointer to the object struct */
+		     f);	      /* dummy variable */
+//    logpost(NULL, 4, "this is cyclone/teeth~ %s, %dth %s build",
+//	CYCLONE_VERSION, CYCLONE_BUILD, CYCLONE_RELEASE);		     
+}
+
diff --git a/sickle/wave.c b/sickle/wave.c
index 1269842..d19cccc 100644
--- a/sickle/wave.c
+++ b/sickle/wave.c
@@ -159,6 +159,9 @@ void wave_tilde_setup(void)
 		    gensym("set"), A_SYMBOL, 0);
     class_addmethod(wave_class, (t_method)wave_interp,
 		    gensym("interp"), A_FLOAT, 0);
-//    logpost(NULL, 4, "this is cyclone/wave~ %s, %dth %s build",
-//	 CYCLONE_VERSION, CYCLONE_BUILD, CYCLONE_RELEASE);
+
+    int major, minor, bugfix;
+    sys_getversion(&major, &minor, &bugfix);    if (major > 0 || minor > 42) 
+    logpost(NULL, 4, "this is cyclone/wave~ %s, %dth %s build",
+	 CYCLONE_VERSION, CYCLONE_BUILD, CYCLONE_RELEASE);
 }
diff --git a/test/sampstoms~-test.pd b/test/sampstoms~-test.pd
new file mode 100644
index 0000000..4184ac1
--- /dev/null
+++ b/test/sampstoms~-test.pd
@@ -0,0 +1,8 @@
+#N canvas 952 316 450 300 10;
+#X floatatom 32 83 0 0 0 0 - - -;
+#X obj 32 143 cyclone/sampstoms~;
+#X obj 33 176 cyclone/mstosamps~;
+#X floatatom 35 207 5 0 0 0 - - -, f 5;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 1 3 0;

-- 
pd-cyclone packaging



More information about the pkg-multimedia-commits mailing list