diff --git a/externals/Makefile b/externals/Makefile
index 7837fff34a25d187d01b907723b514943903da6c..99e2c7e56ea968c98125e260e93a0a613b61451b 100644
--- a/externals/Makefile
+++ b/externals/Makefile
@@ -621,36 +621,6 @@ fluid_install:
 fluid_clean:
 	make -C $(externals_src)/fluid~ clean
 
-#------------------------------------------------------------------------------#
-# FRANKENSTEIN
-FRANKENSTEIN_NAME=frankenstein
-# exclude test.c since it is not used
-FRANKENSTEIN_OBJECTS := $(wildcard $(externals_src)/frankenstein/*.c)
-frankenstein: $(FRANKENSTEIN_OBJECTS:.c=.$(EXTENSION))
-
-frankenstein_install: frankenstein
-	install -d $(DESTDIR)$(objectsdir)/$(FRANKENSTEIN_NAME)
-	$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(FRANKENSTEIN_NAME) \
-		--author "" \
-		--description "" \
-		--license "" \
-		--version ""
-	install -p $(FRANKENSTEIN_OBJECTS:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(FRANKENSTEIN_NAME)
-	install -d $(DESTDIR)$(manualsdir)/$(FRANKENSTEIN_NAME)
-	install -p $(externals_src)/frankenstein/doc/*.* \
-		$(DESTDIR)$(manualsdir)/$(FRANKENSTEIN_NAME)
-	install -d $(DESTDIR)$(examplesdir)/$(FRANKENSTEIN_NAME)
-	install -p $(externals_src)/frankenstein/patches/*.* \
-		$(DESTDIR)$(examplesdir)/$(FRANKENSTEIN_NAME)
-
-frankenstein_clean:
-	-rm -f -- $(externals_src)/frankenstein/*.$(EXTENSION)
-	-rm -f -- $(externals_src)/frankenstein/*.o
-	-rm -f -- $(externals_src)/frankenstein/*.bak
-	-rm -f -- $(externals_src)/frankenstein/*.*~
-
-
-
 #------------------------------------------------------------------------------#
 # FREEVERB
 freeverb:
diff --git a/externals/SVNEXTERNALS.txt b/externals/SVNEXTERNALS.txt
deleted file mode 100644
index e6c5ca71af211011e427040d4f95046ea8ee3a42..0000000000000000000000000000000000000000
--- a/externals/SVNEXTERNALS.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-# svn:external references to pd-externals hosted in other repositories
-#
-# adding external-references:
-#       - add a new line below with the format: <directory-name> <external link>
-#       - the directory must not exist yet
-#       - if possible use an external link that would allow commits (for authorized)
-#         e.g. "https://" instead of "http://"
-#
-#       - finally run:
-# 		% svn propset svn:externals -F SVNEXTERNALS.txt .
-# 		% svn commit
-#
-# deleting external-references:
-# 	- just delete the offending reference and re-run:
-# 		% svn propset svn:externals -F SVNEXTERNALS.txt .
-# 		% svn commit
-#
-# you should be able to retrieve this file by running
-# 		svn propget svn:externals .
-
-## example:
-gridflow https://gridflow.ca/svn/trunk/
diff --git a/externals/TODO b/externals/TODO
deleted file mode 100644
index c5d21d09712d89043bc4483593e9ee47548ab0db..0000000000000000000000000000000000000000
--- a/externals/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
-
-- add version number getters from packages/Makefile
-
-- document externals building following the smlib example
-
-- add "test lib" functionality to binary building in externals/Makefile
-
-- add in mtx_ objects with special characters using setup functions and
-  filenames with 0x escapes (mtx_/ and mtx_./ for example).  Make sure to have
-  the objects call the correct setup function since it can change the
-  functionality
-
-- add these to the build system:
-      PDContainer
-      ann
-		grh
-		iemstream
-		iemxmlrpc
diff --git a/externals/aalex/LICENSE.txt b/externals/aalex/LICENSE.txt
deleted file mode 100644
index 67282dd674c631ec0925b200b967e8d63cb805d3..0000000000000000000000000000000000000000
--- a/externals/aalex/LICENSE.txt
+++ /dev/null
@@ -1,340 +0,0 @@
-        GNU GENERAL PUBLIC LICENSE
-           Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-          Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-        GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-          NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-         END OF TERMS AND CONDITIONS
-
-      How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/externals/aalex/README.txt b/externals/aalex/README.txt
deleted file mode 100644
index df8afc35ff2c61ad6a5d4aaa0fde54aa381dc3ec..0000000000000000000000000000000000000000
--- a/externals/aalex/README.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-ABOUT aalex's
-
-These are objects for Pure Data. 
-
-[x11mouse] generates a X11 mouse event
-[x11key]   generates a X11 keyboard event
-[xmms]     controls the X Multimedia System
-[pcre]     matches a symbol against a Perl compatible regular expression. Still needs symbol as a selector for arguments.
-
-
-I also include a few of my abstractions : 
-
-
-=================================================
-INSTALL
-
-To use on Linux, add the path to this directory into your ~/.pdrc invisible file. 
-Currenly, the only one to work on Mac is [matches]. All the others are for GNU/Linux.
-
-
-=================================================
-COMPILE
-
-To compile on Debian, execute the follwing command in a terminal. 
-It could probably work on Mac too, instlaling the packages with Fink. Tell
-me if ever you need some of them for Mac, as the makefile will need to be modified. 
-
-
-sudo apt-get install xlib-dev xmms-dev
-cd aalex
-make
-
-
-=================================================
-AUTHOR
-
-Alexandre Quessy
-alex@sourcelibre.com
-
-
-=================================================
-LICENSE
-
-GNU Public License
-)c( Copyleft 2006
-Enjoy at your own risks !
-
-
-=================================================
-HISTORY
-
-2006-07-18   Fixed *MD64 compilation flag (thanks to r1). Changed [matches] for [pcre].
-2006-07      Initial release of old externals plus x11 objects.
diff --git a/externals/aalex/build.sh b/externals/aalex/build.sh
deleted file mode 100755
index 872dcc7100e9cd9e5a12593b0fc1f66a5c26a404..0000000000000000000000000000000000000000
--- a/externals/aalex/build.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-set -o verbose
-CFGLAGS=`pkg-config --cflags x11 xcb-xlib xcb xcursor libxml-2.0 gtk+-x11-2.0 gtk+-2.0 glib-2.0 gmodule-2.0`
-LIBS=`pkg-config --libs x11 xcb-xlib xcb xcursor libxml-2.0 gtk+-x11-2.0 gtk+-2.0 glib-2.0 gmodule-2.0`
-INCLUDES="-I../src -I../../pd/src"
-
-gcc -Wall -Werror $INCLUDES $CFLAGS -W -Wshadow -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -fPIC -lm -lc  -o x11key.o -c x11key.c
-ld  -shared -o x11key.pd_linux x11key.o -lc -lm $LIBS
-strip --strip-unneeded x11key.pd_linux
-
diff --git a/externals/aalex/makefile b/externals/aalex/makefile
deleted file mode 100644
index ae62021a6f111875f829ca0c44d597385bde2526..0000000000000000000000000000000000000000
--- a/externals/aalex/makefile
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# For Debian : 
-# apt-get install xlib-dev xmms-dev
-#
-
-
-
-current: pd_linux
-	@echo make pd_linux, pd_darwin, clean ... you must be specific
-	@echo default to pd_linux
-
-
-clean: ; rm -f *.pd_linux *.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: pcre.pd_linux xmms.pd_linux x11mouse.pd_linux x11key.pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS =  -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch -fPIC
-
-LINUXINCLUDE =  -I../src -L/usr/lib/X11 -I/usr/include/X11 -L/usr/X11R6/lib -I../../pd/src
-LINUXLINKS = -lX11 -lXtst -lgtk -lgdk -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm -lxmms
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c \
-    `xmms-config --cflags`
-	ld --export-dynamic -shared -o $*.pd_linux $*.o -lpcre -lc -lm\
-    -L/usr/lib -L/usr/X11R6/lib $(LINUXLINKS)
-	strip --strip-unneeded $*.pd_linux
-	rm $*.o
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: matches.pd_darwin concat.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c -lpcre
-	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $*.o 
-	rm -f $*.o
-
diff --git a/externals/aalex/markov-machine-help.pd b/externals/aalex/markov-machine-help.pd
deleted file mode 100644
index 25329b0d1925773dba37decd34ab8b4e076c4aa5..0000000000000000000000000000000000000000
--- a/externals/aalex/markov-machine-help.pd
+++ /dev/null
@@ -1,69 +0,0 @@
-#N canvas 1 53 528 547 10;
-#X text 132 380 current state;
-#X msg 221 149 size 4;
-#X obj 138 111 t b b b b b;
-#X msg 221 170 row 1 1 2 3 4;
-#X obj 88 331 markov-machine 4;
-#X text 60 9 States are numbered from 1 to n.;
-#X text 283 147 Already implied by argument.;
-#X msg 215 192 row 2 4 3 2 1;
-#X msg 220 215 row 3 200 300 4000 0;
-#X msg 220 238 row 4 1 1 1 1;
-#X text 337 240 Equal chances;
-#X obj 4 153 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 86 60 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X msg 18 165 next;
-#X msg 91 66 bang;
-#X obj -34 245 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X msg -30 257 set 1;
-#X text 92 43 1 Setup;
-#X text 4 133 2 Get state;
-#X text -34 225 3 Set state;
-#X msg 276 294 content;
-#X obj -40 -118 cnv 15 450 125 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 277 -17 iemmatrix;
-#X obj 370 -17 zexy;
-#X text -26 -117 )c( Copyleft 2006 Alexandre Quessy http://alexandre.quessy.net/
-;
-#X text 71 -16 Using -lib iemmatrix \, zexy;
-#X text 374 -134 ABOUT;
-#X obj 138 87 loadbang;
-#X text 210 331 A four states weighted FSM;
-#X obj 88 364 nbx 1 28 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 24
--258699 -1 -1 0 256;
-#X text -26 -86 [markov-machine] is a weighted finite states machine
-using an adjacency matrix for storing probabilities to obtain every
-other state next \, It can be illustrated as an oriented graph. Probabilities
-are calculated on the sum of each numbers or every row.;
-#N canvas 345 236 494 251 META 0;
-#X text 12 175 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 45 DESCRIPTION weighted finite states machine using an adjacency
-matrix for storing probabilities to obtain every other state next;
-#X text 12 135 AUTHOR Alexandre Quessy;
-#X text 12 155 WEBSITE http://alexandre.quessy.net/;
-#X text 12 95 INLET_0 bang set next row content;
-#X text 12 115 OUTLET_0 float;
-#X text 12 5 KEYWORDS control abstraction;
-#X restore 411 379 pd META;
-#X connect 1 0 4 0;
-#X connect 2 0 9 0;
-#X connect 2 1 8 0;
-#X connect 2 2 7 0;
-#X connect 2 3 3 0;
-#X connect 2 4 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 29 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 13 0 4 0;
-#X connect 14 0 2 0;
-#X connect 16 0 4 0;
-#X connect 20 0 4 0;
-#X connect 27 0 2 0;
diff --git a/externals/aalex/markov-machine.pd b/externals/aalex/markov-machine.pd
deleted file mode 100644
index 913bd95b9bb133698964b5f1f158542df659aeac..0000000000000000000000000000000000000000
--- a/externals/aalex/markov-machine.pd
+++ /dev/null
@@ -1,195 +0,0 @@
-#N canvas 637 33 900 932 10;
-#X obj 93 -33 inlet;
-#X obj 154 644 cnv 15 600 200 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 407 257 cnv 15 200 300 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 97 351 cnv 15 200 150 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 130 110 cnv 15 200 150 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 179 155 matrix;
-#X obj 225 115 prepend row;
-#X msg 139 119 zeros \$1;
-#X obj 18 23 loadbang;
-#X obj 20 50 f \$1;
-#X obj 111 396 f;
-#X text 138 398 current state;
-#X obj 12 755 outlet;
-#X obj 456 325 drip;
-#X obj 495 326 sum;
-#X obj 469 403 /;
-#X obj 159 456 random 1e+06;
-#X obj 159 480 / 1e+06;
-#X text 218 482 1/1000000;
-#X msg 574 339 set;
-#X msg 443 485 0.4 0.7 0.9 1;
-#X msg 468 430 add2 \$1;
-#X msg 409 351 bang;
-#X obj 177 704 moses;
-#X obj 223 706 moses;
-#X obj 271 706 moses;
-#X obj 317 708 moses;
-#X obj 364 708 moses;
-#X obj 410 710 moses;
-#X obj 458 710 moses;
-#X obj 504 712 moses;
-#X obj 546 713 moses;
-#X obj 589 713 moses;
-#X obj 635 715 moses;
-#X obj 677 716 moses;
-#X obj 292 661 unpack f f f f f f f f f f f f f f;
-#X obj 178 819 f;
-#X obj 159 428 t b f;
-#X msg 245 418 row \$1;
-#X text 207 822 next state;
-#X obj 16 694 f;
-#X obj 12 292 t b f;
-#X text 54 288 sets state;
-#X obj 67 311 t b b;
-#X text 109 309 gets next state;
-#X text 452 515 threshold (n/1.0) for each state according to its probability
-;
-#X text 20 -5 arg: size;
-#X obj 453 364 +;
-#X msg 530 329 0;
-#X obj 451 274 t b a a b b;
-#X obj 518 373 f;
-#X text 509 402 Each treshold is added to all the numbers before...
-;
-#X obj 161 250 mtx_print;
-#X obj 267 195 print debug;
-#X msg 178 733 1;
-#X msg 226 731 2;
-#X msg 266 734 3;
-#X msg 323 735 4;
-#X msg 365 737 5;
-#X msg 415 734 6;
-#X msg 453 738 7;
-#X msg 509 740 8;
-#X msg 551 742 9;
-#X msg 599 740 10;
-#X msg 639 743 11;
-#X msg 695 745 12;
-#X obj 145 359 loadbang;
-#X msg 144 378 1;
-#X obj 160 193 route matrix;
-#X obj 160 229 prepend matrix;
-#X text 667 624 MARKOV CHAIN;
-#X text 427 242 WEIGHTS FOR THIS ROW/STATE;
-#X text 260 332 STATE;
-#X text 219 90 ADJACENCY MATRIX;
-#X obj 423 -27 cnv 15 450 125 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 706 74 iemmatrix;
-#X obj 799 74 zexy;
-#N canvas 0 0 485 139 todo 0;
-#N canvas 0 0 450 300 1008-dynamic 0;
-#X restore 69 65 pd \$0-dynamic;
-#X text 67 43 todo: dynamic patching for unlimited number of states
-;
-#X text 67 93 todo: use [list] and not dynamic messages (faster?);
-#X restore 775 -20 pd todo;
-#X text 437 -26 )c( Copyleft 2006 Alexandre Quessy http://alexandre.quessy.net/
-;
-#X text 500 75 Using -lib iemmatrix \, zexy;
-#X text 435 18 [markov-machine] is a weighted finite states machine
-using an adjency matrix for storing probabilities to get to each other
-state \, It can be illustrated as an oriented graph.;
-#X text 837 -43 ABOUT;
-#X msg 23 126 bang;
-#X obj 93 -7 route size row next set content;
-#X obj 261 25 t b;
-#X connect 0 0 83 0;
-#X connect 5 0 68 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 8 0 9 0;
-#X connect 9 0 7 0;
-#X connect 10 0 37 0;
-#X connect 10 0 40 1;
-#X connect 13 0 47 0;
-#X connect 14 0 15 1;
-#X connect 15 0 21 0;
-#X connect 16 0 17 0;
-#X connect 17 0 23 0;
-#X connect 19 0 20 0;
-#X connect 20 0 35 0;
-#X connect 21 0 20 0;
-#X connect 22 0 20 0;
-#X connect 23 0 54 0;
-#X connect 23 1 24 0;
-#X connect 24 0 55 0;
-#X connect 24 1 25 0;
-#X connect 25 0 56 0;
-#X connect 25 1 26 0;
-#X connect 26 0 57 0;
-#X connect 26 1 27 0;
-#X connect 27 0 28 0;
-#X connect 27 0 58 0;
-#X connect 28 0 59 0;
-#X connect 28 1 29 0;
-#X connect 29 0 60 0;
-#X connect 29 1 30 0;
-#X connect 30 0 61 0;
-#X connect 30 1 31 0;
-#X connect 31 0 62 0;
-#X connect 31 1 32 0;
-#X connect 32 0 63 0;
-#X connect 32 1 33 0;
-#X connect 33 0 64 0;
-#X connect 33 1 34 0;
-#X connect 34 0 65 0;
-#X connect 35 0 23 1;
-#X connect 35 1 24 1;
-#X connect 35 2 25 1;
-#X connect 35 3 26 1;
-#X connect 35 4 27 1;
-#X connect 35 5 28 1;
-#X connect 35 7 29 1;
-#X connect 35 9 30 1;
-#X connect 35 10 31 1;
-#X connect 35 11 32 1;
-#X connect 35 12 33 1;
-#X connect 35 13 34 1;
-#X connect 36 0 10 1;
-#X connect 37 0 16 0;
-#X connect 37 1 38 0;
-#X connect 38 0 5 0;
-#X connect 40 0 12 0;
-#X connect 41 0 40 0;
-#X connect 41 1 10 0;
-#X connect 43 0 40 0;
-#X connect 43 1 10 0;
-#X connect 47 0 50 0;
-#X connect 48 0 47 1;
-#X connect 49 0 22 0;
-#X connect 49 1 13 0;
-#X connect 49 2 14 0;
-#X connect 49 3 48 0;
-#X connect 49 4 19 0;
-#X connect 50 0 47 1;
-#X connect 50 0 15 0;
-#X connect 54 0 36 0;
-#X connect 55 0 36 0;
-#X connect 56 0 36 0;
-#X connect 57 0 36 0;
-#X connect 58 0 36 0;
-#X connect 59 0 36 0;
-#X connect 60 0 36 0;
-#X connect 61 0 36 0;
-#X connect 62 0 36 0;
-#X connect 63 0 36 0;
-#X connect 64 0 36 0;
-#X connect 65 0 36 0;
-#X connect 66 0 67 0;
-#X connect 67 0 10 1;
-#X connect 68 1 49 0;
-#X connect 69 0 52 0;
-#X connect 82 0 5 0;
-#X connect 83 0 7 0;
-#X connect 83 1 6 0;
-#X connect 83 2 43 0;
-#X connect 83 3 41 0;
-#X connect 83 4 84 0;
-#X connect 84 0 5 0;
diff --git a/externals/aalex/pcre-help.pd b/externals/aalex/pcre-help.pd
deleted file mode 100644
index 0ab1799b71d7f021d7c59a5380bd5452484a33bc..0000000000000000000000000000000000000000
--- a/externals/aalex/pcre-help.pd
+++ /dev/null
@@ -1,50 +0,0 @@
-#N canvas 1 53 679 425 10;
-#X obj 76 -59 cnv 15 200 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 69 161 cnv 15 300 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 116 107 symbol;
-#X obj 179 259 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 92 257 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 88 -23 F#9;
-#X msg 154 -23 D7b9;
-#X text 335 60 Matches a symbol against a Perl-compatible regular expression.
-See man pcre.;
-#X obj 267 262 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 205 -10 Am7;
-#X obj 92 236 pcre #9;
-#X obj 179 237 pcre b9;
-#X obj 267 240 pcre !9;
-#X text 339 30 pcre;
-#X text 106 -53 patterns;
-#X text 80 170 masks;
-#X msg 238 127 foo;
-#X msg 26 11 foo;
-#X obj 257 162 symbol;
-#N canvas 415 274 494 251 META 0;
-#X text 12 155 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 115 AUTHOR Alexandre Quessy;
-#X text 12 135 WEBSITE http://alexandre.quessy.net/;
-#X text 12 5 KEYWORDS control;
-#X text 12 45 DESCRIPTION match a symbol against a Perl-compatible
-regular expression;
-#X text 12 75 INLET_0 symbol;
-#X text 12 95 OUTLET_0 float;
-#X restore 593 318 pd META;
-#X connect 2 0 10 0;
-#X connect 2 0 11 0;
-#X connect 2 0 12 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 9 0 2 0;
-#X connect 10 0 4 0;
-#X connect 11 0 3 0;
-#X connect 12 0 8 0;
-#X connect 16 0 18 0;
-#X connect 17 0 2 0;
-#X connect 18 0 10 1;
diff --git a/externals/aalex/pcre.c b/externals/aalex/pcre.c
deleted file mode 100644
index 747793832422df7f260b9cceaf821caf6e55d34d..0000000000000000000000000000000000000000
--- a/externals/aalex/pcre.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * The [pcre] class in Pure Data is an external to verify that a subject 
- * matches a Perl-compatible regular expression mask.
- * 
- * http://alexandre.quessy.net
- * 
- * @author Alexandre Quessy
- * @c GNU General Public License 2006
- */
- 
-#include "m_pd.h"
-#include <string.h>
-#include <stdlib.h>
-#include <pcre.h>
-
-#define CAPTUREVECTORSIZE 30 /* multiple of 3 */
-#define pdpcre_ERROR_PREFIX "[pdpcre]: "
-#define pdpcre_FALSE_MASK "xxxxxxxxxxxxxxxxxxxxxx"
-#define pdpcre_DECIMAL_PRECISION_SIZE_T 4
-
-/** variables of the pd object */
-typedef struct pdpcre {
-  t_object x_ob; /* contient inlets et outlets */
-  t_outlet *x_outlet;
-  pcre *regex; /* mask */
-} t_pdpcre;
-
-/** functions */
-char *_str_replace(const char search, const char replace, const char *subject);
-int _isMatching(t_pdpcre *x, char *text);
-void _compile_pattern(t_pdpcre *x, const char *pattern);
-
-
-/** left inlet: subject */
-void pdpcre_symbol0(t_pdpcre *x, t_symbol *arg) {
-  int isOk =_isMatching(x, arg->s_name);
-  outlet_float(x->x_outlet, isOk);
-}
-
-/* left inlet: subject (when a float) 
-void pdpcre_float0(t_pdpcre *x, t_floatarg arg) {
-  char *str_float = sprintf("%f0", arg);
-  int isOk =_isMatching(x, str_float);
-  outlet_float(x->x_outlet, isOk);
-}
-*/
-
-
-/** right inlet : mask */
-void pdpcre_symbol1(t_pdpcre *x, t_symbol *arg) {
-  _compile_pattern(x, arg->s_name);
-}
-
-/* right inlet 
-void pdpcre_float1(t_pdpcre *x, t_floatarg arg) {
-  char *str_float = sprintf("%f0", arg);
-  _compile_pattern(x, str_float);
-}
-*/
-t_class *pdpcre_class;
-
-/** constructor */
-void *pdpcre_new(t_symbol *selector, int argc, t_atom *argv) {
-  int is_valid = 0;
-  t_pdpcre *x = (t_pdpcre *) pd_new(pdpcre_class);
-  
-  /* set the mask */
-  if (argc < 1) {
-    post("%s No mask given as argument. Please supply one as message.\n", pdpcre_ERROR_PREFIX);
-  } else {
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *tmp = atom_getsymbol(&argv[0]);
-      _compile_pattern(x, tmp->s_name);
-      is_valid = 1;
-    } else {
-      post("%s Argument should be a symbol\n", pdpcre_ERROR_PREFIX);
-    }
-  }
-  if (is_valid == 0) {
-    _compile_pattern(x, pdpcre_FALSE_MASK);
-  }
-  /* add inlets */
-  inlet_new(&x->x_ob, &x->x_ob.ob_pd, gensym("symbol"), gensym("mask")); /* selecteur, renomme mask */
-  
-  /* add outlet */
-  x->x_outlet = outlet_new(&x->x_ob, gensym("float"));
-  return (void *)x;
-}
-
-/** setup */
-void pcre_setup(void) {
-  pdpcre_class = class_new(gensym("pcre"), (t_newmethod) pdpcre_new, 0, sizeof(t_pdpcre), 0, A_GIMME, 0);
-  class_addmethod(pdpcre_class, (t_method) pdpcre_symbol0, gensym("symbol"), A_SYMBOL, 0);
-  class_addmethod(pdpcre_class, (t_method) pdpcre_symbol1, gensym("mask"), A_SYMBOL, 0);
-}
-
-
-
-
-/* ############################### functions ###################### */
-
-
-
-
-/** clone of the PHP function */
-char *_str_replace(const char search, const char replace, const char *subject) {
-  int i, len;
-  char *result = strdup(subject);
-  len = strlen(result);
-  for (i = 0; i <= len; i++) {
-    if(result[i] == search) { 
-      result[i] = replace;
-    }
-  }
-  return result;
-}
-
-/** 
- * returns 1 if pdpcre, 0 if not 
- * TODO use stdbool.h, I think
- */
-int _isMatching(t_pdpcre *x, char *text) { /* 2nd is const */
-  int capturevector[CAPTUREVECTORSIZE];
-  int rc;
-  int i;
-  int result = 0;
-  
-  rc = pcre_exec(x->regex, NULL, text, (int) strlen(text), 0, 0, capturevector, CAPTUREVECTORSIZE);
-  
-  if (rc < 0) {
-    result = 0;
-  } else {
-    result = 1;
-  }
-  
-  /* ok, a partir d'ici c'est different de l'autre exemple, sauf qu'on avait mis des parentheses dans le pattern */
-  if (rc == 0) {
-    rc = CAPTUREVECTORSIZE / 3;
-    post("ovector only has room for %d captured substrings\n", rc - 1);
-  }
-  for (i = 0; i < rc; i++) {
-    char *substring_start = text + capturevector[2 * i]; /* ovector */
-    int substring_length = capturevector[2 * i + 1] - capturevector[2 * i];
-    //post("%2d matching: %.*s", i, substring_length, substring_start);
-  }
-  /* I think that from here I should clean up my memory */
-  
-  return result;
-}
-
-/* ############## begin class pdpcre ####################### */
-
-/** 
- * private method to set and compile the mask 
- * TODO : use pcre_malloc() and pcre_free()
- */
-void _compile_pattern(t_pdpcre *x, const char *pattern) {
-  pcre *regex;
-  const char *regex_error; 
-  int erroroffset;
-  char *mask = _str_replace('`', '\\', pattern);
-  
-  regex = pcre_compile(mask, 0, &regex_error, &erroroffset, NULL);
-  if (regex == NULL) {
-    post("%s Compilation failed at offset %d : %s", pdpcre_ERROR_PREFIX, erroroffset, regex_error);
-    regex = pcre_compile(pdpcre_FALSE_MASK, 0, &regex_error, &erroroffset, NULL); /* will always return false if invalid pattern */
-  } else {
-    post("%s New PCRE mask: %s", pdpcre_ERROR_PREFIX, mask);
-  }
-  /* free(x->regex); */
-  x->regex = regex;
-}
diff --git a/externals/aalex/x11key-help.pd b/externals/aalex/x11key-help.pd
deleted file mode 100644
index 9e68e2fb747b59ad69b19764834ca1928f6c7d77..0000000000000000000000000000000000000000
--- a/externals/aalex/x11key-help.pd
+++ /dev/null
@@ -1,93 +0,0 @@
-#N canvas 1 53 743 591 10;
-#X obj 73 -42 cnv 15 150 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 265 -43 cnv 15 200 140 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 157 301 x11key;
-#X msg 83 221 help;
-#X msg 95 42 letter a;
-#X msg 94 -24 bang;
-#X msg 279 -19 bang;
-#X obj 278 45 delay 1000;
-#X obj 96 20 delay 1000;
-#X obj 377 47 delay 2000;
-#X msg 275 70 keysym A 1;
-#X msg 379 67 keysym A 0;
-#X obj 280 23 t b b;
-#X text 300 219 [x11key] simulates X11 keyboard events.;
-#X text 304 292 Comments are welcome. The API (the messages for every
-is likely to change.;
-#X text 669 438 pureX11;
-#N canvas 0 0 410 183 todo 0;
-#X msg 35 78 display :0.0;
-#X text 31 46 Not yet implemented;
-#X restore 28 382 pd todo;
-#X obj 518 41 t b b b;
-#X obj 519 -32 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X text 546 -35 control-A;
-#X msg 498 92 keysym Control_L \$1;
-#X msg 563 67 1;
-#X msg 489 67 0;
-#X msg 499 115 keysym A 1 \, keysym A 0;
-#X text 272 -35 triggers on and off a key;
-#X text 301 242 The examples above generate keys as if you typed it
-on your keyboard. Give the focus to an other application than PD \,
-in order to see that you really fake letters typing.;
-#X text 83 -42 types a key;
-#X text 420 465 Released under the GNU Public License v2.0;
-#X text 224 408 <-- see a bigger list of the keynames you can generate
-;
-#N canvas 0 0 500 345 more_keynames_possibles 0;
-#X text 19 116 BackSpace \, Tab \, Linefeed \, Clear \, Return \, Pause
-\, Scroll_Lock \, Sys_Req \, Escape \, Delete \, Home \, Left \, Up
-\, Right \, Down \, Prior \, Page_Up \, Next \, Page_Down \, End \,
-Begin \, Shift_L \, Shift_R \, Control_L \, Control_R \, Caps_Lock
-\, Shift_Lock \, Meta_L \, Meta_R \, Alt_L \, Alt_R \, space \, exclam
-\, quotedbl \, numbersign \, dollar \, percent \, ampersand \, apostrophe
-\, quoteright \, parenleft \, parenright \, asterisk \, plus \, comma
-\, minus \, period \, slash \, 0 \, 1 \, 2 \, 3 \, 4 \, 5 \, 6 \, 7
-\, 8 \, 9 \, colon \, semicolon \, less \, equal \, greater \, question
-\, at \, A \, B \, C \, D \, E \, F \, G \, H \, I \, J \, K \, L \,
-M \, N \, O \, P \, Q \, R \, S \, T \, U \, V \, W \, X \, Y \, Z
-\, bracketleft;
-#X text 19 54 Here are some ideas you can send using [keysym Tab 1<
-and [keysym Tab 0< \, for instance.;
-#X text 86 279 ...and much more. See /usr/include/X11/keysymdef.h;
-#X restore 28 405 pd more_keynames_possibles;
-#X text 302 325 [letter X< generate a letter (simple version);
-#X text 304 346 [keysym X 1|0< triggers a keystroke on or off \, depending
-on the second argument value.;
-#X obj 498 146 s to_x11key;
-#X obj 191 275 r to_x11key;
-#X text 443 449 )c( Copyleft 2006-2007 Alexandre Quessy;
-#N canvas 405 282 494 251 META 0;
-#X text 12 125 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 85 AUTHOR Alexandre Quessy;
-#X text 12 105 WEBSITE http://alexandre.quessy.net/;
-#X text 12 45 DESCRIPTION simulate X11 keyboard events;
-#X text 12 5 KEYWORDS control user_input;
-#X text 12 65 INLET_0 help letter keysym;
-#X restore 669 505 pd META;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 8 0;
-#X connect 6 0 12 0;
-#X connect 7 0 10 0;
-#X connect 8 0 4 0;
-#X connect 9 0 11 0;
-#X connect 10 0 2 0;
-#X connect 11 0 2 0;
-#X connect 12 0 7 0;
-#X connect 12 1 9 0;
-#X connect 17 0 22 0;
-#X connect 17 1 23 0;
-#X connect 17 2 21 0;
-#X connect 18 0 17 0;
-#X connect 20 0 32 0;
-#X connect 21 0 20 0;
-#X connect 22 0 20 0;
-#X connect 23 0 32 0;
-#X connect 33 0 2 0;
diff --git a/externals/aalex/x11key.c b/externals/aalex/x11key.c
deleted file mode 100644
index eb2ac91c472231120f0fa91a85663eb4e3aaf29b..0000000000000000000000000000000000000000
--- a/externals/aalex/x11key.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/**
- * [x11kry] Generates X11 keyboard events on Linux
- * @author Alexandre Quessy <alex@sourcelibre.com>
- * @license GNU Public License    )c( 2006
- */
-
-#include <X11/Xlib.h>
-#include <X11/Xresource.h>
-#include <X11/extensions/XTest.h>
-#include <X11/keysym.h>
-// #include <stdio.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include "m_pd.h"
-
-#define PUREX11_DEFAULT_KEYSTATE 0
-#define PUREX11_DEFAULT_DISPLAY 0
-
-/** variables of the pd object */
-typedef struct x11key {
-  t_object x_ob; /* The instance. Contains inlets and outlets */
-  int *displayName;
-} t_x11key;
-
-/**
- * letter : types the letter you give it.
- */
-void x11key_letter(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  KeySym keysym;
-  KeyCode keycode;
-  int result;
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *sym = atom_getsymbolarg(0, argc, argv);
-      char *theChars = sym->s_name;
-      //keysym = XK_q;
-      keysym = XStringToKeysym(theChars);
-      /* should be hostname:number.screen_number */
-      display = XOpenDisplay(NULL); /* defaults to $DISPLAY */
-      if (display == NULL) {
-        post("Error : could not open display.\n");
-      }else {
-        // printf("Display opened successfully.\n");
-        keycode = XKeysymToKeycode(display, keysym);
-        //post("letter = %s", theChars);
-        //post("keycode = %d", (int) keycode);
-        /** Pushes on and off the letter */
-        /*
-        if (argc >= 2) {
-          if (argv[1].a_type == A_FLOAT) {
-            int isPressed = (atom_getfloatarg(0, argc, argv) == 0) ? true: false;
-            result = XTestFakeKeyEvent(display, keycode, isPressed, 0);
-            //post("result = %d", result);
-            if (result == 0) {
-              post("Error : could not simulate typing the letter.");
-            }
-          }
-        } else { */
-          // defaults to press and release
-          result = XTestFakeKeyEvent(display, keycode, True, 0);
-          //post("result = %d", result);
-          if (result == 0) {
-            post("Error : could not simulate typing the letter.");
-          }
-          result = XTestFakeKeyEvent(display, keycode, False, 0); 
-          if (result == 0) {
-            post("Error : could not simulate typing the letter.");
-          }
-        /* } //endif argc >= 2 */
-        XCloseDisplay(display);
-      }
-    } else {
-      post("Error : Bad argument type. Must be a symbol. Try [symbol 7< if you want to type a number.");
-    }
-  } else {
-    post("Error : Missing argument. The letter to type.");
-  }
-}
-
-
-
-/**
- * key : types the key symbol you give it. See /usr/include/X11/keysymdef.h
- */
-void x11key_keysym(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  KeySym keysym;
-  KeyCode keycode;
-  int result;
-  int state = PUREX11_DEFAULT_KEYSTATE;
-  bool boolState;
-  
-  if (argc >= 2) {
-    if (argv[1].a_type == A_FLOAT) { 
-      state = (int) atom_getfloatarg(1, argc, argv);
-    }
-  }
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *sym = atom_getsymbolarg(0, argc, argv);
-      char *theChars = sym->s_name;
-      //keysym = XK_q;
-      keysym = XStringToKeysym(theChars);
-      /* should be hostname:number.screen_number */
-      display = XOpenDisplay(NULL); /* defaults to $DISPLAY */
-      if (display == NULL) {
-        post("Error : could not open display.\n");
-      }else {
-        // printf("Display opened successfully.\n");
-        keycode = XKeysymToKeycode(display, keysym);
-        
-        /** Pushes on and off the letter */
-        boolState = (state == 0) ? False : True;
-        result = XTestFakeKeyEvent(display, keycode, boolState, 0);
-        if (result == 0) {
-          post("Error : could not simulate typing the letter.");
-        }
-        XCloseDisplay(display);
-      }
-    } else {
-      post("Error : Bad argument type. Must be a symbol. ");
-    }
-  } else {
-    post("Error : Missing argument. The letter to type.");
-  }
-}
-
-
-
-/** display */
-void x11key_display(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  post("Not yet implemented.");
-}
-
-/** help */
-void x11key_help(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  post("keysym [see /usr/include/X11/keysymdef.h for the key symbols]");
-  post("letter [letter a-zA-Z0-9...]");
-  post("help");
-  post("display : not yet implemented");
-}
-
-
-
-
-
-/** The class */
-t_class *x11key_class;
-
-/** constructor */
-void *x11key_new(t_symbol *selector, int argc, t_atom *argv) {
-  t_x11key *x = (t_x11key *) pd_new(x11key_class);
-  //x->displayName = PUREX11_DEFAULT_DISPLAY;
-  return (void *)x;
-}
-
-/** setup */
-void x11key_setup(void) {
-  x11key_class = class_new(gensym("x11key"), (t_newmethod) x11key_new, 0, sizeof(t_x11key), 0, A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_letter, gensym("letter"), A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_keysym, gensym("keysym"), A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_display, gensym("display"), A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_help, gensym("help"), A_GIMME, 0);
-  
-  post("==============================================");
-  post("                Pure X11");
-  post("Copyleft 2006 Alexandre Quessy");
-  post("GNU Public License");
-  post("[x11key] simulates X11 keyboard events.");
-  post("==============================================");
-  
-}
diff --git a/externals/aalex/x11mouse-help.pd b/externals/aalex/x11mouse-help.pd
deleted file mode 100644
index e4185f93f719be6ffcab09e92e428294abc3fbca..0000000000000000000000000000000000000000
--- a/externals/aalex/x11mouse-help.pd
+++ /dev/null
@@ -1,86 +0,0 @@
-#N canvas 1 53 997 581 10;
-#X obj 13 10 cnv 15 150 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 385 63 cnv 15 100 100 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 521 275 cnv 15 420 230 empty empty x11mouse_object 20 12 0 14
--258699 -66577 0;
-#X obj 189 152 cnv 15 150 140 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 569 70 cnv 15 100 100 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 760 23 cnv 15 200 200 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 271 468 x11mouse;
-#X msg 32 107 click;
-#X msg 199 261 press 1 1;
-#X msg 49 339 help;
-#X obj 848 95 f 0;
-#X obj 889 95 + 1;
-#X msg 927 58 0;
-#X obj 802 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 810 186 move \$1 \$1;
-#X obj 848 125 > 50;
-#X obj 32 85 delay 500;
-#X msg 32 30 bang;
-#X obj 90 158 print;
-#X obj 199 240 delay 500;
-#X msg 196 189 bang;
-#X obj 587 116 delay 500;
-#X msg 587 76 bang;
-#X msg 587 137 press 3 1;
-#X msg 392 124 move 400 200;
-#X floatatom 763 186 5 0 0 0 - - -;
-#X obj 847 146 sel 1;
-#X obj 848 65 metro 50;
-#X obj 813 123 * 4;
-#X text 542 395 Comments are welcome. The API (the messages for every
-is likely to change.;
-#X text 544 457 )c( Copyleft 2006 Alexandre Quessy;
-#X text 547 472 Released under the GNU Public License;
-#X text 547 441 pureX11;
-#X text 16 -10 1 Click and keep your mouse over the message;
-#X text 197 164 2 Click and keep your mouse over the message;
-#X text 388 48 3 Moves the mouse;
-#X text 766 7 5 Moves the mouse around;
-#X text 548 306 [x11mouse] simulates X11 mouse events.;
-#X text 564 51 4 Right-clicks (button 3);
-#X text 545 337 Try all examples.;
-#X text 221 297 press 1 on;
-#X text 218 320 press 1 off;
-#N canvas 455 314 494 251 META 0;
-#X text 12 125 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 85 AUTHOR Alexandre Quessy;
-#X text 12 105 WEBSITE http://alexandre.quessy.net/;
-#X text 12 5 KEYWORDS control user_input;
-#X text 12 45 DESCRIPTION simulate X11 mouse events;
-#X text 12 65 INLET_0 help click press move;
-#X restore 906 533 pd META;
-#X connect 7 0 6 0;
-#X connect 7 0 18 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 10 0 11 0;
-#X connect 10 0 15 0;
-#X connect 10 0 28 0;
-#X connect 11 0 10 1;
-#X connect 12 0 10 1;
-#X connect 12 0 27 0;
-#X connect 13 0 27 0;
-#X connect 14 0 6 0;
-#X connect 15 0 26 0;
-#X connect 16 0 7 0;
-#X connect 17 0 16 0;
-#X connect 19 0 8 0;
-#X connect 20 0 19 0;
-#X connect 21 0 23 0;
-#X connect 22 0 21 0;
-#X connect 23 0 6 0;
-#X connect 24 0 6 0;
-#X connect 26 0 12 0;
-#X connect 27 0 10 0;
-#X connect 28 0 14 0;
-#X connect 28 0 25 0;
diff --git a/externals/aalex/x11mouse.c b/externals/aalex/x11mouse.c
deleted file mode 100644
index b13ace0fc006abe4b446bc14e8760c9b46a8faac..0000000000000000000000000000000000000000
--- a/externals/aalex/x11mouse.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * [x11mouse] Generates X11 mouse events on Linux
- * @author Alexandre Quessy <alex@sourcelibre.com>
- * @license GNU Public License    )c( 2006
- */
-
-#include <X11/Xlib.h>
-#include <X11/Xresource.h>
-#include <X11/extensions/XTest.h>
-#include <stdio.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include "m_pd.h"
-
-#define PUREX11_DEFAULT_MOUSEBUTTON 1
-#define PUREX11_DEFAULT_MOUSESTATE 0
-#define PUREX11_DEFAULT_DISPLAY 0
-#define PUREX11_DEFAULT_XVALUE 0
-#define PUREX11_DEFAULT_YVALUE 0
-
-
-/** variables of the pd object */
-typedef struct x11mouse {
-  t_object x_ob; /* The instance. Contains inlets and outlets */
-  int *displayName;
-} t_x11mouse;
-
-
-
-/** 
- * Mouse click
- * @param int Button number
- */
-void x11mouse_click(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  int result;
-  
-  int button = PUREX11_DEFAULT_MOUSEBUTTON;
-  
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      button = (int) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  
-  result = XTestFakeButtonEvent(display, button, True, CurrentTime);
-  result = XTestFakeButtonEvent(display, button, False, CurrentTime);
-  XCloseDisplay(display);
-}
-
-/** 
- * Mouse button press or release
- * @param int State. Defaults to 0.
- * @param int Button number
- */
-void x11mouse_press(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  int result;
-  
-  int button = PUREX11_DEFAULT_MOUSEBUTTON;
-  int state = PUREX11_DEFAULT_MOUSESTATE;
-  bool boolState;
-  
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  
-  if (argc >= 2) {
-    if (argv[1].a_type == A_FLOAT) { 
-      button = (int) atom_getfloatarg(1, argc, argv);
-    }
-    if (argv[0].a_type == A_FLOAT) { 
-      state = (int) atom_getfloatarg(0, argc, argv);
-    }
-  } else if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      state = (int) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  
-  boolState = (state == 0) ? False : True;
-  result = XTestFakeButtonEvent(display, button, boolState, CurrentTime);
-  if (!result) {
-    post("[x11mouse] error : could not fake button event.");
-  }
-  XCloseDisplay(display);
-}
-
-/**
- * Moves the mouse to the coordonates you give it.
- */
-void x11mouse_move(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  int result;
-  int xCoord = PUREX11_DEFAULT_XVALUE;
-  int yCoord = PUREX11_DEFAULT_YVALUE;
-  
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  
-  if (argc >= 2) {
-    if (argv[1].a_type == A_FLOAT) { 
-      yCoord = (int) atom_getfloatarg(0, argc, argv);
-    }
-    if (argv[0].a_type == A_FLOAT) { 
-      xCoord = (int) atom_getfloatarg(0, argc, argv);
-    }
-  } else if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      xCoord = (int) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  
-  result = XTestFakeMotionEvent(display, 0, xCoord, yCoord, CurrentTime);
-  if (!result) {
-    post("[x11mouse] error : could not fake motion event.");
-  }
-  XCloseDisplay(display);
-}
-
-/**
- * Sets the X11 display name.
- * Defaults to $DISPLAY, usually :0.0
- * 
- * Not currently implemented. You cannot change the display. (for now)
- * @todo Allow the user to change the display
- */
-void x11mouse_display(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  XCloseDisplay(display);
-}
-
-void x11mouse_help(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  post("press [state 0/1] [button number 1-3]");
-  post("move [x] [y]");
-  post("click [button number 1-3]");
-  post("help");
-  post("display not yet implemented");
-  
-  
-  
-}
-
-/** The class */
-t_class *x11mouse_class;
-
-/** constructor */
-void *x11mouse_new(t_symbol *selector, int argc, t_atom *argv) {
-  t_x11mouse *x = (t_x11mouse *) pd_new(x11mouse_class);
-  //x->displayName = PUREX11_DEFAULT_DISPLAY;
-  return (void *)x;
-}
-
-/** setup */
-void x11mouse_setup(void) {
-  x11mouse_class = class_new(gensym("x11mouse"), (t_newmethod) x11mouse_new, 0, sizeof(t_x11mouse), 0, A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_press, gensym("press"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_move, gensym("move"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_display, gensym("display"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_click, gensym("click"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_help, gensym("help"), A_GIMME, 0);
-  
-  post("==============================================");
-  post("                Pure X11");
-  post("Copyleft 2006 Alexandre Quessy");
-  post("GNU Public License");
-  post("[x11mouse] simulates X11 mouse events.");
-  post("==============================================");
-  
-}
diff --git a/externals/aalex/xmms-help.pd b/externals/aalex/xmms-help.pd
deleted file mode 100644
index c75874b24651b2ea5277482c1ee873897d299773..0000000000000000000000000000000000000000
--- a/externals/aalex/xmms-help.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 1 53 447 336 10;
-#X obj 14 113 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 79 112 cnv 15 50 50 empty empty empty 20 12 0 14 -24198 -66577
-0;
-#X obj 158 105 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 259 104 cnv 15 50 50 empty empty empty 20 12 0 14 -24198 -66577
-0;
-#X obj 208 105 cnv 15 50 50 empty empty empty 20 12 0 14 -241291 -66577
-0;
-#X obj 60 274 xmms;
-#X msg 79 112 next;
-#X msg 15 113 prev;
-#X msg 265 122 play;
-#X msg 165 121 stop;
-#X msg 213 122 pause;
-#X obj 56 11 keyname;
-#X obj 99 35 select h j k l;
-#X msg 317 232 volume \$1;
-#X obj 318 172 vsl 15 50 0 100 0 0 empty empty empty 0 -8 0 8 -62784
--1 -1 0 1;
-#X msg 213 206 forward 4000;
-#X msg 214 183 backward 4000;
-#X msg 210 229 backward;
-#N canvas 29 134 494 392 META 0;
-#X text 12 5 KEYWORDS control needs_work;
-#X text 12 65 INLET_0 pre next stop pause play backward forward volume
-;
-#X text 12 85 AUTHOR Alexandre Quessy;
-#X text 12 105 WEBSITE http://alexandre.quessy.net/;
-#X text 12 125 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
-to conform to the PDDP template for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 45 DESCRIPTION control the X Multimedia System;
-#X restore 388 291 pd META;
-#X connect 11 1 12 0;
-#X connect 12 0 16 0;
-#X connect 12 1 10 0;
-#X connect 12 2 8 0;
-#X connect 12 3 15 0;
-#X connect 14 0 13 0;
diff --git a/externals/aalex/xmms.c b/externals/aalex/xmms.c
deleted file mode 100644
index ef17659d9ea55f3c86951a3e382138551d81f7eb..0000000000000000000000000000000000000000
--- a/externals/aalex/xmms.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * [xmms] is a Pure Data object to control the X Multimedia System, an audio player.
- *
- * @url http://alexandre.quessy.net/
- * @author Alexandre Quessy <alexandre@quessy.net>
- * @license GNU General Public License 2006
- * thanks to Andy Gimblett for code examples
- */
-/*
-To know which flags to use for compilation: 
-`xmms-config --cflags --libs`
-
-On Debian, you need libxmms and xmms-festalon if you want to read nsf files.
-*/
-
-//#define _GNU_SOURCE
-
-/* PD includes */
-#include "m_pd.h"
-#include <math.h>
-// #include <string.h>
-#include <stdlib.h>
-// #include <stdio.h>
-
-/* XMMS includes */
-#include <xmms/xmmsctrl.h>
-// #include <glib.h>
-/* local constants */
-#define PDXMMS_DEFAULTSKIP 5000
-
-
-//need following declarations so internal XMMS functions can be called
-//(ripped from XMMS source)
-//from xmms.c
-//gboolean playlist_load(gchar * inpipefile);
-
-
-/** variables of the pd object */
-typedef struct xmms {
-  t_object x_ob; /* The instance. Contains inlets and outlets */
-  /* xmms session. 0 is the first one when we start it */
-  int session;
-  //t_outlet *x_outlet;
-} t_xmms;
-
-
-
-void xmms_prev(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_playlist_prev(x->session);
-}
-
-void xmms_next(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_playlist_next(x->session);
-}
-
-void xmms_play(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_play(x->session);
-}
-
-void xmms_pause(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_pause(x->session);
-}
-
-void xmms_stop(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_stop(x->session);
-}
-
-void xmms_volume(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  float f;
-  int l, r;
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      f = (float) atom_getfloatarg(0, argc, argv);
-      l = (int) f;
-      //if (mute_flag) mute_flag = 0;
-      if (l > 100) l = 100;
-      else if (l < 0) l = 0;
-      //if (r > 100) r = 100;
-      //else if (r < 0) r = 0;
-      r = f;
-      xmms_remote_set_volume(x->session, l, r);
-    }
-  }
-}
-
-
-/* skipf and skipb */
-void xmms_forward(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  int time = xmms_remote_get_output_time(x->session);
-  double skip = PDXMMS_DEFAULTSKIP;
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      skip = (double) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  xmms_remote_jump_to_time(x->session, (int) rint(time + skip));
-}
-
-void xmms_backward(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  int time = xmms_remote_get_output_time(x->session);
-  double skip = PDXMMS_DEFAULTSKIP;
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      skip = (double) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  xmms_remote_jump_to_time(x->session, (int) rint(time - skip));
-}
-
-/*
-void xmms_load0(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  if (argc >= 1) { 
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *tmp = atom_getsymbol(&argv[0]);
-      playlist_load(tmp->s_name);
-    }
-  }
-}
-  */
-/** The class */
-t_class *xmms_class;
-
-/** constructor */
-void *xmms_new(t_symbol *selector, int argc, t_atom *argv) {
-  t_xmms *x = (t_xmms *) pd_new(xmms_class);
-  //x->x_outlet = outlet_new(&x->x_ob, gensym("symbol"));
-  x->session = 0;
-  // if (!xmms_remote_is_running(x->session)) return 0;
-  return (void *)x;
-}
-
-/** setup */
-void xmms_setup(void) {
-  xmms_class = class_new(gensym("xmms"), (t_newmethod) xmms_new, 0, sizeof(t_xmms), 0, A_GIMME, 0);
-  
-  class_addmethod(xmms_class, (t_method)xmms_stop, gensym("stop"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_play, gensym("play"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_pause, gensym("pause"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_next, gensym("next"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_prev, gensym("prev"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_forward, gensym("forward"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_backward, gensym("backward"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_volume, gensym("volume"), A_GIMME, 0);
-  //class_addmethod(xmms_class, (t_method)xmms_load0, gensym("load"), A_GIMME, 0);
-}
-
diff --git a/externals/algocomp/.cdtproject b/externals/algocomp/.cdtproject
deleted file mode 100755
index f4957ec0d02f84e665336f9af59643b55594dce4..0000000000000000000000000000000000000000
--- a/externals/algocomp/.cdtproject
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse-cdt version="2.0"?>
-
-<cdtproject id="org.eclipse.cdt.make.core.make">
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
-<data>
-<item id="scannerConfiguration">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-</item>
-<item id="org.eclipse.cdt.core.pathentry">
-<pathentry kind="src" path=""/>
-<pathentry kind="out" path=""/>
-<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-</item>
-</data>
-</cdtproject>
diff --git a/externals/algocomp/.cproject b/externals/algocomp/.cproject
deleted file mode 100644
index 67324f9f7bcd02ef8621d2e9ec895d04de1cc8f0..0000000000000000000000000000000000000000
--- a/externals/algocomp/.cproject
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?>
-
-<cproject>
-<storageModule moduleId="org.eclipse.cdt.core.settings">
-<cconfiguration id="converted.config.111355161">
-<storageModule moduleId="scannerConfiguration">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-</storageModule>
-<storageModule moduleId="org.eclipse.cdt.core.pathentry">
-<pathentry kind="src" path=""/>
-<pathentry kind="out" path=""/>
-<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-</storageModule>
-<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.111355161" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
-<externalSettings/>
-<extensions>
-<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-</extensions>
-</storageModule>
-</cconfiguration>
-</storageModule>
-</cproject>
diff --git a/externals/algocomp/.project b/externals/algocomp/.project
deleted file mode 100755
index 6deef2ce1d571ac1ddc054f127667eaa42e836d1..0000000000000000000000000000000000000000
--- a/externals/algocomp/.project
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>algocomp</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.make.core.makeBuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.arguments</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.core.errorOutputParser</key>
-					<value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.environment</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.inc</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.clean</key>
-					<value>clean</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.command</key>
-					<value>make</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.full</key>
-					<value>clean all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.auto</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>false</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.make.core.makeNature</nature>
-		<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
-	</natures>
-</projectDescription>
diff --git a/externals/algocomp/Makefile b/externals/algocomp/Makefile
deleted file mode 100755
index 6e7bdf87dbd803e2a7b438c6f38dd78ab972e661..0000000000000000000000000000000000000000
--- a/externals/algocomp/Makefile
+++ /dev/null
@@ -1,85 +0,0 @@
-# set Name and system
-
-NAME=algocomp
-#SYSTEM = nt
-SYSTEM = linux
-# set paths for windows
-
-# where is VC++ ???
-VC="C:\Programme\Microsoft Visual C++ Toolkit 2003"
-VCLINK="C:\Programme\Microsoft Visual C++ Toolkit 2003\bin\link"
-# where is pd
-#PDPATH="E:\Program Files\pd-0.38-3"
-PDPATH=C:\Programme\pd-0.38-3
-LIBPATH="$(PDPATH)/bin"
-
-install: install_$(SYSTEM)
-
-all: $(SYSTEM)
-#all: pd_linux install_linux
-
-# ----------------------- LINUX i386 -----------------------
-
-linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-# where is your m_pd.h ???
-LINUXINCLUDE =  -I../../src 
-
-.c.pd_linux:
-	cc -O2 -Wall -DPD -fPIC $(LINUXCFLAGS) $(LINUXINCLUDE) -c $*.c 
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc 
-	strip --strip-unneeded $*.pd_linux 
-
-install_linux:
-	sudo cp *.pd_linux /usr/lib/pd/extra/
-	cp *.pd_linux ../../download
-
-# ----------------------- NT -----------------------
-
-nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-PDNTINCLUDE = /I. /I$(PDPATH)\tcl\include /I$(PDPATH)\src /I$(VC)\include /Iinclude
-PDNTLDIR = "C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib"
-
-PDNTLIB = "C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib\libc.lib" \
-	"C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib\oldnames.lib" \
-	"C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib\kernel32.lib" \
-	"$(PDPATH)\bin\pd.lib"
-
-
-.c.dll: algocomp.c chaotic.c ifs.c selfsimilar.c chaossignals.c pan.c
-	cl /W3 /WX /O2 /G6 /DNT /DPD /nologo /I. /I"C:\Programme\flextbuild\pd\tcl\include" /I"C:\Programme\flextbuild\pd\src" /I"C:\Programme\Microsoft Visual C++ Toolkit 2003\include" /Iinclude /c $(NAME).c
-	link /dll /export:$(NAME)_setup $*.obj $(PDNTLIB)
-
-#.c.dll:
-#	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-#	link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB)
-	
-install_nt:
-	cp $(NAME).dll $(PDPATH)\externs
-# -------------------------- XP --------------------------
-
-# $(CXX) $(LDFLAGS) -shared $(patsubst %,-L%,$(LIBPATH)) $^ $(patsubst %,-l%,$(LIBS)) -o $@
-
-pd_xp:
-	gcc -O2 -Wall -DPD -L$(LIBPATH) -c $(NAME).c 
-	ld --export-dynamic -shared -o $(NAME).dll -lc 
-
-
-install_xp:
-#	copy $(NAME).dll $(PDPATH)/externs
-	cp $(NAME).dll $(PDPATH)/externs
-
-clean:
-	rm -f *.o *.dll *.exp *.obj *.lib
-	rm -f *.o *.pd_* *.dll so_locations
-	
diff --git a/externals/algocomp/Makefile.advanced b/externals/algocomp/Makefile.advanced
deleted file mode 100755
index fb48ca960326076473deebafb54b9a3702455f2b..0000000000000000000000000000000000000000
--- a/externals/algocomp/Makefile.advanced
+++ /dev/null
@@ -1,104 +0,0 @@
-NAME=patcher~
-CSYM=patcher_tilde
-
-current: pd_nt pd_linux pd_darwin
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-
-# where is VC++ ???
-VC="C:\Programme\Microsoft Visual Studio\VC98"
-
-# where is your m_pd.h ???
-PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDNTLDIR)\user32.lib \
-	$(PDNTLDIR)\uuid.lib \
-	c:\pd\bin\pd.lib
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- MAX OS X -----------------------
-
-pd_darwin: $(NAME).pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -DUNIX -O2 -DMACOSX \
-    -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-DARWININCLUDE =  -I../../src 
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
-	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $*.o
-	rm -f $*.o ../$*.pd_darwin
-	ln -s $*/$*.pd_darwin ..
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-# where is your m_pd.h ???
-LINUXINCLUDE =  -I../../src 
-
-.c.pd_linux:
-	cc -O2 -Wall -DPD -fPIC $(LINUXCFLAGS) $(LINUXINCLUDE) -c $*.c 
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc 
-	strip --strip-unneeded $*.pd_linux 
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
\ No newline at end of file
diff --git a/externals/algocomp/algocomp-help-patches/delnote.pd b/externals/algocomp/algocomp-help-patches/delnote.pd
deleted file mode 100755
index bed2181ff8a91fac5ffb504e53d107e7dba39669..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/delnote.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 88 99 482 332 12;
-#X obj 25 70 del;
-#X obj 29 157 unpack 0 0;
-#X floatatom 111 186 5 0 0 0 - - -;
-#X floatatom 161 187 5 0 0 0 - - -;
-#X obj 29 130 pack 0 0;
-#X obj 29 106 f;
-#X obj 76 14 inlet;
-#X obj 126 15 inlet;
-#X obj 31 207 f;
-#X obj 61 207 t b f;
-#X obj 31 237 makenote 60 100 100;
-#X obj 25 14 inlet;
-#X obj 193 215 outlet;
-#X obj 25 40 t b f;
-#X obj 29 267 noteout;
-#X obj 255 212 s note;
-#X obj 252 182 pack 0 0 0 0 0 0 0 0;
-#X floatatom 312 154 5 0 0 0 - - -;
-#X connect 0 0 5 0;
-#X connect 1 0 2 0;
-#X connect 1 0 8 1;
-#X connect 1 0 16 1;
-#X connect 1 1 3 0;
-#X connect 1 1 9 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 1;
-#X connect 7 0 4 1;
-#X connect 8 0 10 0;
-#X connect 8 0 16 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 2;
-#X connect 9 1 12 0;
-#X connect 9 1 16 2;
-#X connect 10 0 14 0;
-#X connect 10 1 14 1;
-#X connect 11 0 13 0;
-#X connect 13 0 0 0;
-#X connect 13 1 0 1;
-#X connect 16 0 15 0;
-#X connect 17 0 16 3;
diff --git a/externals/algocomp/algocomp-help-patches/dnote.pd b/externals/algocomp/algocomp-help-patches/dnote.pd
deleted file mode 100755
index 04f67a30be20cb17afc463bc8a547e227e1a8c6e..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/dnote.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 88 99 482 332 12;
-#X obj 25 70 del;
-#X obj 29 157 unpack 0 0;
-#X floatatom 111 186 5 0 0 0 - - -;
-#X floatatom 161 187 5 0 0 0 - - -;
-#X obj 29 130 pack 0 0;
-#X obj 29 106 f;
-#X obj 76 14 inlet;
-#X obj 126 15 inlet;
-#X obj 31 207 f;
-#X obj 61 207 t b f;
-#X obj 31 237 makenote 60 100 100;
-#X obj 25 14 inlet;
-#X obj 100 269 outlet;
-#X obj 25 40 t b f;
-#X obj 29 267 noteout;
-#X obj 240 270 s note;
-#X obj 237 240 pack 0 0 0 0 0 0 0 0;
-#X floatatom 297 212 5 0 0 0 - - -;
-#X connect 0 0 5 0;
-#X connect 1 0 2 0;
-#X connect 1 0 8 1;
-#X connect 1 0 16 1;
-#X connect 1 1 3 0;
-#X connect 1 1 9 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 1;
-#X connect 7 0 4 1;
-#X connect 8 0 10 0;
-#X connect 8 0 16 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 2;
-#X connect 9 1 12 0;
-#X connect 9 1 16 2;
-#X connect 10 0 14 0;
-#X connect 10 1 14 1;
-#X connect 11 0 13 0;
-#X connect 13 0 0 0;
-#X connect 13 1 0 1;
-#X connect 16 0 15 0;
-#X connect 17 0 16 3;
diff --git a/externals/algocomp/algocomp-help-patches/help-algocomp.pd b/externals/algocomp/algocomp-help-patches/help-algocomp.pd
deleted file mode 100755
index 4bc2185e26f61f0dd79df5ce49ed2f0e6398f490..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-algocomp.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 493 243 450 300 10;
-#X obj 169 33 help-oneoverf;
-#X obj 66 132 help-eca;
-#X obj 57 58 help-henon;
-#X obj 50 81 help-lorenz;
-#X text 24 12 chaos functions;
-#X obj 36 34 help-logistic;
-#X text 165 13 fractal;
-#X obj 169 56 help-ifs;
-#X text 32 113 elementary CA;
-#X obj 272 33 help-selfsimilar;
-#X obj 272 56 help-ifsmusic;
-#X obj 65 210 help-map;
-#X obj 166 134 help-genetic;
-#X text 164 113 genetic algorithm;
-#X text 23 187 linear mapping;
diff --git a/externals/algocomp/algocomp-help-patches/help-chaosgame.pd b/externals/algocomp/algocomp-help-patches/help-chaosgame.pd
deleted file mode 100755
index 4b7c5fd58a879135a32d29e1e7baaad5f3f9a0b3..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-chaosgame.pd
+++ /dev/null
@@ -1,70 +0,0 @@
-#N canvas 540 1 452 619 12;
-#X obj 33 83 chaosgame;
-#X obj 30 17 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 53 13 stop;
-#X obj 15 203 gemhead;
-#X obj 14 237 translateXYZ;
-#X obj 128 340 loadbang;
-#X obj 32 467 gemwin;
-#X msg 182 423 1;
-#X msg 176 448 0;
-#X msg 82 403 create;
-#X msg 83 430 destroy;
-#N canvas 95 194 342 231 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 24 350 pd Gem.init;
-#X obj 128 367 t b b b;
-#X obj 39 401 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 16 173 t b f;
-#X obj 12 266 colorRGB 1 1 1;
-#X obj 14 293 sphere 0.02;
-#X floatatom 157 146 5 0 0 0 - - -;
-#X floatatom 176 124 5 0 0 0 - - -;
-#X obj 174 281 noteout;
-#X obj 295 178 noteout;
-#X obj 161 214 map -2 2 52 88;
-#X obj 290 108 map -2 2 64 100;
-#X obj 32 44 metro 100;
-#X obj 165 250 makenote 100 150;
-#X obj 294 145 makenote 100 250;
-#X connect 0 0 14 0;
-#X connect 0 0 17 0;
-#X connect 0 1 4 2;
-#X connect 0 1 18 0;
-#X connect 1 0 23 0;
-#X connect 2 0 23 0;
-#X connect 3 0 4 0;
-#X connect 4 0 15 0;
-#X connect 5 0 12 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 10 0 6 0;
-#X connect 11 0 6 0;
-#X connect 12 0 6 0;
-#X connect 12 1 7 0;
-#X connect 12 2 9 0;
-#X connect 13 0 6 0;
-#X connect 14 0 3 0;
-#X connect 14 1 4 1;
-#X connect 15 0 16 0;
-#X connect 17 0 21 0;
-#X connect 18 0 22 0;
-#X connect 21 0 24 0;
-#X connect 22 0 25 0;
-#X connect 23 0 0 0;
-#X connect 24 0 19 0;
-#X connect 24 1 19 1;
-#X connect 25 0 20 0;
-#X connect 25 1 20 1;
diff --git a/externals/algocomp/algocomp-help-patches/help-eca.pd b/externals/algocomp/algocomp-help-patches/help-eca.pd
deleted file mode 100755
index 00d2b3f0e059b7f62dd982a9a0cae24a59402fe9..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-eca.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 385 55 466 361 12;
-#X msg 128 59 randomize;
-#X msg 128 36 init;
-#X floatatom 129 82 5 0 0 0 - - -;
-#X obj 26 276 makenote 100 125;
-#X obj 26 304 noteout 10;
-#X obj 26 28 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 26 104 eca 110 9 1;
-#X obj 26 157 unpack 0 0 0 0 0 0 0 0 0;
-#X obj 26 128 map 0 9 34 42;
-#X obj 26 48 metro 200;
-#X connect 0 0 6 0;
-#X connect 1 0 6 0;
-#X connect 2 0 6 1;
-#X connect 3 0 4 0;
-#X connect 3 1 4 1;
-#X connect 5 0 9 0;
-#X connect 6 0 8 0;
-#X connect 7 0 3 0;
-#X connect 7 1 3 0;
-#X connect 7 2 3 0;
-#X connect 7 3 3 0;
-#X connect 7 4 3 0;
-#X connect 7 5 3 0;
-#X connect 7 6 3 0;
-#X connect 7 7 3 0;
-#X connect 7 8 3 0;
-#X connect 8 0 7 0;
-#X connect 9 0 6 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-genetic.pd b/externals/algocomp/algocomp-help-patches/help-genetic.pd
deleted file mode 100755
index eba2e9cac3279567a33b255f1fb8ca9bf4c387cd..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-genetic.pd
+++ /dev/null
@@ -1,146 +0,0 @@
-#N canvas 0 21 995 664 12;
-#X obj 432 142 unpack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X obj 8 115 map 0 32 52 84;
-#X obj 8 408 t b f;
-#X msg 8 432 0;
-#X obj 834 486 t b f;
-#X obj 834 513 del;
-#X obj 8 92 genetic 128 80 5;
-#X obj 432 118 map 0 64 0 1000;
-#X msg 147 23 0 7 4 2 11 12 6 4 12 7 12 11 2 7 12;
-#X obj 432 94 genetic 128 96 6;
-#X msg 571 24 16 32 16 16 16 16 32 16 32 7 7 7 32 16 16 32;
-#X obj 430 171 s d1;
-#X obj 454 197 s d2;
-#X obj 473 171 s d3;
-#X obj 495 197 s d4;
-#X obj 515 170 s d5;
-#X obj 539 196 s d6;
-#X obj 558 170 s d7;
-#X obj 580 196 s d8;
-#X obj 598 171 s d9;
-#X obj 622 197 s d10;
-#X obj 641 171 s d11;
-#X obj 675 197 s d12;
-#X obj 693 171 s d13;
-#X obj 745 172 s d15;
-#X obj 780 197 s d16;
-#X obj 728 197 s d14;
-#X obj 834 538 s retrigger;
-#X obj 47 433 r d1;
-#X obj 95 433 r d2;
-#X obj 149 433 r d3;
-#X obj 205 433 r d4;
-#X obj 255 433 r d5;
-#X obj 307 435 r d6;
-#X obj 360 435 r d7;
-#X obj 411 436 r d8;
-#X obj 462 437 r d9;
-#X obj 519 439 r d10;
-#X obj 579 438 r d11;
-#X obj 633 436 r d12;
-#X obj 8 138 unpack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X obj 693 436 r d13;
-#X obj 802 437 r d15;
-#X obj 748 436 r d14;
-#X obj 853 434 r d16;
-#X obj 287 460 dnote;
-#X obj 295 48 bng 15 250 50 0 empty retrigger empty 0 -6 0 8 -262144
--1 -1;
-#X obj 8 457 dnote;
-#X obj 68 458 dnote;
-#X obj 126 458 dnote;
-#X obj 182 459 dnote;
-#X obj 233 459 dnote;
-#X obj 338 461 dnote;
-#X obj 390 461 dnote;
-#X obj 445 461 dnote;
-#X obj 499 461 dnote;
-#X obj 556 461 dnote;
-#X obj 613 461 dnote;
-#X obj 671 461 dnote;
-#X obj 727 461 dnote;
-#X obj 781 461 dnote;
-#X obj 833 462 dnote;
-#X msg 8 56 randomize;
-#X msg 432 63 randomize;
-#X connect 0 0 11 0;
-#X connect 0 1 12 0;
-#X connect 0 2 13 0;
-#X connect 0 3 14 0;
-#X connect 0 4 15 0;
-#X connect 0 5 16 0;
-#X connect 0 6 17 0;
-#X connect 0 7 18 0;
-#X connect 0 8 19 0;
-#X connect 0 9 20 0;
-#X connect 0 10 21 0;
-#X connect 0 11 22 0;
-#X connect 0 12 23 0;
-#X connect 0 13 26 0;
-#X connect 0 14 24 0;
-#X connect 0 15 25 0;
-#X connect 1 0 40 0;
-#X connect 2 0 3 0;
-#X connect 2 1 47 1;
-#X connect 3 0 47 0;
-#X connect 4 0 5 0;
-#X connect 4 1 5 1;
-#X connect 5 0 27 0;
-#X connect 6 0 1 0;
-#X connect 7 0 0 0;
-#X connect 8 0 6 1;
-#X connect 9 0 7 0;
-#X connect 10 0 9 1;
-#X connect 28 0 47 2;
-#X connect 29 0 48 2;
-#X connect 30 0 49 2;
-#X connect 31 0 50 2;
-#X connect 32 0 51 2;
-#X connect 33 0 45 2;
-#X connect 34 0 52 2;
-#X connect 35 0 53 2;
-#X connect 36 0 54 2;
-#X connect 37 0 55 2;
-#X connect 38 0 56 2;
-#X connect 39 0 57 2;
-#X connect 40 0 2 0;
-#X connect 40 1 48 1;
-#X connect 40 2 49 1;
-#X connect 40 3 50 1;
-#X connect 40 4 51 1;
-#X connect 40 5 45 1;
-#X connect 40 6 52 1;
-#X connect 40 7 53 1;
-#X connect 40 8 54 1;
-#X connect 40 9 55 1;
-#X connect 40 10 56 1;
-#X connect 40 11 57 1;
-#X connect 40 12 58 1;
-#X connect 40 13 59 1;
-#X connect 40 14 60 1;
-#X connect 40 15 61 1;
-#X connect 41 0 58 2;
-#X connect 42 0 60 2;
-#X connect 43 0 59 2;
-#X connect 44 0 61 2;
-#X connect 45 0 52 0;
-#X connect 46 0 9 0;
-#X connect 46 0 6 0;
-#X connect 47 0 48 0;
-#X connect 48 0 49 0;
-#X connect 49 0 50 0;
-#X connect 50 0 51 0;
-#X connect 51 0 45 0;
-#X connect 52 0 53 0;
-#X connect 53 0 54 0;
-#X connect 54 0 55 0;
-#X connect 55 0 56 0;
-#X connect 56 0 57 0;
-#X connect 57 0 58 0;
-#X connect 58 0 59 0;
-#X connect 59 0 60 0;
-#X connect 60 0 61 0;
-#X connect 61 0 4 0;
-#X connect 62 0 6 0;
-#X connect 63 0 9 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-henon.pd b/externals/algocomp/algocomp-help-patches/help-henon.pd
deleted file mode 100755
index 05ffa4f5cfb845ed21feea4d690d13b827a03d86..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-henon.pd
+++ /dev/null
@@ -1,57 +0,0 @@
-#N canvas 614 4 408 558 12;
-#X floatatom 112 45 5 0 0 0 - - -;
-#X floatatom 159 44 5 0 0 0 - - -;
-#X obj 15 203 gemhead;
-#X obj 14 237 translateXYZ;
-#X obj 32 467 gemwin;
-#X msg 157 432 1;
-#X msg 158 459 0;
-#X msg 82 403 create;
-#X msg 81 430 destroy;
-#N canvas 95 194 338 227 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 25 375 pd Gem.init;
-#X obj 63 403 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 74 121 * 2;
-#X obj 35 119 * 2;
-#X obj 16 173 t b f;
-#X floatatom 122 189 5 0 0 0 - - -;
-#X floatatom 125 153 5 0 0 0 - - -;
-#X obj 12 266 colorRGB 1 1 1;
-#X obj 14 293 sphere 0.02;
-#X obj 32 44 metro 50;
-#X obj 37 79 henon 2 0.3;
-#X obj 32 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X connect 0 0 19 1;
-#X connect 1 0 19 2;
-#X connect 2 0 3 0;
-#X connect 3 0 16 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 4 0;
-#X connect 11 0 3 2;
-#X connect 11 0 15 0;
-#X connect 12 0 13 0;
-#X connect 13 0 2 0;
-#X connect 13 1 3 1;
-#X connect 13 1 14 0;
-#X connect 16 0 17 0;
-#X connect 18 0 19 0;
-#X connect 19 0 12 0;
-#X connect 19 1 11 0;
-#X connect 20 0 18 0;
-#X coords 0 0 0.00123609 0.0020202 200 140 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-ifs.pd b/externals/algocomp/algocomp-help-patches/help-ifs.pd
deleted file mode 100755
index 28c981f859b2bd8948e858e227663c92da279232..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-ifs.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#N canvas 275 21 646 602 12;
-#X obj 31 272 gemhead;
-#X obj 31 296 translateXYZ;
-#X obj 32 467 gemwin;
-#X msg 170 433 1;
-#X msg 170 456 0;
-#X msg 82 403 create;
-#X msg 83 430 destroy;
-#N canvas 95 194 342 231 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 32 376 pd Gem.init;
-#X obj 59 403 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 31 249 t b f;
-#X obj 31 320 colorRGB 1 1 1;
-#X obj 31 344 sphere 0.02;
-#X obj 198 267 makenote 64 250;
-#X obj 198 293 noteout;
-#X obj 345 295 noteout;
-#X msg 15 3 0.5 0.5 0 0 1 0.5 0.5 0.5 0 1 0.5 0.5 0.25 0.5 1;
-#X msg 50 26 0.5 0.5 0 0 1 1 0.5 0.5 0.5 1 0.5 0.5 0 1 1;
-#X msg 74 50 0.5 0.5 0.25 0 1 0.5 0.25 1 0.5 1 1 0.5 0 0.5 1;
-#X obj 100 272 * 2;
-#X obj 67 222 t b f;
-#X obj 31 223 f;
-#X obj 31 198 * 2;
-#X obj 198 170 ifs;
-#X msg 86 74 0.333 0.1 0 0 1 0.667 0.333 0 0.667 1 0.333 0.667 0.667
-0 1;
-#X obj 198 215 map 0 2 52 88;
-#X obj 345 214 map 0 2 52 88;
-#X obj 345 268 makenote 64 100 250;
-#X obj 198 147 metro 250;
-#X obj 198 127 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X connect 0 0 1 0;
-#X connect 1 0 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 7 0 2 0;
-#X connect 8 0 2 0;
-#X connect 9 0 0 0;
-#X connect 9 1 1 1;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 12 1 13 1;
-#X connect 15 0 22 0;
-#X connect 16 0 22 0;
-#X connect 17 0 22 0;
-#X connect 18 0 1 2;
-#X connect 19 0 20 0;
-#X connect 19 1 18 0;
-#X connect 20 0 9 0;
-#X connect 21 0 20 1;
-#X connect 22 0 21 0;
-#X connect 22 0 24 0;
-#X connect 22 1 19 0;
-#X connect 22 1 25 0;
-#X connect 23 0 22 0;
-#X connect 24 0 12 0;
-#X connect 25 0 26 0;
-#X connect 26 0 14 0;
-#X connect 26 1 14 1;
-#X connect 27 0 22 0;
-#X connect 28 0 27 0;
-#X coords 0 0 0.00123609 0.0020202 200 140 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-ifsmusic.pd b/externals/algocomp/algocomp-help-patches/help-ifsmusic.pd
deleted file mode 100755
index c3083604dac2bc10f8998cc3c77030ab79c5ce96..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-ifsmusic.pd
+++ /dev/null
@@ -1,13 +0,0 @@
-#N canvas 0 0 482 332 12;
-#X obj 22 109 makenote 64;
-#X obj 22 134 noteout;
-#X obj 22 5 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1;
-#X obj 22 24 metro 250;
-#X msg 52 50 1 0 -1 1 -1 0 1 1;
-#X obj 22 83 ifsmusic 66 82 54 75 71;
-#X connect 0 0 1 0;
-#X connect 0 1 1 1;
-#X connect 2 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-logistic.pd b/externals/algocomp/algocomp-help-patches/help-logistic.pd
deleted file mode 100755
index ce233b5e99f0fc3fb759a2a18d16abbdc2b4754d..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-logistic.pd
+++ /dev/null
@@ -1,32 +0,0 @@
-#N canvas 136 94 652 298 12;
-#X obj 140 84 tabwrite logistic;
-#N canvas 0 0 450 300 graph1 0;
-#X array logistic 96 float 2;
-#X coords 0 1 95 0 200 180 1;
-#X restore 315 16 graph;
-#X obj 14 132 noteout;
-#X floatatom 118 41 5 0 0 0 - - -;
-#X obj 235 59 + 1;
-#X obj 181 63 float;
-#X msg 181 41 0;
-#X obj 14 85 map 0 1 52 76;
-#X obj 14 40 metro 250;
-#X obj 223 41 select 96;
-#X obj 14 63 logistic 3.59;
-#X obj 15 20 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 14 107 makenote 100 250 500;
-#X connect 3 0 10 1;
-#X connect 4 0 5 1;
-#X connect 4 0 0 1;
-#X connect 4 0 9 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 0;
-#X connect 7 0 12 0;
-#X connect 8 0 5 0;
-#X connect 8 0 10 0;
-#X connect 10 0 0 0;
-#X connect 10 0 7 0;
-#X connect 11 0 8 0;
-#X connect 12 0 2 0;
-#X connect 12 1 2 1;
diff --git a/externals/algocomp/algocomp-help-patches/help-lorenz.pd b/externals/algocomp/algocomp-help-patches/help-lorenz.pd
deleted file mode 100755
index 13b8554586d763417f8779e4fd90cbf33f40146c..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-lorenz.pd
+++ /dev/null
@@ -1,64 +0,0 @@
-#N canvas 529 21 335 453 12;
-#X floatatom 68 86 5 0 0 0 - - -;
-#X floatatom 120 86 5 0 0 0 - - -;
-#X obj 16 198 gemhead;
-#X obj 16 223 translateXYZ;
-#X obj 23 394 gemwin;
-#X msg 154 358 1;
-#X msg 156 381 0;
-#X msg 73 330 create;
-#X msg 74 357 destroy;
-#N canvas 95 194 338 227 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 16 305 pd Gem.init;
-#X obj 49 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 16 173 t b f;
-#X obj 16 248 colorRGB 1 1 1;
-#X floatatom 173 87 5 0 0 0 - - -;
-#X obj 16 108 lorenz 10 28 2.666;
-#X obj 16 148 / 20;
-#X obj 84 198 / 20;
-#X obj 126 198 / 20;
-#X floatatom 25 129 5 0 0 0 - - -;
-#X floatatom 102 131 5 0 0 0 - - -;
-#X floatatom 175 132 5 0 0 0 - - -;
-#X obj 16 273 sphere 0.01;
-#X obj 16 65 metro 10;
-#X obj 17 43 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X connect 0 0 14 1;
-#X connect 1 0 14 2;
-#X connect 2 0 3 0;
-#X connect 3 0 12 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 4 0;
-#X connect 11 0 2 0;
-#X connect 11 1 3 1;
-#X connect 12 0 21 0;
-#X connect 13 0 14 3;
-#X connect 14 0 15 0;
-#X connect 14 0 18 0;
-#X connect 14 1 16 0;
-#X connect 14 1 19 0;
-#X connect 14 2 17 0;
-#X connect 14 2 20 0;
-#X connect 15 0 11 0;
-#X connect 16 0 3 2;
-#X connect 17 0 3 3;
-#X connect 22 0 14 0;
-#X connect 23 0 22 0;
-#X coords 0 0 0.00123609 0.0020202 200 140 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-map.pd b/externals/algocomp/algocomp-help-patches/help-map.pd
deleted file mode 100755
index 4f610c5ad61dd281b74a0ea157ec2f93d652897a..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-map.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X obj 21 44 map 0 5 0 100;
-#X floatatom 21 23 5 0 0 0 - - -;
-#X floatatom 21 67 5 0 0 0 - - -;
-#X msg 64 22 3 2 0.2 1.4;
-#X text 155 21 rescale to the desired range arguments: float or list
-of floats;
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-oneoverf.pd b/externals/algocomp/algocomp-help-patches/help-oneoverf.pd
deleted file mode 100755
index ebde8ca1b0572dfe0b8ae275b2621927665bba39..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-oneoverf.pd
+++ /dev/null
@@ -1,31 +0,0 @@
-#N canvas 41 117 658 266 12;
-#X obj 14 35 metro 100;
-#X obj 120 91 + 1;
-#X obj 156 91 select 100;
-#X msg 120 38 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array oneoverf 100 float 0;
-#X coords 0 1 99 0 300 140 1;
-#X restore 328 16 graph;
-#X obj 30 118 tabwrite oneoverf;
-#X obj 14 199 noteout;
-#X obj 14 148 map 0 1 0 127;
-#X obj 14 63 oneoverf 8;
-#X obj 14 15 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 14 173 makenote 100 100 100;
-#X obj 120 65 f;
-#X connect 0 0 8 0;
-#X connect 0 0 11 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 1;
-#X connect 1 0 11 1;
-#X connect 2 0 3 0;
-#X connect 3 0 11 0;
-#X connect 7 0 10 0;
-#X connect 8 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 0 0;
-#X connect 10 0 6 0;
-#X connect 10 1 6 1;
-#X connect 11 0 1 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-selfsimilar.pd b/externals/algocomp/algocomp-help-patches/help-selfsimilar.pd
deleted file mode 100755
index 427afe3ac14edb29f01941a5cce4f2b04fce984c..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp-help-patches/help-selfsimilar.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#N canvas 51 221 474 392 12;
-#X obj 31 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 31 114 s n_out;
-#X obj 269 113 s n_out;
-#X obj 150 112 s n_out;
-#X obj 31 238 noteout;
-#X obj 31 161 r n_out;
-#X obj 31 212 makenote 60 100 250;
-#X obj 31 186 unpack;
-#X obj 31 61 selfsimilar 3 7 48 52 59 55;
-#X obj 31 32 metro 250;
-#X obj 31 88 pack 0 125;
-#X obj 150 87 pack 0 400;
-#X obj 269 87 pack 0 1000;
-#X connect 0 0 9 0;
-#X connect 5 0 7 0;
-#X connect 6 0 4 0;
-#X connect 6 1 4 1;
-#X connect 7 0 6 0;
-#X connect 7 1 6 2;
-#X connect 8 0 10 0;
-#X connect 8 1 11 0;
-#X connect 8 2 12 0;
-#X connect 9 0 8 0;
-#X connect 10 0 1 0;
-#X connect 11 0 3 0;
-#X connect 12 0 2 0;
diff --git a/externals/algocomp/algocomp.c b/externals/algocomp/algocomp.c
deleted file mode 100755
index 70835144440ea4631b984ea6bf670c5d02def7c4..0000000000000000000000000000000000000000
--- a/externals/algocomp/algocomp.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-* Main library file
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "helpers.c"
-#include "chaotic.c"
-#include "fractal.c"
-#include "ifs.c"
-#include "ifsmusic.c"
-#include "selfsimilar.c"
-#include "logistictilde.c"
-#include "gauss_tilde.c"
-#include "utils.c"
-#include "elementaryca.c"
-#include "genetic.c"
-#include "neural.c"
-#include "distribute.c"
-
-
-void algocomp_setup(void) {
-  logistic_class = class_new(gensym("logistic"),
-        (t_newmethod)logistic_new,
-        0, sizeof(t_logistic),
-        CLASS_DEFAULT, A_DEFFLOAT,0);
-  		class_addbang(logistic_class, logistic_bang);
-  henon_class = class_new(gensym("henon"),
-        (t_newmethod)henon_new,
-        0, sizeof(t_henon),
-        CLASS_DEFAULT, A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(henon_class, henon_bang);	
-  lorenz_class = class_new(gensym("lorenz"),
-        (t_newmethod)lorenz_new,
-        0, sizeof(t_lorenz),
-        CLASS_DEFAULT, A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(lorenz_class, lorenz_bang);
-   chaosgame_class = class_new(gensym("chaosgame"),
-        (t_newmethod)chaosgame_new,
-        0, sizeof(t_chaosgame),
-        CLASS_DEFAULT, A_DEFFLOAT,0);
-  		class_addbang(chaosgame_class, chaosgame_bang);
-   selfsimilar_class = class_new(gensym("selfsimilar"),
-        (t_newmethod)selfsimilar_new,
-        0, sizeof(t_selfsimilar),
-        CLASS_DEFAULT, A_GIMME,0);
-  		class_addbang(selfsimilar_class, selfsimilar_bang);
-   selfsimilarrhythm_class = class_new(gensym("selfsimilarrhythm"),
-        (t_newmethod)selfsimilarrhythm_new,
-        0, sizeof(t_selfsimilarrhythm),
-        CLASS_DEFAULT, A_DEFFLOAT,0);
- 		class_addbang(selfsimilarrhythm_class, selfsimilarrhythm_bang);	
-  ifs_class = class_new(gensym("ifs"),
-        (t_newmethod)ifs_new,
-        0, sizeof(t_ifs),
-        CLASS_DEFAULT, 0);
-  		class_addbang(ifs_class, ifs_bang);
-  		class_addmethod(ifs_class,(t_method)ifs_setFunctions,gensym("list"), A_GIMME,0);
-  distribute_class = class_new(gensym("distribute"),
-        (t_newmethod)distribute_new,
-        0, sizeof(t_distribute),
-        CLASS_DEFAULT,  A_DEFFLOAT, 0);
-  		class_addmethod(distribute_class,(t_method)distribute_float,gensym("float"), A_FLOAT,0);
-  		
-  		
-  ifsmusic_class = class_new(gensym("ifsmusic"),
-        (t_newmethod)ifsmusic_new,
-        0, sizeof(t_ifsmusic),
-        CLASS_DEFAULT, A_GIMME, 0);
-  		class_addbang(ifsmusic_class, ifsmusic_bang);
-  		class_addmethod(ifsmusic_class,(t_method)ifsmusic_setFunctions,gensym("list"), A_GIMME,0);	
-  		class_addmethod(ifsmusic_class,(t_method)ifsmusic_setNotes,gensym("notes"), A_GIMME,0);	
-   		class_addmethod(ifsmusic_class,(t_method)ifsmusic_outputSerie,gensym("serie"), 0); 		
-  eca_class = class_new(gensym("eca"),
-        (t_newmethod)eca_new,
-        0, sizeof(t_eca),
-        CLASS_DEFAULT,A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(eca_class, eca_bang);
-  		class_addmethod(eca_class,(t_method)eca_randomize,gensym("randomize"), 0);
-  		class_addmethod(eca_class,(t_method)eca_activateMiddleCell,gensym("init"), 0);	
-  genetic_class = class_new(gensym("genetic"),
-        (t_newmethod)genetic_new,
-        0, sizeof(t_genetic),
-        CLASS_DEFAULT,A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(genetic_class, genetic_bang);
-  		class_addmethod(genetic_class,(t_method)genetic_randomize,gensym("randomize"), 0);
-  		class_addmethod(genetic_class,(t_method)genetic_setTarget,gensym("target"), A_GIMME,0);				
-	//void class_addlist(t_class *c, t_method fn);
-  mlp_class = class_new(gensym("mlp"),
-        (t_newmethod)mlp_new,
-        0, sizeof(t_mlp),
-        CLASS_DEFAULT,0);
-  		class_addbang(mlp_class, mlp_bang);
-  		class_addmethod(mlp_class,(t_method)mlp_inputed,gensym("list"), A_GIMME, 0);  		
-  		class_addmethod(mlp_class,(t_method)mlp_train,gensym("train"), 0);
-  		class_addmethod(mlp_class,(t_method)mlp_setTarget,gensym("target"), A_GIMME,0);
-  oneoverf_class = class_new(gensym("oneoverf"),
-        (t_newmethod)oneoverf_new,
-        0, sizeof(t_oneoverf),
-        CLASS_DEFAULT,A_DEFFLOAT,  0);
-  		class_addbang(oneoverf_class, oneoverf_bang);
-	logistic_tilde_class = class_new(gensym("logistic~"),
-		(t_newmethod)logistic_tilde_new,
-		0, sizeof(t_logistic_tilde),
-		CLASS_DEFAULT,
-		A_DEFFLOAT, 
-		0);
-		class_addmethod(logistic_tilde_class, 
-		(t_method)logistic_tilde_dsp, gensym("dsp"), 0);
-	// CLASS_MAINSIGNALIN(logistic_tilde_class, t_logistic_tilde, f);	
-	gauss_tilde_class = class_new(gensym("gauss~"), 
-		(t_newmethod)gauss_tilde_new, 0,
-    	sizeof(t_gauss_tilde), 
-    	0, A_DEFFLOAT, A_DEFFLOAT, 0);
-    class_addmethod(gauss_tilde_class, (t_method)gauss_tilde_dsp, 
-    gensym("dsp"), 0);
-    // class_addbang(rand_gauss_class, rand_gauss_bang);
-	map_class = class_new(gensym("map"),
-		(t_newmethod)map_new,
-		0, sizeof(t_map),
-		CLASS_DEFAULT,
-		A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
-		
-	class_addfloat(map_class, map_float);
-	class_addmethod(map_class,(t_method)map_list,gensym("list"), A_GIMME, 0);
-	
-	post("AlgoComp library loaded - v_0.20060116");	
-	
-}
-
diff --git a/externals/algocomp/chaotic.c b/externals/algocomp/chaotic.c
deleted file mode 100755
index ef3977ad770880bd36ca7365818f10a641cc3b07..0000000000000000000000000000000000000000
--- a/externals/algocomp/chaotic.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-* Chaotic function objects
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *logistic_class;
-static t_class *henon_class;
-static t_class *lorenz_class;
-
-
-typedef struct _logistic {
-  t_object  x_obj;
-  t_float x;
-  t_float a;
-  t_outlet *note_out;
-} t_logistic;
-
-void logistic_bang(t_logistic *x)
-{
-if (x->a > 4) x->a = 4;
-if (x->a <= 0) x->a = 0.01;
-outlet_float(x->note_out, x->x);
-x->x = x->a*x->x*(1-x->x);
-}
-
-void *logistic_new(t_floatarg f)
-{
-  t_logistic *x = (t_logistic *)pd_new(logistic_class);
-  x->a = f;
-  x->x = 0.5;
-  x->note_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->a);
-  return (void *)x;
-}
-
-typedef struct _henon {
-  t_object  x_obj;
-  t_float x,y,B,A;
-  t_outlet *x_out, *y_out;
-} t_henon;
-
-void henon_bang(t_henon *x)
-{
-outlet_float(x->x_out, x->x);
-outlet_float(x->y_out, x->y);
-x->x = x->y+1-x->A*x->x*x->x;
-x->y = x->B*x->x;
-}
-
-void *henon_new(t_floatarg f1,t_floatarg f2)
-{
-  t_henon *x = (t_henon *)pd_new(henon_class);
-  x->A = f1;
-  x->B = f2;
-  x->x = 0;
-  x->y = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  
-  floatinlet_new(&x->x_obj, &x->A);
-  floatinlet_new(&x->x_obj, &x->B);
-  
-  return (void *)x;
-}
-
-typedef struct _lorenz {
-  t_object  x_obj;
-  t_float x,y,z,B,R,S,xdot,ydot,zdot,dt;
-  t_outlet *x_out, *y_out, *z_out;
-} t_lorenz;
-
-void lorenz_bang(t_lorenz *x)
-{
-outlet_float(x->x_out, x->x);
-outlet_float(x->y_out, x->y);
-outlet_float(x->z_out, x->z);
-x->xdot = x->S * (x->y - x->x);
-x->ydot = x->R * x->x - x->y  - (x->x * x->z);
-x->zdot = x->x * x->y - x->B * x->z;
-x->x = x->x + x->xdot * x->dt;
-x->y = x->y + x->ydot * x->dt;
-x->z = x->z + x->zdot * x->dt;
-
-}
-
-void *lorenz_new(t_floatarg f1,t_floatarg f2,t_floatarg f3,t_floatarg f4)
-{
-  t_lorenz *x = (t_lorenz *)pd_new(lorenz_class);
-  x->S = f1;
-  x->R = f2;
-  x->B = f3;
-  x->x = 0.1;
-  x->y = 0.1;
-  x->z = 0.1;
-  x->dt = 0.01;
-  if (f4 != 0) x->dt = f4;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  x->z_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->S);  
-  floatinlet_new(&x->x_obj, &x->R);
-  floatinlet_new(&x->x_obj, &x->B);  
-  return (void *)x;
-}
diff --git a/externals/algocomp/distribute.c b/externals/algocomp/distribute.c
deleted file mode 100755
index d39d16a751ba7bfeb2f4483f24b589c87cf6577f..0000000000000000000000000000000000000000
--- a/externals/algocomp/distribute.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *distribute_class;
-
-typedef struct _distribute {
-  t_object x_obj;
-  t_int counter;
-  t_int max;
-  t_outlet *out[128];//,*r_out,*n_out;
-} t_distribute;
-
-void distribute_float(t_distribute *x,t_float in)
-{
-outlet_float(x->out[x->counter],in);
-x->counter++;
-if (x->counter == x->max)
-x->counter = 0;
-//x->out[x->counter] = in;
-}
-
-void *distribute_new(t_floatarg f1)
-{
-	int i;
-	t_distribute *x = (t_distribute *)pd_new(distribute_class);
-	x->counter = 0;
-	if ((f1>0) && (f1<128))
-	x->max = (t_int) f1;
-	else x->max = 8;
-  	for (i=0;i<x->max;i++)
-  	x->out[i] = outlet_new(&x->x_obj,&s_float);
-  	return (void *)x;
-}
diff --git a/externals/algocomp/elementaryca.c b/externals/algocomp/elementaryca.c
deleted file mode 100755
index 52ee6fb7a646c66767ee36639c6921a43a866fe9..0000000000000000000000000000000000000000
--- a/externals/algocomp/elementaryca.c
+++ /dev/null
@@ -1,132 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define TRUE  1
-#define FALSE 0
-#define MAX_ARRAY_SIZE 256
-
-//Already defined elsewhere ??
-//typedef short boolean;
-
-static t_class *eca_class;
-
-
-typedef struct _eca {
-  t_object  x_obj;
-  t_int counter;
-  boolean cells[256];
-  t_int size;
-  //t_int offset;
-  t_outlet *on_cells;
-  //t_outlet *firstcell;
-  t_atom oncells[256];
-  boolean ruletable[8];
-  t_int rule;
-  t_float inrule;
-} t_eca;
-
-void randomizeCells(t_eca *x) {
-	int i;
-	for (i=0;i<x->size;i++) {
-	x->cells[i] = ((t_float) rand())/RAND_MAX*2;	
-	}
-}
-
-void eca_activateMiddleCell(t_eca *x) {
-	int i;
-	post("activate middle cell");
-	for (i=0;i<x->size;i++) {
-	x->cells[i] = FALSE;	
-	}
-	x->cells[x->size/2] = TRUE;
-}
-
-void calculateCellStates(t_eca *x) {
-	
-	int i;
-	
-	boolean newstates[MAX_ARRAY_SIZE];
-	newstates[0] = x->ruletable[x->cells[x->size-1]*4+x->cells[0]*2+x->cells[1]];
-	newstates[x->size-1] = x->ruletable[x->cells[x->size-2]*4+x->cells[x->size-1]*2+x->cells[0]];
-	for (i=1;i<x->size-1;i++) {
-	newstates[i] = x->ruletable[x->cells[i-1]*4+x->cells[i]*2+x->cells[i+1]];
-	}
-	for (i=0;i<x->size;i++) {
-	x->cells[i] = newstates[i];
-	}
-}
-
-void eca_randomize(t_eca *x) {
-post("Randomize called");	
-randomizeCells(x);
-}
-
-void createRuleTable(t_eca *x,unsigned short decimalcode) {
-	
-	int i;
-	post("Rule changed to %d",x->rule);
-	//decimalcode to binary
-	fast_d2b(decimalcode,x->ruletable);
-	//for (i=0;i<8;i++) 
-	//post("%d",x->ruletable[i]);
-}
-
-void eca_bang(t_eca *x)
-{
-t_atom *y;
-int i;
-int k = 0;
-if ((t_int) x->inrule != x->rule) {
-x->rule = (t_int) x->inrule/1;
-createRuleTable(x,(unsigned short) x->rule);
-}
-//startpost("%d",x->counter);
-for (i=0;i<x->size;i++) {
-	if (x->cells[i]==TRUE)
-	{
-		//startpost("& $\\bullet$ ");
-		SETFLOAT(&x->oncells[k],i);
-//		SETFLOAT(&x->oncells[k],i+x->offset);
-//		oncells[k] = y;
-		k++;
-	}
-	//else startpost("& ");
-	
-	
-}
-//post("\\tabularnewline");
-x->counter++;
-//randomizeCells(x);
-outlet_list(x->on_cells,&s_list, k, &x->oncells[0]);
-calculateCellStates(x); // calculate for next step
-//outlet_float(x->firstcell,x->cells[0]);
-}
-
-
-
-/*
- * take argument rule, size, init (0=random), (1=middlecell active)
- */
-void *eca_new(t_floatarg rule,t_floatarg size,t_floatarg init)
-{
-  
-  t_eca *x = (t_eca *)pd_new(eca_class);
-  //inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("randomize"));
-  if (size != 0)
-  x->size = size;
-  else (size = 16);
-  //x->offset = offset;
-  
-  if (init == 0) randomizeCells(x);
-  else if (init == 1) eca_activateMiddleCell(x);
-  x->rule = rule;	
-  x->inrule = rule;
-  x->counter = 1;
-  createRuleTable(x,(unsigned short) rule);
-  x->on_cells = outlet_new(&x->x_obj,&s_list);
-  //x->firstcell = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->inrule);  
-  return (void *)x;
-}
diff --git a/externals/algocomp/fractal.c b/externals/algocomp/fractal.c
deleted file mode 100755
index 26c0cccbc8bf457d29323af077cf2428e300ef73..0000000000000000000000000000000000000000
--- a/externals/algocomp/fractal.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *oneoverf_class;
-static t_class *chaosgame_class;
-
-
-/* 
- * Implementation of 1/f noise sequences
- */
-
-typedef struct _oneoverf {
-  t_object x_obj;
-//  t_int nrp;
-  t_int nrbits;
-  t_float bits;
-  t_float output;
-  t_float rans[32];
-//  t_int count[16];
-  t_int counter;
-//  t_float avg[16];  
-  t_outlet *note_out;//,*r_out,*n_out;
-} t_oneoverf;
-
-void oneoverf_bang(t_oneoverf *x)
-{
-if ((t_int) x->bits != x->nrbits) {
-post("Changed number of bits");
-x->nrbits = (t_int) x->bits;
-x->counter = 0;	
-}
-int i;
-outlet_float(x->note_out, x->output);
-//outlet_float(x->r_out, x->nrp);
-//outlet_float(x->n_out, x->nrp);
-x->output = 0; // ((t_float) rand())/RAND_MAX/x->nrbits;
-x->counter++;
-for (i=x->nrbits-1;i>=0;i--) {
-//  x->avg[i] = ((t_float) (x->avg[i]*(x->count[i]-1)+x->old))/x->count[i];
-  
-  if (x->counter%((int) pow(2,i)) == 0) {
-  if (i == x->nrbits-1) x->counter = 0;
-//  x->count[i] = 1;
-//  x->avg[i] = 0;
-  x->rans[i] = ((t_float) rand())/RAND_MAX/x->nrbits;
-  post("Changing value of %d, counter: %d",i,x->counter);
-  i = -1; // break
-  }
-}
-for (i=0;i<x->nrbits;i++) {
-  x->output += x->rans[i];
-}
-}
-
-void *oneoverf_new(t_floatarg f1)
-{
-  t_oneoverf *x = (t_oneoverf *)pd_new(oneoverf_class);
-  int i;
-  x->bits = f1;
-  x->nrbits = (t_int) f1;
-  if (f1 < 1) x->nrbits = 1;
-  else if (f1 > 32) x->nrbits = 32;
-  x->output = 0;
-  x->counter = 0;
-  for (i=0;i<x->nrbits;i++) {
-  x->rans[i] = (((t_float) rand())/RAND_MAX)/x->nrbits;
- // x->count[i] = 1;
-//  x->avg[i] = 0;
-  x->output += x->rans[i];
-  post("Random generators: %d", x->nrbits);
-  }
-  x->note_out = outlet_new(&x->x_obj,&s_float);
-    floatinlet_new(&x->x_obj, &x->bits);  
-  //x->r_out = outlet_new(&x->x_obj,&s_float);
-  //x->n_out = outlet_new(&x->x_obj,&s_float);
-  return (void *)x;
-}
-
-/*
- * Implementation of the chaos game!
- */
-typedef struct _chaosgame {
-  t_object x_obj;
-  t_float x,y;
-  t_float px[3],py[3];
-  t_outlet *x_out,*y_out;
-} t_chaosgame;
-
-
-void chaosgame_bang(t_chaosgame *x)
-{	
-int i;	
-outlet_float(x->x_out, x->x);
-outlet_float(x->y_out, x->y);
-i = 3*rand()/32765;
-x->x = (x->x + x->px[i])/2;
-x->y = (x->y + x->py[i])/2;
-}
-
-void *chaosgame_new(t_floatarg f1)
-{
-  t_chaosgame *x = (t_chaosgame *)pd_new(chaosgame_class);
-	x->px[0] = -1;
-    x->py[0] = -1;
-    x->px[1] = 0;
-    x->py[1] = 1;
-    x->px[2] = 1;
-    x->py[2] = -1;
-
-	x->x = rand()/RAND_MAX;
-	x->y = rand()/RAND_MAX;
-	
-	x->x_out = outlet_new(&x->x_obj,&s_float);
-  	x->y_out = outlet_new(&x->x_obj,&s_float);
-  	return (void *)x;
-}
diff --git a/externals/algocomp/gauss_tilde.c b/externals/algocomp/gauss_tilde.c
deleted file mode 100755
index b04b61a4b08f6574b58ba76c7fdfe4276c4a972b..0000000000000000000000000000000000000000
--- a/externals/algocomp/gauss_tilde.c
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "m_pd.h"
-
-
-#define fran()         (t_float)rand()/(t_float)RAND_MAX
-
-static char *version = "gauss v0.1, generates a Gaussian distributed random variable\n"
-                       "            with mean 'mu' and standard deviation 'sigma',\n"
-                       "            written by Olaf Matthes <olaf.matthes@gmx.de>";
-
-/* -------------------------- rand_gauss ------------------------------ */
-
-static t_class *gauss_tilde_class;
-
-typedef struct _gauss_tilde
-{
-    t_object x_obj;
-	t_float  x_sigma;
-	t_float  x_mu;
-} t_gauss_tilde;
-
-
-
-t_int *gauss_tilde_perform(t_int *w)
-{
-	t_gauss_tilde *x = (t_gauss_tilde *)(w[1]);
-	t_sample *out = (t_sample *)(w[2]);
-	int n = (int)(w[3]);
-	t_float u, halfN = 6.0, sum = 0, scale;
-	t_int k, N = 12;
-	scale = 1/sqrt(N/12);
-	while (n--){
-		sum = 0;
-		for(k = 1; k <= N; k++)
-		sum += fran();
-	 	*out++ = x->x_sigma*scale*(sum-halfN)+x->x_mu;
-	 }
-	 return (w+4);
-}
-
-void gauss_tilde_dsp(t_gauss_tilde *x, t_signal **sp)
-{
-dsp_add(gauss_tilde_perform, 3, x,
-sp[0]->s_vec, 
-sp[0]->s_n);
-}
-
-
-void *gauss_tilde_new(t_floatarg fs, t_floatarg fm)
-{
-    t_gauss_tilde *x = (t_gauss_tilde *)pd_new(gauss_tilde_class);
-
-    floatinlet_new(&x->x_obj, &x->x_sigma);
-    floatinlet_new(&x->x_obj, &x->x_mu);
-    outlet_new(&x->x_obj, &s_signal);
-	x->x_sigma = fs;
-	x->x_mu = fm;
-    return (x);
-}
-
-
-
-
-
-
-
diff --git a/externals/algocomp/genetic.c b/externals/algocomp/genetic.c
deleted file mode 100755
index 5c908f2f7a2956e89e55ee289751b1988259c1cd..0000000000000000000000000000000000000000
--- a/externals/algocomp/genetic.c
+++ /dev/null
@@ -1,218 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define TRUE  1
-#define FALSE 0
-#define MAX_ARRAY_SIZE 256
-//typedef short boolean;
-
-static t_class *genetic_class;
-
-typedef struct _individual {
-	boolean genes[MAX_ARRAY_SIZE];
-	float fitness;
-	t_int length;
-} 	t_individual;
-
-typedef struct _genetic {
-  t_object  x_obj;
-  float cumulativeprobability;
-  t_int individuallength;
-  t_individual population[MAX_ARRAY_SIZE];
-  t_int populationsize;
-  t_individual targetindividual;
-  t_atom out[MAX_ARRAY_SIZE];
-  t_int chunksize;
-  t_outlet *outlist;
-} t_genetic;
-
-void randomizeIndividuals(t_genetic *x) {
-	int i,k;
-	for (k=0;k<x->populationsize;k++) {
-	for (i=0;i<x->individuallength;i++) {
-	x->population[k].genes[i] = ((t_float) rand())/RAND_MAX*2;	
-	}
-	x->population[k].length = x->individuallength;
-	}
-//	x->population[0].genes[0] = 1;
-//	x->population[0].genes[1] = 0;
-}
-
-void printTarget(t_genetic *x) {
-	unsigned int out[MAX_ARRAY_SIZE];
-	int i;	
-	for (i=0;i< x->targetindividual.length/x->chunksize;i++) {
-	fast_b2short(&out[i],&x->targetindividual.genes[i*x->chunksize],x->chunksize);	
-	SETFLOAT(&x->out[i],out[i]);
-	}
-	outlet_list(x->outlist,&s_list, i, &x->out[0]);
-}
-
-
-void randomTargetIndividual(t_genetic *x) {
-	int i;
-	for (i=0;i<x->individuallength;i++) {
-	x->targetindividual.genes[i] = ((t_float) rand())/RAND_MAX*2;	
-	}
-	x->targetindividual.length = x->individuallength;
-	//printTarget(&x->targetindividual,x);
-}
-
-/*float evaluateFitness(t_genetic *x,int index) {
-	int fitness = 0;
-	int i;
-//	post("Fitness eval");
-	for (i=0;i<x->individuallength;i++) {
-	//if (x->targetindividual.genes[i] == x->population[index].genes[i])
-	//if (x->population[index].genes[i] == TRUE)
-	fitness += x->population[0].genes[0];
-	//fitness++;
-	}
-	return fitness/x->individuallength;
-	//return 1;
-}
-*/
-void startReproduction(t_genetic *x) {
-	int selectedIndividuals[MAX_ARRAY_SIZE];
-	int count = 0;
-	int i;
-	float r;
-	t_individual childs[MAX_ARRAY_SIZE];
-	int childindex = 0;
-	for (count =0; count < x->populationsize/4; count++) {
-		float sum = 0;
-		i = 0;
-		r = ((t_float) rand())/RAND_MAX * x->cumulativeprobability;
-		while (r > sum) {
-				sum += x->population[i].fitness;
-				i++;
-		}
-		selectedIndividuals[count] = i;
-	}
-	post("parents: %d",count);
-	i=0;
-	while (i<count) {
-	int k = 0;
-	for (k=0;k<8;k++) {
-	int l;
-	r = ((t_float) rand())/RAND_MAX * x->individuallength;
-	for (l=0;l<x->individuallength;l++) {
-	if (l<r) childs[childindex].genes[l] = x->population[selectedIndividuals[i]].genes[l];
-	else childs[childindex].genes[l] = x->population[selectedIndividuals[i+1]].genes[l];
-	}
-	// mutation
-	r = ((t_float) rand())/RAND_MAX * x->individuallength;
-	childs[childindex].genes[(int)r] = 1-childs[childindex].genes[(int)r];
-	childindex++;
-	}
-	i+=2;
-	}
-	for (i=0;i<childindex;i++) {
-	x->population[i] = childs[i];	
-	}
-	post("New childs: %d",childindex);
-	
-}
-
-
-int evaluatePopulation(t_genetic *x) {
-	int i,k;
-	int f;
-	int highestfitnessindex = 0;
-	float highestfitness = 0;
-	float mean;
-	x->cumulativeprobability = 0;
-	for (k=0; k < x->populationsize; k++) {
-		float fitness = 0;
-		for (i=0;i<x->individuallength;i++) {
-		//x->population[k].genes[i] = 0;
-		if (x->targetindividual.genes[i] == x->population[k].genes[i])
-		fitness++;
-//		fitness += x->population[k].genes[i];
-		}
-		x->population[k].fitness = fitness/x->individuallength;
-		x->population[k].fitness = (fitness/x->individuallength)*(fitness/x->individuallength);
-
-		if (x->population[k].fitness > highestfitness) {
-		// post("fitness of %d: %f",k,fitness);
-		highestfitness = x->population[k].fitness;
-		highestfitnessindex = k;
-		}
-		x->cumulativeprobability+=x->population[k].fitness;
-	}
-	//recalculate 
-	mean = x->cumulativeprobability/x->populationsize;
-	x->cumulativeprobability = 0;
-	for (k=0;k < x->populationsize; k++) {
-		if (x->population[k].fitness < mean)
-		x->population[k].fitness = 0;
-		else x->cumulativeprobability += x->population[k].fitness;	
-	}
-	post("Highest fitness: %f",highestfitness);
-	return highestfitnessindex;
-}
-
-
-void genetic_setTarget(t_genetic *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-post("target called: %d",argc);
-	for (i=0;i< x->individuallength/x->chunksize;i++) {
-		if (i >= argc) break;
-		fast_d2bl(atom_getint(&argv[i]),&x->targetindividual.genes[i*x->chunksize],x->chunksize);
-
-	}
-	printTarget(x);
-}
-
-void genetic_randomize(t_genetic *x) {
-post("Randomize called");	
-randomizeIndividuals(x);
-}
-
-void genetic_bang(t_genetic *x)
-{
-	int selected = 1;
-	unsigned int out[MAX_ARRAY_SIZE];
-	int i;	
-	selected = evaluatePopulation(x);
-	//post("Selected individual: %d",selected);
-	for (i=0;i< x->individuallength/x->chunksize;i++) {
-		//out[i] = ((t_float) rand())/RAND_MAX*2;
-		fast_b2short(&out[i],&x->population[selected].genes[i*x->chunksize],x->chunksize);
-		//fast_b2short8(&out[i],&x->population[selected].genes[i*8]);	
-		SETFLOAT(&x->out[i],out[i]);
-	} 
-	//	fast_b2d(&out,&x->population[0].genes[0]);
-//	fast_b2short(&out,&x->population[0].genes[0]);
-//	fast_b2d(&out,&test[0]);
-//	out = 100;
-//	SETFLOAT(&x->out[1],out);
-	outlet_list(x->outlist,&s_list, i, &x->out[0]);
-	startReproduction(x);
-}
-
-
-/*
- * take argument rule, size, and offset
- */
-void *genetic_new(t_float popsize,t_float indsize, t_float chunksize)
-{
-  t_genetic *x = (t_genetic *)pd_new(genetic_class);
-  //inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("randomize"));
-  if ((popsize > 0) && (popsize <= 256))
-  x->populationsize = popsize;
-  else x->populationsize = 256;
-  if ((indsize > 0) && (indsize <= 256))
-  x->individuallength = indsize;
-  else x->individuallength = 256;
-  if ((chunksize <= 16) && (chunksize > 0))
-  x->chunksize = (int) chunksize;
-  else x->chunksize = 8;
-  randomizeIndividuals(x);
-  randomTargetIndividual(x);
-  inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("target"));
-  x->outlist = outlet_new(&x->x_obj,&s_list);
-  return (void *)x;
-}
diff --git a/externals/algocomp/helpers.c b/externals/algocomp/helpers.c
deleted file mode 100755
index dc7e754ff0a662dc4dd24c9c260ed75b1043aef1..0000000000000000000000000000000000000000
--- a/externals/algocomp/helpers.c
+++ /dev/null
@@ -1,42 +0,0 @@
-void fast_d2bl(int x, short *c, short length) {
-	int i;
-	for (i=0;i<length;i++) 
-	*(c++) = (x >> i) & 0x1;
-}
-
-void fast_d2b(unsigned short x, short *c) {
-	int i;
-	for (i=0;i<8;i++) 
-	*(c++) = (x >> i) & 0x1;
-}
-
-
-void fast_b2d(unsigned long int *n, short *c) {
-int i = 32;
-*n = 0;
-while(i--) {
-*n <<=1;
-*n+= *(c+i);
-}
-}
-
-void fast_b2short8(unsigned short *n, short *c) {
-int i = 8;
-*n = 0;
-while(i--) {
-*n <<=1;
-*n+= *(c+i);
-}
-}
-
-void fast_b2short(unsigned int *n, short *c,short length) {
-int i;
-if ((length <= 16) && (length > 0))
-i = length;
-else i = 8;
-*n = 0;
-while(i--) {
-*n <<=1;
-*n+= *(c+i);
-}
-}
diff --git a/externals/algocomp/ifs.c b/externals/algocomp/ifs.c
deleted file mode 100755
index 55207b30575efd06f0dc264bab09902fc3939d8f..0000000000000000000000000000000000000000
--- a/externals/algocomp/ifs.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *ifs_class;
-
-
-/*
- * An interated function system music example
- * a more general approach is needed.
- */
-typedef struct _ifs {
-  t_object  x_obj;
-  t_int nr_functions;
-  t_float R1,R2;
-  t_float T1[6],T2[6],S1[6],S2[6];
-  t_float A[6], B[6];
-  t_float C[6], D[6], P[6];
-  t_float x,y;
-  t_outlet *x_out,*y_out, *i_out;
-} t_ifs;
-
-
-void ifs_bang(t_ifs *x)
-{
-float r = ((float) rand())/RAND_MAX;
-int i = 0;
-while (r > x->P[i])
-i++;
-//post("Applying function nr: %d",i);
-//x->x = x->A[i]*x->x + x->B[i]*x->y + x->T1[i];
-//x->y = x->C[i]*x->x + x->D[i]*x->y + x->T2[i];
-x->x = x->S1[i]*x->x + x->T1[i];
-x->y = x->S2[i]*x->y + x->T2[i];
-outlet_float(x->x_out,x->x);
-outlet_float(x->y_out,x->y);
-//outlet_float(x->i_out,r);
-}
-
-void ifs_setFunctions(t_ifs *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-float p = 0;
-x->nr_functions = argc/5;
-post("%d new function set!",x->nr_functions);
-
-for (i=0;i<x->nr_functions;i++) {
-	x->S1[i] = atom_getfloat(&argv[i*5]);
-	x->S2[i] = atom_getfloat(&argv[i*5+1]);
-	x->T1[i] = atom_getfloat(&argv[i*5+2]);
-	x->T2[i] = atom_getfloat(&argv[i*5+3]);
-	x->P[i] = p+atom_getfloat(&argv[i*5+4]);
-	p = x->P[i];
-}	
-
-if (p != 1.0) {
-	float scale = 1.0/p;
-	post("%d new function set. Scale probabilities by %f",x->nr_functions,scale);
-	for (i=0;i<x->nr_functions;i++) {
-	x->P[i] = scale*x->P[i];	
-	startpost("p for %d: %f; ",i,x->P[i]);
-	}
-}
-
-}
-
-void *ifs_new(t_floatarg f1)
-{
-  t_ifs *x = (t_ifs *)pd_new(ifs_class);
-  t_float p;
-  t_float R1[6],R2[6],S1[6],S2[6];
-  t_int i; 
-  x->nr_functions = 3;
-  p = 1.0/x->nr_functions;
-  //R1[0]=R1[1]=R1[2]=R1[3]=R1[4]=R1[5]= 1;
-  //R2[0]=R2[1]=R2[2]=R2[3]=R2[4]=R2[5]= 0;
-  //S1[0]=S1[1]=S1[2]=S1[3]=S1[4]=S1[5]= 0.5;//0.33333;
-  //S2[0]=S2[1]=S2[2]=S2[3]=S2[4]=S2[5]= 1;//0.33333;
-  
-  x->S1[0]=0.333;
-  x->S2[0]=0.333;
-  x->S1[1]=0.667;
-  x->S2[1]=0.333;
-  x->S1[2]=0.333;
-  x->S2[2]=0.333;
-  x->T1[0] = 0;
-  x->T2[0] = 0;
-  x->T1[1] = 0.333;
-  x->T2[1] = 0.333;
-  x->T1[2] = 0;
-  x->T2[2] = 0.667;
-
-  for (i = 0;i<x->nr_functions;i++) {
-  x->P[i] = p*(i+1);
-  post("prob %d: %f",i,x->P[i]);
-  }
-  x->x = 0;
-  x->y = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  //x->i_out = outlet_new(&x->x_obj,&s_float); 
-  post("ifs initialized");
-  return (void *)x;
-}
-
diff --git a/externals/algocomp/ifs.c.old b/externals/algocomp/ifs.c.old
deleted file mode 100755
index 670de6006989583dc05aa13dde2896665443c967..0000000000000000000000000000000000000000
--- a/externals/algocomp/ifs.c.old
+++ /dev/null
@@ -1,77 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *ifs_class;
-
-
-/*
- * An interated function system music example
- * a more general approach is needed.
- */
-typedef struct _ifs {
-  t_object  x_obj;
-  t_float R1,R2,S1,S2;
-  t_float T1[6],T2[6];
-  t_float A[6], B[6];
-  t_float C[6], D[6],P[6];
-  t_float x,y;
-  t_outlet *x_out,*y_out, *i_out;
-} t_ifs;
-
-
-void ifs_bang(t_ifs *x)
-{
-float r = ((float) rand())/RAND_MAX;
-int i = 0;
-while (r > x->P[i])
-i++;
-x->x = x->A[i]*x->x + x->B[i]*x->y + x->T1[i];
-x->y = x->C[i]*x->x + x->D[i]*x->y + x->T2[i];
-outlet_float(x->x_out,x->x);
-outlet_float(x->y_out,x->y);
-outlet_float(x->i_out,r);
-}
-
-
-
-void *ifs_new(t_floatarg f1)
-{
-  x->nr_functions = 3;
-  t_float R1[6],R2[6],S1[6],S2[6];
-  t_ifs *x = (t_ifs *)pd_new(ifs_class);
-  t_int i; 
-  t_float p = 1/x->nr_functions;
-  R1[0]=R1[1]=R1[2]=R1[3]=R1[4]=R1[5]= 1;
-  R2[0]=R2[1]=R2[2]=R2[3]=R2[4]=R2[5]= 0;
-  S1[0]=S1[1]=S1[2]=S1[3]=S1[4]=S1[5]= 0.5;//0.33333;
-  S2[0]=S2[1]=S2[2]=S2[3]=S2[4]=S2[5]= 1;//0.33333;
-  x->T1[0] = 0;
-  x->T2[0] = 2;
-  x->T1[1] = 1.5;
-  x->T2[1] = 1;
-  x->T1[2] = 1.5;
-  x->T2[2] = -1;
-  x->T1[3] = 0;
-  x->T2[3] = -2;
-  x->T1[4] = -1.5;
-  x->T2[4] = -1;
-  x->T1[5] = -1.5;
-  x->T2[5] = 1;
-  for (i = 0;i<6;i++) {
-  x->A[i] = S1[i]*cos(R1[i]);
-  x->B[i] = -S2[i]*sin(R2[i]);
-  x->C[i] = S1[i]*sin(R1[i]);
-  x->D[i] = S2[i]*cos(R2[i]);
-  x->P[i] = p*(i+1);
-  }
-  x->x = 0;
-  x->y = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  x->i_out = outlet_new(&x->x_obj,&s_float); 
-  post("ifs initialized");
-  return (void *)x;
-}
-
diff --git a/externals/algocomp/ifsmusic.c b/externals/algocomp/ifsmusic.c
deleted file mode 100755
index 342050e6a734e3b222bf494ebe9c9b0da0cc8e7e..0000000000000000000000000000000000000000
--- a/externals/algocomp/ifsmusic.c
+++ /dev/null
@@ -1,151 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *ifsmusic_class;
-
-/*
- * An interated function system music example
- */
-typedef struct _ifsmusic {
-  t_object x_obj;
-  t_int nr_notes;
-  t_int nr_functions;
-//  t_int melodylength;
-  t_float T[16];
-  t_float S[16];
-  t_float P[16];
-  t_int R[16];
-  t_int count;
-  t_float note[16];
-  t_atom notesout[16];
-  t_outlet *x_out;
-} t_ifsmusic;
-
-
-
-
-void nextSerie(t_ifsmusic *x) {
-int i;
-if (x->count == x->nr_notes) {	
-t_float ra = rand();
-t_float r = ra/RAND_MAX;
-int k = 0;
-t_float noten[16];
-x->count = 0;
-while (r>x->P[k]) k++;
-post("Selected function %d, r=%f",k,r);
-for (i=1;i<x->nr_notes;i++) {
-x->note[i]  = ((x->note[i] - x->note[0])*x->S[k]) + x->note[0];
-}
-
-for (i=0;i<x->nr_notes;i++) {
-x->note[i] = x->note[i] + x->T[k];
-}
-if (x->R[k] == -1) {
-for (i=0;i<x->nr_notes;i++) 
-noten[x->nr_notes-1-i]=x->note[i];
-for (i=0;i<x->nr_notes;i++) 
-x->note[i]=noten[i];
-}
-}
-}
-
-void ifsmusic_outputSerie(t_ifsmusic *x)
-{
-	int i;	
-	for (i=0;i< x->nr_notes;i++) {
-	//x->notesout[i] = x->note[i];
-	SETFLOAT(&x->notesout[i],x->note[i]);
-	}
-	
-outlet_list(x->x_out,&s_list, x->nr_notes, &x->notesout[0]);	
-x->count = x->nr_notes;	
-nextSerie(x);	
-}
-
-void ifsmusic_bang(t_ifsmusic *x)
-{
-outlet_float(x->x_out,x->note[x->count]);
-x->count++;
-nextSerie(x);
-}
-
-void ifsmusic_setNotes(t_ifsmusic *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-x->nr_notes = argc;
-post("%d new notes set!",x->nr_notes);
-for (i=0;i<x->nr_notes;i++) {
-	x->note[i] = atom_getfloat(&argv[i]);
-}	
-}
-
-void ifsmusic_setFunctions(t_ifsmusic *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-float p = 0;
-x->nr_functions = argc/4;
-post("%d new function set!",x->nr_functions);
-
-for (i=0;i<x->nr_functions;i++) {
-	x->S[i] = atom_getfloat(&argv[i*4]);
-	x->T[i] = atom_getfloat(&argv[i*4+1]);
-//	x->T2[i] = atom_getfloat(&argv[i*5+2]);
-	x->P[i] = p+atom_getfloat(&argv[i*4+3]);
-	x->R[i] = (t_int) atom_getfloat(&argv[i*4+2]);
-	p = x->P[i];
-	post("function %d: %f %f %d %f",i,x->S[i],x->T[i],x->R[i],x->P[i]);
-}	
-
-if (p != 1.0) {
-	float scale = 1.0/p;
-	// post("%d new function set. Scale probabilities by %f",x->nr_functions,scale);
-	for (i=0;i<x->nr_functions;i++) {
-	x->P[i] = scale*x->P[i];	
-	// startpost("p for %d: %f; ",i,x->P[i]);
-	}
-}
-
-}
-
-
-void ifsmusic_initDummyNoteSequence(t_ifsmusic *x) {
-  x->nr_notes = 3;
-  x->note[0] = 66;
-  x->note[1] = 70;
-  x->note[2] = 63;
-}
-
-void ifsmusic_initDummyFunctions(t_ifsmusic *x) {
-  int i; 
-  x->T[0] = 0;
-  x->T[1] = 0;
-  x->T[2] = 0;
-  x->S[0] = 1;
-  x->S[1] = 1;
-  x->S[2] = 1;
-  x->R[0] = 1;
-  x->R[1] = 1;
-  x->R[2] = 1;  
-  x->nr_functions = 3;
-  for (i=0;i<x->nr_functions;i++) x->P[i] = (t_float) (i+1)/x->nr_functions;
-}
-	
-
-void *ifsmusic_new(t_symbol *s, int argc, t_atom *argv)
-{
-  t_ifsmusic *x = (t_ifsmusic *)pd_new(ifsmusic_class);
-  x->count = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  //x->mapped_out = outlet_new(&x->x_obj,&s_float);
-  if (argc == 0) ifsmusic_initDummyNoteSequence(x);
-  else {
-  	int i;
-  	x->nr_notes = argc;
-  	for (i=0;i<argc;i++) 
-  	x->note[i] = atom_getfloat(argv+i);
-  }
-  ifsmusic_initDummyFunctions(x);
-  post("Ifsmusic initialised with sequence length: %d",x->nr_notes);
-  return (void *)x;
-}
diff --git a/externals/algocomp/logistictilde.c b/externals/algocomp/logistictilde.c
deleted file mode 100755
index 72aa59237a1d5f3998ec4c12c4134f9b3a25fd08..0000000000000000000000000000000000000000
--- a/externals/algocomp/logistictilde.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Trying logistic function for audio processing
-*/
-
-#include "m_pd.h"
-
-static t_class *logistic_tilde_class;
-
-typedef struct _logistic_tilde {
-t_object x_obj;
-t_sample f_logistic;
-t_sample f;
-t_float a;
-} t_logistic_tilde;
-
-t_sample logistic(t_sample x,t_float a) {
-	return a*x*(1-x);
-}
-
-t_int *logistic_tilde_perform(t_int *w)
-{
-t_logistic_tilde *x = (t_logistic_tilde *)(w[1]);
-//t_sample *in1 = (t_sample *)(w[2]);
-//t_sample *in2 = (t_sample *)(w[3]);
-t_sample *out = (t_sample *)(w[2]);
-int n = (int)(w[3]);
-//t_sample f_logistic = (x->f_logistic<0)?0.0:(x->f_logistic>1)?1.0:x->f_logistic;
-while (n--){
-	  x->f_logistic = logistic(x->f_logistic,x->a);
-	 *out++ = x->f_logistic - 0.5;
-	 }
-
-return (w+4);
-}
-
-
-
-void logistic_tilde_dsp(t_logistic_tilde *x, t_signal **sp)
-{
-dsp_add(logistic_tilde_perform, 3, x,
-sp[0]->s_vec, 
-//sp[1]->s_vec, 
-//sp[2]->s_vec,
-sp[0]->s_n);
-}
-
-void *logistic_tilde_new(t_floatarg f)
-{
-t_logistic_tilde *x = (t_logistic_tilde *)pd_new(logistic_tilde_class);
-x->f_logistic = 0.5;
-x->a = 3.7;
-if (x->a < 0) x->a = 1;
-if (x->a > 4) x->a = 4;
-//inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
-floatinlet_new (&x->x_obj, &x->a);
-outlet_new(&x->x_obj, &s_signal);
-return (void *)x;
-}
-
diff --git a/externals/algocomp/m_pd.h b/externals/algocomp/m_pd.h
deleted file mode 100755
index fc9d6abdceb1309b67b03f009fb814225c3ea3fd..0000000000000000000000000000000000000000
--- a/externals/algocomp/m_pd.h
+++ /dev/null
@@ -1,635 +0,0 @@
-/* Copyright (c) 1997-1999 Miller Puckette.
-* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
-
-#ifndef __m_pd_h_
-
-#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
-extern "C" {
-#endif
-
-#define PD_MAJOR_VERSION 0
-#define PD_MINOR_VERSION 38   
-
-/* old name for "MSW" flag -- we have to take it for the sake of many old
-"nmakefiles" for externs, which will define NT and not MSW */
-#if defined(NT) && !defined(MSW)
-#define MSW
-#endif
-
-#ifdef MSW
-/* #pragma warning( disable : 4091 ) */
-#pragma warning( disable : 4305 )  /* uncast const double to float */
-#pragma warning( disable : 4244 )  /* uncast float/int conversion etc. */
-#pragma warning( disable : 4101 )  /* unused automatic variables */
-#endif /* MSW */
-
-    /* the external storage class is "extern" in UNIX; in MSW it's ugly. */
-#ifdef MSW
-#ifdef PD_INTERNAL
-#define EXTERN __declspec(dllexport) extern
-#else
-#define EXTERN __declspec(dllimport) extern
-#endif /* PD_INTERNAL */
-#else
-#define EXTERN extern
-#endif /* MSW */
-
-    /* and depending on the compiler, hidden data structures are
-    declared differently: */
-#if defined( __GNUC__) || defined( __BORLANDC__ ) || defined( __MWERKS__ )
-#define EXTERN_STRUCT struct
-#else
-#define EXTERN_STRUCT extern struct
-#endif
-
-
-#if !defined(_SIZE_T) && !defined(_SIZE_T_)
-#include <stddef.h>     /* just for size_t -- how lame! */
-#endif
-
-#define MAXPDSTRING 1000        /* use this for anything you want */
-#define MAXPDARG 5              /* max number of args we can typecheck today */
-
-/* signed and unsigned integer types the size of a pointer:  */
-/* GG: long is the size of a pointer */
-typedef long t_int;
-
-typedef float t_float;  /* a floating-point number at most the same size */
-typedef float t_floatarg;  /* floating-point type for function calls */
-
-typedef struct _symbol
-{
-    char *s_name;
-    struct _class **s_thing;
-    struct _symbol *s_next;
-} t_symbol;
-
-EXTERN_STRUCT _array;
-#define t_array struct _array       /* g_canvas.h */
-
-/* pointers to glist and array elements go through a "stub" which sticks
-around after the glist or array is freed.  The stub itself is deleted when
-both the glist/array is gone and the refcount is zero, ensuring that no
-gpointers are pointing here. */
-
-#define GP_NONE 0       /* the stub points nowhere (has been cut off) */
-#define GP_GLIST 1      /* the stub points to a glist element */
-#define GP_ARRAY 2      /* ... or array */
-
-typedef struct _gstub
-{
-    union
-    {
-        struct _glist *gs_glist;    /* glist we're in */
-        struct _array *gs_array;    /* array we're in */
-    } gs_un;
-    int gs_which;                   /* GP_GLIST/GP_ARRAY */
-    int gs_refcount;                /* number of gpointers pointing here */
-} t_gstub;
-
-typedef struct _gpointer           /* pointer to a gobj in a glist */
-{
-    union
-    {   
-        struct _scalar *gp_scalar;  /* scalar we're in (if glist) */
-        union word *gp_w;           /* raw data (if array) */
-    } gp_un;
-    int gp_valid;                   /* number which must match gpointee */
-    t_gstub *gp_stub;               /* stub which points to glist/array */
-} t_gpointer;
-
-typedef union word
-{
-    t_float w_float;
-    t_symbol *w_symbol;
-    t_gpointer *w_gpointer;
-    t_array *w_array;
-    struct _glist *w_list;
-    int w_index;
-} t_word;
-
-typedef enum
-{
-    A_NULL,
-    A_FLOAT,
-    A_SYMBOL,
-    A_POINTER,
-    A_SEMI,
-    A_COMMA,
-    A_DEFFLOAT,
-    A_DEFSYM,
-    A_DOLLAR, 
-    A_DOLLSYM,
-    A_GIMME,
-    A_CANT
-}  t_atomtype;
-
-#define A_DEFSYMBOL A_DEFSYM    /* better name for this */
-
-typedef struct _atom
-{
-    t_atomtype a_type;
-    union word a_w;
-} t_atom;
-
-EXTERN_STRUCT _class;
-#define t_class struct _class
-
-EXTERN_STRUCT _outlet;
-#define t_outlet struct _outlet
-
-EXTERN_STRUCT _inlet;
-#define t_inlet struct _inlet
-
-EXTERN_STRUCT _binbuf;
-#define t_binbuf struct _binbuf
-
-EXTERN_STRUCT _clock;
-#define t_clock struct _clock
-
-EXTERN_STRUCT _outconnect;
-#define t_outconnect struct _outconnect
-
-EXTERN_STRUCT _glist;
-#define t_glist struct _glist
-#define t_canvas struct _glist  /* LATER lose this */
-
-typedef t_class *t_pd;      /* pure datum: nothing but a class pointer */
-
-typedef struct _gobj        /* a graphical object */
-{
-    t_pd g_pd;              /* pure datum header (class) */
-    struct _gobj *g_next;   /* next in list */
-} t_gobj;
-
-typedef struct _scalar      /* a graphical object holding data */
-{
-    t_gobj sc_gobj;         /* header for graphical object */
-    t_symbol *sc_template;  /* template name (LATER replace with pointer) */
-    t_word sc_vec[1];       /* indeterminate-length array of words */
-} t_scalar;
-
-typedef struct _text        /* patchable object - graphical, with text */
-{
-    t_gobj te_g;                /* header for graphical object */
-    t_binbuf *te_binbuf;        /* holder for the text */
-    t_outlet *te_outlet;        /* linked list of outlets */
-    t_inlet *te_inlet;          /* linked list of inlets */
-    short te_xpix;              /* x&y location (within the toplevel) */
-    short te_ypix;
-    short te_width;             /* requested width in chars, 0 if auto */
-    unsigned int te_type:2;     /* from defs below */
-} t_text;
-
-#define T_TEXT 0        /* just a textual comment */
-#define T_OBJECT 1      /* a MAX style patchable object */
-#define T_MESSAGE 2     /* a MAX stype message */
-#define T_ATOM 3        /* a cell to display a number or symbol */
-
-#define te_pd te_g.g_pd
-
-   /* t_object is synonym for t_text (LATER unify them) */
-
-typedef struct _text t_object;
-
-#define ob_outlet te_outlet
-#define ob_inlet te_inlet
-#define ob_binbuf te_binbuf
-#define ob_pd te_g.g_pd
-#define ob_g te_g
-
-typedef void (*t_method)(void);
-typedef void *(*t_newmethod)( void);
-typedef void (*t_gotfn)(void *x, ...);
-
-/* ---------------- pre-defined objects and symbols --------------*/
-EXTERN t_pd pd_objectmaker;     /* factory for creating "object" boxes */
-EXTERN t_pd pd_canvasmaker;     /* factory for creating canvases */
-EXTERN t_symbol s_pointer;
-EXTERN t_symbol s_float;
-EXTERN t_symbol s_symbol;
-EXTERN t_symbol s_bang;
-EXTERN t_symbol s_list;
-EXTERN t_symbol s_anything;
-EXTERN t_symbol s_signal;
-EXTERN t_symbol s__N;
-EXTERN t_symbol s__X;
-EXTERN t_symbol s_x;
-EXTERN t_symbol s_y;
-EXTERN t_symbol s_;
-
-/* --------- prototypes from the central message system ----------- */
-EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv);
-EXTERN t_symbol *gensym(char *s);
-EXTERN t_gotfn getfn(t_pd *x, t_symbol *s);
-EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s);
-EXTERN void nullfn(void);
-EXTERN void pd_vmess(t_pd *x, t_symbol *s, char *fmt, ...);
-#define mess0(x, s) ((*getfn((x), (s)))((x)))
-#define mess1(x, s, a) ((*getfn((x), (s)))((x), (a)))
-#define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b)))
-#define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c)))
-#define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d)))
-#define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), (a),(b),(c),(d),(e)))
-EXTERN void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN t_pd *pd_newest(void);
-
-/* --------------- memory management -------------------- */
-EXTERN void *getbytes(size_t nbytes);
-EXTERN void *getzbytes(size_t nbytes);
-EXTERN void *copybytes(void *src, size_t nbytes);
-EXTERN void freebytes(void *x, size_t nbytes);
-EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
-
-/* -------------------- atoms ----------------------------- */
-
-#define SETSEMI(atom) ((atom)->a_type = A_SEMI, (atom)->a_w.w_index = 0)
-#define SETCOMMA(atom) ((atom)->a_type = A_COMMA, (atom)->a_w.w_index = 0)
-#define SETPOINTER(atom, gp) ((atom)->a_type = A_POINTER, \
-    (atom)->a_w.w_gpointer = (gp))
-#define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f))
-#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
-    (atom)->a_w.w_symbol = (s))
-#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
-    (atom)->a_w.w_index = (n))
-#define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \
-    (atom)->a_w.w_symbol= (s))
-
-EXTERN t_float atom_getfloat(t_atom *a);
-EXTERN t_int atom_getint(t_atom *a);
-EXTERN t_symbol *atom_getsymbol(t_atom *a);
-EXTERN t_symbol *atom_gensym(t_atom *a);
-EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
-EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv);
-EXTERN t_symbol *atom_getsymbolarg(int which, int argc, t_atom *argv);
-
-EXTERN void atom_string(t_atom *a, char *buf, unsigned int bufsize);
-
-/* ------------------  binbufs --------------- */
-
-EXTERN t_binbuf *binbuf_new(void);
-EXTERN void binbuf_free(t_binbuf *x);
-EXTERN t_binbuf *binbuf_duplicate(t_binbuf *y);
-
-EXTERN void binbuf_text(t_binbuf *x, char *text, size_t size);
-EXTERN void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp);
-EXTERN void binbuf_clear(t_binbuf *x);
-EXTERN void binbuf_add(t_binbuf *x, int argc, t_atom *argv);
-EXTERN void binbuf_addv(t_binbuf *x, char *fmt, ...);
-EXTERN void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y);
-EXTERN void binbuf_addsemi(t_binbuf *x);
-EXTERN void binbuf_restore(t_binbuf *x, int argc, t_atom *argv);
-EXTERN void binbuf_print(t_binbuf *x);
-EXTERN int binbuf_getnatom(t_binbuf *x);
-EXTERN t_atom *binbuf_getvec(t_binbuf *x);
-EXTERN void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv);
-EXTERN int binbuf_read(t_binbuf *b, char *filename, char *dirname,
-    int crflag);
-EXTERN int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname,
-    int crflag);
-EXTERN int binbuf_write(t_binbuf *x, char *filename, char *dir,
-    int crflag);
-EXTERN void binbuf_evalfile(t_symbol *name, t_symbol *dir);
-EXTERN t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av,
-    int tonew);
-
-/* ------------------  clocks --------------- */
-
-EXTERN t_clock *clock_new(void *owner, t_method fn);
-EXTERN void clock_set(t_clock *x, double systime);
-EXTERN void clock_delay(t_clock *x, double delaytime);
-EXTERN void clock_unset(t_clock *x);
-EXTERN double clock_getlogicaltime(void);
-EXTERN double clock_getsystime(void); /* OBSOLETE; use clock_getlogicaltime() */
-EXTERN double clock_gettimesince(double prevsystime);
-EXTERN double clock_getsystimeafter(double delaytime);
-EXTERN void clock_free(t_clock *x);
-
-/* ----------------- pure data ---------------- */
-EXTERN t_pd *pd_new(t_class *cls);
-EXTERN void pd_free(t_pd *x);
-EXTERN void pd_bind(t_pd *x, t_symbol *s);
-EXTERN void pd_unbind(t_pd *x, t_symbol *s);
-EXTERN t_pd *pd_findbyclass(t_symbol *s, t_class *c);
-EXTERN void pd_pushsym(t_pd *x);
-EXTERN void pd_popsym(t_pd *x);
-EXTERN t_symbol *pd_getfilename(void);
-EXTERN t_symbol *pd_getdirname(void);
-EXTERN void pd_bang(t_pd *x);
-EXTERN void pd_pointer(t_pd *x, t_gpointer *gp);
-EXTERN void pd_float(t_pd *x, t_float f);
-EXTERN void pd_symbol(t_pd *x, t_symbol *s);
-EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-#define pd_class(x) (*(x))
-
-/* ----------------- pointers ---------------- */
-EXTERN void gpointer_init(t_gpointer *gp);
-EXTERN void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto);
-EXTERN void gpointer_unset(t_gpointer *gp);
-EXTERN int gpointer_check(const t_gpointer *gp, int headok);
-
-/* ----------------- patchable "objects" -------------- */
-EXTERN t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1,
-    t_symbol *s2);
-EXTERN t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp);
-EXTERN t_inlet *floatinlet_new(t_object *owner, t_float *fp);
-EXTERN t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp);
-EXTERN void inlet_free(t_inlet *x);
-
-EXTERN t_outlet *outlet_new(t_object *owner, t_symbol *s);
-EXTERN void outlet_bang(t_outlet *x);
-EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp);
-EXTERN void outlet_float(t_outlet *x, t_float f);
-EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
-EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN t_symbol *outlet_getsymbol(t_outlet *x);
-EXTERN void outlet_free(t_outlet *x);
-EXTERN t_object *pd_checkobject(t_pd *x);
-
-
-/* -------------------- canvases -------------- */
-
-EXTERN void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
-
-EXTERN void canvas_setargs(int argc, t_atom *argv);
-EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
-EXTERN t_symbol *canvas_getcurrentdir(void);
-EXTERN t_glist *canvas_getcurrent(void);
-EXTERN void canvas_makefilename(t_glist *c, char *file,
-    char *result,int resultsize);
-EXTERN t_symbol *canvas_getdir(t_glist *x);
-EXTERN int sys_fontwidth(int fontsize);
-EXTERN int sys_fontheight(int fontsize);
-EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b);
-
-/* ---------------- widget behaviors ---------------------- */
-
-EXTERN_STRUCT _widgetbehavior;
-#define t_widgetbehavior struct _widgetbehavior
-
-EXTERN_STRUCT _parentwidgetbehavior;
-#define t_parentwidgetbehavior struct _parentwidgetbehavior
-EXTERN t_parentwidgetbehavior *pd_getparentwidget(t_pd *x);
-
-/* -------------------- classes -------------- */
-
-#define CLASS_DEFAULT 0         /* flags for new classes below */
-#define CLASS_PD 1
-#define CLASS_GOBJ 2
-#define CLASS_PATCHABLE 3
-#define CLASS_NOINLET 8
-
-#define CLASS_TYPEMASK 3
-
-
-EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod,
-    t_method freemethod, size_t size, int flags, t_atomtype arg1, ...);
-EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s, 
-    t_atomtype type1, ...);
-EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
-    t_atomtype arg1, ...);
-EXTERN void class_addbang(t_class *c, t_method fn);
-EXTERN void class_addpointer(t_class *c, t_method fn);
-EXTERN void class_doaddfloat(t_class *c, t_method fn);
-EXTERN void class_addsymbol(t_class *c, t_method fn);
-EXTERN void class_addlist(t_class *c, t_method fn);
-EXTERN void class_addanything(t_class *c, t_method fn);
-EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s);
-EXTERN void class_setwidget(t_class *c, t_widgetbehavior *w);
-EXTERN void class_setparentwidget(t_class *c, t_parentwidgetbehavior *w);
-EXTERN t_parentwidgetbehavior *class_parentwidget(t_class *c);
-EXTERN char *class_getname(t_class *c);
-EXTERN char *class_gethelpname(t_class *c);
-EXTERN void class_setdrawcommand(t_class *c);
-EXTERN int class_isdrawcommand(t_class *c);
-EXTERN void class_domainsignalin(t_class *c, int onset);
-#define CLASS_MAINSIGNALIN(c, type, field) \
-    class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0)
-
-         /* prototype for functions to save Pd's to a binbuf */
-typedef void (*t_savefn)(t_gobj *x, t_binbuf *b);
-EXTERN void class_setsavefn(t_class *c, t_savefn f);
-EXTERN t_savefn class_getsavefn(t_class *c);
-        /* prototype for functions to open properties dialogs */
-typedef void (*t_propertiesfn)(t_gobj *x, struct _glist *glist);
-EXTERN void class_setpropertiesfn(t_class *c, t_propertiesfn f);
-EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
-
-#ifndef PD_CLASS_DEF
-#define class_addbang(x, y) class_addbang((x), (t_method)(y))
-#define class_addpointer(x, y) class_addpointer((x), (t_method)(y))
-#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
-#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
-#define class_addlist(x, y) class_addlist((x), (t_method)(y))
-#define class_addanything(x, y) class_addanything((x), (t_method)(y))
-#endif
-
-/* ------------   printing --------------------------------- */
-EXTERN void post(const char *fmt, ...);
-EXTERN void startpost(const char *fmt, ...);
-EXTERN void poststring(const char *s);
-EXTERN void postfloat(float f);
-EXTERN void postatom(int argc, t_atom *argv);
-EXTERN void endpost(void);
-EXTERN void error(const char *fmt, ...);
-EXTERN void bug(const char *fmt, ...);
-EXTERN void pd_error(void *object, const char *fmt, ...);
-EXTERN void sys_logerror(const char *object, const char *s);
-EXTERN void sys_unixerror(const char *object);
-EXTERN void sys_ouch(void);
-
-
-/* ------------  system interface routines ------------------- */
-EXTERN int sys_isreadablefile(const char *name);
-EXTERN void sys_bashfilename(const char *from, char *to);
-EXTERN void sys_unbashfilename(const char *from, char *to);
-EXTERN int open_via_path(const char *name, const char *ext, const char *dir,
-    char *dirresult, char **nameresult, unsigned int size, int bin);
-EXTERN int sched_geteventno(void);
-EXTERN double sys_getrealtime(void);
-EXTERN int (*sys_idlehook)(void);   /* hook to add idle time computation */
-
-
-/* ------------  threading ------------------- */
-/* T.Grill - see m_sched.c */
- 
-EXTERN void sys_lock(void);
-EXTERN void sys_unlock(void);
-EXTERN int sys_trylock(void);
-
-
-/* --------------- signals ----------------------------------- */
-
-typedef float t_sample;
-#define MAXLOGSIG 32
-#define MAXSIGSIZE (1 << MAXLOGSIG)
-
-typedef struct _signal
-{
-    int s_n;            /* number of points in the array */
-    t_sample *s_vec;    /* the array */
-    float s_sr;         /* sample rate */
-    int s_refcount;     /* number of times used */
-    int s_isborrowed;   /* whether we're going to borrow our array */
-    struct _signal *s_borrowedfrom;     /* signal to borrow it from */
-    struct _signal *s_nextfree;         /* next in freelist */
-    struct _signal *s_nextused;         /* next in used list */
-} t_signal;
-
-
-typedef t_int *(*t_perfroutine)(t_int *args);
-
-EXTERN t_int *plus_perform(t_int *args);
-EXTERN t_int *zero_perform(t_int *args);
-EXTERN t_int *copy_perform(t_int *args);
-
-EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n);
-EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n);
-EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n);
-EXTERN void dsp_add_zero(t_sample *out, int n);
-
-EXTERN int sys_getblksize(void);
-EXTERN float sys_getsr(void);
-EXTERN int sys_get_inchannels(void);
-EXTERN int sys_get_outchannels(void);
-
-EXTERN void dsp_add(t_perfroutine f, int n, ...);
-EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec);
-EXTERN void pd_fft(float *buf, int npoints, int inverse);
-EXTERN int ilog2(int n);
-
-EXTERN void mayer_fht(float *fz, int n);
-EXTERN void mayer_fft(int n, float *real, float *imag);
-EXTERN void mayer_ifft(int n, float *real, float *imag);
-EXTERN void mayer_realfft(int n, float *real);
-EXTERN void mayer_realifft(int n, float *real);
-
-EXTERN float *cos_table;
-#define LOGCOSTABSIZE 9
-#define COSTABSIZE (1<<LOGCOSTABSIZE)
-
-EXTERN int canvas_suspend_dsp(void);
-EXTERN void canvas_resume_dsp(int oldstate);
-EXTERN void canvas_update_dsp(void);
-
-/* IOhannes { (up/downsampling) */
-typedef struct _resample
-{
-  int method;       /* up/downsampling method ID */
-
-  t_int downsample; /* downsampling factor */
-  t_int upsample;   /* upsampling factor */
-
-  t_float *s_vec;   /* here we hold the resampled data */
-  int      s_n;
-
-  t_float *coeffs;  /* coefficients for filtering... */
-  int      coefsize;
-
-  t_float *buffer;  /* buffer for filtering */
-  int      bufsize;
-} t_resample;
-
-EXTERN void resample_init(t_resample *x);
-EXTERN void resample_free(t_resample *x);
-
-EXTERN void resample_dsp(t_resample *x, t_sample *in, int insize, t_sample *out, int outsize, int method);
-EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsize, int method);
-EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method);
-/* } IOhannes */
-
-/* ----------------------- utility functions for signals -------------- */
-EXTERN float mtof(float);
-EXTERN float ftom(float);
-EXTERN float rmstodb(float);
-EXTERN float powtodb(float);
-EXTERN float dbtorms(float);
-EXTERN float dbtopow(float);
-
-EXTERN float q8_sqrt(float);
-EXTERN float q8_rsqrt(float);
-#ifndef N32     
-EXTERN float qsqrt(float);  /* old names kept for extern compatibility */
-EXTERN float qrsqrt(float);
-#endif
-/* --------------------- data --------------------------------- */
-
-    /* graphical arrays */
-EXTERN_STRUCT _garray;
-#define t_garray struct _garray
-
-EXTERN t_class *garray_class;
-EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec);
-EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx);
-EXTERN void garray_redraw(t_garray *x);
-EXTERN int garray_npoints(t_garray *x);
-EXTERN char *garray_vec(t_garray *x);
-EXTERN void garray_resize(t_garray *x, t_floatarg f);
-EXTERN void garray_usedindsp(t_garray *x);
-EXTERN void garray_setsaveit(t_garray *x, int saveit);
-EXTERN t_class *scalar_class;
-
-EXTERN t_float *value_get(t_symbol *s);
-EXTERN void value_release(t_symbol *s);
-EXTERN int value_getfloat(t_symbol *s, t_float *f);
-EXTERN int value_setfloat(t_symbol *s, t_float f);
-
-/* ------- GUI interface - functions to send strings to TK --------- */
-typedef void (*t_guicallbackfn)(t_gobj *client, t_glist *glist);
-
-EXTERN void sys_vgui(char *fmt, ...);
-EXTERN void sys_gui(char *s);
-EXTERN void sys_pretendguibytes(int n);
-EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f);
-EXTERN void sys_unqueuegui(void *client);
-    /* dialog window creation and destruction */
-EXTERN void gfxstub_new(t_pd *owner, void *key, const char *cmd);
-EXTERN void gfxstub_deleteforkey(void *key);
-
-extern t_class *glob_pdobject;  /* object to send "pd" messages */
-
-/*-------------  Max 0.26 compatibility --------------------*/
-
-/* the following reflects the new way classes are laid out, with the class
-   pointing to the messlist and not vice versa. Externs shouldn't feel it. */
-typedef t_class *t_externclass;
-
-EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine,
-    t_method freeroutine, t_symbol *name, size_t size, int tiny, \
-    t_atomtype arg1, ...);
-EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...);
-
-#define t_getbytes getbytes
-#define t_freebytes freebytes
-#define t_resizebytes resizebytes
-#define typedmess pd_typedmess
-#define vmess pd_vmess
-
-/* A definition to help gui objects straddle 0.34-0.35 changes.  If this is
-defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */
-
-#define PD_USE_TE_XPIX
-
-
-#ifdef __i386__
-/* a test for NANs and denormals.  Should only be necessary on i386. */
-#define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \
-    (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000))
-/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
-#define PD_BIGORSMALL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
-    (((*(unsigned int*)&(f))&0x60000000)==0x60000000))
-#else
-#define PD_BADFLOAT(f) 0
-#define PD_BIGORSMALL(f) 0
-#endif
-
-#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
-}
-#endif
-
-#define __m_pd_h_
-#endif /* __m_pd_h_ */
diff --git a/externals/algocomp/neural.c b/externals/algocomp/neural.c
deleted file mode 100755
index 3f23523eb7be109aac4dca086e70b00dc35e5bb4..0000000000000000000000000000000000000000
--- a/externals/algocomp/neural.c
+++ /dev/null
@@ -1,157 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define MAX_LAYERS 3
-#define MAX_UNITS 3
-
-
-static t_class *mlp_class;
-
-
-typedef struct _mlp {
-	t_object  x_obj;
-	int nr_inputunits;
-	int nr_hiddenunits;
-	int nr_outunits;
-	int nr_layers;
-	t_float weights[2][MAX_UNITS][MAX_UNITS];
-	t_float output[3][MAX_UNITS];
-	t_float bias[2][MAX_UNITS];
-	t_float input[MAX_UNITS];
-	t_float target[MAX_UNITS];
-	float eta;
-	t_outlet *out,*error_out;
-} 	t_mlp;
-
-
-void calculateOutput(t_mlp *x) {
-	int i,k,l;
-	for (k=0;k<x->nr_hiddenunits;k++) {
-			x->output[1][k] = x->bias[0][k];
-			for (l=0;l<x->nr_inputunits;l++) {
-			x->output[1][k] += x->output[0][l]*x->weights[0][l][k];
-			}
-		x->output[1][k] = 1.0/(1.0-exp(-x->output[1][k]));
-	}
-	for (k=0;k<x->nr_outunits;k++) {
-			x->output[2][k] = x->bias[1][k];
-			for (l=0;l<x->nr_hiddenunits;l++) {
-			x->output[2][k] += x->output[1][l]*x->weights[1][l][k];
-			}
-		x->output[2][k] = 1.0/(1.0-exp(-x->output[2][k]));	
-	}
-}
-
-void measureError(t_mlp *x) {
-//post("Measuring Error");
-int i,k,j;
-float Error = 0.0;
-float SumDOW[MAX_UNITS];
-float DeltaH[MAX_UNITS];
-float DeltaO[MAX_UNITS];
-float DeltaWeightIH[MAX_UNITS][MAX_UNITS];
-float DeltaWeightHO[MAX_UNITS][MAX_UNITS];
-  
-  for(k=0 ;k<x->nr_outunits;k++) {
-  	Error +=0.5*(x->target[k]-x->output[2][k])*(x->target[k]-x->output[2][k]);
- 	DeltaO[k] = (x->target[k]-x->output[2][k]);//*x->output[2][k] * (1 - x->output[2][k]);
-	}
-	
-  post("Target: %f Error: %f Delta: %f", x->target[0], Error, DeltaO[0]);
-  outlet_float(x->error_out, Error);
-  for(j=0;j<x->nr_hiddenunits;j++) {         /* 'back-propagate' errors to hidden layer */
-      SumDOW[j] = 0.0 ;
-      for(k=0 ; k<=x->nr_outunits; k++ ) {
-            SumDOW[j] += x->weights[1][j][k]*DeltaO[k] ;
-      }
-      DeltaH[j] = SumDOW[j] * x->output[1][j]* (1.0 - x->output[1][j]);
-  }
-   for(j = 0 ;j<x->nr_hiddenunits; j++) {         /* update weights WeightIH */
-      //DeltaWeightIH[0][j] = + x->alpha*DeltaWeightIH[0][j];
-      x->bias[0][j] += x->eta*DeltaH[j];
-      for(i = 0; i < x->nr_inputunits ; i++ ) {
-            DeltaWeightIH[i][j] = x->eta * x->output[0][i] * DeltaH[j];// + x->alpha * DeltaWeightIH[i][j];
-            x->weights[0][i][j] += DeltaWeightIH[i][j];
-      }
-	}
-	for( k = 0; k < x->nr_outunits; k++) {         /* update weights WeightHO */
-      x->bias[1][k] += x->eta*DeltaO[k];
-//      DeltaWeightHO[0][k] = x->eta * DeltaO[k] + x->alpha * DeltaWeightHO[0][k] ;
-//      x->weights[1][0][k] += DeltaWeightHO[0][k];
-      for(j = 0; j < x->nr_hiddenunits; j++ ) {
-            DeltaWeightHO[j][k] = x->eta * x->output[1][j] * DeltaO[k];// + x->alpha * DeltaWeightHO[j][k] ;
-            x->weights[1][j][k] += DeltaWeightHO[j][k];
-      }
-}
-}
-
-
-void mlp_bang(t_mlp *x)
-{
-	calculateOutput(x);
-	outlet_float(x->out, x->output[2][0]);
-}
-
-void mlp_inputed(t_mlp *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-post("inputed called");
-for (i=0;i<argc;i++) {
-	if (i > x->nr_inputunits) break;
-	x->output[0][i] = atom_getfloat(&argv[i]);
-}
-mlp_bang(x);
-}
-
-void mlp_setTarget(t_mlp *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-//post("target called: %d",argc);
-for (i=0;i<argc-1;i++) {
-	if (i > x->nr_inputunits) break;
-	x->output[0][i] = atom_getfloat(&argv[i]);
-}
-post("set targetto: %f",atom_getfloat(&argv[argc-1]));
-x->target[0] = atom_getfloat(&argv[argc-1]);
-mlp_bang(x);
-measureError(x);
-}
-
-
-void initializeWeights(t_mlp *x) {
-	int i,k,l;
-	for (k=0;k<x->nr_hiddenunits;k++) {
-			x->bias[0][k] =  0;//((t_float) rand())/RAND_MAX;
-			for (i=0;i<x->nr_inputunits;i++) 
-				x->weights[0][i][k] = ((t_float) rand())/RAND_MAX;
-			for (l=0;l<x->nr_outunits;l++) 
-				x->weights[1][k][l] = ((t_float) rand())/RAND_MAX;
-	}
-	for (l=0;l<x->nr_outunits;l++) 
-		x->bias[1][l] =  0;//((t_float) rand())/RAND_MAX;
-	
-}
-
-
-void mlp_train(t_mlp *x) {
-post("train called");	
-}
-	
-void *mlp_new(void)
-{
-  int i;
-  t_mlp *x = (t_mlp *)pd_new(mlp_class);
-  x->eta = 0.1;
-  x->nr_layers = 3;
-  x->nr_hiddenunits = 4;
-  x->nr_inputunits = 8;
-  x->nr_outunits = 1;
-  //for (i=0;i<x->nr_inputunits;i++)
-  //x->output[0][i] = ((t_float) rand())/RAND_MAX*5;
-  initializeWeights(x);
-  inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("target"));
-  x->out = outlet_new(&x->x_obj,&s_float);
-  x->error_out = outlet_new(&x->x_obj,&s_float);
-  return (void *)x;
-}	
-	
diff --git a/externals/algocomp/selfsimilar.c b/externals/algocomp/selfsimilar.c
deleted file mode 100755
index e927fafa5e76c70f785841b48c9925919e8e258b..0000000000000000000000000000000000000000
--- a/externals/algocomp/selfsimilar.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-* Selfsimilar melodies and rhythm.
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-#define TRUE  1
-#define FALSE 0
-#define MAX_LEVELS 16
-
-
-typedef short boolean;
-static t_class *selfsimilar_class;
-static t_class *selfsimilarrhythm_class;
-/*
- * Self-similar music
- */
-typedef struct _selfsimilar {
-  t_object x_obj;
-  t_int counter;
-  t_int nr_notes;
-  t_int transpose;
-  t_int note_level[MAX_LEVELS]; // notes for all level 
-  t_int melodypos[MAX_LEVELS]; // position in melody for each level
-  short poschanged[MAX_LEVELS]; // position changed?
-  t_int melody[16]; // melody
-  t_int levels; // number of levels (MAX 16)
-  t_outlet *note_out;
-  t_outlet *note_at_level[MAX_LEVELS];
-} t_selfsimilar;
-
-
-boolean changeposition(int level,t_selfsimilar *x) {
-	if (level == 0) {
-	x->melodypos[level]++;
-	x->poschanged[level]=TRUE;
-	}
-	else 
-	if (changeposition((level-1),x) == TRUE) {
-		x->melodypos[level]++;
-		x->poschanged[level]=TRUE;
-	}
-	else {
-     	x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-	if (x->melodypos[level] > x->nr_notes-1) {
-	x->melodypos[level] = 0;
-	x->poschanged[level]=TRUE;
-	return TRUE;	
-	}
-	else {
-		//x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-}
-
-t_int createmelody(int level,t_selfsimilar *x,int currentupper) {
-	t_int note = 0; // not used!!!
-	if (level == 0) {
-		note = x->melody[x->melodypos[level]]-x->melody[0];
-		x->note_level[level] = note+currentupper;	
-	}
-	else {
-		int current = x->melody[x->melodypos[level]]-x->melody[0]+currentupper;
-		int y = createmelody((level-1),x,current+x->transpose);
-		x->note_level[level] = current;
-		//note = x->melody[x->melodypos[level]]+y-x->melody[0]+x->transpose;
-	}
-	return note;
-}
-
-void selfsimilar_bang(t_selfsimilar *x)
-{
-	int i = 0;
-	t_int note = 0;
-	for (i=0;i<x->levels;i++) {
-	 	if (x->poschanged[i] == TRUE)
-		outlet_float(x->note_at_level[i],x->note_level[i]);
-	}
-	//post("upper pos: %d",x->melodypos[x->levels-1]);
-	changeposition((x->levels-1),x);
-	x->note_level[x->levels-1] = x->melody[x->melodypos[x->levels-1]];
-	note = createmelody(x->levels-2,x,x->note_level[x->levels-1]+x->transpose);
-	note += x->melody[x->melodypos[x->levels-1]];
-	//post("notes: %d %d %d",x->note_level[0],x->note_level[1],x->note_level[2]);
-	
-	//outlet_float(x->note_out,note);
-
-}
-
-void selfsimilar_initDummyNoteSequence(t_selfsimilar *x) {
-  x->nr_notes = 4;
-/*  x->melody[0] = 1;
-  x->melody[1] = 2;
-  x->melody[2] = 3;
-  x->melody[3] = 4;
-  x->melody[4] = 5;
-*/
-  
-  x->melody[0] = 54;
-  x->melody[1] = 57;
-  x->melody[2] = 52;
-  x->melody[3] = 61;
-}
-
-void *selfsimilar_new(t_symbol *s, int argc, t_atom *argv)
-{
-  int i = 0;
-  int y;
-  t_selfsimilar *x = (t_selfsimilar *)pd_new(selfsimilar_class);
-  
-  
-  if (argc > 2) {
-  x->levels = atom_getfloat(&argv[0]); 
-  x->transpose = atom_getfloat(&argv[1]); 
-  x->nr_notes = argc-2;
-  for (i=2;i<argc;i++) 
-  	x->melody[i-2] = atom_getfloat(&argv[i]);
-  }
-  else {
-  	selfsimilar_initDummyNoteSequence(x);
-    if (argc < 2) {
-    x->transpose = 12;
-    if (argc == 0) x->levels = 3;
-    else x->levels= atom_getfloat(&argv[0]);  }
-    else x->transpose = atom_getfloat(&argv[1]);
-  } 
-  if (x->levels > MAX_LEVELS) x->levels = MAX_LEVELS; // levels between 2 and 10
-  if (x->levels < 2) x->levels = 2;
-  //x->note_out = outlet_new(&x->x_obj,&s_float);
-  for (i=0;i<x->levels;i++) {
-  	x->melodypos[i] = 0; // position of each level
-  	x->poschanged[i] = TRUE; // notes on each level should start playing
-	x->note_at_level[i] = outlet_new(&x->x_obj,&s_float); // connect outlet for each level
-	x->note_level[i] = x->melody[0] + x->transpose*(x->levels-i-1);
-  }
-  return (void *)x;
-}
-
-typedef struct _selfsimilarrhythm {
-  t_object x_obj;
-  t_int counter;
-  t_float time_level[MAX_LEVELS]; // times for all level 
-  t_int melodypos[10]; // position in melody for each level
-  short poschanged[MAX_LEVELS]; // position changed?
-  t_float melody[5]; // melody
-  t_int levels; // number of levels (MAX 16)
-  t_outlet *time_out;
-  t_outlet *time_at_level[MAX_LEVELS];
-} t_selfsimilarrhythm;
-
-
-boolean changepositiontime(int level,t_selfsimilarrhythm *x) {
-	if (level == 0) {
-	x->melodypos[level]++;
-	x->poschanged[level]=TRUE;
-	}
-	else 
-	if (changepositiontime((level-1),x) == TRUE) {
-		x->melodypos[level]++;
-		x->poschanged[level]=TRUE;
-	}
-	else {
-     	x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-	if (x->melodypos[level] > 4) {
-	x->melodypos[level] = 0;
-	x->poschanged[level]=TRUE;
-	return TRUE;	
-	}
-	else {
-		x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-}
-
-
-t_float createrhytm(int level,t_selfsimilarrhythm *x,int currentupper) {
-	t_float time;
-	if (level == 0) {
-		time = x->melody[x->melodypos[level]];
-		x->time_level[level] = time;	
-	}
-	else {
-		float current = x->melody[x->melodypos[level]]*currentupper/1000;
-		float y = createrhytm((level-1),x,current);
-		x->time_level[level] = current;
-		time = x->melody[x->melodypos[level]]*y;
-	}
-	return time;
-}
-
-void selfsimilarrhythm_bang(t_selfsimilarrhythm *x)
-{
-	int i = 0;
-	t_float time = 0;
-	time = createrhytm((x->levels-1),x,x->melody[x->melodypos[x->levels-1]]);
-	//time += x->melody[x->melodypos[x->levels-1]];
-	changepositiontime((x->levels-1),x);
-	outlet_float(x->time_out,time);
-
-//	for (i=0;i<x->levels;i++) {
-//	 if (x->poschanged[i] == TRUE)
-//	 outlet_float(x->time_at_level[i],x->time_level[i]);
-//	}
-	
-}
-
-void *selfsimilarrhythm_new(t_floatarg f1)
-{
-  int i = 0;
-  int y;
-  t_selfsimilarrhythm *x = (t_selfsimilarrhythm *)pd_new(selfsimilarrhythm_class);
-  x->levels = f1;
-  if (x->levels > 16) x->levels = 16; // levels between 2 and 10
-  if (x->levels < 2) x->levels = 2;
-  x->melody[0] = 1000;
-  x->melody[1] = 250;
-  x->melody[2] = 250;
-  x->melody[3] = 500;
-  x->time_out = outlet_new(&x->x_obj,&s_float);
-  for (i=0;i<x->levels;i++) {
-  	x->melodypos[i] = 0; // position of each level
-  	x->poschanged[i] = TRUE; // times on each level should start playing
-//	x->time_at_level[i] = outlet_new(&x->x_obj,&s_float); // connect outlet for each level
-  }
-  return (void *)x;
-}
diff --git a/externals/algocomp/stochastic.c b/externals/algocomp/stochastic.c
deleted file mode 100755
index 47b0c8ab4b2b3b82368b0f7b3a180c11a3da74d1..0000000000000000000000000000000000000000
--- a/externals/algocomp/stochastic.c
+++ /dev/null
@@ -1,29 +0,0 @@
-//TODO Replace with classes fot stochastic
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-typedef struct _logistic {
-  t_object  x_obj;
-  t_float x;
-  t_float a;
-  t_outlet *note_out;
-} t_logistic;
-
-void logistic_bang(t_logistic *x)
-{
-outlet_float(x->note_out, x->x);
-x->x = x->a*x->x*(1-x->x);
-}
-
-void *logistic_new(t_floatarg f)
-{
-  t_logistic *x = (t_logistic *)pd_new(logistic_class);
-  x->a = f;
-  x->x = 0.5;
-  x->note_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->a);
-  return (void *)x;
-}
\ No newline at end of file
diff --git a/externals/algocomp/utils.c b/externals/algocomp/utils.c
deleted file mode 100755
index 0def48040e4f93072ebe44b7cd7bf0d6173144e7..0000000000000000000000000000000000000000
--- a/externals/algocomp/utils.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Utilites to be used for algorithmic composition
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *map_class;
-
-/*
- * linear mapping
- */
-typedef struct _map {
-  t_object  x_obj;
-  t_float x;
-  t_float min1,min2,max1,max2;
-  t_float scale,translate;
-  t_outlet *mapped_out;
-} t_map;
-
-void map_list(t_map *x,t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	float out;
-	x->scale = (x->max2 - x->min2)/(x->max1 - x->min1);
-	for (i=0;i<argc;i++) {
-	out = (atom_getfloat(&argv[i]) - x->min1)*x->scale+x->min1+x->translate;
-	SETFLOAT(&argv[i],out);
-}
-	outlet_list(x->mapped_out, &s_list, argc, argv);
-}
-
-
-void map_float(t_map *x,t_floatarg f)
-{
-float out;
-x->scale = (x->max2 - x->min2)/(x->max1 - x->min1);
-x->translate = x->min2 - x->min1;
-out = (f-x->min1)*x->scale+x->min1+x->translate;
-outlet_float(x->mapped_out, out);
-}
-
-void *map_new(t_floatarg min1, t_floatarg max1, t_floatarg min2,t_floatarg max2)
-{
-  t_map *x = (t_map *)pd_new(map_class);
-  x->min1 = min1;
-  x->min2 = min2;
-  x->max1 = max1;
-  x->max2 = max2;
-  
-  x->scale = (max2 - min2)/(max1 - min1);
-  x->translate = min2 - min1;
-  x->mapped_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->min2);
-  floatinlet_new(&x->x_obj, &x->max2);
-  return (void *)x;
-}
diff --git a/externals/ann/GnuGPL.txt b/externals/ann/GnuGPL.txt
deleted file mode 100644
index fa0bef492c23ea37a1944eb13238e8b8de60613a..0000000000000000000000000000000000000000
--- a/externals/ann/GnuGPL.txt
+++ /dev/null
@@ -1,290 +0,0 @@
-GNU GENERAL PUBLIC LICENSE
-
-Version 2, June 1991 
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
-59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom
-to share and change it. By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This General
-Public License applies to most of the Free Software Foundation's
-software and to any other program whose authors commit to using it.
-(Some other Free Software Foundation software is covered by the
-GNU Library General Public License instead.) You can apply it to your
-programs, too. 
-
-When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new free
-programs; and that you know you can do these things. 
-
-To protect your rights, we need to make restrictions that forbid anyone
-to deny you these rights or to ask you to surrender the rights. These
-restrictions translate to certain responsibilities for you if you distribute
-copies of the software, or if you modify it. 
-
-For example, if you distribute copies of such a program, whether gratis
-or for a fee, you must give the recipients all the rights that you have. You
-must make sure that they, too, receive or can get the source code. And
-you must show them these terms so they know their rights. 
-
-We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software. 
-
-Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on,
-we want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations. 
-
-Finally, any free program is threatened constantly by software patents.
-We wish to avoid the danger that redistributors of a free program will
-individually obtain patent licenses, in effect making the program
-proprietary. To prevent this, we have made it clear that any patent must
-be licensed for everyone's free use or not licensed at all. 
-
-The precise terms and conditions for copying, distribution and
-modification follow. 
-
-TERMS AND CONDITIONS FOR
-COPYING, DISTRIBUTION AND
-MODIFICATION
-
-0. This License applies to any program or other work which contains a
-notice placed by the copyright holder saying it may be distributed under
-the terms of this General Public License. The "Program", below, refers
-to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it, either
-verbatim or with modifications and/or translated into another language.
-(Hereinafter, translation is included without limitation in the term
-"modification".) Each licensee is addressed as "you". 
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of running
-the Program is not restricted, and the output from the Program is
-covered only if its contents constitute a work based on the Program
-(independent of having been made by running the Program). Whether
-that is true depends on what the Program does. 
-
-1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the notices
-that refer to this License and to the absence of any warranty; and give
-any other recipients of the Program a copy of this License along with the
-Program. 
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee. 
-
-2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions: 
-
-     a) You must cause the modified files to carry prominent notices
-     stating that you changed the files and the date of any change. 
-
-     b) You must cause any work that you distribute or publish, that in
-     whole or in part contains or is derived from the Program or any
-     part thereof, to be licensed as a whole at no charge to all third
-     parties under the terms of this License. 
-
-     c) If the modified program normally reads commands interactively
-     when run, you must cause it, when started running for such
-     interactive use in the most ordinary way, to print or display an
-     announcement including an appropriate copyright notice and a
-     notice that there is no warranty (or else, saying that you provide a
-     warranty) and that users may redistribute the program under
-     these conditions, and telling the user how to view a copy of this
-     License. (Exception: if the Program itself is interactive but does
-     not normally print such an announcement, your work based on
-     the Program is not required to print an announcement.) 
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program, and
-can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based on
-the Program, the distribution of the whole must be on the terms of this
-License, whose permissions for other licensees extend to the entire
-whole, and thus to each and every part regardless of who wrote it. 
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based
-on the Program. 
-
-In addition, mere aggregation of another work not based on the
-Program with the Program (or with a work based on the Program) on a
-volume of a storage or distribution medium does not bring the other
-work under the scope of this License. 
-
-3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following: 
-
-     a) Accompany it with the complete corresponding
-     machine-readable source code, which must be distributed under
-     the terms of Sections 1 and 2 above on a medium customarily
-     used for software interchange; or, 
-
-     b) Accompany it with a written offer, valid for at least three
-     years, to give any third party, for a charge no more than your cost
-     of physically performing source distribution, a complete
-     machine-readable copy of the corresponding source code, to be
-     distributed under the terms of Sections 1 and 2 above on a
-     medium customarily used for software interchange; or, 
-
-     c) Accompany it with the information you received as to the offer
-     to distribute corresponding source code. (This alternative is
-     allowed only for noncommercial distribution and only if you
-     received the program in object code or executable form with
-     such an offer, in accord with Subsection b above.) 
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to control
-compilation and installation of the executable. However, as a special
-exception, the source code distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies the
-executable. 
-
-If distribution of executable or object code is made by offering access to
-copy from a designated place, then offering equivalent access to copy
-the source code from the same place counts as distribution of the source
-code, even though third parties are not compelled to copy the source
-along with the object code. 
-
-4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt otherwise
-to copy, modify, sublicense or distribute the Program is void, and will
-automatically terminate your rights under this License. However, parties
-who have received copies, or rights, from you under this License will not
-have their licenses terminated so long as such parties remain in full
-compliance. 
-
-5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and all
-its terms and conditions for copying, distributing or modifying the
-Program or works based on it. 
-
-6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the original
-licensor to copy, distribute or modify the Program subject to these terms
-and conditions. You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein. You are not responsible
-for enforcing compliance by third parties to this License. 
-
-7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot distribute
-so as to satisfy simultaneously your obligations under this License and
-any other pertinent obligations, then as a consequence you may not
-distribute the Program at all. For example, if a patent license would not
-permit royalty-free redistribution of the Program by all those who
-receive copies directly or indirectly through you, then the only way you
-could satisfy both it and this License would be to refrain entirely from
-distribution of the Program. 
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply
-and the section as a whole is intended to apply in other circumstances. 
-
-It is not the purpose of this section to induce you to infringe any patents
-or other property right claims or to contest validity of any such claims;
-this section has the sole purpose of protecting the integrity of the free
-software distribution system, which is implemented by public license
-practices. Many people have made generous contributions to the wide
-range of software distributed through that system in reliance on
-consistent application of that system; it is up to the author/donor to
-decide if he or she is willing to distribute software through any other
-system and a licensee cannot impose that choice. 
-
-This section is intended to make thoroughly clear what is believed to be
-a consequence of the rest of this License. 
-
-8. If the distribution and/or use of the Program is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Program under this License may add an
-explicit geographical distribution limitation excluding those countries, so
-that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License. 
-
-9. The Free Software Foundation may publish revised and/or new
-versions of the General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may differ in
-detail to address new problems or concerns. 
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number
-of this License, you may choose any version ever published by the Free
-Software Foundation. 
-
-10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we
-sometimes make exceptions for this. Our decision will be guided by the
-two goals of preserving the free status of all derivatives of our free
-software and of promoting the sharing and reuse of software generally. 
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF
-CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM,
-TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
-WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE
-PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
-EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
-THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
-COST OF ALL NECESSARY SERVICING, REPAIR OR
-CORRECTION. 
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW
-OR AGREED TO IN WRITING WILL ANY COPYRIGHT
-HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
-ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
-ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
-LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
-INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
-WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
-OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES. 
-
-END OF TERMS AND CONDITIONS
diff --git a/externals/ann/README.txt b/externals/ann/README.txt
deleted file mode 100644
index 0b6099e51cd6465d933c7d8f9e488a86ff800601..0000000000000000000000000000000000000000
--- a/externals/ann/README.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-ann: Artificial Neural Networks
-
-Authors: 
- IOhannes m zmölnig - forum::für::umläute
- Davide Morelli - www.davidemorelli.it
- 2005, Georg Holzmann - http://grh.mur.at
-
-this software is under the GnuGPL that is provided with these files
-
-ann_som: self-organized maps
-ann_mlp: multi layer perceptrons
-ann_td: time delay
-
-
-FANN libraries version 1.2 are required for ann_mlp and ann_td, see
-http://fann.sourceforge.net/
-(ann works only with 1.2 version)
-
-
----------- Windows users (MSVC):
-
-go to http://fann.sourceforge.net/ and download fann libs
-(use 1.2 version)
-go to MSVC++ folder and open all.dsw
-compile everything
-go in the ann/src folder
-edit makefile.msvc with the correct PATHs
-run the visual studio command prompt and execute:
-nmake makefile.msvc
-
----------- Linux users:
-
-go to http://fann.sourceforge.net/ and download 1.2 fann libs
-compile fann libs from source
-if you don't compile from source edit ann/src/makefile.linux 
-and set correct PATHs
-
-read ann/src/makefile.linux for more info and edit PATHs
-
----------- Irix users:
-
-ann_mlp and ann_td have never been compiled on irix
-
----------- OsX users:
-
-go to http://fann.sourceforge.net/ and download 1.2 fann libs
-compile fann libs from source
-if you don't compile from source edit ann/src/makefile.darwin 
-and set correct PATHs
-
-read ann/src/makefile.darwin for more info and edit PATHs
-
-compile with
-make -f makefile.darwin
diff --git a/externals/ann/SConscript b/externals/ann/SConscript
deleted file mode 100644
index 711f3477dbddbb8249e95912871cd0c7e5238374..0000000000000000000000000000000000000000
--- a/externals/ann/SConscript
+++ /dev/null
@@ -1,19 +0,0 @@
-import glob
-import os
-import re
-Import('env prefix')
-
-ann = env.SharedLibrary(target='ann', source = glob.glob('src/*.c'))
-env.Alias('install', env.Install(os.path.join(prefix, 'extra'), ann))
-Default(ann)
-
-for subann in glob.glob('src/ann_*.c'):
-    ann = env.SharedLibrary(re.sub("\.c$","",os.path.basename(subann)), source = subann)
-    env.Alias('install', env.Install(os.path.join(prefix, 'extra'), ann))
-    Default(ann)
-
-env.Alias('install', env.Install(os.path.join(prefix, 'doc/ann'), glob.glob('helps/*.pd')))
-
-for example in glob.glob('examples/ann*'):
-    env.Alias('install', env.Install(os.path.join(prefix, 'doc/ann/' + example), glob.glob(example+'/*.*')))
-    
diff --git a/externals/ann/examples/ann_mlp-FAQs.txt b/externals/ann/examples/ann_mlp-FAQs.txt
deleted file mode 100644
index 309c0a64036be63785872d83c4020351d9801ec7..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp-FAQs.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-Ch_uzi couldn't create error:
-ignore it, this object is needed to add GEM spheres in the second example, you don't need to run ann_mlp
-
-error: opening file.net
-the ann weights file are normal textfiles but they don't seem to be cross-platform. 
-i made those files under win32 so they should not work on osx (on linux?)
-
diff --git a/externals/ann/examples/ann_mlp_example1/train-and.txt b/externals/ann/examples/ann_mlp_example1/train-and.txt
deleted file mode 100644
index 4534273b148a5eafd68077fe9417de727b4ed35f..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example1/train-and.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 1
-0 0
-0
-1 0
-0
-0 1
-0
-1 1
-1
diff --git a/externals/ann/examples/ann_mlp_example1/train-or.txt b/externals/ann/examples/ann_mlp_example1/train-or.txt
deleted file mode 100644
index 733750a3d305769d40b3094d589bb5be9b92c098..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example1/train-or.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 1
-0 0
-0
-1 0
-1
-0 1
-1
-1 1
-1
diff --git a/externals/ann/examples/ann_mlp_example1/train-xor.txt b/externals/ann/examples/ann_mlp_example1/train-xor.txt
deleted file mode 100644
index fec3e316b92530dba8b9b982e9776e002cebe122..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example1/train-xor.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 1
-0 0
-0
-1 0
-1
-0 1
-1
-1 1
-0
diff --git a/externals/ann/examples/ann_mlp_example1/xor.pd b/externals/ann/examples/ann_mlp_example1/xor.pd
deleted file mode 100644
index b2c9fe120013159b7dd477f459c5474eaab7cd02..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example1/xor.pd
+++ /dev/null
@@ -1,89 +0,0 @@
-#N canvas 438 239 531 379 10;
-#X msg 50 22 create 2 1;
-#X msg 69 64 train-on-file train-xor.txt;
-#X obj 22 306 nbx 5 14 -1e+037 1e+037 0 0 empty empty output 0 -6 0
-10 -262144 -1 -1 0 256;
-#X msg 117 225 0 0;
-#X msg 152 226 0 1;
-#X msg 191 227 1 0;
-#X msg 228 227 1 1;
-#X text 118 262 once saved you can load your nn at load time using
-passing the filename as argument;
-#X msg 111 167 save xor.net;
-#N canvas 180 57 553 390 train 0;
-#X obj 43 283 outlet;
-#X msg 46 17 train;
-#X obj 168 137 tgl 15 0 empty empty in1 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 205 137 tgl 15 0 empty empty in2 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 246 138 tgl 15 0 empty empty out 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 113 137 bng 15 250 50 0 empty empty train! 0 -6 0 8 -262144
--1 -1;
-#X obj 115 160 pack s f f f;
-#X obj 114 181 unpack s f f f;
-#X obj 136 202 pack f f f;
-#X msg 153 265 run;
-#N canvas 0 0 534 398 auto 0;
-#X obj 210 333 outlet;
-#X text 68 37 auto train OR;
-#X obj 193 35 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 194 63 metro 10;
-#X msg 126 194 0 0 0;
-#X msg 169 194 1 0 1;
-#X msg 212 196 0 1 1;
-#X msg 255 196 1 1 1;
-#X obj 191 124 select 0 1 2 3;
-#X obj 193 96 random 4;
-#X connect 2 0 3 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 4 0;
-#X connect 8 1 5 0;
-#X connect 8 2 6 0;
-#X connect 8 3 7 0;
-#X connect 9 0 8 0;
-#X restore 54 198 pd auto;
-#X text 89 15 1- set train mode;
-#X text 145 108 2- set inputs \, expected output and click "train!"
-;
-#X text 284 135 3- repeat at will;
-#X text 190 263 4- when ready set running mode again;
-#X text 211 176 NOTE: look at the second outlet to know the current
-mse after each training pattern;
-#X connect 1 0 0 0;
-#X connect 2 0 6 1;
-#X connect 3 0 6 2;
-#X connect 4 0 6 3;
-#X connect 5 0 6 0;
-#X connect 6 0 7 0;
-#X connect 7 1 8 0;
-#X connect 7 2 8 1;
-#X connect 7 3 8 2;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X restore 95 104 pd train the net;
-#X text 127 21 1- create the net with 2 ins and 1 out;
-#X text 248 63 2a -train it using a train file;
-#X text 201 99 2b- or train it on-the-fly;
-#X text 193 165 3- set the filename and save it;
-#X text 119 206 4- use the net passing a list of floats;
-#X obj 89 305 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 52 259 ann_mlp;
-#X connect 0 0 16 0;
-#X connect 1 0 16 0;
-#X connect 3 0 16 0;
-#X connect 4 0 16 0;
-#X connect 5 0 16 0;
-#X connect 6 0 16 0;
-#X connect 8 0 16 0;
-#X connect 9 0 16 0;
-#X connect 16 0 2 0;
-#X connect 16 1 15 0;
diff --git a/externals/ann/examples/ann_mlp_example2/README.txt b/externals/ann/examples/ann_mlp_example2/README.txt
deleted file mode 100644
index d32d32dfdef95a2f596a1c80f2afc653056b4040..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example2/README.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-example 2: a more complex use of ann_mlp
-
-GEM and pmpd are needed to run this example
-
-start example2.pd
-
-start GEM rendering. 
-see how the cursor is locked to the great red ball 
-and how you can push the 6 small balls.
-each small ball has associated a sine wave
-its volume = its velocity
-
-if you want to train the net using different meanings from mine
-you can write a testfile or train the net on the fly or both 
-(train on file then refine on the fly)
-
-training on the fly is simpler
-
-training is a bit tricky but might be more efficient (less error in the nn)
-
-to write a testfile:
-1)toggle ON in [pd write trainfile]
-2)record a list of patterns
-3)toggle OFF when you are ready
-4)write to a file
-5)edit the file adding a line with 3 integers
-6)change training parameters (from the defaul to more flexible ones)
-I now suggest to lower pd's process priority to normal 
-because the training process blocks pd and may slow down your computer
-7) start trainign from file. this will take a long time, 
-wait for the message in console for the training to be completed
-8) now you can activate the metro and run the net and see how it responds.
diff --git a/externals/ann/examples/ann_mlp_example2/cellulaSuono.pd b/externals/ann/examples/ann_mlp_example2/cellulaSuono.pd
deleted file mode 100644
index 1d8b8065d7b06367c9f48a52f6f02257af27a942..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example2/cellulaSuono.pd
+++ /dev/null
@@ -1,195 +0,0 @@
-#N canvas 139 46 648 666 10;
-#X msg 36 169 setXY \$1 \$2;
-#X obj 36 22 loadbang;
-#X obj 36 144 pack f f;
-#X obj 36 46 t b b;
-#X obj 57 246 gemhead;
-#X obj 57 269 translateXYZ;
-#X obj 46 219 unpack s f f;
-#X obj 143 24 r reset_masse;
-#X msg 36 391 setX \$1 \, setY \$2;
-#X obj 36 70 random 20;
-#X obj 36 116 / 4;
-#X obj 102 69 random 20;
-#X obj 102 115 / 4;
-#X obj 36 93 - 10;
-#X obj 102 91 - 10;
-#X obj 294 353 r link;
-#X obj 36 195 masse2D masse 100;
-#X obj 205 193 unpack s f f f;
-#X obj 189 219 unpack s f f f;
-#X obj 35 499 iCircle2D masse 0 0 1e-006 0.8 0 0 -0.05;
-#X obj 57 302 color 0.5 0 0;
-#N canvas 0 0 747 605 build 0;
-#X obj 137 30 inlet;
-#X obj 143 202 outlet;
-#X obj 144 168 pack f f f;
-#X obj 243 65 t b;
-#X msg 243 91 0;
-#X text 41 246 if input is near 0 it is a low note then i give dark
-color \, if near 1 it is a high one then give bright red color;
-#X obj 102 94 * 0.6;
-#X obj 101 123 + 0.4;
-#X obj 193 93 * -0.7;
-#X obj 193 115 + 0.7;
-#X connect 0 0 3 0;
-#X connect 0 0 6 0;
-#X connect 0 0 8 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 2 2;
-#X connect 6 0 7 0;
-#X connect 7 0 2 0;
-#X connect 8 0 9 0;
-#X connect 9 0 2 1;
-#X restore 232 306 pd build color;
-#N canvas 444 28 999 679 sound 0;
-#X obj 77 43 inlet;
-#X obj 145 45 inlet;
-#X obj 220 44 inlet;
-#X obj 96 403 stereo;
-#X obj 249 300 osc~;
-#X obj 272 201 loadbang;
-#X obj 180 346 *~;
-#X msg 179 213 \$1 5;
-#X text 41 17 todo: invece di usare un sinusoide casuale usare un campione
-;
-#X obj 179 189 clip 0 1;
-#X obj 95 454 throw~ mainL;
-#X obj 178 454 throw~ mainR;
-#X obj 94 260 + 4;
-#X obj 94 281 / 8;
-#X obj 94 302 clip 0 1;
-#X obj 249 279 * 55;
-#X obj 179 238 line;
-#X obj 272 228 random 100;
-#X obj 272 251 tabread armoniche_caso;
-#X obj 309 456 outlet;
-#X text 387 233 weightened random values;
-#X text 385 222 which harmonic am I?;
-#X text 292 280 <-- base frequency = A;
-#X text 376 337 normalized 0-1;
-#X msg 351 186 bang;
-#X obj 309 431 clip 0 1;
-#X obj 320 386 expr sqrt($f1);
-#X obj 333 338 / 50;
-#X obj 354 143 r reset_masse;
-#X text 32 375 TODO: quadriphony;
-#X obj 184 100 - 0.001;
-#X obj 297 41 inlet;
-#X obj 249 113 sel 1 0;
-#X obj 249 94 f;
-#X obj 249 75 bang;
-#X obj 249 132 bang;
-#X obj 216 153 f;
-#X connect 0 0 12 0;
-#X connect 2 0 30 0;
-#X connect 2 0 34 0;
-#X connect 3 0 10 0;
-#X connect 3 1 11 0;
-#X connect 4 0 6 0;
-#X connect 5 0 17 0;
-#X connect 6 0 3 0;
-#X connect 7 0 16 0;
-#X connect 9 0 7 0;
-#X connect 12 0 13 0;
-#X connect 13 0 14 0;
-#X connect 14 0 3 1;
-#X connect 15 0 4 0;
-#X connect 16 0 6 1;
-#X connect 17 0 18 0;
-#X connect 18 0 15 0;
-#X connect 18 0 27 0;
-#X connect 24 0 17 0;
-#X connect 25 0 19 0;
-#X connect 26 0 25 0;
-#X connect 27 0 26 0;
-#X connect 28 0 24 0;
-#X connect 30 0 36 1;
-#X connect 31 0 33 1;
-#X connect 32 0 35 0;
-#X connect 33 0 32 0;
-#X connect 34 0 33 0;
-#X connect 35 0 36 0;
-#X connect 36 0 9 0;
-#X restore 232 285 pd sound;
-#X obj 57 339 sphere 0.3;
-#X text 294 285 make saound;
-#X text 330 304 color the cell;
-#X obj 414 99 r \$1-deactivate;
-#X obj 320 97 r \$1-activate;
-#X msg 321 131 1;
-#X msg 413 133 0;
-#X obj 327 406 sel 1 0;
-#X obj 327 380 f;
-#X obj 326 426 bang;
-#X obj 368 66 loadbang;
-#X obj 186 84 r \$1-posx;
-#X obj 228 103 r \$1-posy;
-#X obj 186 132 pack f f;
-#X obj 49 467 iCircle2D masse 0 0 1e-006 0.5 0 0 1;
-#X obj 429 284 s \$1-X;
-#X obj 509 284 s \$1-Y;
-#X obj 448 404 s \$1-Velo;
-#X obj 429 245 / 4;
-#X obj 429 264 clip -1 1;
-#X text 420 225 scale to [-1 \, 1] and send;
-#X obj 509 245 / 4;
-#X obj 509 264 clip -1 1;
-#X text 409 340 scale to [0 \, 5] and send;
-#X obj 448 360 * 50;
-#X obj 448 383 clip 0 5;
-#X connect 0 0 16 0;
-#X connect 1 0 3 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 3 1 11 0;
-#X connect 4 0 5 0;
-#X connect 5 0 20 0;
-#X connect 6 1 5 1;
-#X connect 6 2 5 2;
-#X connect 7 0 3 0;
-#X connect 8 0 19 0;
-#X connect 8 0 37 0;
-#X connect 9 0 13 0;
-#X connect 10 0 2 0;
-#X connect 11 0 14 0;
-#X connect 12 0 2 1;
-#X connect 13 0 10 0;
-#X connect 14 0 12 0;
-#X connect 15 0 31 0;
-#X connect 16 0 6 0;
-#X connect 16 0 8 0;
-#X connect 16 0 18 0;
-#X connect 16 2 17 0;
-#X connect 17 3 22 2;
-#X connect 17 3 47 0;
-#X connect 18 1 22 0;
-#X connect 18 1 41 0;
-#X connect 18 2 22 1;
-#X connect 18 2 44 0;
-#X connect 20 0 23 0;
-#X connect 21 0 20 1;
-#X connect 22 0 21 0;
-#X connect 26 0 29 0;
-#X connect 27 0 28 0;
-#X connect 28 0 4 0;
-#X connect 28 0 31 1;
-#X connect 28 0 22 3;
-#X connect 29 0 4 0;
-#X connect 29 0 31 1;
-#X connect 29 0 22 3;
-#X connect 30 0 32 0;
-#X connect 31 0 30 0;
-#X connect 32 0 19 0;
-#X connect 32 0 37 0;
-#X connect 33 0 28 0;
-#X connect 34 0 36 0;
-#X connect 35 0 36 1;
-#X connect 36 0 0 0;
-#X connect 41 0 42 0;
-#X connect 42 0 38 0;
-#X connect 44 0 45 0;
-#X connect 45 0 39 0;
-#X connect 47 0 48 0;
-#X connect 48 0 40 0;
diff --git a/externals/ann/examples/ann_mlp_example2/complex.net b/externals/ann/examples/ann_mlp_example2/complex.net
deleted file mode 100644
index c3af274b3a737c108192acb3e735f8ad6c2eac37..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example2/complex.net
+++ /dev/null
@@ -1,7 +0,0 @@
-FANN_FLO_1.1
-3 0.700000 1.000000 0 5 5 5.00000000000000000000e-001 5.00000000000000000000e-001
-21 4 5 
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
-21 21 21 0 
-4 4 4 4 0 
-(0 1.25349550000000000000e+007) (1 -3.52599375000000000000e+006) (2 6.53671600000000000000e+006) (3 2.00417740000000000000e+007) (4 7.30595800000000000000e+006) (5 1.43338820000000000000e+007) (6 -1.64091900000000000000e+007) (7 2.72516540000000000000e+007) (8 8.50143700000000000000e+006) (9 1.94773520000000000000e+007) (10 1.37618080000000000000e+007) (11 9.89361400000000000000e+006) (12 -1.62668140000000000000e+007) (13 1.19877080000000000000e+007) (14 1.38944980000000000000e+007) (15 1.55818800000000000000e+007) (16 -4.50917906250000000000e+005) (17 1.43993210000000000000e+007) (18 1.17652580000000000000e+007) (19 -8.81434000000000000000e+006) (20 -6.01233154296875000000e+002) (0 9.62663600000000000000e+006) (1 -1.60156980000000000000e+007) (2 3.24279360000000000000e+007) (3 2.48126960000000000000e+007) (4 -3.12803475000000000000e+006) (5 3.24320160000000000000e+007) (6 2.56624260000000000000e+007) (7 -2.17010500000000000000e+006) (8 3.24311700000000000000e+007) (9 1.77973300000000000000e+006) (10 7.12998450000000000000e+006) (11 3.24320600000000000000e+007) (12 -6.82372550000000000000e+006) (13 1.10809970000000000000e+007) (14 3.24223120000000000000e+007) (15 1.30904130000000000000e+007) (16 2.12644620000000000000e+007) (17 3.24279100000000000000e+007) (18 3.88056600000000000000e+006) (19 3.25780950000000000000e+006) (20 5.93454052734375000000e+003) (0 -1.02708820000000000000e+007) (1 1.92679760000000000000e+007) (2 2.48948700000000000000e+007) (3 -2.26269800000000000000e+007) (4 1.61687180000000000000e+007) (5 2.51848860000000000000e+007) (6 -2.32199250000000000000e+006) (7 1.89744400000000000000e+007) (8 2.57103520000000000000e+007) (9 -1.62862460000000000000e+007) (10 -7.64894750000000000000e+005) (11 2.58289860000000000000e+007) (12 -1.44739700000000000000e+007) (13 9.75394900000000000000e+006) (14 2.50721400000000000000e+007) (15 -1.48601670000000000000e+007) (16 9.29974700000000000000e+006) (17 2.55408640000000000000e+007) (18 6.27725250000000000000e+005) (19 3.43336175000000000000e+006) (20 -6.19121948242187500000e+002) (21 -2.33448815345764160000e+000) (22 -2.11909532546997070000e-001) (23 1.17793101817369460000e-002) (24 2.53461837768554690000e+000) (21 2.28352487087249760000e-001) (22 3.55203837156295780000e-001) (23 -1.76965391635894780000e+000) (24 1.18609762191772460000e+000) (21 8.16280126571655270000e-001) (22 1.02861607074737550000e+000) (23 1.21739065647125240000e+000) (24 5.82793474197387700000e-001) (21 -8.56908917427062990000e-001) (22 4.63776290416717530000e-001) (23 -1.62467598915100100000e+000) (24 2.01780867576599120000e+000) 
diff --git a/externals/ann/examples/ann_mlp_example2/complex.txt b/externals/ann/examples/ann_mlp_example2/complex.txt
deleted file mode 100644
index 77bafa669d823d8617ec8db3234ba63e1a96a4fc..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example2/complex.txt
+++ /dev/null
@@ -1,513 +0,0 @@
-255 20 4
-0.749041 0.0896327 0.113853 0.654362 0.185624 0.237424 0.69533 0.298684 0.0945817 0.787286 0.213076 0.20047 0.63797 0.0635322 0.115899 0.759821 -0.061697 0.0982502 3.712 0.336
-0 1 0 0
-0.75188 0.072922 0.175658 0.677723 0.167327 0.0634832 0.725933 0.290761 0.248129 0.797258 0.197974 0.257231 0.635356 0.0615053 0.108949 0.770538 -0.0381485 0.230128 3.712 0.336
-0 1 0 0
-0.753215 0.0884344 0.0793564 0.680155 0.184628 0.238476 0.723468 0.298087 0.279238 0.798776 0.197794 0.0878259 0.637804 0.045632 0.194963 0.779118 -0.0401013 0.0206749 3.712 0.336
-0 1 0 0
-0.765012 0.0987934 0.485579 0.661476 0.190576 0.107862 0.704381 0.305296 0.140133 0.774796 0.214004 0.0806812 0.660061 0.0476808 0.106845 0.773078 -0.0239579 0.166355 3.712 0.32
-0 1 0 0
-0.737361 0.11595 0.096564 0.633068 0.19146 0.251778 0.673542 0.298082 0.109277 0.780341 0.235756 0.167158 0.607566 0.0423194 0.659455 0.714047 -0.0210928 0.227156 3.68 -0.32
-0 1 0 0
-0.728877 0.11395 0.152865 0.616983 0.163505 0.201956 0.65392 0.29779 0.185762 0.756921 0.231865 0.248282 0.531612 0.0691205 0.35364 0.677123 -0.0191748 0.244254 3.248 -0.912
-0 1 0 0
-0.724227 0.0846584 0.152249 0.614024 0.150106 0.0600391 0.624462 0.267903 0.341607 0.725398 0.206856 0.324754 0.503408 0.0987902 0.166635 0.636188 0.0130915 0.419706 2.32 -1.04
-0 1 0 0
-0.717784 0.0608157 0.255306 0.619539 0.129509 0.0605104 0.588228 0.238892 0.281842 0.71156 0.195311 0.0858908 0.497135 0.115492 0.202975 0.564494 0.0200776 0.498901 1.328 -1.056
-0 1 0 0
-0.697403 0.032007 0.201005 0.595866 0.0956293 0.238033 0.567716 0.221569 0.0628842 0.695503 0.198436 0.261058 0.48666 0.138572 0.245613 0.518219 -0.00169279 0.210619 1.056 -1.504
-0 1 0 0
-0.679478 0.0136008 0.21478 0.581874 0.0898834 0.181479 0.548605 0.203123 0.328808 0.672067 0.155186 0.329023 0.46584 0.123395 0.0138875 0.482785 0.014843 0.17054 1.888 -1.504
-0 1 0 0
-0.649936 0.00340794 0.321075 0.544692 0.0774113 0.197586 0.545958 0.195162 0.144501 0.678604 0.118775 0.0935182 0.43064 0.116575 0.239352 0.458632 -0.0140776 0.200957 2.624 -1.584
-0 1 0 0
-0.610324 -0.0210108 0.19351 0.53235 0.0570844 0.112039 0.558602 0.172185 0.126602 0.63726 0.0957648 0.370569 0.415407 0.0903717 0.0623111 0.440429 -0.0217824 0.188029 2.752 -1.696
-0 1 0 0
-0.580734 -0.059172 0.293417 0.518425 0.0404438 0.151336 0.538378 0.159213 0.247988 0.632731 0.0545019 0.249969 0.396412 0.0929845 0.126035 0.436237 -0.0498201 0.105558 2.56 -1.968
-0 1 0 0
-0.549332 -0.0851357 0.200404 0.499852 0.0234589 0.233268 0.522412 0.135146 0.0685323 0.616499 0.0114045 0.307166 0.40027 0.0769862 0.110524 0.432076 -0.0754374 0.323472 2.4 -2
-0 1 0 0
-0.528134 -0.13001 0.238938 0.491263 -0.013595 0.180583 0.505046 0.11472 0.266757 0.614132 -0.0212973 0.23149 0.400948 0.0693484 0.104101 0.411192 -0.099225 0.128791 1.968 -2.272
-0 1 0 0
-0.51754 -0.144531 0.0863679 0.478679 -0.0355039 0.180398 0.516709 0.0772873 0.145967 0.600831 -0.0641163 0.250968 0.387946 0.035722 0.277417 0.397027 -0.111365 0.162249 1.936 -2.784
-0 1 0 0
-0.49081 -0.181737 0.275229 0.481108 -0.0630795 0.231821 0.523131 0.0534381 0.187083 0.598573 -0.0834581 0.16881 0.381838 -1.97579e-005 0.224494 0.384891 -0.126232 0.0103272 2.08 -2.976
-0 1 0 0
-0.472035 -0.209896 0.19943 0.477533 -0.0969937 0.263594 0.524599 0.0143426 0.189489 0.601161 -0.104088 0.10553 0.383311 -0.0241135 0.207984 0.370479 -0.14749 0.156837 2.336 -3.2
-0 1 0 0
-0.455688 -0.249708 0.302194 0.474325 -0.135586 0.239108 0.523684 -0.0197123 0.193743 0.591819 -0.114845 0.166392 0.396339 -0.0436506 0.161846 0.365226 -0.163639 0.072714 2.64 -3.216
-0 1 0 0
-0.421097 -0.280627 0.211942 0.486369 -0.170543 0.282061 0.520926 -0.048991 0.189266 0.605854 -0.129972 0.0832249 0.397826 -0.0748305 0.18137 0.362296 -0.181839 0.12274 3.008 -3.216
-0 1 0 0
-0.419248 -0.306329 0.0650636 0.471421 -0.195656 0.0798919 0.525201 -0.0833181 0.27574 0.607469 -0.163347 0.269247 0.405877 -0.0971638 0.220924 0.349434 -0.202806 0.153315 3.216 -2.944
-0 1 0 0
-0.428219 -0.322598 0.233916 0.472787 -0.21124 0.144816 0.523932 -0.105966 0.0954591 0.597193 -0.218044 0.335494 0.400375 -0.115387 0.159631 0.352926 -0.225807 0.0892543 3.12 -2.592
-0 1 0 0
-0.430761 -0.348258 0.131623 0.469202 -0.234241 0.0787241 0.535595 -0.135357 0.323614 0.585377 -0.251373 0.181356 0.409355 -0.13528 0.166578 0.356397 -0.250857 0.201727 2.848 -2.08
-0 1 0 0
-0.424159 -0.371949 0.232733 0.478675 -0.264496 0.13183 0.54916 -0.167503 0.122521 0.601403 -0.280766 0.171813 0.411255 -0.166539 0.278515 0.355352 -0.270673 0.154787 3.312 -0.944
-0 1 0 0
-0.422577 -0.400409 0.217017 0.486788 -0.29841 0.114008 0.550913 -0.192086 0.207964 0.608436 -0.295173 0.140376 0.440097 -0.183937 0.178442 0.369414 -0.288146 0.042512 3.136 -0.144
-0 1 0 0
-0.43172 -0.408991 0.101839 0.502929 -0.313225 0.100843 0.56385 -0.208858 0.0943393 0.627858 -0.317972 0.136136 0.44517 -0.204925 0.177418 0.379353 -0.310871 0.205612 2.816 0.128
-0 1 0 0
-0.455619 -0.432075 0.127595 0.510124 -0.324926 0.0491225 0.581341 -0.221904 0.0776561 0.63153 -0.332968 0.145098 0.462014 -0.212859 0.167194 0.391683 -0.317819 0.133968 2.368 0.48
-0 1 0 0
-0.465867 -0.42748 0.0740544 0.52228 -0.324247 0.0893203 0.596942 -0.231987 0.0982002 0.639809 -0.34747 0.101301 0.469128 -0.217499 0.101832 0.403133 -0.327137 0.110067 2.24 0.576
-0 1 0 0
-0.468544 -0.428579 0.078357 0.531203 -0.330278 0.0432288 0.603756 -0.236201 0.033095 0.649596 -0.346451 0.10444 0.487082 -0.215744 0.177141 0.412446 -0.319018 0.121599 2.592 0.384
-0 1 0 0
-0.461388 -0.424454 0.135835 0.544249 -0.330317 0.0529295 0.618636 -0.228561 0.0215008 0.664482 -0.341004 0.0818479 0.494279 -0.218824 0.162847 0.421975 -0.309383 0.00589943 2.88 0.208
-0 1 0 0
-0.475168 -0.417971 0.0857406 0.551095 -0.32275 0.107953 0.627646 -0.226994 0.126518 0.673049 -0.33707 0.0697097 0.502703 -0.208722 0.137732 0.430912 -0.298714 0.10425 2.944 0.0480001
-0 1 0 0
-0.379876 -0.506471 4.57491 0.255585 -0.464024 5 0.412348 -0.81901 5 0.806573 -0.514939 3.23281 0.358654 -0.170221 1.93021 0.375444 -0.285591 1.54381 2 -1.712
-0 1 1 0
--0.335896 -0.98429 4.15899 -0.591686 -0.796936 4.99477 -0.0130248 -0.620207 5 0.831339 -0.910623 2.57204 0.0669678 -0.102444 1.57382 0.141217 -0.207767 1.43518 0.768 -2.096
-0 0 1 0
--0.958352 -0.534 3.8405 -0.906127 -0.858887 4.00971 -0.54065 0.00521031 4.68184 0.568775 -0.743912 2.34541 -0.466726 0.309155 5 -0.79535 0.0781092 5 -1.36 -0.576
-0 0 1 0
--0.631305 -0.111059 3.8042 -0.293365 -0.596161 4.98103 -0.960928 0.567395 3.34724 0.330679 -0.463645 2.10316 -0.983122 1 3.04841 -0.539326 0.417833 5 -0.128 -2.72
-0 0 1 0
--0.161009 0.264332 3.30647 0.173372 0.0133566 5 -0.638684 0.960677 2.47737 -0.0476906 0.25746 5 -0.332221 0.467455 5 0.617516 0.704529 5 -0.416 0.096
-0 0 1 0
-0.315078 0.685117 5 0.716085 0.678118 4.84706 -0.30857 0.557489 3.0371 -0.583948 1 4.43053 0.574821 0.0291895 5 0.806443 0.920625 5 1.552 1.376
-0 0 1 0
-0.706587 0.817085 4.57632 0.872341 0.872575 3.94133 -0.0602284 0.210329 1.61892 -0.961249 0.165286 5 0.857852 -0.315692 5 0.00743722 0.744271 4.67193 0.144 0.816
-0 0 1 0
-0.911053 0.149851 3.97041 0.483807 0.418868 3.2484 -0.704081 -0.169851 4.34906 -0.591704 -0.653732 5 0.0717454 -0.625311 4.65172 -0.775875 0.526547 5 -2.176 2.432
-0 0 1 0
-0.643288 -0.424464 3.6059 0.1554 0.0569643 1.92912 -0.852382 -0.520134 3.64324 -0.255687 -0.860341 4.1672 -0.595202 -0.887116 4.05571 -0.729197 0.284827 4.36582 0.624 -0.256
-0 0 1 0
-0.405801 -0.923027 2.82082 -0.224049 0.261665 2.59694 -0.381991 -0.826296 3.17699 0.0379015 -0.288151 3.65113 -0.940265 -0.796949 2.76303 -0.0871998 0.0742855 3.84957 1.088 -2.448
-0 0 1 0
-0.189016 -0.691037 2.60808 -0.581358 0.462809 2.23038 0.0394303 -0.830895 2.70929 0.23104 0.378297 5 -0.45352 -0.606016 2.88434 0.625126 -0.0717008 5 1.344 0.656
-0 0 1 0
-0.0536088 -0.374848 1.08964 -0.88071 0.624741 1.92074 0.397624 -0.609291 2.39256 0.241577 1 3.02513 -0.0463727 -0.463703 1.58213 0.856216 -0.18878 4.21559 0.128 -1.52
-0 0 1 0
-0.655496 0.0290254 4.51242 -0.793989 0.763503 1.58721 0.709319 -0.413322 2.08918 0.253252 0.270734 4.32264 -0.282777 -1 1.90224 0.212046 -0.294026 3.70215 1.696 -1.84
-0 0 1 0
-0.877843 0.432613 3.78353 -0.574061 0.88803 1.33951 0.920831 -0.23641 1.15551 0.262124 -0.418207 3.80786 -0.580636 -0.400177 4.2271 -0.592193 -0.71309 5 -0.608 -1.12
-0 0 1 0
-0.407441 0.7725 3.28657 -0.383144 0.832039 1.248 0.707994 -0.087539 1.52112 0.267454 -0.975969 1.56898 -0.829432 0.200516 3.70741 -0.873174 -0.814918 5 0.912 -1.488
-0 0 1 0
--0.00449232 0.875028 2.82566 -0.211294 0.74313 1.09975 0.510337 0.0420992 1.35194 0.267976 -0.612289 2.74725 -0.848834 0.727461 3.22481 -0.193923 -0.258419 5 -0.16 -0.928
-0 0 1 0
--0.381424 0.683909 2.28491 -0.0416807 0.601343 1.62261 0.330727 0.161647 1.19186 0.265208 -0.175344 2.42085 -0.660506 0.851575 2.67735 -0.106577 0.83561 5 -1.696 -0.224
-0 0 1 0
--0.706742 0.473785 2.74836 0.15469 0.443791 1.44281 0.177216 0.265025 1.11938 0.257202 0.200409 2.08526 -0.501765 0.552772 1.47223 -0.12686 0.594268 5 -2.464 -1.904
-0 0 1 0
--0.921993 0.184156 1.94217 0.219979 0.325261 0.78742 0.0223812 0.382907 1.07732 0.373289 0.474275 2.05376 -0.34021 0.391683 1.29664 -0.145683 -0.283675 5 -2.416 -2
-0 0 1 0
--0.665098 -0.0842602 2.09328 0.14643 0.21991 0.735185 -0.107977 0.489467 0.920939 0.592516 0.71051 1.76845 -0.198275 0.24349 1.1207 -0.166994 -1 1.23722 -2.416 -2
-0 0 1 0
--0.441751 -0.319137 1.85927 0.0793515 0.124666 0.685654 -0.221246 0.577336 0.821476 0.776385 0.90729 1.23876 -0.0805597 0.114356 0.997888 -0.19219 -0.501454 3.60501 -2.608 -2.384
-0 0 1 0
--0.250079 -0.532336 1.63002 0.0755967 0.0609906 0.454123 -0.323232 0.655236 0.744558 0.904405 0.788221 0.98084 -0.0373147 -0.0234125 1.00696 -0.217138 0.0533918 3.14119 -2.608 -2.384
-0 0 1 0
--0.0824097 -0.726689 1.39069 0.136028 0.0263489 0.396875 -0.417006 0.728108 0.647484 0.779422 0.636531 1.11109 -0.0702506 -0.177105 0.871225 -0.241095 0.546979 2.69954 -2.592 -2.384
-0 0 1 0
-0.0504166 -0.887418 1.09942 0.187234 -0.00838957 0.35107 -0.496754 0.78787 0.572932 0.666583 0.507144 0.971391 -0.0991376 -0.308126 0.765231 -0.265523 0.943597 1.22942 -2.512 -2.384
-0 0 1 0
-0.160695 -0.823371 0.963004 0.228601 -0.040272 0.276345 -0.568697 0.837496 0.475732 0.561913 0.39215 0.901992 -0.128434 -0.422779 0.68122 -0.291667 0.696606 1.91403 -2.512 -2.384
-0 0 1 0
-0.257913 -0.708683 0.829121 0.259741 -0.0707029 0.23908 -0.633531 0.876723 0.422109 0.465385 0.28722 0.800005 -0.157415 -0.526774 0.588711 -0.320191 0.396513 1.65842 -2.544 -2.384
-0 0 1 0
-0.338187 -0.610583 0.721503 0.284184 -0.0990459 0.216807 -0.689435 0.864292 0.358797 0.382838 0.191882 0.731755 -0.182035 -0.615111 0.519644 -0.343591 0.140266 1.47715 -2.544 -2.384
-0 0 1 0
-0.405042 -0.522885 0.610019 0.306064 -0.125697 0.195132 -0.737839 0.835895 0.31676 0.311381 0.102966 0.652937 -0.20853 -0.68931 0.453943 -0.363122 -0.0861568 1.29676 -2.624 -2.384
-0 0 1 0
-0.45996 -0.44622 0.507831 0.323035 -0.154841 0.20406 -0.782326 0.808606 0.289623 0.246238 0.0231291 0.569636 -0.240009 -0.753916 0.374899 -0.381595 -0.293667 1.17114 -2.656 -2.432
-0 0 0 0
-0.503885 -0.384076 0.42279 0.335337 -0.182016 0.159536 -0.821357 0.785502 0.254828 0.186763 -0.0476682 0.536218 -0.267491 -0.803994 0.317721 -0.399386 -0.475112 1.05242 -2.768 -2.512
-0 0 0 0
-0.536469 -0.330133 0.366051 0.343683 -0.205212 0.143704 -0.853909 0.764017 0.221307 0.130204 -0.1142 0.514872 -0.293972 -0.843615 0.271142 -0.421036 -0.636342 0.932086 -2.752 -2.512
-0 0 0 0
-0.563958 -0.280474 0.31336 0.348529 -0.222442 0.090122 -0.880881 0.741067 0.145435 0.0744073 -0.177777 0.471222 -0.319627 -0.877511 0.226642 -0.443284 -0.784985 0.840946 -2.704 -2.464
-0 0 0 0
-0.587402 -0.236652 0.272889 0.346256 -0.239583 0.112313 -0.860577 0.718895 0.188204 0.0225144 -0.231927 0.454415 -0.345957 -0.863887 0.152889 -0.466543 -0.899116 0.27131 -2.656 -2.464
-0 0 0 0
-0.604083 -0.198221 0.231166 0.338708 -0.25457 0.104823 -0.838787 0.696564 0.200438 -0.0285756 -0.280494 0.419685 -0.373705 -0.839602 0.304328 -0.490042 -0.807692 0.598428 -2.576 -2.432
-0 0 0 0
-0.613899 -0.163872 0.207778 0.328167 -0.269089 0.119777 -0.819906 0.670453 0.172784 -0.0806062 -0.326772 0.413966 -0.419639 -0.812706 0.378269 -0.500861 -0.715376 0.451656 -2.48 -2.336
-0 0 0 0
-0.620789 -0.135363 0.159132 0.314224 -0.284084 0.116598 -0.806612 0.64702 0.1604 -0.131921 -0.366491 0.380163 -0.465731 -0.804305 0.26639 -0.459693 -0.671347 0.460273 -2.464 -2.336
-0 0 0 0
-0.626237 -0.112438 0.125768 0.296027 -0.296237 0.133745 -0.79847 0.622665 0.146093 -0.18049 -0.402703 0.357772 -0.498823 -0.820381 0.211875 -0.42585 -0.618246 0.349672 -2.464 -2.336
-0 0 0 0
-0.629878 -0.0969861 0.0877299 0.276663 -0.308185 0.132474 -0.790925 0.599517 0.139115 -0.228963 -0.440657 0.349418 -0.534403 -0.826261 0.206034 -0.399178 -0.570684 0.301646 -2.464 -2.336
-0 0 0 0
-0.630933 -0.0852082 0.0470275 0.258861 -0.322672 0.15178 -0.784723 0.577047 0.141837 -0.280342 -0.479252 0.384918 -0.568999 -0.82852 0.208762 -0.374027 -0.525263 0.284613 -2.464 -2.336
-0 0 0 0
-0.635111 -0.0761877 0.0568706 0.236395 -0.337601 0.190237 -0.780523 0.554614 0.141567 -0.261137 -0.489886 0.154169 -0.599964 -0.824962 0.173178 -0.426234 -0.513661 0.357695 -2.464 -2.336
-0 0 0 0
-0.638377 -0.0687162 0.0316515 0.206372 -0.355663 0.212427 -0.777088 0.532314 0.124746 -0.241132 -0.49727 0.102209 -0.626476 -0.813903 0.172923 -0.461563 -0.501891 0.296763 -2.464 -2.336
-0 0 0 0
-0.637203 -0.0654573 0.0357414 0.174414 -0.368113 0.202608 -0.776999 0.513726 0.109513 -0.227645 -0.505114 0.0801233 -0.651253 -0.800931 0.165057 -0.436446 -0.465969 0.239986 -2.464 -2.336
-0 0 0 0
-0.630912 -0.0659618 0.0504923 0.144156 -0.379026 0.200669 -0.775806 0.494476 0.131368 -0.219239 -0.512476 0.0606486 -0.676326 -0.786126 0.172747 -0.41527 -0.43625 0.196499 -2.464 -2.336
-0 0 0 0
-0.624115 -0.0684156 0.0352208 0.109383 -0.383893 0.220875 -0.77358 0.472523 0.11831 -0.214026 -0.515935 0.023471 -0.69426 -0.765728 0.157365 -0.401442 -0.412274 0.133173 -2.464 -2.336
-0 0 0 0
-0.617649 -0.0700315 0.0272526 0.0721575 -0.388278 0.23254 -0.771847 0.453749 0.127716 -0.216721 -0.520886 0.0487614 -0.703601 -0.740535 0.161417 -0.393703 -0.397562 0.0723551 -2.448 -2.336
-0 0 0 0
-0.611619 -0.0692032 0.0441842 0.0347844 -0.394187 0.219785 -0.770044 0.437407 0.0822712 -0.223892 -0.525298 0.0579946 -0.717355 -0.729005 0.152759 -0.391518 -0.387155 0.0452988 -2.448 -2.336
-0 0 0 0
-0.603245 -0.06481 0.0567297 -0.00203434 -0.400739 0.230192 -0.769699 0.421097 0.0869137 -0.233715 -0.529271 0.0689865 -0.73884 -0.734896 0.120256 -0.392132 -0.381807 0.0277983 -2.448 -2.336
-0 0 0 0
-0.595989 -0.0603759 0.0560129 -0.0419145 -0.41073 0.248347 -0.773629 0.405778 0.0865163 -0.245606 -0.533842 0.0833351 -0.756198 -0.733825 0.0903691 -0.395304 -0.380385 0.0331215 -2.448 -2.336
-0 0 0 0
-0.584594 -0.0594666 0.0769258 -0.0814158 -0.420408 0.250209 -0.775067 0.390704 0.0978259 -0.258419 -0.542534 0.1046 -0.770096 -0.730059 0.0713607 -0.404427 -0.381004 0.0672107 -2.448 -2.336
-1 0 0 0
-0.570352 -0.0597812 0.104526 -0.124892 -0.428991 0.279906 -0.773341 0.371657 0.12836 -0.27397 -0.551121 0.101135 -0.777411 -0.722824 0.0654882 -0.418035 -0.381119 0.0887918 -2.528 -2.336
-1 0 0 0
-0.553149 -0.0598284 0.107367 -0.172128 -0.442915 0.325859 -0.76795 0.352595 0.109092 -0.286927 -0.553612 0.0634235 -0.781816 -0.711571 0.0622111 -0.435178 -0.381578 0.101497 -2.64 -2.336
-1 0 0 0
-0.536345 -0.0561239 0.113191 -0.229506 -0.4615 0.265522 -0.765726 0.336785 0.100066 -0.293867 -0.543992 0.147064 -0.822701 -0.741274 0.371089 -0.453451 -0.385261 0.131837 -2.816 -2.352
-1 0 0 0
-0.517296 -0.0515052 0.116045 -0.258792 -0.438909 0.219021 -0.769163 0.319012 0.102681 -0.334275 -0.573455 0.230906 -0.865116 -0.774276 0.281825 -0.475622 -0.393167 0.153913 -2.832 -2.352
-1 0 0 0
-0.498854 -0.0468244 0.113795 -0.296075 -0.438734 0.256098 -0.775642 0.303095 0.108849 -0.359982 -0.581869 0.115677 -0.872673 -0.801558 0.249659 -0.500882 -0.404465 0.189027 -2.864 -2.368
-1 0 0 0
-0.48118 -0.0449461 0.0962891 -0.342559 -0.461955 0.349925 -0.780703 0.285141 0.118684 -0.373082 -0.569822 0.121418 -0.842015 -0.825336 0.218505 -0.528844 -0.415951 0.17812 -2.944 -2.432
-1 0 0 0
-0.467518 -0.0448165 0.0710115 -0.384946 -0.450605 0.266683 -0.787631 0.266759 0.120758 -0.393166 -0.594893 0.20397 -0.810784 -0.841491 0.199122 -0.552675 -0.430643 0.177721 -3.008 -2.528
-1 0 0 0
-0.455792 -0.0431871 0.0732616 -0.435033 -0.453479 0.39803 -0.793816 0.248713 0.116989 -0.416333 -0.603613 0.1531 -0.781128 -0.850686 0.182012 -0.561617 -0.45404 0.154699 -3.056 -2.64
-1 0 0 0
-0.44767 -0.0413512 0.0381104 -0.456636 -0.47795 0.101392 -0.797628 0.232701 0.0980467 -0.446658 -0.585656 0.210911 -0.753059 -0.854528 0.166663 -0.593457 -0.479429 0.363579 -3.056 -2.72
-1 0 0 0
-0.441237 -0.0410319 0.0325263 -0.470946 -0.461632 0.16155 -0.802502 0.215706 0.10018 -0.480887 -0.604511 0.208501 -0.723318 -0.880027 0.237843 -0.628969 -0.510033 0.225396 -3.072 -2.8
-1 0 0 0
-0.437131 -0.0409093 0.0251846 -0.510186 -0.476622 0.380657 -0.80453 0.200534 0.0925972 -0.521891 -0.592118 0.356858 -0.685609 -0.878188 0.362944 -0.637045 -0.544484 0.236087 -3.136 -2.912
-1 0 0 0
-0.435101 -0.0440471 0.0322581 -0.566732 -0.479032 0.325064 -0.806937 0.184887 0.109081 -0.534077 -0.622658 0.237097 -0.634322 -0.862714 0.31327 -0.654858 -0.557861 0.18719 -3.168 -3.056
-1 0 0 0
-0.432986 -0.0531362 0.0655926 -0.609178 -0.484132 0.276807 -0.806909 0.166625 0.119197 -0.551154 -0.642463 0.199678 -0.592472 -0.838265 0.251652 -0.682006 -0.584873 0.199016 -3.184 -3.168
-1 0 0 0
-0.426799 -0.0656014 0.0830876 -0.644721 -0.508867 0.231904 -0.809401 0.1455 0.142457 -0.585995 -0.642424 0.0382502 -0.562685 -0.816676 0.199816 -0.696394 -0.620528 0.405644 -3.184 -3.296
-1 0 0 0
-0.417528 -0.0794103 0.109383 -0.668814 -0.556205 0.268838 -0.81082 0.121157 0.14574 -0.597704 -0.645861 0.163605 -0.545631 -0.784764 0.263913 -0.741388 -0.646819 0.318456 -3.184 -3.392
-1 0 0 0
-0.404551 -0.0933054 0.112776 -0.700095 -0.583529 0.28978 -0.811195 0.0983615 0.126907 -0.630926 -0.675223 0.447194 -0.530751 -0.746142 0.222007 -0.75927 -0.685308 0.192235 -3.152 -3.488
-1 0 0 0
-0.392534 -0.105864 0.0962648 -0.742655 -0.587611 0.198479 -0.813319 0.076126 0.131127 -0.650235 -0.706583 0.191416 -0.516635 -0.735094 0.0843976 -0.78501 -0.689873 0.292792 -2.992 -3.488
-1 0 0 1
-0.380913 -0.118427 0.0934547 -0.756832 -0.575453 0.0786523 -0.815888 0.0543128 0.131057 -0.645559 -0.715738 0.207151 -0.536642 -0.719775 0.105925 -0.817036 -0.692236 0.084344 -2.944 -3.472
-1 0 0 1
-0.368617 -0.133872 0.122271 -0.760579 -0.58993 0.137996 -0.818413 0.0329419 0.125629 -0.679025 -0.677038 0.361313 -0.529329 -0.703697 0.0974188 -0.817604 -0.691463 0.172739 -2.928 -3.472
-1 0 0 1
-0.35686 -0.152209 0.12515 -0.773833 -0.567823 0.181871 -0.81751 0.00953658 0.147395 -0.689383 -0.682078 0.182378 -0.54539 -0.688886 0.196573 -0.801261 -0.709734 0.0928637 -2.928 -3.472
-1 0 0 1
-0.346605 -0.166346 0.109757 -0.792255 -0.575657 0.0580845 -0.816336 -0.0169562 0.169838 -0.687456 -0.694128 0.281759 -0.565472 -0.678147 0.0913436 -0.800099 -0.681988 0.0547008 -2.928 -3.472
-1 0 0 1
-0.33484 -0.18032 0.110805 -0.79572 -0.562741 0.0531035 -0.816304 -0.0460606 0.177258 -0.685209 -0.694497 0.0585401 -0.571928 -0.672731 0.0780219 -0.829493 -0.701239 0.157252 -2.928 -3.472
-1 0 0 1
-0.321245 -0.19306 0.120203 -0.793401 -0.594458 0.228791 -0.816924 -0.0756115 0.185749 -0.716692 -0.682114 0.238986 -0.578568 -0.674286 0.119633 -0.830943 -0.697527 0.044133 -2.928 -3.472
-1 0 0 1
-0.305015 -0.206941 0.137356 -0.7956 -0.589371 0.050858 -0.816975 -0.10461 0.1743 -0.714359 -0.690814 0.257995 -0.599414 -0.680533 0.0760455 -0.841877 -0.727576 0.126776 -2.928 -3.472
-1 0 0 1
-0.288029 -0.221001 0.135093 -0.804 -0.60887 0.17097 -0.815065 -0.134186 0.161881 -0.721539 -0.703817 0.250127 -0.600098 -0.685916 0.11134 -0.847635 -0.738252 0.125942 -2.144 -3.552
-1 0 0 1
-0.273138 -0.23753 0.150212 -0.807632 -0.634641 0.119268 -0.811769 -0.163731 0.196074 -0.728781 -0.718642 0.171089 -0.596755 -0.688498 0.0338146 -0.847992 -0.743054 0.219417 -1.584 -2.64
-1 0 0 1
-0.254836 -0.258338 0.179484 -0.800771 -0.634384 0.205121 -0.807819 -0.195373 0.205534 -0.72568 -0.733778 0.072472 -0.607207 -0.69293 0.142237 -0.84183 -0.767651 0.0955124 -1.616 -2.048
-1 0 0 1
-0.235535 -0.280185 0.174244 -0.800034 -0.654333 0.0604532 -0.80487 -0.233609 0.223468 -0.716047 -0.752129 0.230054 -0.614558 -0.682287 0.161078 -0.834482 -0.767759 0.118807 -2 -1.776
-1 0 0 1
-0.21407 -0.301644 0.18363 -0.792351 -0.662682 0.162972 -0.799766 -0.267079 0.195626 -0.708155 -0.757808 0.137752 -0.622778 -0.67101 0.143203 -0.830826 -0.770219 0.129746 -2.064 -1.776
-1 0 0 1
-0.189585 -0.321743 0.206985 -0.761107 -0.645196 0.241926 -0.794562 -0.299888 0.194015 -0.705769 -0.761221 0.136784 -0.642257 -0.653327 0.214068 -0.827105 -0.781271 0.0491988 -1.984 -1.68
-1 0 0 1
-0.15948 -0.33931 0.211392 -0.762777 -0.65106 0.120806 -0.78669 -0.327479 0.15031 -0.69927 -0.744095 0.25438 -0.627442 -0.64067 0.109742 -0.813854 -0.76749 0.186209 -1.728 -1.68
-1 0 0 1
-0.129143 -0.357119 0.212441 -0.762772 -0.629429 0.252098 -0.775063 -0.347427 0.142167 -0.679249 -0.737544 0.0383521 -0.613497 -0.628214 0.164293 -0.797335 -0.749285 0.166321 -1.696 -1.68
-1 0 0 1
-0.10142 -0.374617 0.201469 -0.726568 -0.624742 0.0651845 -0.756953 -0.361024 0.15342 -0.661649 -0.716779 0.166499 -0.614782 -0.608391 0.311371 -0.787323 -0.725187 0.224827 -1.632 -1.664
-1 0 0 1
-0.0692654 -0.389383 0.216093 -0.708011 -0.594574 0.223646 -0.733436 -0.372696 0.165049 -0.652644 -0.711853 0.215549 -0.592343 -0.579567 0.0998114 -0.766825 -0.710215 0.165424 -1.776 -1.52
-1 0 0 1
-0.0363637 -0.401327 0.216846 -0.702005 -0.583231 0.229549 -0.708167 -0.381533 0.150126 -0.618258 -0.675797 0.192327 -0.571068 -0.573735 0.147674 -0.758207 -0.686911 0.123351 -1.696 -1.44
-1 0 0 1
--0.0007193 -0.410295 0.236778 -0.671327 -0.560385 0.170253 -0.683074 -0.394119 0.190722 -0.617639 -0.660786 0.17223 -0.559703 -0.546699 0.126393 -0.726571 -0.664993 0.259079 -1.664 -1.44
-1 0 0 1
--0.0406947 -0.417777 0.238891 -0.665801 -0.530048 0.125687 -0.651982 -0.423197 0.247293 -0.57919 -0.634875 0.153043 -0.534155 -0.525122 0.281078 -0.714573 -0.63662 0.282502 -1.664 -1.44
-1 0 0 1
--0.0779428 -0.422678 0.226888 -0.639015 -0.521307 0.24323 -0.603776 -0.405218 0.358369 -0.566389 -0.616805 0.18268 -0.526624 -0.488211 0.232057 -0.689359 -0.642821 0.233158 -1.664 -1.44
-1 0 0 1
--0.116634 -0.424447 0.245177 -0.64323 -0.503455 0.0745895 -0.585633 -0.378376 0.025567 -0.546987 -0.618919 0.262591 -0.525168 -0.503241 0.276484 -0.656433 -0.641895 0.0470962 -1.632 -1.44
-1 0 0 1
--0.160048 -0.42491 0.257964 -0.623158 -0.509271 0.247845 -0.596347 -0.394372 0.163533 -0.518091 -0.617458 0.154108 -0.503402 -0.474499 0.200642 -0.654837 -0.616967 0.178426 -1.472 -1.184
-1 0 0 1
--0.201997 -0.423774 0.257862 -0.5951 -0.499778 0.206483 -0.60592 -0.384749 0.0979675 -0.522438 -0.589451 0.164645 -0.46551 -0.478249 0.338091 -0.636981 -0.621328 0.0948557 -1.568 -0.912
-1 0 0 1
--0.247391 -0.421172 0.286388 -0.593394 -0.497433 0.192606 -0.599649 -0.359853 0.0968571 -0.50096 -0.573506 0.179954 -0.440814 -0.47629 0.0493744 -0.613873 -0.610164 0.154749 -1.872 -0.656
-1 0 0 1
--0.298395 -0.412797 0.361263 -0.559818 -0.468086 0.273876 -0.588905 -0.352843 0.141396 -0.489495 -0.560615 0.182391 -0.428945 -0.448631 0.170843 -0.605114 -0.602645 0.132048 -2.512 -0.432
-1 0 0 1
--0.336961 -0.40235 0.138561 -0.557569 -0.453013 0.321539 -0.574965 -0.335693 0.162614 -0.463756 -0.551894 0.151224 -0.448192 -0.435241 0.170522 -0.579886 -0.560842 0.341456 -2.864 -0.512
-1 0 0 1
--0.339522 -0.380974 0.141763 -0.602502 -0.423993 0.196217 -0.548895 -0.311756 0.261002 -0.444387 -0.535527 0.201383 -0.474209 -0.41183 0.259541 -0.565534 -0.559156 0.140585 -2.784 -0.384
-1 0 0 1
--0.3823 -0.377823 0.356231 -0.609969 -0.398434 0.175682 -0.531276 -0.290443 0.102092 -0.427503 -0.496833 0.283856 -0.49271 -0.404984 0.14866 -0.548399 -0.528267 0.344806 -2.784 -0.32
-1 0 0 1
--0.393122 -0.364803 0.182098 -0.631415 -0.36802 0.257124 -0.540077 -0.278257 0.22224 -0.409003 -0.490632 0.138489 -0.507337 -0.380815 0.271436 -0.534179 -0.491404 0.153393 -2.784 -0.192
-1 0 0 1
--0.376097 -0.346903 0.200068 -0.624321 -0.336446 0.111183 -0.570505 -0.232137 0.338434 -0.426039 -0.449849 0.155792 -0.508175 -0.375423 0.127196 -0.537236 -0.499543 0.101213 -2.784 0
-1 0 0 1
--0.382308 -0.320468 0.167492 -0.631283 -0.310801 0.268596 -0.585797 -0.195247 0.13518 -0.425028 -0.440721 0.100831 -0.506062 -0.354037 0.304141 -0.546293 -0.467379 0.194118 -2.784 0.24
-1 0 0 1
--0.390283 -0.30902 0.153962 -0.631203 -0.297118 0.0609473 -0.596481 -0.172952 0.131721 -0.434116 -0.419683 0.139906 -0.521841 -0.312001 0.285066 -0.551654 -0.42276 0.279327 -2.8 0.432
-1 0 0 1
--0.393145 -0.280742 0.155285 -0.641439 -0.287562 0.184068 -0.596908 -0.180306 0.180691 -0.458935 -0.384049 0.411919 -0.514569 -0.272283 0.224822 -0.575769 -0.375231 0.321363 -2.8 0.752
-1 0 0 1
--0.401225 -0.248388 0.271964 -0.669202 -0.258465 0.186428 -0.595052 -0.140994 0.344248 -0.464078 -0.355263 0.0304342 -0.524421 -0.248059 0.177203 -0.595732 -0.362738 0.16264 -2.656 0.896
-1 0 0 1
--0.433359 -0.224286 0.215735 -0.657748 -0.225053 0.324113 -0.604317 -0.114455 0.0461056 -0.482257 -0.329086 0.290123 -0.547923 -0.228558 0.26618 -0.595242 -0.330455 0.0345609 -1.776 0.784
-1 0 0 1
--0.417169 -0.189255 0.209951 -0.679363 -0.202732 0.0773559 -0.608203 -0.0879241 0.18153 -0.491832 -0.299792 0.201465 -0.552761 -0.20219 0.169713 -0.618725 -0.306168 0.344279 -0.96 0.848
-1 0 0 1
--0.424666 -0.178608 0.18252 -0.684246 -0.162627 0.180762 -0.622501 -0.0646202 0.29534 -0.494458 -0.268246 0.177176 -0.553326 -0.169471 0.15151 -0.616417 -0.277666 0.22022 -0.896 0.944
-1 0 0 1
--0.438632 -0.149389 0.165424 -0.672907 -0.136374 0.293434 -0.62215 -0.0306565 0.138998 -0.500579 -0.270013 0.0844696 -0.556248 -0.129934 0.287591 -0.61354 -0.241196 0.0664461 -0.864 0.96
-1 0 0 1
--0.437794 -0.14108 0.145284 -0.677803 -0.104939 0.257563 -0.610851 0.000555582 0.103763 -0.496739 -0.235264 0.239974 -0.559356 -0.111189 0.176596 -0.613119 -0.208505 0.104118 -0.496 1.328
-1 0 0 1
--0.421795 -0.108311 0.144319 -0.663593 -0.0763818 0.242539 -0.59566 0.0205288 0.203775 -0.509412 -0.197867 0.276574 -0.545571 -0.0928785 0.169593 -0.633043 -0.183682 0.108704 -0.256 1.392
-1 0 0 1
--0.428231 -0.0894799 0.173306 -0.672039 -0.0391906 0.169869 -0.573165 0.0534077 0.168855 -0.497223 -0.185025 0.0995872 -0.546577 -0.0686478 0.12722 -0.616435 -0.162986 0.236063 -0.608 -0.944
-1 0 0 1
--0.423091 -0.0749758 0.115564 -0.648228 -0.0220102 0.0705838 -0.570015 0.0676732 0.176816 -0.500298 -0.168533 0.248072 -0.533476 -0.0491761 0.209563 -0.615237 -0.138021 0.0577272 -2.24 -1.632
-1 0 0 1
--0.396679 -0.0836085 0.076993 -0.64888 -0.00650118 0.130737 -0.566581 0.0804825 0.0852176 -0.497329 -0.150607 0.115637 -0.5306 -0.0337238 0.0710105 -0.615716 -0.122455 0.157051 -2.816 -1.44
-1 0 0 1
--0.3989 -0.0811406 0.108208 -0.645854 0.00207823 0.0974334 -0.56353 0.0869721 0.0834833 -0.499438 -0.151663 0.055252 -0.523515 -0.0256678 0.0742021 -0.612881 -0.110015 0.0258734 -3.248 -0.96
-1 0 0 1
--0.417593 -0.0641394 0.097459 -0.636895 0.00692379 0.0570415 -0.551007 0.0953739 0.121547 -0.502958 -0.153375 0.0707206 -0.53089 -0.029221 0.137113 -0.618634 -0.114994 0.0351534 -3.344 0.144
-1 0 0 1
--0.418959 -0.058934 0.0671455 -0.651529 0.0172985 0.0724068 -0.547097 0.082848 0.0804537 -0.508171 -0.140622 0.0561312 -0.538764 -0.029631 0.156932 -0.628527 -0.100753 0.13717 -3.248 1.024
-1 0 0 1
--0.430783 -0.0614779 0.0978821 -0.6499 0.0233705 0.0414527 -0.561093 0.109049 0.154347 -0.522993 -0.14001 0.100715 -0.542784 -0.0194556 0.181455 -0.63392 -0.0957335 0.12134 -3.152 1.952
-1 0 0 1
--0.435477 -0.0636515 0.0486939 -0.665171 0.0387522 0.137514 -0.574914 0.117802 0.081503 -0.533002 -0.133185 0.113554 -0.542424 0.000506611 0.0783357 -0.639797 -0.0740771 0.147712 -2.72 2.672
-1 0 0 1
--0.442805 -0.0449368 0.164674 -0.673975 0.0580824 0.0419576 -0.571192 0.123344 0.0823247 -0.543593 -0.11097 0.120245 -0.55359 0.00941041 0.177756 -0.656912 -0.0608356 0.164281 -2.32 2.88
-1 0 0 1
--0.464342 -0.0195341 0.124363 -0.670832 0.077533 0.160376 -0.569545 0.143931 0.0918051 -0.555377 -0.100038 0.0890576 -0.569439 0.0228869 0.164779 -0.669589 -0.0504187 0.122013 -1.792 2.88
-1 0 0 1
--0.464382 -0.0110161 0.0354019 -0.683908 0.0983093 0.128766 -0.578807 0.157057 0.178747 -0.565738 -0.0764301 0.171427 -0.573551 0.0418748 0.129506 -0.678935 -0.0214786 0.172811 -1.392 2.88
-1 0 0 1
--0.476573 -0.0016174 0.13033 -0.684678 0.118791 0.160947 -0.585067 0.188956 0.105906 -0.57598 -0.0607458 0.0827188 -0.576213 0.0660839 0.153136 -0.68044 -0.00121092 0.132934 -1.2 2.88
-1 0 0 1
--0.476885 0.0190074 0.110731 -0.68769 0.144211 0.142801 -0.582162 0.201982 0.0793607 -0.583203 -0.0398902 0.200833 -0.580704 0.0801522 0.0894241 -0.687788 0.0240162 0.173801 -1.056 2.896
-1 0 0 1
--0.480867 0.0432099 0.176197 -0.684459 0.165087 0.157271 -0.572459 0.220956 0.1264 -0.587401 -0.0191526 0.0500849 -0.58334 0.100653 0.116685 -0.68994 0.0426792 0.161006 -0.96 2.896
-1 0 0 1
--0.476897 0.0573687 0.0947798 -0.682789 0.191811 0.108112 -0.571749 0.244012 0.17548 -0.585544 0.00292602 0.179088 -0.580167 0.122928 0.188442 -0.687719 0.0687345 0.145014 -0.928 2.88
-1 0 0 1
--0.476937 0.0714623 0.130494 -0.673026 0.212558 0.186122 -0.569426 0.270486 0.163153 -0.586137 0.0262288 0.0401729 -0.57123 0.146872 0.166448 -0.682787 0.0941621 0.142462 -0.72 2.88
-1 0 0 1
--0.473139 0.0992501 0.1729 -0.667469 0.241545 0.162332 -0.556496 0.288077 0.0943554 -0.580063 0.0444936 0.228861 -0.570624 0.167423 0.105252 -0.677701 0.118689 0.134698 -0.624 2.992
-1 0 0 1
--0.464208 0.123574 0.11086 -0.658108 0.262377 0.191043 -0.544591 0.308722 0.164868 -0.576783 0.0737526 0.0965536 -0.563348 0.190138 0.140353 -0.677522 0.143048 0.170302 -0.864 3.056
-1 0 0 1
--0.461166 0.136567 0.091368 -0.651755 0.28958 0.139753 -0.539086 0.335955 0.142937 -0.571005 0.0914288 0.197368 -0.551989 0.216055 0.17815 -0.662587 0.169707 0.158036 -1.232 3.056
-1 0 0 1
--0.450885 0.153246 0.163463 -0.638175 0.312891 0.184735 -0.527768 0.358394 0.159081 -0.56594 0.118036 0.0962094 -0.543767 0.235868 0.151482 -0.661886 0.194973 0.138881 -1.536 3.056
-1 0 0 1
--0.449414 0.186108 0.189503 -0.627858 0.340796 0.163731 -0.512426 0.376117 0.157163 -0.560275 0.139642 0.149478 -0.539027 0.261143 0.163917 -0.651447 0.221425 0.157477 -1.984 3.056
-1 0 0 1
--0.437779 0.207168 0.136503 -0.619663 0.366385 0.158251 -0.504581 0.403036 0.155379 -0.553315 0.16978 0.167271 -0.530409 0.286729 0.22055 -0.648389 0.248515 0.200978 -2.304 3.056
-1 0 0 1
--0.432603 0.231179 0.153699 -0.613542 0.395488 0.179285 -0.500724 0.436092 0.194108 -0.547388 0.192909 0.158111 -0.52083 0.31527 0.180247 -0.634287 0.276099 0.169326 -2.336 3.056
-1 0 0 1
--0.424788 0.259643 0.203832 -0.60646 0.422523 0.191113 -0.491228 0.462898 0.172541 -0.541911 0.227453 0.164364 -0.514771 0.34369 0.17209 -0.631587 0.306026 0.180709 -2.272 3.12
-1 0 0 1
--0.421354 0.293085 0.197819 -0.598494 0.454757 0.183115 -0.48208 0.488236 0.18507 -0.535136 0.252142 0.15923 -0.512056 0.371017 0.167599 -0.624539 0.334921 0.169981 -2.272 3.136
-1 0 0 1
--0.415715 0.320568 0.169368 -0.592217 0.482768 0.206982 -0.477096 0.518123 0.203324 -0.530433 0.286882 0.214498 -0.504771 0.401664 0.191399 -0.621079 0.365772 0.182453 -2.48 3.136
-1 0 0 1
--0.411222 0.351354 0.188669 -0.590817 0.517774 0.198273 -0.476508 0.556332 0.199223 -0.525507 0.315471 0.214946 -0.499867 0.435199 0.197831 -0.6127 0.398737 0.160086 -2.64 3.136
-1 0 0 1
--0.406556 0.385626 0.209604 -0.59145 0.543606 0.190576 -0.475863 0.586779 0.187575 -0.522223 0.349546 0.202712 -0.498193 0.466111 0.172196 -0.614603 0.428351 0.166827 -2.864 3.136
-1 0 0 1
--0.408591 0.421239 0.187107 -0.59277 0.575462 0.158694 -0.476371 0.614771 0.180161 -0.520592 0.376154 0.168745 -0.500973 0.496715 0.181354 -0.61229 0.457389 0.185486 -3.168 1.936
-1 0 0 1
--0.406108 0.442729 0.117609 -0.591813 0.607524 0.108056 -0.480861 0.649231 0.25902 -0.518633 0.402545 0.183574 -0.49037 0.529622 0.161874 -0.61001 0.486744 0.163172 -2.064 0.592
-1 0 0 1
--0.400845 0.460743 0.169545 -0.584936 0.624061 0.135645 -0.477458 0.673643 0.041841 -0.514714 0.429272 0.0603358 -0.491376 0.547923 0.213987 -0.611201 0.504268 0.128434 -0.896 0.864
-1 0 0 1
--0.396931 0.486239 0.11978 -0.580797 0.640286 0.171388 -0.466781 0.679588 0.101847 -0.50929 0.442637 0.173552 -0.491144 0.559853 0.0570037 -0.595834 0.520694 0.0850145 -0.624 2.832
-1 0 0 1
--0.38158 0.503446 0.105413 -0.56859 0.653221 0.121335 -0.450646 0.69173 0.049876 -0.498497 0.458589 0.153463 -0.483993 0.571302 0.0995831 -0.596289 0.537557 0.170376 -2.352 3.712
-1 0 0 1
--0.380327 0.510777 0.0716669 -0.560596 0.673535 0.125196 -0.43903 0.710464 0.233495 -0.493776 0.472116 0.0829229 -0.471875 0.590731 0.060425 -0.581285 0.556267 0.158133 -2.784 3.456
-0 0 1 0
--0.0632759 0.378753 4.57668 -0.733727 0.0288115 5 -0.100913 0.826698 2.95931 -0.599406 0.223157 3.63211 -0.0991141 0.0605465 5 -0.777572 0.408522 2.30923 -1.392 1.168
-0 0 1 0
-0.61431 0.1178 4.0021 -0.90811 -0.830736 4.85025 0.345067 0.870381 2.56647 -0.848261 -0.294786 3.15054 0.508396 -0.86399 5 -0.863608 0.201982 1.9297 1.024 -1.104
-0 0 1 0
-0.927888 -0.10654 2.94723 -0.693126 -0.699321 4.05762 0.726124 0.753724 2.26324 -0.835983 -0.735309 2.74388 0.974411 -0.650813 4.25633 -0.625873 0.0220714 1.69272 -0.576 -0.992
-0 0 1 0
-0.458998 -0.304836 2.90001 -0.508227 -0.103838 3.46507 0.904861 0.648718 1.66042 -0.656124 -0.881371 2.2853 0.607824 0.00143831 4.44608 -0.414966 -0.137311 1.65111 1.008 -1.824
-0 0 1 0
-0.194748 -0.230394 1.51025 -0.376771 0.432839 3.03719 0.62474 0.551769 1.64608 -0.492228 -0.555336 2.00869 0.216548 0.585634 3.8528 -0.180801 -0.278414 1.52113 2.24 -2.608
-0 0 1 0
-0.0398116 -0.0614662 1.28457 -0.267127 0.887831 2.62548 0.385442 0.467314 1.43471 -0.35133 -0.2796 1.75585 -0.114927 0.959857 2.16554 0.0232719 -0.400036 1.36409 2.528 -2.592
-0 0 1 0
--0.0927079 0.0832235 1.12142 -0.199718 0.746323 2.20231 0.176251 0.391075 1.26772 -0.223398 -0.0405549 1.55131 -0.381698 0.563114 2.7932 0.205161 -0.508856 1.22694 2.576 -2.592
-0 0 1 0
--0.209867 0.265596 1.45905 -0.14546 0.400433 1.94398 -0.0126526 0.317611 1.12625 -0.106693 0.12412 0.87919 -0.615451 0.186678 2.43633 0.376931 -0.60955 1.12121 2.576 -2.592
-0 0 1 0
--0.323932 0.463772 1.28991 -0.206516 0.101512 1.97549 -0.0654075 0.287759 0.35945 0.00732251 0.190795 0.890503 -0.811417 -0.133881 2.13513 0.486195 -0.703776 0.945828 2.576 -2.592
-0 0 1 0
--0.424612 0.635371 1.13037 -0.341138 -0.172018 1.74854 -0.0550061 0.336176 0.263961 0.138948 0.185636 0.74416 -0.878168 -0.417429 1.85671 0.393476 -0.830868 0.882605 2.576 -2.592
-0 0 1 0
--0.517104 0.788261 0.966795 -0.46175 -0.421614 1.51806 -0.0406643 0.376974 0.235506 0.259895 0.180098 0.694831 -0.731165 -0.674734 1.63513 0.312389 -0.877625 0.708516 2.592 -2.624
-0 0 1 0
--0.591253 0.899904 0.411641 -0.563037 -0.634081 1.34882 -0.0265305 0.411571 0.211716 0.371092 0.171298 0.637978 -0.603898 -0.890498 1.34119 0.246937 -0.787939 0.633404 2.608 -2.624
-0 0 1 0
--0.653462 0.802656 0.706254 -0.648179 -0.824014 1.19458 -0.012496 0.440115 0.162406 0.468689 0.157064 0.573146 -0.495271 -0.803952 1.15953 0.192449 -0.704644 0.56966 2.608 -2.624
-0 0 1 0
--0.709366 0.704659 0.608275 -0.709841 -0.863356 0.969444 0.000866688 0.461417 0.13951 0.560232 0.137605 0.532236 -0.410103 -0.644837 0.985755 0.148821 -0.630017 0.44666 2.608 -2.624
-0 0 1 0
--0.755285 0.623309 0.53419 -0.759789 -0.72187 0.855715 0.0131104 0.477385 0.129642 0.635927 0.118835 0.435023 -0.334488 -0.512841 0.862476 0.115931 -0.570448 0.38532 2.608 -2.624
-0 0 1 0
--0.796855 0.553294 0.469987 -0.804979 -0.593702 0.789021 0.0245787 0.49093 0.0926421 0.698614 0.0966178 0.384309 -0.26467 -0.401073 0.744969 0.0933918 -0.519512 0.290147 2.608 -2.624
-0 0 1 0
--0.833918 0.487883 0.427641 -0.841475 -0.476347 0.673167 0.0351785 0.498756 0.04672 0.757346 0.0712809 0.347235 -0.195183 -0.303476 0.659443 0.0805312 -0.476954 0.242958 2.608 -2.624
-0 0 1 0
--0.864939 0.43099 0.366928 -0.874884 -0.379381 0.582117 0.0417752 0.503942 0.0499184 0.803645 0.0458414 0.307783 -0.129924 -0.222729 0.601497 0.0780076 -0.441002 0.190432 2.608 -2.624
-0 0 1 0
--0.874673 0.380644 0.32504 -0.865281 -0.295233 0.504468 0.0495593 0.509639 0.0567902 0.845527 0.0213504 0.273229 -0.0713799 -0.150803 0.53322 0.0832583 -0.413277 0.156102 2.608 -2.624
-0 0 1 0
--0.852337 0.333591 0.290701 -0.838915 -0.21803 0.444617 0.0589213 0.512287 0.0582795 0.879332 -0.00557841 0.204955 -0.018698 -0.0846926 0.457923 0.0878627 -0.386612 0.148336 2.608 -2.624
-0 0 0 0
--0.83433 0.293933 0.246686 -0.817278 -0.150555 0.411224 0.0672382 0.512363 0.0457917 0.861494 -0.0320735 0.222804 0.028797 -0.0327581 0.40858 0.0971609 -0.365699 0.141969 2.608 -2.624
-0 0 0 0
--0.819485 0.260789 0.220705 -0.796444 -0.0887139 0.378823 0.0718291 0.5079 0.0345826 0.835386 -0.0580878 0.227996 0.0767837 0.0119216 0.377137 0.114063 -0.347458 0.149166 2.608 -2.624
-0 0 0 0
--0.803105 0.229185 0.196639 -0.776146 -0.0333114 0.30877 0.077219 0.500732 0.0603207 0.80891 -0.0874609 0.231492 0.123346 0.0477885 0.325877 0.134541 -0.333756 0.134342 2.608 -2.624
-0 0 0 0
--0.790378 0.201877 0.181105 -0.758888 0.0122988 0.275043 0.0813389 0.490355 0.0785115 0.786022 -0.115619 0.220402 0.16499 0.0741732 0.280072 0.157104 -0.32727 0.145203 2.56 -2.624
-0 0 0 0
--0.778398 0.167702 0.26679 -0.742416 0.0592165 0.322908 0.0850727 0.478873 0.0706766 0.764205 -0.145468 0.212319 0.202391 0.0952534 0.24175 0.180296 -0.324307 0.132758 2.56 -2.624
-0 0 0 0
--0.782785 0.183677 0.148704 -0.706278 0.0512811 0.26556 0.0877111 0.467146 0.0748289 0.745571 -0.179374 0.229957 0.235398 0.114093 0.207018 0.204769 -0.323848 0.151933 2.512 -2.624
-0 0 0 0
--0.786642 0.198854 0.0524123 -0.673887 0.0389847 0.171519 0.0934284 0.457088 0.0667139 0.732821 -0.214898 0.227763 0.265847 0.126758 0.181896 0.230037 -0.328452 0.163767 2.512 -2.624
-0 0 0 0
--0.784385 0.207157 0.0485058 -0.647153 0.0307515 0.178544 0.100623 0.449692 0.0713284 0.718819 -0.2512 0.237481 0.291167 0.133155 0.146337 0.260491 -0.335523 0.204559 2.512 -2.624
-0 0 0 0
--0.780041 0.21734 0.0662004 -0.617805 0.0221532 0.190573 0.10831 0.439449 0.0855353 0.705667 -0.287668 0.235111 0.317241 0.136098 0.165885 0.294366 -0.344592 0.203432 2.512 -2.72
-0 0 0 0
--0.77244 0.228285 0.0819434 -0.588638 0.0130575 0.172088 0.116366 0.428309 0.0828913 0.692636 -0.325732 0.250853 0.342672 0.133259 0.146221 0.326491 -0.356355 0.212026 2.512 -2.72
-0 0 0 0
--0.763988 0.235627 0.05906 -0.563695 0.00677781 0.154032 0.125672 0.419097 0.0853004 0.681215 -0.364643 0.253916 0.365217 0.128038 0.143602 0.355254 -0.367003 0.189185 2.512 -2.736
-0 0 0 0
--0.757502 0.243473 0.0576061 -0.536867 0.00196787 0.156008 0.134965 0.407666 0.0989301 0.67208 -0.406857 0.260071 0.388004 0.122711 0.121789 0.384249 -0.379347 0.181567 2.512 -2.8
-0 0 0 0
--0.750637 0.250255 0.0586443 -0.512031 -0.00187939 0.142135 0.145113 0.392955 0.101924 0.663581 -0.450317 0.259821 0.404059 0.112953 0.111659 0.409907 -0.39427 0.160072 2.512 -2.816
-0 0 0 0
--0.742007 0.253808 0.0559592 -0.489126 -0.00482165 0.138812 0.154174 0.376343 0.131583 0.656311 -0.494835 0.278269 0.418527 0.101522 0.121039 0.431823 -0.409251 0.154837 2.512 -2.864
-0 0 0 0
--0.737789 0.257537 0.0187922 -0.465067 -0.00481318 0.142059 0.164411 0.358031 0.111484 0.652504 -0.54056 0.25314 0.431634 0.0880359 0.105065 0.454471 -0.42287 0.169522 2.576 -2.976
-0 0 0 0
--0.735699 0.259409 0.0206205 -0.44408 -0.00331069 0.112052 0.173278 0.343662 0.107843 0.651616 -0.583311 0.276633 0.440502 0.0735978 0.112791 0.473967 -0.437849 0.149417 2.864 -2.992
-0 0 0 0
--0.729394 0.263002 0.0545594 -0.426823 0.00148888 0.105581 0.181954 0.329629 0.100164 0.636882 -0.590424 0.123055 0.449813 0.0558872 0.134351 0.494245 -0.455723 0.177115 2.896 -3.008
-0 0 0 0
--0.719167 0.265102 0.0639656 -0.407642 0.00519419 0.123615 0.189224 0.314577 0.0952895 0.615767 -0.582229 0.164247 0.458273 0.0350017 0.149677 0.521672 -0.479479 0.288415 2.896 -3.008
-0 0 0 0
--0.71089 0.266043 0.0461162 -0.389425 0.00541943 0.113571 0.194665 0.298657 0.110915 0.610179 -0.594732 0.32223 0.463475 0.0107934 0.1612 0.53725 -0.490414 0.165512 2.896 -3.04
-0 0 0 0
--0.703144 0.268304 0.0525862 -0.370163 -0.000378332 0.130369 0.198187 0.281979 0.0935225 0.618655 -0.629668 0.113735 0.469883 -0.0170407 0.164569 0.533329 -0.483032 0.0377691 2.896 -3.056
-0 0 0 0
--0.696337 0.270126 0.0437905 -0.351259 -0.0102898 0.130174 0.203264 0.265837 0.101111 0.585475 -0.610201 0.265499 0.477544 -0.0427132 0.160017 0.54152 -0.502013 0.213274 2.896 -3.056
-0 0 0 0
--0.69186 0.273132 0.013442 -0.331797 -0.0157559 0.123288 0.20802 0.249455 0.0957872 0.573816 -0.630042 0.182841 0.483545 -0.0682438 0.156592 0.541912 -0.490493 0.114494 2.896 -3.056
-0 0 0 0
--0.686338 0.273394 0.0624606 -0.314094 -0.0255876 0.134681 0.213004 0.236422 0.0716156 0.568203 -0.649312 0.0581879 0.490252 -0.0924991 0.151294 0.548118 -0.48431 0.0701538 2.896 -3.056
-0 0 0 0
--0.675451 0.274135 0.0613845 -0.297181 -0.0405 0.126717 0.217628 0.221886 0.104244 0.563791 -0.649276 0.0718899 0.498672 -0.11742 0.17249 0.561649 -0.500642 0.192637 2.896 -3.056
-0 0 0 0
--0.667455 0.276781 0.0498057 -0.280818 -0.0562834 0.131261 0.222332 0.2044 0.119789 0.561644 -0.640984 0.182771 0.513163 -0.142498 0.189555 0.573553 -0.530302 0.0988588 2.912 -3.056
-0 0 0 0
--0.661188 0.279007 0.0475736 -0.266319 -0.0706538 0.12863 0.225824 0.186047 0.11485 0.55872 -0.668856 0.0663597 0.526865 -0.168056 0.173224 0.585439 -0.525159 0.0877621 2.912 -3.056
-0 0 0 0
--0.649544 0.279898 0.078271 -0.254121 -0.0848535 0.0991653 0.227594 0.165759 0.116929 0.5686 -0.665881 0.108091 0.540442 -0.194562 0.17847 0.591646 -0.554255 0.232213 2.912 -3.056
-0 0 0 0
--0.634828 0.281223 0.0930693 -0.241705 -0.0967004 0.120377 0.229922 0.143869 0.136705 0.571808 -0.690065 0.141113 0.552604 -0.222244 0.19505 0.603937 -0.556318 0.0804956 2.912 -3.056
-0 0 0 0
--0.621142 0.281563 0.0838251 -0.225034 -0.109544 0.124608 0.229737 0.121677 0.116243 0.555841 -0.678032 0.13612 0.561694 -0.253561 0.202071 0.610618 -0.577162 0.172283 2.912 -3.056
-0 0 0 0
--0.608994 0.28366 0.0589943 -0.209917 -0.121565 0.106991 0.229602 0.100846 0.122517 0.536507 -0.684174 0.0838684 0.567773 -0.286175 0.206214 0.628265 -0.586416 0.124517 2.912 -3.056
-0 0 0 0
--0.60178 0.284553 0.0389332 -0.198292 -0.133968 0.097207 0.234248 0.0821836 0.114716 0.536954 -0.67793 0.00978301 0.576695 -0.320278 0.222241 0.629574 -0.614219 0.159894 2.912 -3.056
-0 0 0 0
--0.595826 0.285547 0.0308453 -0.186769 -0.143934 0.0977193 0.239558 0.0642736 0.107336 0.5276 -0.68573 0.0287402 0.587296 -0.35461 0.234226 0.632688 -0.610658 0.111185 2.912 -3.056
-0 0 0 0
--0.591674 0.284878 0.025239 -0.170219 -0.154823 0.121537 0.248366 0.0482767 0.111348 0.534764 -0.689511 0.0985702 0.597825 -0.396158 0.265226 0.619412 -0.601284 0.122712 2.928 -3.008
-0 0 0 0
--0.587334 0.284367 0.0228145 -0.151437 -0.164102 0.127527 0.258992 0.0322697 0.124573 0.544892 -0.692415 0.143876 0.6115 -0.439502 0.314303 0.614315 -0.593308 0.0747323 3.312 -2.224
-0 0 0 0
--0.584025 0.280825 0.0399592 -0.131071 -0.174466 0.139421 0.270697 0.0154396 0.120407 0.558145 -0.688461 0.049877 0.628777 -0.478691 0.193744 0.607264 -0.583871 0.219632 2.32 -0.848
-0 0 0 0
--0.580181 0.2742 0.0529214 -0.106471 -0.183826 0.163405 0.285952 -0.00407108 0.168753 0.551283 -0.716997 0.148487 0.655121 -0.456692 0.105646 0.609978 -0.583081 0.116115 1.456 -1.456
-0 0 0 0
--0.572543 0.267597 0.0554085 -0.0794018 -0.192717 0.170612 0.303385 -0.0323035 0.222613 0.548108 -0.727105 0.0199498 0.662563 -0.45916 0.104595 0.614555 -0.564578 0.041008 1.488 -1.568
-0 0 0 0
--0.566179 0.258453 0.0778755 -0.0509689 -0.19943 0.185173 0.319503 -0.0633738 0.205466 0.544095 -0.718946 0.10091 0.668133 -0.450989 0.056863 0.604417 -0.564756 0.0647726 1.52 -1.632
-0 0 0 0
--0.558933 0.247988 0.0733744 -0.0217113 -0.206072 0.169416 0.335747 -0.0972582 0.228689 0.542787 -0.689679 0.249666 0.662912 -0.461502 0.0171253 0.592071 -0.56212 0.208868 1.52 -1.664
-0 0 0 0
--0.552549 0.239013 0.0745534 0.00463087 -0.216603 0.170076 0.354609 -0.130069 0.230867 0.53542 -0.66827 0.101317 0.651752 -0.470341 0.0393082 0.582241 -0.550851 0.20068 1.52 -1.664
-0 0 0 0
--0.544251 0.230997 0.0766856 0.0299671 -0.230599 0.179117 0.369884 -0.165811 0.236291 0.521779 -0.662288 0.10438 0.662371 -0.446712 0.121483 0.550591 -0.5464 0.180309 1.52 -1.664
-0 0 0 0
--0.531768 0.222816 0.115386 0.0563696 -0.24809 0.194057 0.38331 -0.203224 0.238501 0.50608 -0.646099 0.234934 0.651176 -0.43857 0.147271 0.53667 -0.526542 0.0725484 1.52 -1.664
-0 0 0 1
--0.515744 0.212735 0.123406 0.0851085 -0.262223 0.189905 0.399466 -0.240779 0.25291 0.491903 -0.618626 0.165986 0.623428 -0.445202 0.0893405 0.535043 -0.507909 0.187867 1.52 -1.68
-0 1 0 1
--0.499978 0.199991 0.125796 0.111519 -0.276062 0.183162 0.422958 -0.237784 0.216784 0.466009 -0.619167 0.149982 0.629316 -0.426667 0.0929123 0.546158 -0.511218 0.195949 1.52 -1.68
-0 1 0 1 
--0.480927 0.184068 0.163623 0.138245 -0.292867 0.196305 0.447436 -0.215234 0.169582 0.451348 -0.608227 0.142216 0.624011 -0.415633 0.107597 0.562847 -0.527335 0.0839609 1.52 -1.68
-0 1 0 1
--0.459529 0.167771 0.153131 0.167114 -0.310671 0.199481 0.470245 -0.206347 0.142277 0.458302 -0.576991 0.191394 0.599343 -0.42085 0.153615 0.562897 -0.536681 0.0932194 1.52 -1.68
-0 1 0 1
--0.438586 0.152917 0.17527 0.194433 -0.329485 0.204161 0.4911 -0.205794 0.112232 0.459094 -0.590213 0.156712 0.572681 -0.421284 0.171705 0.582693 -0.543577 0.0814627 1.536 -1.664
-0 1 0 1
--0.412812 0.136269 0.204724 0.225411 -0.34982 0.226564 0.508471 -0.214199 0.114437 0.482065 -0.602309 0.0927151 0.582901 -0.432932 0.400702 0.579487 -0.546327 0.0638609 1.584 -1.648
-0 1 0 1
--0.384381 0.116749 0.213785 0.224758 -0.35855 0.209356 0.521191 -0.226343 0.115998 0.479494 -0.619472 0.0633794 0.642331 -0.426627 0.298931 0.59599 -0.550317 0.064245 1.648 -1.648
-0 1 0 1
--0.353584 0.097407 0.221248 0.198647 -0.356874 0.114272 0.532021 -0.243235 0.118278 0.500317 -0.614105 0.228064 0.674338 -0.447477 0.200715 0.593525 -0.534334 0.121644 1.728 -1.648
-0 1 0 1
--0.321987 0.0740095 0.241808 0.183771 -0.358846 0.072868 0.538314 -0.260586 0.109361 0.511738 -0.615859 0.0354604 0.700166 -0.467689 0.199706 0.585266 -0.508877 0.185636 1.728 -1.632
-0 1 0 1
--0.290582 0.0493199 0.234927 0.175765 -0.365247 0.0352075 0.538291 -0.279778 0.119022 0.520709 -0.601653 0.212535 0.707344 -0.484237 0.128098 0.576001 -0.493019 0.0410867 1.552 -1.664
-0 1 0 1
--0.256393 0.031131 0.232614 0.175102 -0.372795 0.0661911 0.529524 -0.299735 0.158345 0.528536 -0.585695 0.0808051 0.693217 -0.502192 0.155079 0.578096 -0.471868 0.242237 1.392 -1.984
-0 1 0 1
--0.223619 0.0132102 0.207466 0.178795 -0.38459 0.0799002 0.516091 -0.334576 0.278808 0.536482 -0.562399 0.154561 0.680425 -0.520902 0.232933 0.557076 -0.443883 0.213242 1.392 -2.496
-0 1 0 1
--0.196487 -0.00503031 0.19952 0.184962 -0.396198 0.0874947 0.488125 -0.338616 0.177464 0.533837 -0.565268 0.370553 0.646491 -0.525947 0.170566 0.57127 -0.438476 0.200979 1.808 -2.896
-0 1 0 1
--0.168577 -0.0240996 0.186582 0.192332 -0.407705 0.0928671 0.467189 -0.349003 0.153585 0.528887 -0.534002 0.402202 0.647269 -0.534417 0.157452 0.565194 -0.421411 0.0794049 1.824 -2.896
-0 1 0 1
--0.144233 -0.0444024 0.198335 0.197971 -0.423385 0.113424 0.460945 -0.379414 0.283315 0.502096 -0.512533 0.202762 0.634353 -0.522199 0.211746 0.582326 -0.396916 0.151438 2.032 -3.168
-0 1 0 1
--0.12121 -0.0660663 0.181512 0.204292 -0.445987 0.164303 0.464825 -0.398302 0.189863 0.495019 -0.518365 0.322061 0.602502 -0.504492 0.0802397 0.583265 -0.390961 0.16624 2.048 -3.984
-0 1 0 1
--0.099606 -0.0871373 0.175478 0.208734 -0.474645 0.181167 0.45388 -0.390516 0.0789085 0.471898 -0.544105 0.0697885 0.609089 -0.507383 0.111174 0.577704 -0.387144 0.114648 2.048 -3.984
-0 1 0 1
--0.0744782 -0.105515 0.177755 0.215564 -0.503968 0.175275 0.454468 -0.421206 0.286259 0.47764 -0.532164 0.166471 0.584858 -0.520167 0.134278 0.570849 -0.395104 0.0517891 2.048 -3.984
-0 1 0 1
--0.0527216 -0.119996 0.13966 0.221461 -0.534434 0.197508 0.448289 -0.417938 0.0633493 0.461788 -0.561233 0.202018 0.591316 -0.529424 0.173273 0.564554 -0.417635 0.109076 2.048 -3.984
-0 1 0 1
--0.0324585 -0.135434 0.152676 0.228863 -0.564603 0.18807 0.437971 -0.427677 0.147373 0.469145 -0.574318 0.123885 0.58296 -0.555014 0.114605 0.560282 -0.438261 0.235034 2.048 -3.984
-0 1 0 1
--0.012137 -0.150786 0.163911 0.234626 -0.594299 0.17328 0.425123 -0.459927 0.211524 0.468817 -0.560365 0.24222 0.593957 -0.583248 0.216973 0.551097 -0.46933 0.237522 2.048 -3.984
-0 1 0 1
-0.00943659 -0.164572 0.149199 0.243779 -0.619603 0.143425 0.411157 -0.466408 0.138818 0.472821 -0.591623 0.195381 0.601702 -0.611775 0.0985336 0.549222 -0.487714 0.131312 2.048 -3.984
-0 1 0 1
diff --git a/externals/ann/examples/ann_mlp_example2/example2.pd b/externals/ann/examples/ann_mlp_example2/example2.pd
deleted file mode 100644
index 9cd588eab6619658e3e3095d496f883c2353d1b3..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example2/example2.pd
+++ /dev/null
@@ -1,911 +0,0 @@
-#N canvas 519 124 536 237 10;
-#N canvas 103 30 712 583 guts 0;
-#X obj 18 181 t b b;
-#X obj 17 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 89 147 0 \, destroy;
-#X obj 111 177 gemwin;
-#X msg 94 124 reset \, create \, 1;
-#X obj 18 390 s masse;
-#X obj 266 150 s reset_masse;
-#X msg 266 128 bang;
-#X text 359 281 <- right border;
-#X text 360 303 <- left border;
-#X text 360 325 <- top border;
-#X text 360 347 <- bottom border;
-#N canvas 116 11 813 636 pool 0;
-#N canvas 0 0 819 344 fattori 0;
-#N canvas 0 0 450 300 graph3 0;
-#X array armoniche_caso 100 float 1;
-#A 0 1.06332 1.06332 1.06332 1.38999 1.55333 1.55333 1.55333 1.55333
-1.55333 1.55333 1.55333 1.71666 1.87999 2.04333 2.04333 2.20666 2.20666
-2.20666 2.37 2.53333 2.53333 2.53333 2.69667 2.69667 2.69667 2.69667
-2.69667 2.69667 2.69667 3.18667 3.18667 3.18667 3.18667 3.35 3.35 3.51334
-3.84001 3.84001 4.00334 4.16668 4.16668 4.16668 4.16668 4.49334 4.65668
-4.82001 5.31002 5.47335 5.80002 6.12669 6.61669 6.94336 7.27003 7.43336
-7.92337 8.25003 8.5767 8.90337 9.23004 9.72004 10.3734 10.7 11.0267
-11.19 11.5167 12.0067 12.4967 13.3134 13.64 13.9667 14.2934 14.9467
-16.2534 16.5801 16.7434 17.2334 17.8867 19.0301 19.8467 20.9901 21.6434
-22.1334 22.7867 23.1134 23.7667 24.2568 24.5834 24.9101 27.3601 28.3401
-29.3201 30.3001 31.4435 32.5868 33.5668 34.5468 36.0168 37.8135 39.7735
-50.7169;
-#X coords 0 50 99 1 300 300 1;
-#X restore 43 13 graph;
-#X msg 434 69 \; armoniche_caso const 1;
-#X restore 37 37 pd fattori caso;
-#X text 34 19 weightened random values;
-#X text 32 8 which harmonic am I?;
-#X text 236 34 20 cellule;
-#X obj 49 82 cellulaSuono 1;
-#X obj 48 102 cellulaSuono 2;
-#X obj 44 125 cellulaSuono 3;
-#X obj 143 86 cellulaSuono 4;
-#X obj 140 104 cellulaSuono 5;
-#X obj 146 126 cellulaSuono 6;
-#X restore 398 132 pd pool;
-#N canvas 860 482 327 421 creation 0;
-#X obj 43 319 s pd-new;
-#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
-#X msg 43 289 menuclose;
-#X obj 76 238 pack f f f;
-#X obj 43 47 sel 0 1;
-#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 61 72 t b b;
-#X obj 76 187 t f f f;
-#X obj 103 211 * 10;
-#X obj 76 211 * 10;
-#X obj 61 163 ch_uzi 30;
-#X msg 76 265 obj \$1 \$2 cellulaSuono \$3;
-#X connect 2 0 0 0;
-#X connect 3 0 11 0;
-#X connect 4 0 2 0;
-#X connect 4 1 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 10 0;
-#X connect 6 1 1 0;
-#X connect 7 0 9 0;
-#X connect 7 1 8 0;
-#X connect 7 2 3 2;
-#X connect 8 0 3 1;
-#X connect 9 0 3 0;
-#X connect 10 1 7 0;
-#X connect 11 0 0 0;
-#X restore 398 158 pd creation pool;
-#X obj 61 214 s link;
-#X text 39 39 <- begin (change the metro speed for slow computer);
-#X floatatom 38 132 5 0 0 0 - - -;
-#X text 359 257 <- give random speed and ambient viscosity;
-#X obj 449 446 gemhead;
-#X obj 449 467 translateXYZ;
-#X msg 166 417 setX \$1;
-#X msg 251 418 setY \$1;
-#X obj 520 399 * -1;
-#X obj 449 487 color 0.5 0 0;
-#X obj 501 347 gemmouse 8 8;
-#X obj 481 390 - 4;
-#X obj 523 380 - 4;
-#X obj 90 473 iCircle2D masse 0 0 0.1 8 0 0 -0.0003;
-#X obj 53 280 iLine2D masse 3.5 -3.5 3.5 3.5 1000 0 0 2 1;
-#X obj 63 305 iLine2D masse -3.5 3.5 -3.5 -3.5 1000 0 0 2 1;
-#X obj 78 328 iLine2D masse 3.5 3.5 -3.5 3.5 1000 0 0 2 1;
-#X obj 89 351 iLine2D masse -3.5 -3.5 3.5 -3.5 1000 0 0 2 1;
-#X obj 449 507 sphere 0.6;
-#X obj 18 154 metro 15;
-#N canvas 0 0 555 394 osc 0;
-#X obj 139 70 dumpOSC 10001;
-#X obj 182 106 unpack s f;
-#X msg 179 155 \; \$1 \$2;
-#X obj 180 131 pack s f;
-#X obj 263 113 r x;
-#X obj 337 118 r y;
-#X obj 258 210 s c_x;
-#X obj 354 214 s c_y;
-#X obj 348 151 / 25;
-#X obj 264 151 / 40;
-#X obj 260 176 clip 0 8;
-#X obj 348 182 clip 0 8;
-#X text 128 29 here is where I connect to EyesWeb to move the main
-cell with a webcam following my hand;
-#X connect 0 0 1 0;
-#X connect 1 0 3 0;
-#X connect 1 1 3 1;
-#X connect 3 0 2 0;
-#X connect 4 0 9 0;
-#X connect 5 0 8 0;
-#X connect 8 0 11 0;
-#X connect 9 0 10 0;
-#X connect 10 0 6 0;
-#X connect 11 0 7 0;
-#X restore 499 316 pd osc;
-#X obj 453 365 r c_x;
-#X obj 589 359 r c_y;
-#X msg 156 102 cursor 0;
-#X msg 126 66 bang;
-#X msg 166 150 lighting 1;
-#N canvas 450 44 494 396 sounds 0;
-#X obj 158 307 dac~;
-#X obj 76 66 catch~ mainL;
-#X obj 160 153 line;
-#X msg 159 131 \$1 10;
-#X obj 273 41 vsl 15 128 0 1 0 0 empty empty Volume 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 144 179 *~;
-#X obj 178 179 *~;
-#X obj 164 67 catch~ mainR;
-#X obj 304 42 loadbang;
-#X msg 304 62 1;
-#X obj 145 265 +~;
-#X obj 177 268 +~;
-#X obj 193 233 rev3~ 70 90 3000 20;
-#X connect 1 0 5 0;
-#X connect 2 0 5 1;
-#X connect 2 0 6 1;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 10 0;
-#X connect 5 0 12 0;
-#X connect 6 0 11 0;
-#X connect 6 0 12 1;
-#X connect 7 0 6 0;
-#X connect 8 0 9 0;
-#X connect 9 0 4 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 1;
-#X connect 12 0 10 1;
-#X connect 12 1 11 1;
-#X restore 398 189 pd sounds;
-#X text 463 188 <-- here is the main volue control;
-#N canvas 463 128 573 394 lights 0;
-#X obj 242 277 world_light;
-#X obj 242 163 gemhead 1;
-#X obj 242 225 rotateXYZ;
-#X msg 109 193 debug 0;
-#X msg 110 224 debug 1;
-#X text 20 169 figure out where the light is;
-#X obj 311 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 354 133 pack f f;
-#X obj 334 159 line;
-#X msg 364 42 1;
-#X obj 364 23 loadbang;
-#X obj 344 298 world_light;
-#X obj 346 271 gemhead 1;
-#X obj 429 203 loadbang;
-#X obj 311 63 metro 20000;
-#X msg 400 104 10000;
-#X obj 119 57 delay 10000;
-#X msg 339 96 300;
-#X msg 292 96 50;
-#X msg 364 235 1 1 1;
-#X msg 422 266 0.6 0.3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 8 0 2 2;
-#X connect 9 0 6 0;
-#X connect 10 0 9 0;
-#X connect 10 0 15 0;
-#X connect 12 0 11 0;
-#X connect 13 0 19 0;
-#X connect 13 0 20 0;
-#X connect 14 0 17 0;
-#X connect 14 0 16 0;
-#X connect 15 0 7 1;
-#X connect 16 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 7 0;
-#X connect 19 0 0 1;
-#X connect 20 0 11 1;
-#X restore 266 189 pd lights;
-#X text 337 49 example "stolen" from pmpd examples. move the main cell
-with your mouse (or via osc) every cell is a random harmonic of A (from
-1st to 50th) \, the velo of a cell is its volume also.;
-#X obj 405 432 s posx;
-#X obj 535 427 s posy;
-#X obj 43 260 iAmbient2D masse 0 0 0.01 0.01 0.4;
-#X obj 86 499 iCircle2D masse 0 0 0.1 0.7 0 0 4;
-#X obj 17 19 inlet;
-#X obj 85 19 inlet;
-#X connect 0 0 5 0;
-#X connect 0 1 14 0;
-#X connect 0 1 27 0;
-#X connect 0 1 28 0;
-#X connect 0 1 29 0;
-#X connect 0 1 30 0;
-#X connect 0 1 31 0;
-#X connect 0 1 46 0;
-#X connect 0 1 47 0;
-#X connect 1 0 33 0;
-#X connect 1 0 38 0;
-#X connect 2 0 3 0;
-#X connect 4 0 3 0;
-#X connect 7 0 6 0;
-#X connect 16 0 33 1;
-#X connect 18 0 19 0;
-#X connect 19 0 23 0;
-#X connect 20 0 27 0;
-#X connect 20 0 47 0;
-#X connect 21 0 27 0;
-#X connect 21 0 47 0;
-#X connect 22 0 21 0;
-#X connect 22 0 19 2;
-#X connect 22 0 45 0;
-#X connect 23 0 32 0;
-#X connect 24 0 25 0;
-#X connect 24 1 26 0;
-#X connect 25 0 20 0;
-#X connect 25 0 19 1;
-#X connect 25 0 44 0;
-#X connect 26 0 22 0;
-#X connect 33 0 0 0;
-#X connect 35 0 25 0;
-#X connect 36 0 26 0;
-#X connect 37 0 3 0;
-#X connect 38 0 4 0;
-#X connect 38 0 39 0;
-#X connect 38 0 37 0;
-#X connect 39 0 3 0;
-#X connect 48 0 1 0;
-#X connect 49 0 2 0;
-#X restore 18 68 pd guts;
-#X obj 17 18 tgl 15 0 empty empty rendering 0 -6 0 8 -262144 -1 -1
-0 1;
-#X obj 54 46 bng 15 250 50 0 empty empty destroy_gemwin 0 -6 0 8 -262144
--1 -1;
-#N canvas 206 22 774 557 train 0;
-#X msg 66 15 create 20 4;
-#X obj 66 345 unpack f f f f;
-#X floatatom 45 391 5 0 0 0 - - -;
-#X floatatom 83 390 5 0 0 0 - - -;
-#X floatatom 120 392 5 0 0 0 - - -;
-#X floatatom 160 394 5 0 0 0 - - -;
-#X text 118 405 chaos;
-#N canvas 0 0 642 332 inputs 0;
-#X obj 122 244 outlet;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X obj 76 19 r 1-X;
-#X obj 111 19 r 1-Y;
-#X obj 145 19 r 1-Velo;
-#X obj 86 47 r 2-X;
-#X obj 121 47 r 2-Y;
-#X obj 155 47 r 2-Velo;
-#X obj 222 20 r 3-X;
-#X obj 257 21 r 3-Y;
-#X obj 291 21 r 3-Velo;
-#X obj 220 46 r 4-X;
-#X obj 255 46 r 4-Y;
-#X obj 289 46 r 4-Velo;
-#X obj 359 23 r 5-X;
-#X obj 394 23 r 5-Y;
-#X obj 428 23 r 5-Velo;
-#X obj 358 51 r 6-X;
-#X obj 393 51 r 6-Y;
-#X obj 427 51 r 6-Velo;
-#X obj 420 99 r posx;
-#X obj 464 99 r posy;
-#X obj 61 153 pack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 175 unpack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 213 pack f f f f f f f f f f f f f f f f f f f f;
-#X connect 1 0 23 0;
-#X connect 3 0 23 1;
-#X connect 4 0 23 2;
-#X connect 5 0 23 3;
-#X connect 6 0 23 4;
-#X connect 7 0 23 5;
-#X connect 8 0 23 6;
-#X connect 9 0 23 7;
-#X connect 10 0 23 8;
-#X connect 11 0 23 9;
-#X connect 12 0 23 10;
-#X connect 13 0 23 11;
-#X connect 14 0 23 12;
-#X connect 15 0 23 13;
-#X connect 16 0 23 14;
-#X connect 17 0 23 15;
-#X connect 18 0 23 16;
-#X connect 19 0 23 17;
-#X connect 20 0 23 18;
-#X connect 21 0 23 19;
-#X connect 22 0 23 20;
-#X connect 23 0 24 0;
-#X connect 24 1 25 0;
-#X connect 24 2 25 1;
-#X connect 24 3 25 2;
-#X connect 24 4 25 3;
-#X connect 24 5 25 4;
-#X connect 24 6 25 5;
-#X connect 24 7 25 6;
-#X connect 24 8 25 7;
-#X connect 24 9 25 8;
-#X connect 24 10 25 9;
-#X connect 24 11 25 10;
-#X connect 24 12 25 11;
-#X connect 24 13 25 12;
-#X connect 24 14 25 13;
-#X connect 24 15 25 14;
-#X connect 24 16 25 15;
-#X connect 24 17 25 16;
-#X connect 24 18 25 17;
-#X connect 24 19 25 18;
-#X connect 24 20 25 19;
-#X connect 25 0 0 0;
-#X restore 190 226 pd inputs;
-#X obj 190 206 metro 100;
-#X obj 190 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X text 161 408 calm & close;
-#X obj 42 421 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 80 421 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 115 421 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 154 425 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X msg 247 306 save complex.net;
-#X msg 247 324 load conplex.net;
-#X text 148 15 1- create the ann;
-#N canvas 350 135 693 354 train 0;
-#X obj 107 286 outlet;
-#X msg 73 161 iterations_between_reports 1000;
-#X msg 198 224 train-on-file complex.txt;
-#X text 200 242 training on files with many patterns may take minutes
-\, please be patient.;
-#X msg 73 109 desired_error 0.06;
-#X msg 77 135 max_iterations 200000;
-#X text 69 76 due to the complexity of the input and output data you
-should change the default training parameters:;
-#X text 219 134 smaller cycle;
-#N canvas 190 67 849 551 write 0;
-#X obj 65 417 textfile;
-#X msg 190 337 clear;
-#N canvas 0 0 458 308 alternate 0;
-#X obj 103 117 + 1;
-#X obj 70 119 f 0;
-#X obj 70 171 sel 0 1;
-#X obj 70 146 mod 2;
-#X msg 95 90 0;
-#X obj 68 31 inlet;
-#X obj 140 40 inlet;
-#X obj 140 63 bang;
-#X obj 68 55 bang;
-#X obj 65 205 outlet;
-#X obj 125 206 outlet;
-#X text 59 6 bang;
-#X text 139 18 reset to 0 without bang;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 1 0 3 0;
-#X connect 2 0 9 0;
-#X connect 2 1 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 1;
-#X connect 5 0 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X restore 58 227 pd alternate;
-#X obj 24 81 bng 15 250 50 0 empty empty write-once 0 -6 0 8 -262144
--1 -1;
-#X obj 457 108 bng 15 250 50 0 empty empty reset 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 638 328 inputs 0;
-#X obj 64 271 outlet;
-#X text 118 272 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X obj 76 19 r 1-X;
-#X obj 111 19 r 1-Y;
-#X obj 145 19 r 1-Velo;
-#X obj 86 47 r 2-X;
-#X obj 121 47 r 2-Y;
-#X obj 155 47 r 2-Velo;
-#X obj 222 20 r 3-X;
-#X obj 257 21 r 3-Y;
-#X obj 291 21 r 3-Velo;
-#X obj 220 46 r 4-X;
-#X obj 255 46 r 4-Y;
-#X obj 289 46 r 4-Velo;
-#X obj 359 23 r 5-X;
-#X obj 394 23 r 5-Y;
-#X obj 428 23 r 5-Velo;
-#X obj 358 51 r 6-X;
-#X obj 393 51 r 6-Y;
-#X obj 427 51 r 6-Velo;
-#X obj 420 99 r posx;
-#X obj 464 99 r posy;
-#X obj 61 153 pack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 175 unpack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 213 pack f f f f f f f f f f f f f f f f f f f f f;
-#X msg 64 236 add \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 \$13
-\$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21;
-#X connect 2 0 24 0;
-#X connect 4 0 24 1;
-#X connect 5 0 24 2;
-#X connect 6 0 24 3;
-#X connect 7 0 24 4;
-#X connect 8 0 24 5;
-#X connect 9 0 24 6;
-#X connect 10 0 24 7;
-#X connect 11 0 24 8;
-#X connect 12 0 24 9;
-#X connect 13 0 24 10;
-#X connect 14 0 24 11;
-#X connect 15 0 24 12;
-#X connect 16 0 24 13;
-#X connect 17 0 24 14;
-#X connect 18 0 24 15;
-#X connect 19 0 24 16;
-#X connect 20 0 24 17;
-#X connect 21 0 24 18;
-#X connect 22 0 24 19;
-#X connect 23 0 24 20;
-#X connect 24 0 27 0;
-#X connect 25 1 26 0;
-#X connect 25 2 26 1;
-#X connect 25 3 26 2;
-#X connect 25 4 26 3;
-#X connect 25 5 26 4;
-#X connect 25 6 26 5;
-#X connect 25 7 26 6;
-#X connect 27 0 0 0;
-#X restore 58 306 pd inputs;
-#N canvas 0 0 474 324 outputs 0;
-#X obj 131 202 pack f f;
-#X obj 129 178 unpack s f f;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the outputs;
-#X obj 91 51 r output1;
-#X obj 166 51 r output2;
-#X obj 243 51 r output3;
-#X obj 318 51 r output4;
-#X obj 61 153 pack s f f f f;
-#X msg 67 227 add \$2 \$3 \$4 \$5;
-#X connect 1 1 0 0;
-#X connect 1 2 0 1;
-#X connect 4 0 11 0;
-#X connect 7 0 11 1;
-#X connect 8 0 11 2;
-#X connect 9 0 11 3;
-#X connect 10 0 11 4;
-#X connect 11 0 12 0;
-#X connect 12 0 2 0;
-#X restore 149 284 pd outputs;
-#X obj 230 223 f 0;
-#X obj 260 223 + 1;
-#X obj 239 257 nbx 5 14 -1e+037 1e+037 0 0 empty empty how_many_datasets
-0 -6 0 10 -262144 -1 -1 0 256;
-#X text 156 406 todo: write header (a line at the beginning of file
-with 3 int: how many tests \, num_input \, num_output);
-#X obj 122 190 delay 50;
-#X obj 115 159 metro 100;
-#X floatatom 346 70 5 100 5000 2 msec_between_snapshots - -;
-#X obj 127 80 tgl 15 0 empty empty toggle_on-off 0 -6 0 8 -262144 -1
--1 0 1;
-#X obj 219 189 / 2;
-#X obj 347 14 loadbang;
-#X text 293 224 comment;
-#N canvas 262 68 635 591 README 0;
-#X text 11 63 how to use: 1) modify [pd inputs] and [ps outputs] inserting
-[r] objects to receive input data \, and modify [pack]s to handle the
-right number of inputs 2) do the same with [pd outputs] 3) click on
-reset 4) toggle ON and start collectng data 5) when you are ready toggle
-OFF 6) edit [write filename cr( with the actual filename you want for
-your training data (always keep the cr after the filename) 7) open
-the file with training data 8) add a line at the beginning and write
-3 integers: the 1st is the number of training dataset written (see
-"how many datasets" number box) \, the 2nd is how many inputs your
-ann has \, the 3th is how many outputs e.g. i collected 100 training
-snapshots \, for a ann with 10 ins and 2 outs I write: 100 10 2 at
-the very beginning of the file now the training file is ready and can
-be read from nn via train-on-file command;
-#X text 143 489 please help me getting this patch more usable: - how
-to add a line at the very beginning of a text file after i have filled
-it? - how to manage inputs and outputs of different sized without forcing
-the user to edit the patch?;
-#X text 9 7 this tricky patch is usefull to write a file to train ann
-and is intended to be used with the nn external;
-#X restore 33 13 pd README;
-#X text 516 7 by davide morelli info@davidemorelli.it;
-#X text 106 14 <--readme!;
-#X msg 347 34 500;
-#X obj 129 41 inlet;
-#X msg 368 328 write complex.txt cr;
-#X msg 303 180 0;
-#N canvas 0 0 482 332 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 462 312 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 439 206 pd outputs;
-#X obj 431 237 r output1;
-#X obj 499 236 r output2;
-#X floatatom 431 258 5 0 0 0 - - -;
-#X floatatom 498 258 5 0 0 0 - - -;
-#X floatatom 568 256 5 0 0 0 - - -;
-#X floatatom 635 257 5 0 0 0 - - -;
-#X obj 568 235 r output3;
-#X obj 636 235 r output4;
-#X text 431 270 sx;
-#X text 496 272 dx;
-#X text 566 269 chaos;
-#X text 635 269 calm;
-#X text 434 171 4 outputs: using keyboard: asdf: a=sx-ness \, s=dx-ness
-\, d=chaos-ness \, f=calm-ness;
-#X text 363 348 remember to add a line at the beginning of the file
-with 3 integers... how_many_patterns 20 4 ...see README;
-#X text 142 308 <--we have 20 inputs;
-#X text 242 283 <--we have 4 outputs;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 2 1 6 0;
-#X connect 2 1 7 0;
-#X connect 3 0 11 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 4 0 1 0;
-#X connect 4 0 24 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 12 0 2 0;
-#X connect 13 0 12 1;
-#X connect 13 0 15 0;
-#X connect 14 0 12 0;
-#X connect 15 0 11 1;
-#X connect 16 0 21 0;
-#X connect 21 0 13 0;
-#X connect 22 0 14 0;
-#X connect 23 0 0 0;
-#X connect 24 0 7 1;
-#X connect 26 0 28 0;
-#X connect 27 0 29 0;
-#X connect 32 0 30 0;
-#X connect 33 0 31 0;
-#X restore 40 27 pd write trainfile;
-#X text 163 28 1- write a trainfile;
-#X text 69 63 2- adjust parameters before training;
-#X text 225 205 3- train on the file;
-#X text 195 110 higher error allowed;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X restore 114 71 pd train on file;
-#X text 217 70 2a- train using a file or;
-#N canvas 0 0 900 594 train 0;
-#X obj 66 319 outlet;
-#N canvas 0 0 793 344 inputs 0;
-#X obj 122 244 outlet;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X obj 76 19 r 1-X;
-#X obj 111 19 r 1-Y;
-#X obj 145 19 r 1-Velo;
-#X obj 86 47 r 2-X;
-#X obj 121 47 r 2-Y;
-#X obj 155 47 r 2-Velo;
-#X obj 222 20 r 3-X;
-#X obj 257 21 r 3-Y;
-#X obj 291 21 r 3-Velo;
-#X obj 220 46 r 4-X;
-#X obj 255 46 r 4-Y;
-#X obj 289 46 r 4-Velo;
-#X obj 359 23 r 5-X;
-#X obj 394 23 r 5-Y;
-#X obj 428 23 r 5-Velo;
-#X obj 358 51 r 6-X;
-#X obj 393 51 r 6-Y;
-#X obj 427 51 r 6-Velo;
-#X obj 395 88 r posx;
-#X obj 439 88 r posy;
-#X obj 550 29 r output1;
-#X obj 574 48 r output2;
-#X obj 598 68 r output3;
-#X obj 615 87 r output4;
-#X obj 61 153 pack s f f f f f f f f f f f f f f f f f f f f f f f
-f;
-#X obj 127 175 unpack s f f f f f f f f f f f f f f f f f f f f f f
-f f;
-#X obj 127 213 pack f f f f f f f f f f f f f f f f f f f f f f f f
-;
-#X connect 1 0 27 0;
-#X connect 3 0 27 1;
-#X connect 4 0 27 2;
-#X connect 5 0 27 3;
-#X connect 6 0 27 4;
-#X connect 7 0 27 5;
-#X connect 8 0 27 6;
-#X connect 9 0 27 7;
-#X connect 10 0 27 8;
-#X connect 11 0 27 9;
-#X connect 12 0 27 10;
-#X connect 13 0 27 11;
-#X connect 14 0 27 12;
-#X connect 15 0 27 13;
-#X connect 16 0 27 14;
-#X connect 17 0 27 15;
-#X connect 18 0 27 16;
-#X connect 19 0 27 17;
-#X connect 20 0 27 18;
-#X connect 21 0 27 19;
-#X connect 22 0 27 20;
-#X connect 23 0 27 21;
-#X connect 24 0 27 22;
-#X connect 25 0 27 23;
-#X connect 26 0 27 24;
-#X connect 27 0 28 0;
-#X connect 28 1 29 0;
-#X connect 28 2 29 1;
-#X connect 28 3 29 2;
-#X connect 28 4 29 3;
-#X connect 28 5 29 4;
-#X connect 28 6 29 5;
-#X connect 28 7 29 6;
-#X connect 28 8 29 7;
-#X connect 28 9 29 8;
-#X connect 28 10 29 9;
-#X connect 28 11 29 10;
-#X connect 28 12 29 11;
-#X connect 28 13 29 12;
-#X connect 28 14 29 13;
-#X connect 28 15 29 14;
-#X connect 28 16 29 15;
-#X connect 28 17 29 16;
-#X connect 28 18 29 17;
-#X connect 28 19 29 18;
-#X connect 28 20 29 19;
-#X connect 28 21 29 20;
-#X connect 28 22 29 21;
-#X connect 28 23 29 22;
-#X connect 28 24 29 23;
-#X connect 29 0 0 0;
-#X restore 213 222 pd inputs;
-#X obj 213 202 metro 100;
-#X obj 213 183 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 84 16 train;
-#N canvas 0 0 482 332 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 462 312 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 131 57 pd outputs;
-#X obj 130 87 r output1;
-#X obj 198 86 r output2;
-#X floatatom 130 108 5 0 0 0 - - -;
-#X floatatom 197 108 5 0 0 0 - - -;
-#X floatatom 267 106 5 0 0 0 - - -;
-#X floatatom 334 107 5 0 0 0 - - -;
-#X obj 267 85 r output3;
-#X obj 335 85 r output4;
-#X text 128 14 1- change to training mode;
-#X text 204 49 2- change keys if you want;
-#X text 220 61 defaults are "a" "s" "d" "f";
-#X text 239 182 3- toggle on to start training and off to stop;
-#X msg 170 282 run;
-#X text 200 283 4- switch to run mode when ready;
-#X obj 305 226 inlet;
-#X obj 305 249 nbx 8 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -262144 -1 -1 0 256;
-#X text 344 218 note: while in training mode the right outlet gives
-you the mean square error.;
-#X connect 1 0 0 0;
-#X connect 2 0 1 0;
-#X connect 3 0 2 0;
-#X connect 4 0 0 0;
-#X connect 6 0 8 0;
-#X connect 7 0 9 0;
-#X connect 12 0 10 0;
-#X connect 13 0 11 0;
-#X connect 18 0 0 0;
-#X connect 20 0 21 0;
-#X restore 133 114 pd train on the fly;
-#X text 255 113 2b- train on the fly in realtime;
-#X text 224 182 3- run the nn switching this metro ON;
-#X text 277 213 (note \, you must be in run mode);
-#X msg 281 231 run;
-#X text 34 403 left;
-#X text 75 404 right;
-#X text 356 305 4- when you are happy with you nn save it;
-#X text 354 323 remember that you can load it also passing filename
-as argument;
-#X obj 301 404 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 300 422 mse is usefull while training on-the-fly: tells you
-the global error in the net \, how much net's output differs from desired
-output.;
-#X obj 66 325 ann_mlp complex.net;
-#X connect 0 0 31 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 1 2 4 0;
-#X connect 1 3 5 0;
-#X connect 2 0 11 0;
-#X connect 3 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 14 0;
-#X connect 7 0 31 0;
-#X connect 8 0 7 0;
-#X connect 9 0 8 0;
-#X connect 15 0 31 0;
-#X connect 16 0 31 0;
-#X connect 18 0 31 0;
-#X connect 20 0 31 0;
-#X connect 24 0 31 0;
-#X connect 31 0 1 0;
-#X connect 31 1 29 0;
-#X connect 31 1 20 0;
-#X restore 16 142 pd train and run nn;
-#X text 101 12 1- start rendering;
-#X text 141 142 2- open the subpatch and follow instructions;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
diff --git a/externals/ann/examples/ann_mlp_example2/stereo.pd b/externals/ann/examples/ann_mlp_example2/stereo.pd
deleted file mode 100644
index d9cc20281e980bb530739934cbe0791171d66541..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example2/stereo.pd
+++ /dev/null
@@ -1,99 +0,0 @@
-#N canvas 425 165 329 158 12;
-#X obj 113 -1 inlet~;
-#N canvas 0 0 524 249 graph23 0;
-#X obj 9 6 inlet~;
-#X obj 28 33 hsl 60 20 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 3617 1;
-#X obj 18 193 outlet~;
-#X obj 89 193 outlet~;
-#N canvas 117 45 762 354 guts 0;
-#X obj 160 -30 inlet;
-#X obj 212 167 outlet;
-#X obj 61 191 outlet;
-#X obj 89 71 -;
-#X msg 89 45 1;
-#X obj 86 20 bang;
-#X text 329 -24 calcola i fattori di moltiplicazione;
-#X text 329 -7 usando la formula (x*x);
-#X obj 212 92 expr sqrt($f1);
-#X obj 61 103 expr sqrt($f1);
-#X msg 61 135 \$1 5;
-#X obj 61 160 line;
-#X msg 212 119 \$1 5;
-#X obj 212 144 line;
-#X connect 0 0 3 1;
-#X connect 0 0 5 0;
-#X connect 0 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 8 0 12 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 2 0;
-#X connect 12 0 13 0;
-#X connect 13 0 1 0;
-#X restore 109 87 pd guts;
-#X obj 39 136 *~;
-#X obj 78 135 *~;
-#N canvas 143 79 506 267 help 0;
-#X text 31 23 this abstraction splits one signal into a 2 channels
-(stereo). uses 1/(x*x) formula;
-#X text 115 137 info@davidemorelli.it;
-#X restore 230 87 pd help;
-#X text 154 137 info@davidemorelli.it;
-#X obj 78 7 inlet;
-#N canvas 226 183 486 430 randomswalk 0;
-#X obj 57 44 inlet;
-#X obj 54 387 outlet;
-#X obj 126 44 inlet;
-#X obj 58 130 f;
-#X obj 98 168 +;
-#X obj 161 219 clip 0 1;
-#X obj 128 105 randF 0.2;
-#X obj 126 131 - 0.1;
-#X obj 92 294 line;
-#X obj 128 72 metro 1000;
-#X msg 92 269 \$1 700;
-#X connect 0 0 3 0;
-#X connect 2 0 9 0;
-#X connect 3 0 1 0;
-#X connect 3 0 4 1;
-#X connect 4 0 5 0;
-#X connect 5 0 10 0;
-#X connect 5 0 4 1;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X connect 9 0 6 0;
-#X connect 10 0 8 0;
-#X restore 125 59 pd randomswalk;
-#X obj 436 100 tgl 15 0 empty empty r_walk -15 -6 0 8 -262144 -1 -1
-0 1;
-#X msg 132 12 set \$1;
-#X obj 252 10 loadbang;
-#X msg 253 32 0.5;
-#X connect 0 0 5 0;
-#X connect 0 0 6 0;
-#X connect 1 0 10 0;
-#X connect 4 0 5 1;
-#X connect 4 1 6 1;
-#X connect 5 0 2 0;
-#X connect 6 0 3 0;
-#X connect 9 0 1 0;
-#X connect 10 0 4 0;
-#X connect 10 0 12 0;
-#X connect 11 0 10 1;
-#X connect 12 0 1 0;
-#X connect 13 0 14 0;
-#X connect 14 0 1 0;
-#X coords 0 1 100 -1 90 30 1;
-#X restore 2 1 graph;
-#X obj 1 37 outlet~;
-#X obj 63 37 outlet~;
-#X obj 171 -1 inlet;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 4 0 1 1;
-#X coords 0 0 1 1 70 30 1;
diff --git a/externals/ann/examples/ann_mlp_example3/example3.pd b/externals/ann/examples/ann_mlp_example3/example3.pd
deleted file mode 100644
index d02239530832cfebec5b914953e9ef0c87344ca3..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example3/example3.pd
+++ /dev/null
@@ -1,392 +0,0 @@
-#N canvas 52 54 515 272 12;
-#N canvas 103 30 724 595 guts 0;
-#X msg 89 147 0 \, destroy;
-#X obj 111 177 gemwin;
-#X msg 94 124 reset \, create \, 1;
-#X obj 331 165 gemhead;
-#X obj 331 186 translateXYZ;
-#X obj 402 118 * -1;
-#X obj 331 206 color 0.5 0 0;
-#X obj 383 66 gemmouse 8 8;
-#X obj 363 109 - 4;
-#X obj 405 99 - 4;
-#X obj 331 226 sphere 0.6;
-#X msg 156 102 cursor 0;
-#X msg 126 66 bang;
-#X msg 166 150 lighting 1;
-#N canvas 463 128 573 394 lights 0;
-#X obj 242 277 world_light;
-#X obj 242 163 gemhead 1;
-#X obj 242 225 rotateXYZ;
-#X msg 109 193 debug 0;
-#X msg 110 224 debug 1;
-#X text 20 169 figure out where the light is;
-#X obj 311 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 354 133 pack f f;
-#X obj 334 159 line;
-#X msg 364 42 1;
-#X obj 364 23 loadbang;
-#X obj 344 298 world_light;
-#X obj 346 271 gemhead 1;
-#X obj 429 203 loadbang;
-#X obj 311 63 metro 20000;
-#X msg 400 104 10000;
-#X obj 119 57 delay 10000;
-#X msg 339 96 300;
-#X msg 292 96 50;
-#X msg 364 235 1 1 1;
-#X msg 422 266 0.6 0.3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 8 0 2 2;
-#X connect 9 0 6 0;
-#X connect 10 0 9 0;
-#X connect 10 0 15 0;
-#X connect 12 0 11 0;
-#X connect 13 0 19 0;
-#X connect 13 0 20 0;
-#X connect 14 0 17 0;
-#X connect 14 0 16 0;
-#X connect 15 0 7 1;
-#X connect 16 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 7 0;
-#X connect 19 0 0 1;
-#X connect 20 0 11 1;
-#X restore 543 135 pd lights;
-#X obj 269 139 s posx;
-#X obj 439 152 s posy;
-#X obj 225 25 inlet;
-#X obj 77 19 inlet;
-#X connect 0 0 1 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 2;
-#X connect 5 0 16 0;
-#X connect 6 0 10 0;
-#X connect 7 0 8 0;
-#X connect 7 1 9 0;
-#X connect 8 0 4 1;
-#X connect 8 0 15 0;
-#X connect 9 0 5 0;
-#X connect 11 0 1 0;
-#X connect 12 0 2 0;
-#X connect 12 0 13 0;
-#X connect 12 0 11 0;
-#X connect 13 0 1 0;
-#X connect 17 0 0 0;
-#X connect 18 0 12 0;
-#X restore 10 117 pd guts;
-#X obj 9 67 tgl 15 0 empty empty rendering 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 46 95 bng 15 250 50 0 empty empty destroy_gemwin 0 -6 0 8 -262144
--1 -1;
-#N canvas 492 13 794 577 train 0;
-#X floatatom 45 391 5 0 0 0 - - -;
-#X floatatom 83 390 5 0 0 0 - - -;
-#X floatatom 120 392 5 0 0 0 - - -;
-#X floatatom 160 394 5 0 0 0 - - -;
-#X obj 190 206 metro 100;
-#X obj 190 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 42 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 80 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 115 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 154 434 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X text 164 15 1- create the ann;
-#N canvas 503 57 684 391 train 0;
-#X obj 66 319 outlet;
-#X obj 213 183 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 84 16 train;
-#N canvas 0 0 490 340 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 466 316 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 131 57 pd outputs;
-#X obj 130 87 r output1;
-#X obj 213 86 r output2;
-#X floatatom 130 108 5 0 0 0 - - -;
-#X floatatom 212 108 5 0 0 0 - - -;
-#X floatatom 297 106 5 0 0 0 - - -;
-#X floatatom 378 107 5 0 0 0 - - -;
-#X obj 297 85 r output3;
-#X obj 379 85 r output4;
-#X text 128 14 1- change to training mode;
-#X text 248 49 2- change keys if you want;
-#X text 264 61 defaults are "a" "s" "d" "f";
-#X text 239 182 3- toggle on to start training and off to stop;
-#X msg 170 282 run;
-#X text 200 283 4- switch to run mode when ready;
-#X obj 305 226 inlet;
-#X obj 344 256 nbx 8 14 -1e+037 1e+037 0 0 empty empty MSE 0 -6 0 10
--262144 -1 -1 0 256;
-#N canvas 111 7 806 538 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 227 64 r posx1;
-#X obj 291 65 r posy1;
-#X obj 55 300 outlet;
-#X obj 115 249 s posx1;
-#X obj 147 274 s posy1;
-#X obj 362 64 r posx2;
-#X obj 426 65 r posy2;
-#X obj 185 249 s posx2;
-#X obj 217 274 s posy2;
-#X obj 489 66 r posx3;
-#X obj 553 67 r posy3;
-#X obj 254 248 s posx3;
-#X obj 286 273 s posy3;
-#X obj 616 68 r posx4;
-#X obj 680 69 r posy4;
-#X obj 71 138 pack f f f f f f f f f f;
-#X obj 128 207 unpack f f f f f f f f f f;
-#X obj 321 249 s posx4;
-#X obj 354 274 s posy4;
-#X connect 0 0 2 1;
-#X connect 1 0 19 1;
-#X connect 2 0 19 0;
-#X connect 3 0 2 0;
-#X connect 4 0 19 2;
-#X connect 5 0 19 3;
-#X connect 9 0 19 4;
-#X connect 10 0 19 5;
-#X connect 13 0 19 6;
-#X connect 14 0 19 7;
-#X connect 17 0 19 8;
-#X connect 18 0 19 9;
-#X connect 19 0 6 0;
-#X connect 19 0 20 0;
-#X connect 20 0 7 0;
-#X connect 20 1 8 0;
-#X connect 20 2 11 0;
-#X connect 20 3 12 0;
-#X connect 20 4 15 0;
-#X connect 20 5 16 0;
-#X connect 20 6 21 0;
-#X connect 20 7 22 0;
-#X restore 213 226 pd inputs;
-#N canvas 84 111 790 303 merge 0;
-#X obj 56 34 inlet;
-#X obj 56 73 unpack f f f f f f f f f f;
-#X obj 306 38 r output1;
-#X obj 382 38 r output2;
-#X obj 460 39 r output3;
-#X obj 537 39 r output4;
-#X obj 78 137 pack f f f f f f f f f f f f f f;
-#X obj 78 184 outlet;
-#X connect 0 0 1 0;
-#X connect 1 0 6 0;
-#X connect 1 1 6 1;
-#X connect 1 2 6 2;
-#X connect 1 3 6 3;
-#X connect 1 4 6 4;
-#X connect 1 5 6 5;
-#X connect 1 6 6 6;
-#X connect 1 7 6 7;
-#X connect 1 8 6 8;
-#X connect 1 9 6 9;
-#X connect 2 0 6 10;
-#X connect 3 0 6 11;
-#X connect 4 0 6 12;
-#X connect 5 0 6 13;
-#X connect 6 0 7 0;
-#X restore 140 254 pd merge outputs;
-#X obj 213 202 metro 100;
-#X connect 1 0 22 0;
-#X connect 2 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 7 0;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 16 0 0 0;
-#X connect 18 0 19 0;
-#X connect 20 0 21 0;
-#X connect 21 0 0 0;
-#X connect 22 0 20 0;
-#X restore 133 114 pd train on the fly;
-#X text 224 182 3- run the nn switching this metro ON;
-#X text 277 213 (note \, you must be in run mode);
-#X msg 281 231 run;
-#X text 364 303 4- when you are happy with you nn save it;
-#X text 362 321 remember that you can load it also passing filename
-as argument;
-#X obj 301 404 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 300 422 mse is usefull while training on-the-fly: tells you
-the global error in the net \, how much net's output differs from desired
-output.;
-#N canvas 111 7 814 546 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 227 64 r posx1;
-#X obj 291 65 r posy1;
-#X obj 55 300 outlet;
-#X obj 115 249 s posx1;
-#X obj 147 274 s posy1;
-#X obj 362 64 r posx2;
-#X obj 426 65 r posy2;
-#X obj 185 249 s posx2;
-#X obj 217 274 s posy2;
-#X obj 489 66 r posx3;
-#X obj 553 67 r posy3;
-#X obj 254 248 s posx3;
-#X obj 286 273 s posy3;
-#X obj 616 68 r posx4;
-#X obj 680 69 r posy4;
-#X obj 71 138 pack f f f f f f f f f f;
-#X obj 128 207 unpack f f f f f f f f f f;
-#X obj 321 249 s posx4;
-#X obj 354 274 s posy4;
-#X connect 0 0 2 1;
-#X connect 1 0 19 1;
-#X connect 2 0 19 0;
-#X connect 3 0 2 0;
-#X connect 4 0 19 2;
-#X connect 5 0 19 3;
-#X connect 9 0 19 4;
-#X connect 10 0 19 5;
-#X connect 13 0 19 6;
-#X connect 14 0 19 7;
-#X connect 17 0 19 8;
-#X connect 18 0 19 9;
-#X connect 19 0 6 0;
-#X connect 19 0 20 0;
-#X connect 20 0 7 0;
-#X connect 20 1 8 0;
-#X connect 20 2 11 0;
-#X connect 20 3 12 0;
-#X connect 20 4 15 0;
-#X connect 20 5 16 0;
-#X connect 20 6 21 0;
-#X connect 20 7 22 0;
-#X restore 188 229 pd inputs;
-#X text 325 115 2- train on the fly in realtime;
-#X obj 64 348 unpack f f f f;
-#X msg 66 15 create 10 4;
-#X msg 247 306 save tdnn.net;
-#X msg 247 325 load tdnn.net;
-#X text 24 412 still;
-#X text 72 412 left;
-#X text 111 413 right;
-#X text 156 415 na;
-#X obj 66 325 ann_mlp tdnn.net;
-#X connect 0 0 6 0;
-#X connect 1 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 19 0;
-#X connect 5 0 4 0;
-#X connect 11 0 29 0;
-#X connect 14 0 29 0;
-#X connect 19 0 29 0;
-#X connect 21 0 0 0;
-#X connect 21 1 1 0;
-#X connect 21 2 2 0;
-#X connect 21 3 3 0;
-#X connect 22 0 29 0;
-#X connect 23 0 29 0;
-#X connect 24 0 29 0;
-#X connect 29 0 21 0;
-#X connect 29 1 17 0;
-#X connect 29 1 11 0;
-#X restore 8 191 pd train and run nn;
-#X text 93 61 1- start rendering;
-#X text 71 170 2- open the subpatch and follow instructions;
-#X text 15 5 TDNN implementation (Time Delay Neural Network) useful
-for gesture recognition;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
diff --git a/externals/ann/examples/ann_mlp_example3/tdnn.net b/externals/ann/examples/ann_mlp_example3/tdnn.net
deleted file mode 100644
index 6c9540db08a2837d753aa217ed4fba3f60d8a549..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example3/tdnn.net
+++ /dev/null
@@ -1,7 +0,0 @@
-FANN_FLO_1.1
-3 0.700000 1.000000 0 5 5 5.00000000000000000000e-001 5.00000000000000000000e-001
-11 4 5 
-0 0 0 0 0 0 0 0 0 0 0 
-11 11 11 0 
-4 4 4 4 0 
-(0 3.98359465599060060000e+000) (1 -3.46662133932113650000e-001) (2 1.66724932193756100000e+000) (3 -3.35077017545700070000e-001) (4 -5.66196799278259280000e-001) (5 -3.65077793598175050000e-001) (6 -2.26146197319030760000e+000) (7 1.53752446174621580000e-001) (8 -3.91640329360961910000e+000) (9 4.93833124637603760000e-001) (10 -4.37475204467773440000e+000) (0 2.48541951179504390000e+000) (1 2.93741494417190550000e-001) (2 1.34525704383850100000e+000) (3 3.87542009353637700000e-001) (4 2.62434352189302440000e-002) (5 4.33074653148651120000e-001) (6 -9.10757899284362790000e-001) (7 2.65246361494064330000e-001) (8 -2.17471313476562500000e+000) (9 3.53803992271423340000e-001) (10 -7.55431175231933590000e-001) (0 -4.49254703521728520000e+000) (1 -6.78778812289237980000e-002) (2 -2.04198622703552250000e+000) (3 -1.45705610513687130000e-001) (4 1.97579100728034970000e-001) (5 -4.57823067903518680000e-001) (6 2.62115192413330080000e+000) (7 -2.74485975503921510000e-001) (8 4.33024168014526370000e+000) (9 -2.26368784904479980000e-001) (10 -3.94826436042785640000e+000) (11 -1.19106411933898930000e+000) (12 -2.40987926721572880000e-001) (13 -1.45797419548034670000e+000) (14 2.45804578065872190000e-001) (11 6.82796686887741090000e-002) (12 -3.14634591341018680000e-002) (13 1.29793524742126460000e+000) (14 1.30129599571228030000e+000) (11 1.01107788085937500000e+000) (12 4.44010108709335330000e-001) (13 3.43794375658035280000e-001) (14 8.93330514430999760000e-001) (11 1.50074372683870950000e-016) (12 4.71110857886675280000e-017) (13 1.25351783824343270000e-016) (14 1.36875296494823600000e-017) 
diff --git a/externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd b/externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd
deleted file mode 100644
index 6c3f5bc14fdc8f76ea0d19dc77abf4fcd81c43c1..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd
+++ /dev/null
@@ -1,39 +0,0 @@
-#N canvas 711 130 586 632 10;
-#X text 198 23 ::::_gen_trainfile_::::;
-#X text 46 68 This abstraction generates a trainig file for ann_mlp
-and ann_td;
-#X obj 351 443 gen_trainfile;
-#X msg 437 154 test.txt;
-#X text 313 153 1) set filename:;
-#X msg 394 215 4 2 1;
-#X text 249 217 2) set file header:;
-#X text 183 241 4 = nr. of training datasets;
-#X text 184 255 2 = inputs of the neural net;
-#X text 184 269 1 = output of the neural net;
-#X msg 150 393 0 0 0;
-#X msg 197 393 0 1 1;
-#X msg 247 393 1 0 1;
-#X msg 293 393 1 1 0;
-#X text 46 116 Example:;
-#X text 36 311 3) send training data (first inputs \, then output)
-;
-#X text 58 327 because you have now 4 training datasets you;
-#X text 57 342 must pass 4 lists !!!;
-#X text 162 374 a;
-#X text 209 374 b;
-#X text 259 375 c;
-#X text 302 374 d;
-#X floatatom 351 469 5 0 0 0 - - -;
-#X obj 437 501 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 332 502 file is ready:;
-#X text 238 468 added datasets:;
-#X text 150 573 (c) 2005 \, Georg Holzmann <grh@mur.at>;
-#X connect 2 0 22 0;
-#X connect 2 1 23 0;
-#X connect 3 0 2 2;
-#X connect 5 0 2 1;
-#X connect 10 0 2 0;
-#X connect 11 0 2 0;
-#X connect 12 0 2 0;
-#X connect 13 0 2 0;
diff --git a/externals/ann/examples/ann_mlp_example4/gen_trainfile.pd b/externals/ann/examples/ann_mlp_example4/gen_trainfile.pd
deleted file mode 100644
index 0f134e478aa2bfafb0dfccf473f76afb0c6ed10a..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example4/gen_trainfile.pd
+++ /dev/null
@@ -1,180 +0,0 @@
-#N canvas 60 0 578 726 10;
-#X obj 60 466 inlet;
-#X text 95 228 <nr of tests> <nr of inputs> <nr of outputs>;
-#X text 98 248 nr of tests = with how many datasets;
-#X text 197 262 should be trained;
-#X text 97 282 nr of inputs = inputs of the neural net;
-#X text 98 304 nr of outputs = outputs of the neural net;
-#X text 100 380 <input1> <input2> ... <output1> <output2> ...;
-#X obj 418 542 textfile;
-#X text 59 190 1) set filename at 3.inlet;
-#X text 59 210 2) set the following list at 2 inlet:;
-#X text 61 334 3) pass the datasets as a list (one after the other)
-into 1.inlet \, one list contains the input and desired output values
-\, like:;
-#X text 50 443 datalist;
-#X obj 230 467 inlet;
-#X text 229 448 header;
-#X text 40 169 INLETS:;
-#X obj 419 466 inlet;
-#X text 410 447 filename;
-#N canvas 0 0 450 300 write_header 0;
-#X obj 30 29 inlet;
-#X obj 30 67 t l b b;
-#X obj 30 256 s \$0-textfile;
-#X msg 74 97 clear;
-#X msg 52 135 rewind;
-#X msg 30 165 add \$1 \$2 \$3;
-#X obj 170 79 unpack f f f;
-#X obj 170 111 s \$0-size;
-#X obj 209 138 s \$0-ins;
-#X obj 181 206 s \$0-ok_for_new_datasets;
-#X msg 181 180 1;
-#X connect 0 0 1 0;
-#X connect 0 0 6 0;
-#X connect 1 0 5 0;
-#X connect 1 1 4 0;
-#X connect 1 2 3 0;
-#X connect 1 2 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 7 0;
-#X connect 6 1 8 0;
-#X connect 10 0 9 0;
-#X restore 230 493 pd write_header;
-#X obj 418 521 r \$0-textfile;
-#N canvas 672 100 450 561 write_datasets 0;
-#X obj 25 34 inlet;
-#X obj 25 487 outlet;
-#X obj 242 160 niagara;
-#X obj 298 159 r \$0-ins;
-#X obj 303 223 lister;
-#X msg 221 250 add;
-#X obj 242 195 t b b l;
-#X obj 303 245 t b l;
-#X msg 304 271 add;
-#X obj 273 340 s \$0-textfile;
-#X obj 221 277 iem_append;
-#X obj 304 298 iem_append;
-#X obj 139 339 s \$0-write;
-#X obj 62 92 r \$0-ok_for_new_datasets;
-#X obj 25 115 spigot;
-#X obj 25 143 t b l;
-#N canvas 115 166 450 464 count_datasets 0;
-#X obj 86 247 f;
-#X obj 86 98 inlet;
-#X msg 147 247 0;
-#X obj 147 216 loadbang;
-#X obj 86 366 outlet;
-#X obj 116 247 + 1;
-#X obj 86 284 % \$1;
-#X text 89 74 bang;
-#X text 248 125 modulo;
-#X text 147 80 reset;
-#X obj 249 268 - 1;
-#X obj 230 304 sel;
-#X obj 230 365 outlet;
-#X text 219 389 bang after;
-#X text 220 403 one circle;
-#X text 83 389 numbers;
-#X obj 201 248 f \$1;
-#X obj 86 193 t b;
-#X obj 249 146 r \$0-size;
-#X obj 147 98 r \$0-ok_for_new_datasets;
-#X obj 147 120 sel 1;
-#X connect 0 0 6 0;
-#X connect 1 0 17 0;
-#X connect 2 0 0 1;
-#X connect 3 0 2 0;
-#X connect 3 0 16 0;
-#X connect 5 0 0 1;
-#X connect 6 0 5 0;
-#X connect 6 0 4 0;
-#X connect 6 0 11 0;
-#X connect 10 0 11 1;
-#X connect 11 0 12 0;
-#X connect 16 0 10 0;
-#X connect 17 0 0 0;
-#X connect 18 0 6 1;
-#X connect 18 0 10 0;
-#X connect 19 0 20 0;
-#X connect 20 0 2 0;
-#X restore 25 237 pd count_datasets;
-#X obj 139 396 s \$0-ok_for_new_datasets;
-#X msg 139 376 0;
-#X obj 139 487 outlet;
-#X obj 25 58 t l b;
-#N canvas 0 0 450 300 WARNINGS 0;
-#X obj 20 22 inlet;
-#X obj 20 114 == 0;
-#X obj 36 54 r \$0-ok_for_new_datasets;
-#X obj 20 206 print gen_trainfile_WARNING;
-#X obj 20 81 f 0;
-#X msg 20 178 file is full or create new header;
-#X obj 20 141 sel 1;
-#X connect 0 0 4 0;
-#X connect 1 0 6 0;
-#X connect 2 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X restore 289 75 pd WARNINGS;
-#X obj 25 461 + 1;
-#X connect 0 0 20 0;
-#X connect 2 0 6 0;
-#X connect 2 1 4 1;
-#X connect 3 0 2 1;
-#X connect 4 0 7 0;
-#X connect 5 0 10 0;
-#X connect 6 0 4 0;
-#X connect 6 1 5 0;
-#X connect 6 2 10 1;
-#X connect 7 0 8 0;
-#X connect 7 1 11 1;
-#X connect 8 0 11 0;
-#X connect 10 0 9 0;
-#X connect 11 0 9 0;
-#X connect 13 0 14 1;
-#X connect 14 0 15 0;
-#X connect 15 0 16 0;
-#X connect 15 1 2 0;
-#X connect 16 0 22 0;
-#X connect 16 1 18 0;
-#X connect 16 1 12 0;
-#X connect 16 1 19 0;
-#X connect 18 0 17 0;
-#X connect 20 0 14 0;
-#X connect 20 1 21 0;
-#X connect 22 0 1 0;
-#X restore 60 495 pd write_datasets;
-#X text 39 118 NEEDED EXTERNALS: zexy and iemlib (http://pd.iem.at)
-;
-#N canvas 832 484 389 329 write_file 0;
-#X obj 29 37 inlet;
-#X obj 96 151 symbol;
-#X obj 96 91 r \$0-write;
-#X msg 96 177 write \$1 cr;
-#X obj 96 203 s \$0-textfile;
-#X obj 133 126 symbol;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 5 0 1 1;
-#X restore 419 488 pd write_file;
-#X text 40 137 HOW TO Use it: (see also help file);
-#X obj 60 561 outlet;
-#X obj 222 563 outlet;
-#X text 48 583 written datasets;
-#X text 216 585 file is ready and written (bang);
-#X text 134 658 (c) 2005 \, Georg Holzmann <grh@mur.at>;
-#X text 72 72 This abstraction generates a trainig file for ann_mlp
-and ann_td.;
-#X text 192 25 ::::_gen_trainfile_::::;
-#X connect 0 0 19 0;
-#X connect 12 0 17 0;
-#X connect 15 0 21 0;
-#X connect 18 0 7 0;
-#X connect 19 0 23 0;
-#X connect 19 1 24 0;
diff --git a/externals/ann/examples/ann_mlp_example4/multidim_net.pd b/externals/ann/examples/ann_mlp_example4/multidim_net.pd
deleted file mode 100644
index 41acb5fb83e985bdf9e5cedd18d8677c7a6415e4..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example4/multidim_net.pd
+++ /dev/null
@@ -1,387 +0,0 @@
-#N canvas 57 0 663 539 10;
-#X obj 396 55 grid grid1 200 -1 1 200 -1 1 1 0.001 0.001 2 2 450 248
-;
-#X floatatom 396 261 5 0 0 0 - - -;
-#X floatatom 589 262 5 0 0 0 - - -;
-#X obj 397 278 pack f f;
-#X obj 81 136 h_vector sample_pool;
-#X msg 183 119 print;
-#N canvas 143 0 450 300 pushback 0;
-#X obj 22 21 inlet;
-#X msg 22 120 pushback;
-#X obj 22 195 outlet;
-#X obj 22 156 iem_append;
-#X obj 22 76 t b a;
-#X connect 0 0 4 0;
-#X connect 1 0 3 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 0;
-#X connect 4 1 3 1;
-#X restore 81 97 pd pushback;
-#X msg 183 98 clear;
-#X text 37 27 add new datasets to the vector:;
-#N canvas 504 132 747 729 train_net_on_datasets 0;
-#X obj 116 562 gen_trainfile;
-#X text 91 404 2) step through all;
-#X text 85 108 1) create net;
-#X text 106 151 a) get nr. of inputs:;
-#X obj 122 205 h_vector sample_pool;
-#X msg 122 183 get 0;
-#X obj 122 227 length;
-#X obj 122 249 - 1;
-#X text 297 151 b) get nr. of outputs:;
-#X obj 314 199 h_vector sample_pool;
-#X msg 314 178 getsize;
-#X obj 122 129 t b b;
-#X obj 122 288 pack 0 0 0;
-#X obj 122 345 s \$0-to_net;
-#X obj 46 41 inlet;
-#X obj 159 488 pack 0 0 0 0;
-#X msg 159 536 \$2 \$3 \$4;
-#N canvas 754 184 450 454 step_through_datas 0;
-#X obj 21 20 inlet;
-#X obj 79 423 outlet;
-#X obj 130 99 h_vector sample_pool;
-#X msg 130 79 getsize;
-#X obj 21 138 h_for;
-#X obj 21 213 h_vector sample_pool;
-#X msg 21 191 get \$1;
-#X obj 21 257 niagara 1;
-#X text 62 278 input;
-#X obj 21 48 t b b;
-#X obj 21 164 t f f;
-#X obj 203 257 h_muxlist;
-#X text 183 279 output;
-#X obj 79 353 glue;
-#X connect 0 0 9 0;
-#X connect 2 1 4 1;
-#X connect 2 1 11 1;
-#X connect 3 0 2 0;
-#X connect 4 0 10 0;
-#X connect 5 0 7 0;
-#X connect 6 0 5 0;
-#X connect 7 1 13 0;
-#X connect 9 0 4 0;
-#X connect 9 1 3 0;
-#X connect 10 0 6 0;
-#X connect 10 1 11 0;
-#X connect 11 0 13 1;
-#X connect 13 0 1 0;
-#X restore 116 458 pd step_through_datas;
-#X obj 116 429 t b b b;
-#X text 65 601 3) train the net on it;
-#X msg 202 512 tmp/trainfile.dat;
-#X obj 46 694 s \$0-to_net;
-#X obj 46 68 t b b b;
-#X msg 106 623 FANN_TRAIN_RPROP;
-#X msg 106 646 FANN_TRAIN_QUICKPROP;
-#X obj 46 577 t b b;
-#X obj 187 265 * 2;
-#X msg 46 671 train-on-file tmp/trainfile.dat;
-#X msg 122 314 create \$1 \$2 3 \$3 1 0.7;
-#X msg 363 612 set_activation_function_output FANN_LINEAR;
-#X msg 364 583 set_activation_function_hidden FANN_LINEAR;
-#X msg 372 669 randomize_weights -0.1 0.1;
-#X msg 365 643 desired_error 0.001;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 12 0;
-#X connect 7 0 15 2;
-#X connect 9 1 12 1;
-#X connect 9 1 15 3;
-#X connect 9 1 15 1;
-#X connect 9 1 26 0;
-#X connect 10 0 9 0;
-#X connect 11 0 5 0;
-#X connect 11 1 10 0;
-#X connect 12 0 28 0;
-#X connect 14 0 22 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 1;
-#X connect 17 0 0 0;
-#X connect 18 0 17 0;
-#X connect 18 1 15 0;
-#X connect 18 2 20 0;
-#X connect 20 0 0 2;
-#X connect 22 0 25 0;
-#X connect 22 1 18 0;
-#X connect 22 2 11 0;
-#X connect 24 0 21 0;
-#X connect 25 0 27 0;
-#X connect 25 1 31 0;
-#X connect 25 1 32 0;
-#X connect 25 1 24 0;
-#X connect 26 0 12 2;
-#X connect 27 0 21 0;
-#X connect 28 0 13 0;
-#X connect 31 0 21 0;
-#X connect 32 0 21 0;
-#X restore 80 222 pd train_net_on_datasets;
-#X text 37 178 generate new net and train it on the datasets:;
-#X text 35 263 the neural net:;
-#N canvas 0 564 450 300 nn_for_samples 0;
-#X obj 72 63 r \$0-to_net;
-#X obj 72 125 h_maxlist;
-#X obj 72 243 outlet;
-#X text 72 267 index;
-#X obj 177 198 h_vector sample_pool;
-#X msg 177 175 get \$1;
-#X obj 177 241 outlet;
-#X text 176 263 samplename;
-#X obj 177 219 unpack s;
-#X obj 91 175 print;
-#N canvas 265 255 690 335 training 0;
-#X obj 71 288 outlet;
-#X msg 82 195 FANN_TRAIN_INCREMENTAL;
-#X msg 82 216 FANN_TRAIN_BATCH;
-#X msg 81 238 FANN_TRAIN_RPROP;
-#X msg 81 258 FANN_TRAIN_QUICKPROP;
-#X text 40 28 you can set the training algorithm simply sending a message
-with the name of the algorithm chosen. possible values are: FANN_TRAIN_INCREMENTAL
-FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP the default
-is: FANN_TRAIN_RPROP see the FANN manual for details on each algorithm:
-http://fann.sourceforge.net/html/r1996.html;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 215 58 pd training algorithm;
-#N canvas 371 92 698 395 training 0;
-#X obj 52 230 outlet;
-#X msg 69 118 desired_error 0.01;
-#X msg 79 146 max_iterations 500000;
-#X msg 90 178 iterations_between_reports 1000;
-#X text 58 28 you can change training parameters. see FANN manual for
-details (http://fann.sourceforge.net);
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 216 84 pd training params;
-#N canvas 371 92 694 391 activation 0;
-#X obj 49 335 outlet;
-#X text 40 28 you can set ti output activation algorithm passing a
-message to nn. see the FANN manual for description of the algorithms
-;
-#X msg 69 118 set_activation_function_output FANN_THRESHOLD;
-#X msg 83 139 set_activation_function_output FANN_THRESHOLD_SYMMETRIC
-;
-#X msg 95 163 set_activation_function_output FANN_LINEAR;
-#X msg 98 184 set_activation_function_output FANN_SIGMOID;
-#X msg 106 206 set_activation_function_output FANN_SIGMOID_STEPWISE
-;
-#X msg 108 233 set_activation_function_output FANN_SIGMOID_SYMMETRIC
-;
-#X msg 115 256 set_activation_function_output FANN_SIGMOID_SYMMETRIC_STEPWISE
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X restore 215 108 pd activation algorithm;
-#X msg 109 33 print;
-#X msg 114 9 learnrate 1;
-#X obj 83 96 ann_mlp;
-#X msg 235 20 load tmp/testnet.ann;
-#X connect 0 0 15 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 4 0 8 0;
-#X connect 5 0 4 0;
-#X connect 8 0 6 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 0;
-#X connect 15 0 1 0;
-#X connect 15 0 9 0;
-#X connect 16 0 15 0;
-#X restore 90 293 pd nn_for_samples;
-#X floatatom 90 310 5 0 0 0 index - -;
-#X symbolatom 171 310 15 0 0 0 file - -;
-#X obj 80 202 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 396 300 s \$0-to_net;
-#N canvas 19 332 538 494 make_random_datasets_for_testing 0;
-#X text 26 17 make 200 8-dimensional random datasets \, for testing
-;
-#X obj 152 158 h_randfloat -1 1;
-#X obj 193 198 h_randfloat -1 1;
-#X obj 170 178 h_randfloat -1 1;
-#X obj 212 218 h_randfloat -1 1;
-#X obj 276 157 h_randfloat -1 1;
-#X obj 313 198 h_randfloat -1 1;
-#X obj 294 177 h_randfloat -1 1;
-#X obj 336 217 h_randfloat -1 1;
-#X obj 43 377 pack s f f f f f f f f;
-#X obj 43 126 t f b;
-#X obj 43 261 makefilename sample%d.wav;
-#X obj 43 438 outlet;
-#X obj 43 52 inlet;
-#X obj 108 52 inlet;
-#X obj 43 91 h_for 10;
-#X connect 1 0 9 1;
-#X connect 2 0 9 3;
-#X connect 3 0 9 2;
-#X connect 4 0 9 4;
-#X connect 5 0 9 5;
-#X connect 6 0 9 7;
-#X connect 7 0 9 6;
-#X connect 8 0 9 8;
-#X connect 9 0 12 0;
-#X connect 10 0 11 0;
-#X connect 10 1 1 0;
-#X connect 10 1 3 0;
-#X connect 10 1 2 0;
-#X connect 10 1 4 0;
-#X connect 10 1 5 0;
-#X connect 10 1 7 0;
-#X connect 10 1 6 0;
-#X connect 10 1 8 0;
-#X connect 11 0 9 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 1;
-#X connect 15 0 10 0;
-#X restore 158 387 pd make_random_datasets_for_testing;
-#X obj 158 365 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 989 300 8-dimen-dataset 0;
-#X obj 27 40 inlet;
-#X obj 73 40 inlet;
-#X obj 73 63 t b f;
-#X obj 118 40 inlet;
-#X obj 118 63 t b f;
-#X obj 163 40 inlet;
-#X obj 163 63 t b f;
-#X obj 208 40 inlet;
-#X obj 208 63 t b f;
-#X obj 252 40 inlet;
-#X obj 252 63 t b f;
-#X obj 297 40 inlet;
-#X obj 297 63 t b f;
-#X obj 342 40 inlet;
-#X obj 342 63 t b f;
-#X obj 127 201 pack 0 0 0 0 0 0 0 0;
-#X obj 337 257 outlet;
-#X obj 422 39 inlet;
-#X text 418 20 random;
-#X obj 422 104 h_randfloat -1 1;
-#X obj 477 145 h_randfloat -1 1;
-#X obj 454 125 h_randfloat -1 1;
-#X obj 496 165 h_randfloat -1 1;
-#X obj 560 104 h_randfloat -1 1;
-#X obj 597 145 h_randfloat -1 1;
-#X obj 578 124 h_randfloat -1 1;
-#X obj 620 164 h_randfloat -1 1;
-#X obj 422 63 t b b;
-#X obj 422 207 pack 0 0 0 0 0 0 0 0;
-#X connect 0 0 15 0;
-#X connect 1 0 2 0;
-#X connect 2 0 15 0;
-#X connect 2 1 15 1;
-#X connect 3 0 4 0;
-#X connect 4 0 15 0;
-#X connect 4 1 15 2;
-#X connect 5 0 6 0;
-#X connect 6 0 15 0;
-#X connect 6 1 15 3;
-#X connect 7 0 8 0;
-#X connect 8 0 15 0;
-#X connect 8 1 15 4;
-#X connect 9 0 10 0;
-#X connect 10 0 15 0;
-#X connect 10 1 15 5;
-#X connect 11 0 12 0;
-#X connect 12 0 15 0;
-#X connect 12 1 15 6;
-#X connect 13 0 14 0;
-#X connect 14 0 15 0;
-#X connect 14 1 15 7;
-#X connect 15 0 16 0;
-#X connect 17 0 27 0;
-#X connect 19 0 28 0;
-#X connect 20 0 28 2;
-#X connect 21 0 28 1;
-#X connect 22 0 28 3;
-#X connect 23 0 28 4;
-#X connect 24 0 28 6;
-#X connect 25 0 28 5;
-#X connect 26 0 28 7;
-#X connect 27 0 19 0;
-#X connect 27 1 23 0;
-#X connect 27 1 21 0;
-#X connect 27 1 25 0;
-#X connect 27 1 20 0;
-#X connect 27 1 24 0;
-#X connect 27 1 22 0;
-#X connect 27 1 26 0;
-#X connect 28 0 16 0;
-#X restore 467 441 pd 8-dimen-dataset;
-#X obj 467 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 484 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 501 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 518 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 536 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 553 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 570 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 587 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X text 465 338 8 dimensional:;
-#X obj 467 463 s \$0-to_net;
-#X obj 600 442 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 511 353 0;
-#X msg 377 370 250;
-#X obj 420 92 cnv 15 1 1 empty empty 1 5 7 0 8 -241291 -241291 0;
-#X obj 412 195 cnv 15 1 1 empty empty 2 5 7 0 8 -241291 -241291 0;
-#X obj 415 215 cnv 15 1 1 empty empty 3 5 7 0 8 -241291 -241291 0;
-#X obj 434 200 cnv 15 1 1 empty empty 4 5 7 0 8 -241291 -241291 0;
-#X obj 476 160 cnv 15 1 1 empty empty 5 5 7 0 8 -241291 -241291 0;
-#X obj 485 230 cnv 15 1 1 empty empty 6 5 7 0 8 -241291 -241291 0;
-#X obj 501 177 cnv 15 1 1 empty empty 7 5 7 0 8 -241291 -241291 0;
-#X obj 508 198 cnv 15 1 1 empty empty 8 5 7 0 8 -241291 -241291 0;
-#X obj 526 125 cnv 15 1 1 empty empty 9 5 7 0 8 -241291 -241291 0;
-#X obj 537 223 cnv 15 1 1 empty empty 0 5 7 0 8 -241291 -241291 0;
-#X msg 50 64 sample9.wav 0.34 0.26;
-#X msg 223 64 readXML tmp/2d-data.xml;
-#X connect 0 0 1 0;
-#X connect 0 1 2 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 16 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 12 0 13 0;
-#X connect 12 1 14 0;
-#X connect 15 0 9 0;
-#X connect 18 0 17 0;
-#X connect 19 0 29 0;
-#X connect 20 0 19 0;
-#X connect 21 0 19 1;
-#X connect 22 0 19 2;
-#X connect 23 0 19 3;
-#X connect 24 0 19 4;
-#X connect 25 0 19 5;
-#X connect 26 0 19 6;
-#X connect 27 0 19 7;
-#X connect 30 0 19 8;
-#X connect 31 0 20 0;
-#X connect 31 0 21 0;
-#X connect 31 0 22 0;
-#X connect 31 0 23 0;
-#X connect 31 0 24 0;
-#X connect 31 0 25 0;
-#X connect 31 0 26 0;
-#X connect 31 0 27 0;
-#X connect 32 0 17 1;
-#X connect 43 0 6 0;
-#X connect 44 0 4 0;
diff --git a/externals/ann/examples/ann_mlp_example4/test.txt b/externals/ann/examples/ann_mlp_example4/test.txt
deleted file mode 100644
index c5cdf2b4f63f70c9511265b4a449ea8059e3d617..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example4/test.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-3 2 2
-4 9
-2 1
-5 3
-2 1
-2 4
-0 1
diff --git a/externals/ann/examples/ann_mlp_example4/trainfile.dat b/externals/ann/examples/ann_mlp_example4/trainfile.dat
deleted file mode 100644
index a053f7d5fde8e0a079c0ba135f599a50a1300e93..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example4/trainfile.dat
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 4
--1 -1
-1 0 0 0
-1 -1
-0 1 0 0
--1 1
-0 0 1 0
-1 1
-0 0 0 1
diff --git a/externals/ann/examples/ann_mlp_example4/trainfile2.dat b/externals/ann/examples/ann_mlp_example4/trainfile2.dat
deleted file mode 100644
index 0d3eea73feed49c9bf28d554dc91cfead2c5478e..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_mlp_example4/trainfile2.dat
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 24
--0.5248 -0.4752
--0.690478 -0.328445 0.787627 0.457685 0.785165 -0.609361 2.73531 -0.871147 -0.654311 -0.979694 -0.782768 -0.476533 -0.880441 -0.970331 -0.694041 -0.926005 -0.116742 -0.992307 -0.907731 0.220775 -0.719765 -1 1 -0.103331
--0.6039 0.6138
--0.107354 -0.437122 0.571922 0.56767 -0.0480328 -0.0436363 0.015686 -0.937416 -0.623195 -0.99371 -0.854111 -0.385827 -0.714651 -0.989703 -0.90756 -0.996025 -0.992405 -1 -1 0.405901 -0.0118679 -1 1 -0.0133747
-0.5545 0.6039
--0.272313 -0.036396 0.248606 0.722645 -0.00976638 -0.905512 0.210309 -0.969341 -0.664621 -0.99696 -0.904754 -0.325938 -0.930082 -0.99386 -0.956322 -0.917093 0.0444865 -0.998078 -0.987068 0.468123 0.836558 -1 1 -0.024074
-0.5446 -0.5643
-0.480176 0.343487 0.0527416 0.789494 -0.45131 0.074421 0.647385 -0.942653 -0.760625 -0.993795 -0.840143 -0.820498 -0.926746 -0.992776 -0.938142 -0.830174 -0.155173 -1 -1 0.204588 -0.0142726 -1 1 -0.0610782
diff --git a/externals/ann/examples/ann_som/ann_som.pd b/externals/ann/examples/ann_som/ann_som.pd
deleted file mode 100644
index 3d471edede5585997b1b14b13084aa4f090b83eb..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_som/ann_som.pd
+++ /dev/null
@@ -1,144 +0,0 @@
-#N canvas 258 163 640 725 10;
-#X msg 131 535 print;
-#X msg 132 568 new 5 8 8;
-#X msg 127 139 init;
-#X msg 128 314 train;
-#X msg 129 336 test;
-#X msg 128 427 write;
-#X obj 70 599 ann_som 4 9 10;
-#X msg 70 49 1 0 0 1;
-#X msg 70 68 0 1 0 1;
-#X msg 70 87 2 1 0 0;
-#X msg 128 158 init 0.5;
-#X msg 128 178 init 1 0.5 0 0.5;
-#X text 234 141 init all weights with "0";
-#X text 235 160 init all weights with "0.5";
-#X text 235 177 init weights for each sensor;
-#X msg 128 203 learn 1;
-#X msg 128 237 learn 1 0.9 0.1;
-#X text 226 203 set learning rate to 1;
-#X msg 128 220 learn 0.5 0.999;
-#X text 227 219 set learning rate to 0.5 and factor to 0.999;
-#X text 227 237 set learning rate to 1 \, factor to 0.9 and offset
-to 0.1;
-#X msg 128 254 neighbour 1;
-#X msg 128 271 neighbour 0.5 0.999;
-#X msg 128 288 neighbour 1 0.9 0.1;
-#X text 248 255 set neighbourhood to 1;
-#X text 249 271 set neighbourhoodto 0.5 and factor to 0.999;
-#X text 249 289 set neighbourhood to 1 \, factor to 0.9 and offset
-to 0.1;
-#X text 180 309 set som to "train" mode (learn from sensor-input and
-output winning neuron);
-#X text 179 331 set som to "test" mode (output winning neuron for sensor-input
-\, but do not learn !);
-#X msg 129 368 rule INSTAR;
-#X msg 129 385 rule OUTSTAR;
-#X msg 129 402 rule KOHONEN;
-#X text 218 367 learn with IN-STAR rule;
-#X text 219 385 learn with OUT-STAR rule;
-#X text 219 402 learn with KOHONENrule;
-#X msg 128 445 write mysom.som;
-#X msg 129 469 read;
-#X msg 129 487 read mysom.som;
-#X text 156 68 present various data to the SOM;
-#X text 203 535 for debugging;
-#X text 207 570 create a new SOM with 8x8 neurons \, each having 5
-sensors;
-#X text 204 601 create a new SOM with 9x10 neurons \, each having 4
-sensors;
-#X floatatom 70 654 4 0 0 0 - - -;
-#X text 113 658 winning neuron;
-#N canvas 13 0 889 630 SOMs 0;
-#X text 76 27 SOM :: Self-Organized Maps;
-#X text 55 53 SOMs are "Artificial Neural Networks" \, that are trying
-to learn something about the data presented to them without a supervisor/teacher.
-;
-#X text 59 118 in short:;
-#X text 120 119 the neuron \, whose weight-configuration matches the
-presented data best is the winner (its number (counting from the lower-left
-corner) is sent to the output);
-#X text 121 163 to match the data better the next time it is presented
-\, the weights of the winning neuron are adjusted.;
-#X text 121 188 the weights of the neurons neighbouring the winner
-are adjusted to match the data too \, but not so strong as the winner's.
-;
-#X text 121 276 lr(n+1)=lr(n)*factor;
-#X text 275 277 learning_rate=lr+offset;
-#X text 121 289 nb(n+1)=nb(n)*factor;
-#X text 275 290 neighbourhood=nb+offset;
-#X text 121 230 both neighbourhood and learning-rate (==amount of how
-much the weights of the winner (and \, proportional \, the weights
-of the neighbours) are adjusted) are decreasing recursively with time.
-;
-#X text 119 319 thus you will sooner or (most of the time) later get
-a "brain map" \, where similar inputs will activate neurons in specifique
-regions (like there are regions for seeing and regions for hearing
-in our brains);
-#X text 97 381 there are various rules \, how to re-adjust the weights
-of the neurons : in-star \, out-star and kohonen (maybe there are others
-\, but these i found in literature);
-#X obj 607 220 +;
-#X text 640 182 ...;
-#X obj 579 185 * \$1;
-#X obj 607 185 * \$2;
-#X obj 670 185 * \$0;
-#X obj 579 128 unpack 0 0 0 0 0;
-#X text 602 111 n sensors;
-#X text 705 186 weights 1 to n;
-#X obj 579 90 inlet;
-#X obj 607 288 outlet;
-#X text 594 62 a neuron;
-#X text 566 307 the neuron with the highest weighted sum;
-#X text 567 318 matches best and is therefore the winner;
-#X text 53 452 notes:;
-#X text 101 453 each neuron of the SOM has n sensors. you have to present
-a list of n floats to the SOM to make it work;
-#X text 102 482 you should init the weights for each sensor with the
-expected mean of the sensor values before you start training to get
-best and fastest results;
-#X text 55 87 they were first proposed by the Finnish scientist T.Kohonen
-in the 80ies (i think).;
-#X text 98 543 if you have no clue \, what's this all about \, maybe
-you do not need SOMs (which i doubt) or you should have a look at;
-#X text 118 577 http://www.eas.asu.edu/~eee511;
-#X text 118 591 http://www.cis.hut.fi/projects/ica;
-#X connect 13 0 22 0;
-#X connect 15 0 13 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 18 0 15 0;
-#X connect 18 1 16 0;
-#X connect 18 4 17 0;
-#X connect 21 0 18 0;
-#X restore 535 44 pd SOMs;
-#X text 81 13 ann_som :: train and test Self-Organized Maps;
-#X obj 73 700 ann_som test.som;
-#X text 211 704 load a SOM-file;
-#X msg 128 119 rinit 10;
-#X text 234 121 init all weights with time-seeded random values from
-0 to 10;
-#X connect 0 0 6 0;
-#X connect 1 0 6 0;
-#X connect 2 0 6 0;
-#X connect 3 0 6 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X connect 6 0 42 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 11 0 6 0;
-#X connect 15 0 6 0;
-#X connect 16 0 6 0;
-#X connect 18 0 6 0;
-#X connect 21 0 6 0;
-#X connect 22 0 6 0;
-#X connect 23 0 6 0;
-#X connect 29 0 6 0;
-#X connect 30 0 6 0;
-#X connect 31 0 6 0;
-#X connect 35 0 6 0;
-#X connect 36 0 6 0;
-#X connect 37 0 6 0;
-#X connect 48 0 6 0;
diff --git a/externals/ann/examples/ann_som/test.som b/externals/ann/examples/ann_som/test.som
deleted file mode 100644
index f1074dbffc13a38b9812fd800860c9a47f79b62c..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_som/test.som
+++ /dev/null
@@ -1,206 +0,0 @@
-SOM:
-10 10 10 INSTAR
-0.999999999999999 0.999999999000000 0.000000000000000
-0.999999500000777 0.999999999666666 1.000000000000000
-weights:
- -3.399999539504940 -1.000001787943173 -1.600001854036666 -3.600000136648053 -1.599999240440176 -4.599999658971642 2.200000908266854 -2.600003123982305 -3.800002398132818 3.999999663428766
- -3.664408811633732 -0.293151033136177 -0.987533543750226 -2.380008660046391 -1.570271300167646 -4.070760204272482 1.171876563866566 -2.077239071278385 -3.123878873088140 3.214371110932181
- -3.850183412803100 0.180009854785169 -1.042011297665122 -1.010214762676719 -1.261593950708803 -3.602933720042998 0.223488363849274 -1.757965969969787 -2.823378035872298 2.474907850267799
- -3.267525288182409 0.051764920257421 -0.861189147291411 0.346768964752324 -1.086401295987099 -3.010025855790309 0.216062192056090 -2.054030541621496 -1.665247654188838 1.772114086164674
- -2.531908811257504 -0.228362572156031 0.283020028903598 0.691545049584991 -1.317946071617238 -2.780427630196057 0.669072905841086 -2.095166482257043 -0.357067595055914 1.194836568762597
- -1.670410067094406 -0.850456374464438 1.177079303231737 0.975765076637809 -1.598632087371286 -2.628074788624443 1.200071995849616 -2.338536290646471 0.508359948325128 0.694655469059352
- -0.972839748009842 -1.432819542418945 1.713902285702235 0.848126099774984 -2.005987681503301 -2.656928282231532 1.910400404106563 -2.720742652779477 0.819178516157051 0.589653431079632
- -0.181959862063861 -2.296825850005490 2.030276137478258 0.600072266047657 -2.328238768604089 -2.471193059455867 2.614251703556634 -2.926274832306241 0.937736319882752 0.422230237292192
- 0.752475921921809 -3.242568234927249 2.234683205252513 0.075381526534909 -2.508993189104597 -2.190834422631923 2.869101479640665 -3.069685358187795 0.463639150130185 -0.033986007249940
- 1.277032296769330 -3.659437432736417 2.010782182321743 -0.609641757048304 -2.339016786301861 -1.892952692573185 2.235093837136930 -2.920928645403118 -0.457322232707949 -0.578395974587059
- -3.971512172049805 0.535219847945980 0.494113424082311 -2.582046278675071 -2.275648808854488 -3.787217325944574 0.753567475134825 -0.721689335652595 -2.056146292175192 3.505331826210551
- -4.054055616227821 0.932795291484099 0.631968910358146 -1.799211174553179 -2.022685392946360 -3.707165267473070 0.170647464385876 -0.435571670292075 -1.647185583588689 2.895748631363134
- -3.765892834013276 1.095177178532050 0.685794072420971 -0.865949940711560 -1.533237720537425 -3.325717046871432 -0.074461110943200 -0.540958941347474 -0.835723101096425 2.109037567803126
- -3.037394336772935 0.772399801058053 0.783553802543503 -0.058950070759195 -1.165140010270036 -2.981706324180395 0.301761694648107 -1.145806179670528 0.235066868471340 1.384374535507638
- -2.280475415697267 0.288903162781809 0.942579785873891 0.373043941841189 -0.973589743321277 -2.689381829286646 0.880714123064687 -1.773515781273200 1.081885235242567 0.905503502941021
- -1.638763016008856 -0.139510716533679 1.437726642778894 0.329242139981553 -1.214048517928209 -2.337604934232495 1.529414776710072 -2.023920697334945 1.823470865818372 0.912449978862522
- -0.945934490385355 -0.836910826889674 1.712152920482545 -0.043443967439232 -1.391531518537718 -1.996208920351949 2.320373555929382 -2.190744080167090 2.309937603321630 0.956359142316148
- -0.430544809301166 -1.606495407822214 1.927949686845192 -0.049422629796747 -1.715543639664755 -1.932688381640353 2.907578129583055 -2.358268980262620 2.352761416651015 0.890909090472789
- 0.266372476041017 -2.390096871515600 1.931600793742831 -0.418452141153263 -1.752463769962683 -1.711941696941028 3.074265804116516 -2.347539237000312 1.959481993185272 0.401646855108980
- 1.095070232478888 -3.194254596681922 1.847047929883143 -1.041482644766594 -1.770291204210838 -1.433477834329486 2.939212440990236 -2.356707426618038 1.185541942497902 -0.227465763847785
- -4.348457780362172 1.721596963861671 2.135183134445781 -2.111922371925352 -2.849150791380807 -3.246885574156561 -0.202235625571466 0.973985501026858 -0.706570778236533 3.339732955342597
- -4.368228087686579 1.891149920060809 2.036230106119791 -1.584919277263748 -2.542857897804340 -3.320834155076582 -0.516257946664443 0.988803066251542 -0.521998208876602 2.883873294268708
- -3.725549256069052 1.627180482527442 1.764676337041121 -0.869211830235964 -1.824200701893774 -3.028625730293222 -0.198174242141376 0.255468576666172 0.338992094886507 2.079356408167663
- -2.939301247469378 1.153901448846943 1.515154079925773 -0.221551633876666 -1.260643080102328 -2.803647915219608 0.357719170064413 -0.674190366362191 1.265120767907391 1.373221591802172
- -2.213210917665466 0.678905587923122 1.399888089179242 0.016031973635967 -0.916287941766233 -2.462123276319008 1.049231814138565 -1.424137218878687 2.077511955210475 1.053768497550434
- -1.404549258833299 0.020354228789675 1.600536790199509 -0.341838032506697 -0.935092415097975 -1.800099492021683 2.037377390563832 -1.826035730696359 2.844161435811415 1.223301776599643
- -0.959145511724675 -0.366120237851367 1.798835596447404 -0.688360304163465 -1.042189229628116 -1.395081958669074 2.643253309229007 -1.940494331186044 3.287658092882610 1.436852655212540
- -0.579664979821490 -0.932097345154356 1.811885038506246 -0.765785493000138 -1.132913929893135 -1.348690574070790 2.856968802005087 -1.945734626475421 3.134557629545438 1.185697939467433
- 0.066873477117855 -1.843407992257171 1.757844703442099 -0.998512222771418 -1.166507719716280 -1.234750848424435 3.074504603488980 -1.846014258289374 2.790959475244524 0.639495890830501
- 0.875857253425398 -2.844032956923656 1.650791940139746 -1.435710192921676 -1.138889813201329 -1.010730095187110 3.195197431772648 -1.715636473908582 2.275154266475604 -0.033123061421149
- -4.660625162011301 2.536800912741440 3.310215647546826 -1.983579949583983 -3.423705573642091 -2.970677708592821 -0.756803150219801 2.252324334361614 0.284627008985896 3.523223937670081
- -4.607867248041779 2.503561303070671 3.029252711516285 -1.654005941807064 -3.049345998530499 -3.053166574278017 -0.861813032578485 2.017974391763137 0.206458481746841 3.139965727251893
- -3.773609416123212 1.934895146436837 2.392483051717743 -0.993943430433647 -2.072519242014490 -2.814572222932298 -0.258321491195720 0.799625737773807 0.879593690694208 2.231466783603429
- -2.789602347490602 1.343801926635191 1.698599312341219 -0.559149669333931 -1.189828623687061 -2.505666965663313 0.438264892843017 -0.457625681891893 1.756734457438183 1.418342176391699
- -2.038759034050031 0.870152115398651 1.307059888851808 -0.427694889424221 -0.649211909264716 -2.170456657641060 1.185846061504038 -1.377242076488896 2.585846027652366 1.092907465451668
- -1.171850445387268 0.100149499849393 1.561545417456040 -0.816960421989819 -0.703721283275723 -1.378336808645001 2.339949780122510 -1.843014925682711 3.331994289954238 1.376806053959631
- -0.999999719955215 -0.000000585903002 1.999999098935982 -0.999999895520345 -0.999999462989936 -1.000000523078658 2.999999033998634 -1.999999681036223 3.999998544001918 1.999998416944344
- -0.632308039509177 -0.562919825459804 1.737301575691706 -1.076794263075418 -0.871062099117383 -1.079040498612489 2.865941514133621 -1.864309015004479 3.517763874620793 1.342403707361689
- 0.072590611318608 -1.709026564177329 1.665973803994893 -1.366041769133752 -0.871562894498242 -0.924348357378998 3.137089544753133 -1.567338836721053 3.214040260107593 0.725221564872169
- 0.829922257690500 -2.791581448806690 1.477798632898677 -1.869606992739973 -0.691062853043055 -0.643647750714432 3.372214900102174 -1.218219255031402 2.943578925893897 0.075298555997860
- -4.999999004353584 2.999999255273971 3.999998912072895 -1.999999916896756 -3.999998574535363 -2.999999472519682 -0.999999734527485 2.999998897952910 0.999998555483149 3.999998419257559
- -4.717780845547964 2.775399091467099 3.515321901184576 -1.749949407257044 -3.298073799157822 -2.893666329793864 -0.988638593622910 2.521571524995959 0.537560926712989 3.306252132316069
- -3.755572133400923 2.203112857752405 2.588134581424009 -1.332106785852384 -1.967832435433027 -2.499354290910485 -0.350383495379875 1.161924876277133 1.118184609133092 2.240016661417358
- -2.666049303802033 1.550296860180113 1.693341696663998 -1.045558905111629 -0.975893960345571 -2.116065839009405 0.380721435329468 -0.188824421003278 1.836404564135224 1.385425537121163
- -1.795415457314572 0.918241113126461 1.188838556813491 -0.940813596944324 -0.426024437595116 -1.760646815922883 1.209073456823901 -1.258638064983849 2.513483205516858 1.013762646429432
- -1.037470490324593 0.211258860853280 1.208890079664495 -1.093277407156780 -0.323824850816071 -1.250814015199257 2.133236509527560 -1.806522602674094 3.171683862480717 1.040573130488526
- -0.816325205714192 -0.106895812594265 1.477151645461617 -1.180810581642213 -0.555354411025112 -1.055266982509300 2.581958332355970 -1.855023621673544 3.483803556197770 1.299872752926741
- -0.479760079224889 -0.561914191543606 1.359972152054708 -1.371904515162111 -0.469189009488387 -0.933448824516167 2.692773206515344 -1.734660038032981 3.371131387438572 1.012107824401405
- 0.134474570602915 -1.554904283538802 1.245608616665024 -1.763351294435943 -0.343488968633248 -0.699151155618663 2.975961301908113 -1.377994287902666 3.215526724546621 0.515544464149479
- 0.897368163675452 -3.162279510658690 1.367543791932125 -2.264911550472457 -0.367544176957526 -0.367544359975328 3.632455355362551 -0.735088546376173 3.367542748906255 0.102631499765101
- -4.434684152637360 2.822722937159019 3.753296681033132 -1.932017924244420 -3.405786070903065 -2.539967076432358 -1.082934359810601 2.927733973174099 0.601717183345303 3.143965264537201
- -4.364716228159867 2.801488480535435 3.433822426223437 -1.778495984171522 -2.877245061571190 -2.535400708597968 -1.087090211423334 2.578941545180213 0.551720396658055 2.791716027932460
- -3.583510369081803 2.381662217070830 2.469063426475504 -1.618290495134485 -1.696964102791638 -2.238310462068634 -0.619139734267236 1.418541000549897 0.947026968179092 1.917870437038182
- -2.456675163251826 1.732611459083983 1.418190188110553 -1.551425276661983 -0.564950194587570 -1.804435464166054 0.186328643021739 -0.012555406317352 1.662033083876830 1.086636849245845
- -1.529104937517096 1.178077657015140 0.714495908349704 -1.583908396073388 0.202962066775853 -1.372147858864397 0.926176304801837 -1.094899971431338 2.303198368073808 0.560662287373262
- -0.785939038323318 0.488059056610979 0.411695603408276 -1.672791049733762 0.529916275580196 -0.996155724726522 1.680222615552275 -1.721811103321440 2.800716449029725 0.354838370044879
- -0.569029962760953 0.066431468474963 0.618079516577042 -1.692210147716420 0.299309261472352 -0.882271357282218 2.062281505229379 -1.722299694603762 2.996236089696472 0.511874475670676
- -0.250018522843921 -0.514832002632169 0.616278558718485 -1.840772015274815 0.272995435360592 -0.740535838501878 2.301520832755083 -1.552354419288309 2.940931230404983 0.354967057944476
- 0.251800148920061 -1.464207818135621 0.601343683463328 -2.148222841127547 0.317094840922319 -0.552594270425859 2.639268432510555 -1.197173773408314 2.762688059763771 0.017852103476386
- 0.932318870939532 -2.837790556746765 0.699115191478530 -2.469675844977578 0.219866286695009 -0.355885542350070 3.132995033730602 -0.705545256877810 2.571423101722232 -0.404238609478870
- -3.409130348455066 2.320342843023009 3.433021140904054 -1.986354357329427 -2.669872992752881 -1.903620196472319 -1.226643656478325 3.001494681715124 0.434874098975972 2.004508159421472
- -3.486936690660387 2.454343393773537 2.953049651556981 -1.897026330204475 -2.032262871073851 -2.040910161440657 -1.171924050724737 2.387876699287988 0.502049144039390 1.843557783465804
- -3.046450654987764 2.390179669699468 1.978015599632370 -1.998378427668385 -0.948564526771488 -1.888346267780865 -1.036094204014821 1.563892681764842 0.655088413749008 1.126246851333170
- -1.987885281145493 1.870394550257920 0.729204205356671 -2.108729201400681 0.279930327257761 -1.408247369279901 -0.149786767925481 0.030537924826345 1.431534134693400 0.387621996084839
- -0.990560474224238 1.349885104573934 -0.350057510301517 -2.356203724531257 1.347798812812471 -0.904408431627084 0.624831179540335 -1.189860976028219 2.056642405604107 -0.254008704439007
- -0.451723052804189 0.948538698853010 -0.762990738677392 -2.512724311355281 1.753236881552716 -0.600759948081675 1.149260944365514 -1.749117007355057 2.462390702425005 -0.453614225752723
- -0.342821714944710 0.456585526946645 -0.544845985800462 -2.437549938090235 1.498311526358241 -0.592380470240897 1.460378207963043 -1.627970879648795 2.453575186249362 -0.332371207431372
- -0.090990452026912 -0.326043205753642 -0.420398629284450 -2.490392167778460 1.379016037918900 -0.526974546179914 1.786136703527057 -1.290604598070746 2.215561566922310 -0.401045908423606
- 0.351500638550009 -1.459809654300966 -0.373727620750562 -2.732391989343216 1.376803667781824 -0.362308436365718 2.221269039120766 -0.767954404806289 1.820126757794739 -0.628560714447123
- 0.843261411436526 -2.801998786283713 -0.309734000604769 -2.917966469514248 1.277764799306769 -0.283448036136064 2.668380578732439 -0.191266064689723 1.336611020116643 -0.982474545585568
- -1.690961991805014 0.986821342687000 2.566488957752868 -1.693900834686384 -1.390621841174322 -1.376658418436758 -1.593116188592552 2.869825763341280 0.961185905131165 0.318844343230768
- -1.819226346519956 1.427372656904706 2.291452456605057 -1.960690512433880 -0.718701577617367 -1.374629923794903 -1.523478798811880 2.318501649523097 0.921861723272286 0.353075469279607
- -1.644122345022504 1.622108444420580 1.297562049314988 -2.204630777532875 0.340394567223048 -1.286572647222278 -1.243715476861932 1.355795042542949 1.014071291046899 -0.135483871679969
- -1.022123317714853 1.724408850245733 -0.334785848670425 -2.648334475672161 1.722298924484380 -0.899684746335653 -0.633190066026943 -0.052843534365775 1.304371688135208 -0.867017932134152
- -0.191012263608328 1.428540433034303 -1.866762691470496 -3.140759777809166 3.004461584173736 -0.354850744609877 0.274526644431307 -1.525118463713176 1.861795047810275 -1.459383030263442
- -0.175378396100470 1.649241876975675 -2.123107256089547 -3.473863921578540 3.123107227621487 -0.175378898457855 0.526135470365211 -1.999998989484299 2.350755463675390 -1.298486336870563
- -0.119128676805872 0.791424159624606 -1.728712745773501 -3.164164671298855 2.707755508375711 -0.330842108230214 0.897806012291794 -1.538229801138516 1.846525508519994 -1.148198013380010
- 0.076085774644685 -0.357381756904083 -1.537048935229785 -3.176752378539767 2.611733421835105 -0.321108182103196 1.357299105186912 -0.847638634570576 1.174366272176676 -1.113909923860420
- 0.316320681261502 -1.597273306928110 -1.396596931653985 -3.209403902412908 2.570346236568042 -0.349214486018947 1.776916438878030 -0.099276574925412 0.476605495492240 -1.189400523880245
- 0.663585781423105 -3.089606376458373 -1.397727254839511 -3.366808341347761 2.534144690485831 -0.300631312243230 2.240648481237960 0.683770788564218 -0.411030691352247 -1.501601595339585
- 0.985227351508375 -1.648803714247017 1.030378243219446 -1.108938371643821 1.085345508276510 -0.661127492947246 -1.960002854143423 2.350339312562235 2.198981169026821 -2.011751484405538
- 0.685012171036041 -0.797814233333862 1.015167572478179 -1.259081584039024 1.295653363745759 -1.020849845817081 -2.471105487510094 2.035534513596478 2.392763915072213 -1.881109820501258
- 0.686457158597548 -0.305478783587042 0.484491358383779 -1.895714641521794 2.298100526227314 -0.769266236685295 -2.290347736290570 1.356292058594735 2.221231655718122 -2.289248837821189
- 0.724873185324239 0.462154627339358 -1.112888983140423 -2.525930918118195 3.201684237966901 -0.398264710502263 -1.134521688861845 -0.147908293718716 2.053750911650593 -2.329125395622599
- 0.345904723062259 0.975228187711387 -2.249910548251781 -3.187360830514074 3.481724376298728 -0.208598715262249 -0.083968301693121 -1.162839431456146 1.639867915163044 -1.980969679664417
- 0.166565766418578 1.042210051033558 -2.786104501948422 -3.644236995374659 3.733641111367612 -0.114445549141647 0.271659185917542 -1.442800518024824 1.337210256303109 -1.971230068975365
- 0.081154971433170 0.445914374820914 -2.800724283783551 -3.703825990014068 3.788330455815418 -0.169816536600233 0.539189650157745 -0.975698322917413 0.627755733594187 -1.894174291660718
- 0.096276029706030 -0.689504547336024 -2.509213626516561 -3.608954696301073 3.699244676999937 -0.299082857107967 0.987925121293636 -0.131004590450965 -0.223525503701646 -1.696560706323150
- 0.221838062238937 -1.905655309050296 -2.034787033939481 -3.367544310695088 3.556323326413190 -0.521536534036940 1.486750292195419 0.829522256441825 -1.018302243127148 -1.367544467347987
- 0.193861872065075 -3.162451741077858 -1.913318550815563 -3.384863949688668 3.265633350050881 -0.452220856622311 1.986061058161487 1.391121234729484 -1.792309157385880 -1.432683132603716
- 3.302346844483270 -4.160997073396219 -0.896187169559894 -0.948094666116207 3.304105414456226 0.538416192423036 -1.601172658652421 1.246919137445041 2.962464031775002 -4.051907597661985
- 3.160315854649797 -3.183836405366974 -0.353765301736615 -0.535496516829068 2.944026593343659 -0.457486446186733 -2.801350799541214 1.708848651897812 3.315600017761889 -3.652050698664994
- 2.650784949843616 -2.122236237875686 -0.609271860316696 -1.041612168946182 3.064238261984309 -0.622968122839140 -2.741636393740091 1.234945741193289 3.228947729387398 -3.422383681086359
- 1.835756190161568 -1.190249405673504 -1.309181795192128 -1.443239858292167 2.989266338019758 -0.527164602464461 -2.136548177859753 0.257187752305526 2.950627989619554 -2.905503461688335
- 0.779244692625503 -0.250956684342640 -2.222842398961040 -2.114484245542347 3.193714996155647 -0.402353834151914 -0.716699056731043 -0.695075395385020 1.970940110428005 -2.073146884994938
- 0.205901638910206 -0.094144905079182 -2.702251300385419 -3.006804281874988 3.428965172985645 -0.244040996236974 0.271507532354853 -0.901460516171289 0.837319205042779 -1.900140980267979
- 0.006343044467507 -0.526316304925453 -2.784396850535765 -3.387317594535239 3.623756724446971 -0.255765726125193 0.728832393362191 -0.459522185849024 -0.083931182347604 -1.838646537891986
- -0.094247051197377 -1.357693159899331 -2.688131416688605 -3.507253089007949 3.801702829826901 -0.372428273016097 1.096283810567282 0.389297736866760 -1.170355250849716 -1.696809434483544
- -0.176495600665102 -2.383531123169409 -2.541866388586213 -3.474889464559508 3.916948947345628 -0.496084807779220 1.434741882579586 1.340104548436013 -2.312575966501984 -1.542754383394004
- -0.505965100388881 -3.619548563424876 -2.611537814792154 -3.611537547739726 3.999999654692064 -0.388462396222968 1.788855346423743 2.219155128512003 -3.619548301804086 -1.611537777358381
-dists:
- 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296 12.727922061357855
- 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296
- 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379
- 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969
- 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001
- 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104
- 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138
- 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887
- 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417
- 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 12.727922061357855 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000
- 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296
- 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761
- 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650
- 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000
- 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603
- 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159
- 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530
- 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321
- 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549
- 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000
- 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379
- 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650
- 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665
- 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887
- 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627
- 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549
- 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909
- 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518
- 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476
- 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000
- 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969
- 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000
- 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887
- 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570
- 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654
- 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978
- 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369
- 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759
- 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219
- 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000
- 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001
- 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603
- 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627
- 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654
- 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476
- 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849
- 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301
- 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504
- 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784
- 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000
- 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104
- 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159
- 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549
- 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978
- 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849
- 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381
- 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000
- 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580
- 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661
- 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000
- 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138
- 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530
- 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909
- 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369
- 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301
- 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000
- 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285
- 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989
- 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380
- 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000
- 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887
- 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321
- 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518
- 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759
- 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504
- 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580
- 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989
- 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190
- 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790
- 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000
- 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417
- 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549
- 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476
- 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219
- 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784
- 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661
- 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380
- 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790
- 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095
- 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000
- 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296 12.727922061357855 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000
- 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000
- 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000
- 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000
- 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000
- 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000
- 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000
- 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000
- 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000
- 12.727922061357855 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000
diff --git a/externals/ann/examples/ann_td/example.pd b/externals/ann/examples/ann_td/example.pd
deleted file mode 100644
index 29b9b16515d66a51f0818a25405f634997d29a5b..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_td/example.pd
+++ /dev/null
@@ -1,316 +0,0 @@
-#N canvas 520 90 539 296 12;
-#N canvas 103 30 724 595 guts 0;
-#X msg 89 147 0 \, destroy;
-#X obj 111 177 gemwin;
-#X msg 94 124 reset \, create \, 1;
-#X obj 331 165 gemhead;
-#X obj 331 186 translateXYZ;
-#X obj 402 118 * -1;
-#X obj 331 206 color 0.5 0 0;
-#X obj 383 66 gemmouse 8 8;
-#X obj 363 109 - 4;
-#X obj 405 99 - 4;
-#X obj 331 226 sphere 0.6;
-#X msg 156 102 cursor 0;
-#X msg 126 66 bang;
-#X msg 166 150 lighting 1;
-#N canvas 463 128 573 394 lights 0;
-#X obj 242 277 world_light;
-#X obj 242 163 gemhead 1;
-#X obj 242 225 rotateXYZ;
-#X msg 109 193 debug 0;
-#X msg 110 224 debug 1;
-#X text 20 169 figure out where the light is;
-#X obj 311 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 354 133 pack f f;
-#X obj 334 159 line;
-#X msg 364 42 1;
-#X obj 364 23 loadbang;
-#X obj 344 298 world_light;
-#X obj 346 271 gemhead 1;
-#X obj 429 203 loadbang;
-#X obj 311 63 metro 20000;
-#X msg 400 104 10000;
-#X obj 119 57 delay 10000;
-#X msg 339 96 300;
-#X msg 292 96 50;
-#X msg 364 235 1 1 1;
-#X msg 422 266 0.6 0.3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 8 0 2 2;
-#X connect 9 0 6 0;
-#X connect 10 0 9 0;
-#X connect 10 0 15 0;
-#X connect 12 0 11 0;
-#X connect 13 0 19 0;
-#X connect 13 0 20 0;
-#X connect 14 0 17 0;
-#X connect 14 0 16 0;
-#X connect 15 0 7 1;
-#X connect 16 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 7 0;
-#X connect 19 0 0 1;
-#X connect 20 0 11 1;
-#X restore 543 135 pd lights;
-#X obj 269 139 s posx;
-#X obj 439 152 s posy;
-#X obj 225 25 inlet;
-#X obj 77 19 inlet;
-#X connect 0 0 1 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 2;
-#X connect 5 0 16 0;
-#X connect 6 0 10 0;
-#X connect 7 0 8 0;
-#X connect 7 1 9 0;
-#X connect 8 0 4 1;
-#X connect 8 0 15 0;
-#X connect 9 0 5 0;
-#X connect 11 0 1 0;
-#X connect 12 0 2 0;
-#X connect 12 0 13 0;
-#X connect 12 0 11 0;
-#X connect 13 0 1 0;
-#X connect 17 0 0 0;
-#X connect 18 0 12 0;
-#X restore 11 150 pd guts;
-#X obj 10 104 tgl 15 0 empty empty rendering 0 -6 0 8 -262144 -1 -1
-1 1;
-#X obj 47 128 bng 15 250 50 0 empty empty destroy_gemwin 0 -6 0 8 -262144
--1 -1;
-#N canvas 209 7 826 609 train 0;
-#X floatatom 45 391 5 0 0 0 - - -;
-#X floatatom 83 390 5 0 0 0 - - -;
-#X floatatom 120 392 5 0 0 0 - - -;
-#X floatatom 160 394 5 0 0 0 - - -;
-#X obj 190 206 metro 100;
-#X obj 190 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 42 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 2512 1;
-#X obj 80 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 115 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 154 434 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X text 174 15 1- create the ann;
-#N canvas 503 57 704 411 train 0;
-#X obj 66 319 outlet;
-#X obj 213 183 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 84 16 train;
-#N canvas 0 0 490 340 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 466 316 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 131 57 pd outputs;
-#X obj 130 87 r output1;
-#X obj 213 86 r output2;
-#X floatatom 130 108 5 0 0 0 - - -;
-#X floatatom 212 108 5 0 0 0 - - -;
-#X floatatom 297 106 5 0 0 0 - - -;
-#X floatatom 378 107 5 0 0 0 - - -;
-#X obj 297 85 r output3;
-#X obj 379 85 r output4;
-#X text 128 14 1- change to training mode;
-#X text 248 49 2- change keys if you want;
-#X text 264 61 defaults are "a" "s" "d" "f";
-#X text 239 182 3- toggle on to start training and off to stop;
-#X msg 170 282 run;
-#X text 200 283 4- switch to run mode when ready;
-#X obj 305 226 inlet;
-#X obj 344 256 nbx 8 14 -1e+037 1e+037 0 0 empty empty MSE 0 -6 0 10
--262144 -1 -1 0 256;
-#N canvas 111 7 818 550 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 55 300 outlet;
-#X obj 71 138 pack f f;
-#X connect 0 0 2 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 5 0 4 0;
-#X restore 213 226 pd inputs;
-#N canvas 84 111 802 315 merge 0;
-#X obj 56 34 inlet;
-#X obj 306 38 r output1;
-#X obj 382 38 r output2;
-#X obj 460 39 r output3;
-#X obj 537 39 r output4;
-#X obj 78 184 outlet;
-#X obj 56 73 unpack f f;
-#X obj 79 137 pack f f f f f f;
-#X connect 0 0 6 0;
-#X connect 1 0 7 2;
-#X connect 2 0 7 3;
-#X connect 3 0 7 4;
-#X connect 4 0 7 5;
-#X connect 6 0 7 0;
-#X connect 6 1 7 1;
-#X connect 7 0 5 0;
-#X restore 140 254 pd merge outputs;
-#X obj 213 202 metro 100;
-#X connect 1 0 22 0;
-#X connect 2 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 7 0;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 16 0 0 0;
-#X connect 18 0 19 0;
-#X connect 20 0 21 0;
-#X connect 21 0 0 0;
-#X connect 22 0 20 0;
-#X restore 133 114 pd train on the fly;
-#X text 224 182 3- run the nn switching this metro ON;
-#X text 277 213 (note \, you must be in run mode);
-#X msg 281 231 run;
-#X text 364 275 4- when you are happy with you nn save it;
-#X obj 301 404 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 300 422 mse is usefull while training on-the-fly: tells you
-the global error in the net \, how much net's output differs from desired
-output.;
-#X text 325 115 2- train on the fly in realtime;
-#X obj 64 348 unpack f f f f;
-#X msg 249 279 save tdnn.net;
-#X msg 249 298 load tdnn.net;
-#X text 24 412 still;
-#X text 72 412 left;
-#X text 111 413 right;
-#X text 156 415 na;
-#X obj 66 325 ann_tdnn 2 5 tdnn.net;
-#N canvas 111 7 822 554 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 55 300 outlet;
-#X obj 72 138 pack f f;
-#X connect 0 0 2 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 5 0 4 0;
-#X restore 156 245 pd inputs;
-#X msg 66 15 create 2 4 5;
-#X text 363 301 remember that you can load it also passing filename
-as the 3rd argument;
-#X connect 0 0 6 0;
-#X connect 1 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 27 0;
-#X connect 5 0 4 0;
-#X connect 11 0 26 0;
-#X connect 14 0 26 0;
-#X connect 19 0 0 0;
-#X connect 19 1 1 0;
-#X connect 19 2 2 0;
-#X connect 19 3 3 0;
-#X connect 20 0 26 0;
-#X connect 21 0 26 0;
-#X connect 26 0 19 0;
-#X connect 26 1 16 0;
-#X connect 26 1 11 0;
-#X connect 27 0 26 0;
-#X connect 28 0 26 0;
-#X restore 9 224 pd train and run nn;
-#X text 94 94 1- start rendering;
-#X text 72 203 2- open the subpatch and follow instructions;
-#X text 15 5 TDNN implementation (Time Delay Neural Network) useful
-for gesture recognition;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
diff --git a/externals/ann/examples/ann_td/tdnn.net b/externals/ann/examples/ann_td/tdnn.net
deleted file mode 100644
index 6c9540db08a2837d753aa217ed4fba3f60d8a549..0000000000000000000000000000000000000000
--- a/externals/ann/examples/ann_td/tdnn.net
+++ /dev/null
@@ -1,7 +0,0 @@
-FANN_FLO_1.1
-3 0.700000 1.000000 0 5 5 5.00000000000000000000e-001 5.00000000000000000000e-001
-11 4 5 
-0 0 0 0 0 0 0 0 0 0 0 
-11 11 11 0 
-4 4 4 4 0 
-(0 3.98359465599060060000e+000) (1 -3.46662133932113650000e-001) (2 1.66724932193756100000e+000) (3 -3.35077017545700070000e-001) (4 -5.66196799278259280000e-001) (5 -3.65077793598175050000e-001) (6 -2.26146197319030760000e+000) (7 1.53752446174621580000e-001) (8 -3.91640329360961910000e+000) (9 4.93833124637603760000e-001) (10 -4.37475204467773440000e+000) (0 2.48541951179504390000e+000) (1 2.93741494417190550000e-001) (2 1.34525704383850100000e+000) (3 3.87542009353637700000e-001) (4 2.62434352189302440000e-002) (5 4.33074653148651120000e-001) (6 -9.10757899284362790000e-001) (7 2.65246361494064330000e-001) (8 -2.17471313476562500000e+000) (9 3.53803992271423340000e-001) (10 -7.55431175231933590000e-001) (0 -4.49254703521728520000e+000) (1 -6.78778812289237980000e-002) (2 -2.04198622703552250000e+000) (3 -1.45705610513687130000e-001) (4 1.97579100728034970000e-001) (5 -4.57823067903518680000e-001) (6 2.62115192413330080000e+000) (7 -2.74485975503921510000e-001) (8 4.33024168014526370000e+000) (9 -2.26368784904479980000e-001) (10 -3.94826436042785640000e+000) (11 -1.19106411933898930000e+000) (12 -2.40987926721572880000e-001) (13 -1.45797419548034670000e+000) (14 2.45804578065872190000e-001) (11 6.82796686887741090000e-002) (12 -3.14634591341018680000e-002) (13 1.29793524742126460000e+000) (14 1.30129599571228030000e+000) (11 1.01107788085937500000e+000) (12 4.44010108709335330000e-001) (13 3.43794375658035280000e-001) (14 8.93330514430999760000e-001) (11 1.50074372683870950000e-016) (12 4.71110857886675280000e-017) (13 1.25351783824343270000e-016) (14 1.36875296494823600000e-017) 
diff --git a/externals/ann/examples/tutorial-ann_mlp.pd b/externals/ann/examples/tutorial-ann_mlp.pd
deleted file mode 100644
index dcf029231509a49e3b82d20a974b526d08bb1849..0000000000000000000000000000000000000000
--- a/externals/ann/examples/tutorial-ann_mlp.pd
+++ /dev/null
@@ -1,168 +0,0 @@
-#N canvas 297 73 597 521 12;
-#X obj 65 379 ann_mlp;
-#X text 39 59 input: mouse coord;
-#X text 37 76 output: 1 if mouse is in the upper left part of the screen
-;
-#N canvas 106 171 572 442 step1-creation 0;
-#X text 141 13 let's create the ANN;
-#X obj 130 354 outlet;
-#X msg 132 185 create 2 1;
-#X text 59 102 let's assume you have 2 inputs value X and Y and you
-want 1 output value that tells 1 when the mouse in in the upper left
-part of the screen;
-#X text 242 185 send this message;
-#X connect 2 0 1 0;
-#X restore 128 158 pd step1-creation;
-#N canvas 46 38 652 612 step2-train 0;
-#X obj 97 530 outlet;
-#X msg 44 130 train;
-#X text 102 129 first switch to train mode;
-#X obj 139 367 pack s f f f;
-#N canvas 0 0 466 316 normalized-inputs 0;
-#X obj 105 64 r X;
-#X obj 173 67 r Y;
-#X obj 173 92 / 240;
-#X obj 105 91 / 320;
-#X obj 104 116 - 1;
-#X obj 173 118 - 1;
-#X text 221 108 normalize inputs to [-1 \, 1];
-#X obj 104 211 outlet;
-#X obj 177 215 outlet;
-#X text 144 35 receive X and Y;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 7 0;
-#X connect 5 0 8 0;
-#X restore 127 271 pd normalized-inputs;
-#N canvas 0 0 675 324 desired-output 0;
-#X obj 383 63 key;
-#X obj 383 92 select 97;
-#X msg 382 118 1;
-#X obj 528 97 select 97;
-#X obj 528 68 keyup;
-#X msg 527 123 0;
-#X obj 183 195 outlet;
-#X text 90 269 i send 1 when "a" is pressed \, 0 when released;
-#X obj 180 108 r out;
-#X text 81 231 optionally \, you can use the "a" key instead of the
-mouse button;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 2 0 6 0;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 8 0 6 0;
-#X restore 239 332 pd desired-output;
-#X obj 91 192 tgl 15 0 empty empty train 0 -6 0 8 -258699 -1 -1 0 1
-;
-#X text 117 190 <-- toggle to train;
-#X text 119 404 everytime the metro bangs you send a training pattern
-to ann_mlp;
-#X floatatom 247 357 5 0 0 0 - - -;
-#X floatatom 287 295 5 0 0 0 - - -;
-#X floatatom 148 295 5 0 0 0 - - -;
-#X obj 110 328 metro 50;
-#X text 53 45 (for this to work you need to give focus to this window
-but the gem window must be visible);
-#X text 335 293 <-- check mouse position;
-#X text 112 213 then move the mouse and press left button when you
-are in the upper left part of the screen \, release button when you
-are not in the upper left part of the screen;
-#X text 293 357 <-- check button pressed/not pressed;
-#X obj 124 475 unpack s f f f;
-#X obj 145 501 pack f f f;
-#X floatatom 296 518 5 0 0 0 mse mse -;
-#X text 116 447 go on until mse is low enough (< 0.01);
-#X connect 1 0 0 0;
-#X connect 3 0 17 0;
-#X connect 4 0 3 1;
-#X connect 4 0 11 0;
-#X connect 4 1 3 2;
-#X connect 4 1 10 0;
-#X connect 5 0 3 3;
-#X connect 5 0 9 0;
-#X connect 6 0 12 0;
-#X connect 12 0 3 0;
-#X connect 17 1 18 0;
-#X connect 17 2 18 1;
-#X connect 17 3 18 2;
-#X connect 18 0 0 0;
-#X restore 134 218 pd step2-train;
-#N canvas 0 0 462 312 mouseInput 0;
-#X obj 41 139 gemwin;
-#X msg 44 69 create \, 1;
-#X msg 134 71 0 \, destroy;
-#X obj 143 120 gemmouse 640 480;
-#X obj 143 161 s X;
-#X obj 172 161 s Y;
-#X obj 54 25 inlet;
-#X obj 133 27 inlet;
-#X obj 206 162 s out;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 3 2 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 2 0;
-#X restore 287 443 pd mouseInput;
-#X obj 287 423 bng 15 250 50 0 empty empty start_GEM 0 -6 0 8 -262144
--1 -1;
-#X obj 385 424 bng 15 250 50 0 empty empty stop_GEM 0 -6 0 8 -262144
--1 -1;
-#X obj 281 389 loadbang;
-#X floatatom 116 414 5 0 0 0 mse - mse;
-#N canvas 618 0 682 470 step3-run 0;
-#X obj 64 377 outlet;
-#N canvas 0 0 466 316 normalized-inputs 0;
-#X obj 105 64 r X;
-#X obj 173 67 r Y;
-#X obj 173 92 / 240;
-#X obj 105 91 / 320;
-#X obj 104 116 - 1;
-#X obj 173 118 - 1;
-#X text 221 108 normalize inputs to [-1 \, 1];
-#X obj 104 211 outlet;
-#X obj 177 215 outlet;
-#X text 144 35 receive X and Y;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 7 0;
-#X connect 5 0 8 0;
-#X restore 178 167 pd normalized-inputs;
-#X obj 97 92 tgl 15 0 empty empty run 0 -6 0 8 -258699 -1 -1 0 1;
-#X obj 145 267 pack s f f;
-#X msg 50 30 run;
-#X text 108 29 first switch to run mode;
-#X text 123 90 <-- toggle to run;
-#X obj 116 228 metro 50;
-#X floatatom 332 196 5 0 0 0 - - -;
-#X floatatom 191 193 5 0 0 0 - - -;
-#X obj 145 293 unpack s f f;
-#X obj 176 321 pack f f;
-#X connect 1 0 3 1;
-#X connect 1 0 9 0;
-#X connect 1 1 3 2;
-#X connect 1 1 8 0;
-#X connect 2 0 7 0;
-#X connect 3 0 10 0;
-#X connect 4 0 0 0;
-#X connect 7 0 3 0;
-#X connect 10 1 11 0;
-#X connect 10 2 11 1;
-#X connect 11 0 0 0;
-#X restore 139 284 pd step3-run;
-#X floatatom 64 450 5 0 0 0 - - -;
-#X connect 0 0 11 0;
-#X connect 0 1 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 1;
-#X connect 8 0 6 0;
-#X connect 10 0 0 0;
diff --git a/externals/ann/helps/ann_mlp-help.pd b/externals/ann/helps/ann_mlp-help.pd
deleted file mode 100644
index 37213ed8977e993ec324c472fcf4e6ee5fddb73c..0000000000000000000000000000000000000000
--- a/externals/ann/helps/ann_mlp-help.pd
+++ /dev/null
@@ -1,415 +0,0 @@
-#N canvas 1 53 717 456 12;
-#N canvas 160 189 627 328 creation 0;
-#X obj 52 235 outlet;
-#X msg 49 10 create;
-#X msg 72 68 create 2 1;
-#X msg 81 97 create 3 1;
-#X msg 93 128 create 3 2;
-#X msg 59 38 create 3 2 3 3 1 0.7;
-#X text 121 7 create with default values;
-#X text 236 38 specifying all;
-#X text 166 68 2 inputs 1 output;
-#X text 176 99 3 inputs 1 output;
-#X text 189 128 3 inputs 2 output;
-#X text 159 222 TIP:don't set the layers param too high;
-#X text 158 179 params: num_input \, num_output \, num_layers \, num_neurons_hidden
-\, connection_rate \, learning_rate;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X restore 52 68 pd creation examples;
-#N canvas 83 141 728 356 run 0;
-#X obj 90 219 outlet;
-#X msg 123 69 0 1;
-#X msg 124 92 1 0;
-#X msg 125 115 1 1;
-#X msg 126 140 0 0;
-#X text 40 17 now you can run your nn passing it a list with inputs
-;
-#X text 169 70 send a list of data and watch the console for output
-;
-#X text 39 35 the output is sent as a list of float;
-#X text 184 134 these inputs are good for a nn like the one in example1
-directory;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 86 180 pd run the net;
-#N canvas 1 53 619 610 other 0;
-#X obj 43 401 outlet;
-#X msg 102 37 train;
-#X msg 103 63 run;
-#X msg 152 37 setmode 0;
-#X msg 153 63 setmode 1;
-#X text 249 40 set training/running mode;
-#X text 247 63 training mode currently not implemented;
-#N canvas 113 201 690 335 training 0;
-#X obj 71 288 outlet;
-#X msg 82 195 FANN_TRAIN_INCREMENTAL;
-#X msg 82 216 FANN_TRAIN_BATCH;
-#X msg 81 238 FANN_TRAIN_RPROP;
-#X msg 81 258 FANN_TRAIN_QUICKPROP;
-#X text 40 28 you can set the training algorithm simply sending a message
-with the name of the algorithm chosen. possible values are: FANN_TRAIN_INCREMENTAL
-FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP the default
-is: FANN_TRAIN_RPROP see the FANN manual for details on each algorithm:
-http://fann.sourceforge.net/html/r1996.html;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 150 153 pd training algorithm;
-#X text 360 175 some advanced param;
-#N canvas 34 162 698 395 training 0;
-#X obj 52 230 outlet;
-#X msg 69 118 desired_error 0.01;
-#X msg 79 146 max_iterations 500000;
-#X msg 90 178 iterations_between_reports 1000;
-#X text 58 28 you can change training parameters. see FANN manual for
-details (http://fann.sourceforge.net);
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 151 179 pd training params;
-#N canvas 329 121 694 391 activation 0;
-#X obj 49 335 outlet;
-#X text 40 28 you can set ti output activation algorithm passing a
-message to nn. see the FANN manual for description of the algorithms
-;
-#X msg 69 118 set_activation_function_output FANN_THRESHOLD;
-#X msg 83 139 set_activation_function_output FANN_THRESHOLD_SYMMETRIC
-;
-#X msg 95 163 set_activation_function_output FANN_LINEAR;
-#X msg 98 184 set_activation_function_output FANN_SIGMOID;
-#X msg 106 206 set_activation_function_output FANN_SIGMOID_STEPWISE
-;
-#X msg 108 233 set_activation_function_output FANN_SIGMOID_SYMMETRIC
-;
-#X msg 115 256 set_activation_function_output FANN_SIGMOID_SYMMETRIC_STEPWISE
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X restore 150 203 pd activation algorithm;
-#X msg 151 287 details;
-#X text 229 285 details on the current nn;
-#X msg 145 333 help;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 13 0 0 0;
-#X restore 107 258 pd other commands;
-#N canvas 2 82 653 513 save 0;
-#X obj 39 264 outlet;
-#X msg 64 20 filename test.net;
-#X msg 66 46 save;
-#X msg 82 103 load;
-#X text 221 19 set the filename;
-#X text 214 42 save the net to the file;
-#X text 138 104 you can reload it too;
-#X text 144 182 nn can be loaded from a file at creation time simply
-passing the filename as argument;
-#X msg 68 71 save test.net;
-#X msg 93 130 load test.net;
-#X text 144 217 like [ann_mlp test.net];
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X restore 97 218 pd save the net;
-#X text 229 66 create a nn;
-#X text 223 179 run your net;
-#X text 237 215 save your net;
-#N canvas 2 82 712 542 tips 0;
-#X text 51 84 for better performances inputs value should be normalized
-\, all input should have the same range (if one input has a larger
-range it will be more "important"). the range of each input should
-be 0 centered. so [-1 \, 1] is good [-2 \, 2] is good \, [0 \, 1] not
-so good [1 \, 2] is bad. the range sould not be too small ([-0.1 \,
-0.1] is bad).;
-#X text 41 19 TIPS;
-#X text 41 56 inputs;
-#X text 39 211 outputs;
-#X text 50 235 each class of outputs should have its own output value:
-don't use the same output for 2 meanings \, use 2 outputs intead \,
-1 for each.;
-#X restore 156 303 pd tips;
-#X text 270 333 an interface to fann classes (http://fann.sourceforge.net)
-;
-#X text 272 351 by Davide Morelli - info@davidemorelli.it;
-#N canvas 146 200 580 411 train 0;
-#X obj 32 241 outlet;
-#N canvas 0 0 458 308 train 0;
-#N canvas 8 48 990 509 build 0;
-#X obj 65 417 textfile;
-#X msg 190 337 clear;
-#N canvas 0 0 462 312 alternate 0;
-#X obj 103 117 + 1;
-#X obj 70 119 f 0;
-#X obj 70 171 sel 0 1;
-#X obj 70 146 mod 2;
-#X msg 95 90 0;
-#X obj 68 31 inlet;
-#X obj 140 40 inlet;
-#X obj 140 63 bang;
-#X obj 68 55 bang;
-#X obj 65 205 outlet;
-#X obj 125 206 outlet;
-#X text 59 6 bang;
-#X text 139 18 reset to 0 without bang;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 1 0 3 0;
-#X connect 2 0 9 0;
-#X connect 2 1 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 1;
-#X connect 5 0 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X restore 58 227 pd alternate;
-#X obj 24 81 bng 15 250 50 0 empty empty write-once 0 -6 0 8 -262144
--1 -1;
-#X obj 341 183 bng 15 250 50 0 empty empty reset 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 466 316 inputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the inputs;
-#X obj 94 52 r input1;
-#X obj 163 52 r input2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 58 306 pd inputs;
-#N canvas 0 0 466 316 outputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the outputs;
-#X obj 91 51 r output1;
-#X obj 166 51 r output2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 149 284 pd outputs;
-#X obj 230 223 f 0;
-#X obj 260 223 + 1;
-#X obj 239 257 nbx 5 14 -1e+37 1e+37 0 0 empty empty how_many_patterns
-0 -6 0 10 -262144 -1 -1 0 256;
-#X text 156 406 todo: write header (a line at the beginning of file
-with 3 int: how many tests \, num_input \, num_output);
-#X obj 122 190 delay 50;
-#X obj 115 159 metro 100;
-#X floatatom 259 72 5 100 5000 2 msec_between_snapshots - -;
-#X obj 127 80 tgl 15 0 empty empty toggle_on-off 0 -6 0 8 -262144 -1
--1 0 1;
-#X obj 219 189 / 2;
-#X obj 260 16 loadbang;
-#X msg 260 36 100;
-#X msg 326 342 write test.txt cr;
-#X text 293 224 comment;
-#N canvas 262 68 647 603 README 0;
-#X text 67 432 please help me getting this patch more usable: - how
-to add a line at the very beginning of a text file after i have filled
-it? - how to manage inputs and outputs of different sized without forcing
-the user to edit the patch?;
-#X text 9 63 how to use: 1) modify [pd inputs] and [ps outputs] inserting
-[r] objects to receive input data \, and modify [pack]s to handle the
-right number of inputs 2) do the same with [pd outputs] 3) click on
-reset 4) toggle ON and start collecting data 5) when you are ready
-toggle OFF 6) edit [write filename cr( with the actual filename you
-want for your training data (always keep the cr after the filename)
-7) open the file with training data 8) add a line at the beginning
-and write 3 integers: the 1st is the number of training patterns written
-(see "how many patterns" number box) \, the 2nd is how many inputs
-your ann has \, the 3th is how many outputs e.g. i collected 100 training
-snapshots \, for a ann with 10 ins and 2 outs I write: 100 10 2 at
-the very beginning of the file now the training file is ready and can
-be read from nn via train-on-file command;
-#X text 9 7 this tricky sub-patch is usefull to write a file to train
-ann and is intended to be used with the nn external;
-#X restore 25 16 pd README;
-#X text 479 210 by davide morelli info@davidemorelli.it;
-#X text 106 14 <--readme!;
-#X text 242 283 <--edit here!;
-#X text 142 308 <--edit here!;
-#X text 429 86 usage: read [pd README] \, edit [pd inputs] and [pd
-outputs] \, toggle on and record inputs and outputs \, toggle off when
-ready \, write to a file \, edit the file adding a line at the beginning
-(see REAMDE);
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 2 1 6 0;
-#X connect 2 1 7 0;
-#X connect 3 0 11 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 4 0 1 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 12 0 2 0;
-#X connect 13 0 12 1;
-#X connect 13 0 15 0;
-#X connect 14 0 12 0;
-#X connect 15 0 11 1;
-#X connect 16 0 17 0;
-#X connect 17 0 13 0;
-#X connect 18 0 0 0;
-#X restore 86 42 pd build training file;
-#X msg 88 74 train-on-file test.txt;
-#X text 285 45 build a training file;
-#X text 287 74 train the nn with the training file;
-#X obj 56 139 outlet;
-#X connect 1 0 4 0;
-#X restore 79 103 pd train you net using a train file;
-#N canvas 120 72 892 558 train 0;
-#X obj 55 487 outlet;
-#X msg 60 31 train;
-#X text 126 33 1- set the train mode;
-#X text 192 120 be shure you provide the correct numbers of inputs
-and outputs;
-#X obj 168 202 pack s f f f;
-#X obj 197 248 pack f f f;
-#X obj 168 225 unpack s f f f;
-#X msg 190 464 run;
-#X obj 198 170 tgl 15 0 empty empty in1 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 228 170 tgl 15 0 empty empty in2 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 259 170 tgl 15 0 empty empty output 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 148 169 bng 15 250 50 0 empty empty train! 0 -6 0 8 -262144
--1 -1;
-#X text 312 160 set inputs and output value \, then send the list clicking
-on the "train!" bang;
-#X msg 316 261 create 2 1;
-#X text 227 464 3- when you are ready switch again to run mode before
-exiting;
-#X text 315 226 NOTE1: before training with this example you should
-have created a nn with 2 ins and 1 out with a command like:;
-#N canvas 255 158 517 436 autotrain 0;
-#X obj 89 286 outlet;
-#X obj 85 87 metro 10;
-#X obj 85 38 tgl 15 0 empty empty toggle_training 0 -6 0 8 -262144
--1 -1 0 1;
-#X msg 101 192 0 0 0;
-#X msg 126 215 0 1 1;
-#X msg 82 168 1 0 1;
-#X msg 150 244 1 1 1;
-#X obj 82 112 random 4;
-#X obj 83 138 sel 0 1 2 3;
-#X obj 226 125 f 0;
-#X obj 256 124 + 1;
-#X floatatom 226 149 8 0 0 0 - - -;
-#X text 113 36 <--train OR untile mse is low enough;
-#X text 143 51 (you must be in train mode);
-#X connect 1 0 7 0;
-#X connect 1 0 9 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 5 0;
-#X connect 8 1 3 0;
-#X connect 8 2 4 0;
-#X connect 8 3 6 0;
-#X connect 9 0 10 0;
-#X connect 9 0 11 0;
-#X connect 10 0 9 1;
-#X restore 224 363 pd autotrain OR;
-#X text 172 101 2a)- build a list with inputs and desired output;
-#X text 336 291 NOTE2: while training the right outlet gives you the
-mean square error after each training pattern. continue training until
-mse is low enough.;
-#X text 221 383 2b) use autotrain for the OR function;
-#X connect 1 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 1 5 0;
-#X connect 6 2 5 1;
-#X connect 6 3 5 2;
-#X connect 7 0 0 0;
-#X connect 8 0 4 1;
-#X connect 9 0 4 2;
-#X connect 10 0 4 3;
-#X connect 11 0 4 0;
-#X connect 13 0 0 0;
-#X connect 16 0 0 0;
-#X restore 68 50 pd train it on the fly;
-#X text 62 5 there are 2 ways to train your net;
-#X text 253 47 on the fly is simpler;
-#X text 88 128 with a trainfile the net could be more accurate;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X restore 74 119 pd train;
-#X text 149 118 train a nn;
-#X obj 103 345 print mse;
-#X obj 52 373 print out;
-#X obj 52 313 ann_mlp;
-#X text 9 2 ann_mlp: multi layer perceptrons neural networks in PD
-;
-#N canvas 405 166 494 332 META 0;
-#X text 12 190 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 5 KEYWORDS control;
-#X text 12 45 DESCRIPTION multi layer perceptrons neural networks in
-PD;
-#X text 12 130 OUTLET_0;
-#X text 12 150 OUTLET_1;
-#X text 12 170 AUTHOR Davide Morelli - info@davidemorelli.it;
-#X text 12 65 INLET_0 list create train filename save load setmode
-FANN_TRAIN_INCREMENTAL FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP
-desired_error max_iterations iterations_between_reports set_activation_function_output
-;
-#X restore 646 402 pd META;
-#X connect 0 0 14 0;
-#X connect 1 0 14 0;
-#X connect 2 0 14 0;
-#X connect 3 0 14 0;
-#X connect 10 0 14 0;
-#X connect 14 0 13 0;
-#X connect 14 1 12 0;
diff --git a/externals/ann/helps/ann_mlp-manual.txt b/externals/ann/helps/ann_mlp-manual.txt
deleted file mode 100644
index f5b6db347093fd83fecca79cb401d6c3e611b7ce..0000000000000000000000000000000000000000
--- a/externals/ann/helps/ann_mlp-manual.txt
+++ /dev/null
@@ -1,137 +0,0 @@
------------------ann_mlp manual 
-
-by davide morelli - www.davidemorelli.it
-
-
------------What is a neural network?
-
-To be shure you fully understand what is and why to use a ANN, read
-http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/cs11/report.html
-
------------Why use a ANN?
-Because they are useful in Pattern recognition, gesure recognition (patterns
-over time), associative recall of data (images, sounds, etc), predictions
-(e.g. time-series forecasting), complex data handling, etc..
-
---ANNs can handle noisy inputs: 
-if you trained your ANN that [1,1] -> 1
-Then if you pass [1.1, 0.9] -> 1 probably..
-
---ANNs can be trained without writing code: 
-see ann/examples/ann_mlp_example2 (in CVS), you can teach the ANN to tell
-you when all these balls are close together or still.. How could you do this
-coding? You'd have to compute the distance of every ball from every other
-ball, then sum all the distances and ... Very complex and difficult! With
-ANN you simply teach when the balls are close and when they are not, you
-don't have to write code at all, you just have to use pd.
-
------------How to build a ANN?
-INPUTS:
-You must code your input data as a list of float. 
-E.g. If you want timbre recognition you must fft a signal then build a list
-with fft's partial and feed ann_mlp with it
-E.g. if you want midi chord recognition and you played A4 C5 E6 then use the
-midi values of the notes of the chord to build a list with 3 integers (57 60
-64) 
-
-Tip: inputs should be 0 centered
-the example of chord recognition should not work well (hard to train)
-because possible input values go from 30 to 90, you should remap them so
-they go from -30 to 30
-Notice how the inputs in ann/examples/ann_mlp_example2 go from -1 to 1
-If you can't make inputs 0 centered they should at least start from 0
-
-Tip: inputs should be normalized
-If you have one input that goes from -10 to 10 and another input that goes
-from -1 to 1 the first input will be more important than the second input
-
-OUTPUTS:
-Each "meaning" you want your ANN to detect should have its own output.
-Notice ann/examples/ann_mlp_example2:
-"Calm" and "chaos" have their outputs even if they are related.
-I could have set only 1 output 0 for calm and 1 for chaos.
-But having separated outputs I can see if my ANN has been trained well or
-not, but also could be that a situation is neither calm nor chaotic, or
-somehow calm AND chaotic..
-
------------TRAINING ON THE FLY:
-It is much easier to train the ANN on the fly rather than using a train
-file.
-To train on the fly you simply must pass a list with 
-[inputs + expected outputs(
-If you have 3 inputs and 2 outputs then you must pass a list with 5 floats
-E.g. You want to train a ANN for a simple logical function: OR
-You build a ann_mlp with 2 inputs and 1 output
-You set |train(
-You pass lists like 
-|0 0 0(  inputs are 0 0 output is 0
-|1 0 1(  inputs are 1 0 output is 1
-|0 1 1(  inputs are 0 1 output is 1
-And so on.. Repeating until MSE is low enough
-
-MSE tells you the general error the ANN currently has with the inputs and
-outputs you are giving
-
-When you are ready set |run(
-And start passing lists with only inputs values
-|0 0(
-|1 0(
-Etc..
-The left outlet of ann_mlp will start sending lists of float, in this case a
-list with only 1 float
-
------------PUTTING IT TOGETHER:
-
-1) Create a ANN passing ann_mlp a message with num_inputs and num_outputs
-E.g. (the simple ann for logical function OR)
-|create 2 1(
-|
-[ann_mlp]
-
-2) set train mode
-|train(
-|
-[ann_mlp]
-
-3) train the ANN passing lists num_inputs+num_outputs long
-|0 0 0(
-|
-[ann_mlp]
-(repeat at will using different inputs until mse is low, see right outlet)
-
-4) set run mode
-|run(
-|
-[ann_mlp]
-
-5) run the net passing lists num_inputs long, the left outlet will send a
-list with the results
-|0 0(
-|
-[ann_mlp]
-
-When everything is fine you can save it to a file
-|save filename(
-|
-[ann_mlp]
-
-Can be loaded in 2 ways
-|load filename(
-|
-[ann_mlp]
-
-Or as argument
-
-[ann_mlp filename]
-
------------
-
-For a more in-depth sight over technical issues:
-http://fann.sourceforge.net/report/report.html
-See fann manual for details on advanced params 
-(activation functions,training params, etc..)
-http://fann.sourceforge.net/
-
------------
-
-questions and suggestions to info(a)davidemorelli.it
diff --git a/externals/ann/helps/ann_mlp-write-trainfile.pd b/externals/ann/helps/ann_mlp-write-trainfile.pd
deleted file mode 100644
index ebb698fcd09ad6d9a44897468b38386bef347107..0000000000000000000000000000000000000000
--- a/externals/ann/helps/ann_mlp-write-trainfile.pd
+++ /dev/null
@@ -1,139 +0,0 @@
-#N canvas 161 76 790 548 12;
-#X obj 65 417 textfile;
-#X msg 190 337 clear;
-#N canvas 0 0 462 312 alternate 0;
-#X obj 103 117 + 1;
-#X obj 70 119 f 0;
-#X obj 70 171 sel 0 1;
-#X obj 70 146 mod 2;
-#X msg 95 90 0;
-#X obj 68 31 inlet;
-#X obj 140 40 inlet;
-#X obj 140 63 bang;
-#X obj 68 55 bang;
-#X obj 65 205 outlet;
-#X obj 125 206 outlet;
-#X text 59 6 bang;
-#X text 139 18 reset to 0 without bang;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 1 0 3 0;
-#X connect 2 0 9 0;
-#X connect 2 1 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 1;
-#X connect 5 0 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X restore 58 227 pd alternate;
-#X obj 24 81 bng 15 250 50 0 empty empty write-once 0 -6 0 8 -262144
--1 -1;
-#X obj 506 106 bng 15 250 50 0 empty empty reset 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 466 316 inputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the inputs;
-#X obj 94 52 r input1;
-#X obj 163 52 r input2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 58 306 pd inputs;
-#N canvas 0 0 466 316 outputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the outputs;
-#X obj 91 51 r output1;
-#X obj 166 51 r output2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 149 284 pd outputs;
-#X obj 230 223 f 0;
-#X obj 260 223 + 1;
-#X obj 239 257 nbx 5 14 -1e+037 1e+037 0 0 empty empty how_many_patterns
-0 -6 0 10 -262144 -1 -1 0 256;
-#X text 156 406 todo: write header (a line at the beginning of file
-with 3 int: how many tests \, num_input \, num_output);
-#X obj 122 190 delay 50;
-#X obj 115 159 metro 100;
-#X floatatom 346 70 5 100 5000 2 msec_between_snapshots - -;
-#X obj 127 80 tgl 15 0 empty empty toggle_on-off 0 -6 0 8 -262144 -1
--1 0 1;
-#X obj 219 189 / 2;
-#X obj 347 14 loadbang;
-#X msg 347 34 100;
-#X msg 385 314 write test.txt cr;
-#X text 293 224 comment;
-#N canvas 262 68 639 595 README 0;
-#X text 67 432 please help me getting this patch more usable: - how
-to add a line at the very beginning of a text file after i have filled
-it? - how to manage inputs and outputs of different sized without forcing
-the user to edit the patch?;
-#X text 9 7 this tricky patch is usefull to write a file to train ann
-and is intended to be used with the nn external;
-#X text 9 63 how to use: 1) modify [pd inputs] and [ps outputs] inserting
-[r] objects to receive input data \, and modify [pack]s to handle the
-right number of inputs 2) do the same with [pd outputs] 3) click on
-reset 4) toggle ON and start collecting data 5) when you are ready
-toggle OFF 6) edit [write filename cr( with the actual filename you
-want for your training data (always keep the cr after the filename)
-7) open the file with training data 8) add a line at the beginning
-and write 3 integers: the 1st is the number of training patterns written
-(see "how many patterns" number box) \, the 2nd is how many inputs
-your ann has \, the 3th is how many outputs e.g. i collected 100 training
-snapshots \, for a ann with 10 ins and 2 outs I write: 100 10 2 at
-the very beginning of the file now the training file is ready and can
-be read from nn via train-on-file command;
-#X restore 25 16 pd README;
-#X text 479 210 by davide morelli info@davidemorelli.it;
-#X text 106 14 <--readme!;
-#X text 242 283 <--edit here!;
-#X text 142 308 <--edit here!;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 2 1 6 0;
-#X connect 2 1 7 0;
-#X connect 3 0 11 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 4 0 1 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 12 0 2 0;
-#X connect 13 0 12 1;
-#X connect 13 0 15 0;
-#X connect 14 0 12 0;
-#X connect 15 0 11 1;
-#X connect 16 0 17 0;
-#X connect 17 0 13 0;
-#X connect 18 0 0 0;
diff --git a/externals/ann/helps/ann_td-help.pd b/externals/ann/helps/ann_td-help.pd
deleted file mode 100644
index 50d7b9a221eac66d0f1ac2f61114cb9c8ad3ba02..0000000000000000000000000000000000000000
--- a/externals/ann/helps/ann_td-help.pd
+++ /dev/null
@@ -1,251 +0,0 @@
-#N canvas 1 53 858 468 12;
-#N canvas 376 163 647 348 creation 0;
-#X obj 52 235 outlet;
-#X text 246 38 specifying all;
-#X text 159 216 TIP:don't set the layers param too high;
-#X msg 49 10 create 2 1 5;
-#X text 175 6 create with 2 inputs \, 1 output and 5 frames;
-#X msg 59 38 create 2 1 5 3 3 1 0.7;
-#X text 159 179 params: num_input \, num_output \, frames \, num_layers
-\, num_neurons_hidden \, connection_rate \, learning_rate;
-#N canvas 219 181 650 413 what 0;
-#X text 37 134 you pass [0 0.1] to ann_tdnn;
-#X text 34 152 internally now there is this array: [0 0.1 0 0 0 0]
-;
-#X text 38 196 next input is [0.2 1];
-#X text 36 211 internally now there is this array: [0.2 1 0 0.1 0 0]
-;
-#X text 37 255 next input is [0.3 0.4];
-#X text 35 270 internally now there is this array: [0.3 0.4 0.2 1 0
-0.1];
-#X text 36 317 next input is [0.7 0];
-#X text 34 332 internally now there is this array: [0.7 0 0.3 0.4 0.2
-1];
-#X text 35 168 a normal ann_mlp is run with this inputs;
-#X text 38 225 a normal ann_mlp is run with this inputs;
-#X text 33 284 a normal ann_mlp is run with this inputs;
-#X text 33 347 a normal ann_mlp is run with this inputs;
-#X text 12 139 1);
-#X text 14 197 2);
-#X text 15 258 3);
-#X text 13 319 4);
-#X text 33 4 this implementation od tdnn is simply a normal ann_mlp
-with num_input*frame inputs and num_output outputs. ann_tdnn simply
-helps managing the delay \, frames and buffers.;
-#X text 65 385 ...and so on...;
-#X text 34 64 frames can be seen as the delay feedback: how many times
-an input is internally held in the input array;
-#X text 35 104 eg: 2 inputs 3 frames = internally 6 inputs;
-#X restore 155 109 pd what frames are?;
-#X connect 3 0 0 0;
-#X connect 5 0 0 0;
-#X restore 93 68 pd creation examples;
-#N canvas 137 89 728 356 run 0;
-#X obj 90 219 outlet;
-#X msg 123 69 0 1;
-#X msg 124 92 1 0;
-#X msg 125 115 1 1;
-#X msg 126 140 0 0;
-#X text 40 17 now you can run your nn passing it a list with inputs
-;
-#X text 169 70 send a list of data and watch the console for output
-;
-#X text 39 35 the output is sent as a list of float;
-#X text 184 134 these inputs are good for a nn like the one in example1
-directory;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 107 180 pd run the net;
-#N canvas 1 53 619 610 other 0;
-#X obj 43 401 outlet;
-#X msg 102 37 train;
-#X msg 103 63 run;
-#X msg 152 37 setmode 0;
-#X msg 153 63 setmode 1;
-#X text 249 40 set training/running mode;
-#X text 247 63 training mode currently not implemented;
-#N canvas 266 284 690 335 training 0;
-#X obj 71 288 outlet;
-#X msg 82 195 FANN_TRAIN_INCREMENTAL;
-#X msg 82 216 FANN_TRAIN_BATCH;
-#X msg 81 238 FANN_TRAIN_RPROP;
-#X msg 81 258 FANN_TRAIN_QUICKPROP;
-#X text 40 28 you can set the training algorithm simply sending a message
-with the name of the algorithm chosen. possible values are: FANN_TRAIN_INCREMENTAL
-FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP the default
-is: FANN_TRAIN_RPROP see the FANN manual for details on each algorithm:
-http://fann.sourceforge.net/html/r1996.html;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 150 153 pd training algorithm;
-#X text 360 175 some advanced param;
-#N canvas 325 121 698 395 training 0;
-#X obj 52 230 outlet;
-#X msg 69 118 desired_error 0.01;
-#X msg 79 146 max_iterations 500000;
-#X msg 90 178 iterations_between_reports 1000;
-#X text 58 28 you can change training parameters. see FANN manual for
-details (http://fann.sourceforge.net);
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 151 179 pd training params;
-#N canvas 329 121 694 391 activation 0;
-#X obj 49 335 outlet;
-#X text 40 28 you can set ti output activation algorithm passing a
-message to nn. see the FANN manual for description of the algorithms
-;
-#X msg 69 118 set_activation_function_output FANN_THRESHOLD;
-#X msg 83 139 set_activation_function_output FANN_THRESHOLD_SYMMETRIC
-;
-#X msg 95 163 set_activation_function_output FANN_LINEAR;
-#X msg 98 184 set_activation_function_output FANN_SIGMOID;
-#X msg 106 206 set_activation_function_output FANN_SIGMOID_STEPWISE
-;
-#X msg 108 233 set_activation_function_output FANN_SIGMOID_SYMMETRIC
-;
-#X msg 115 256 set_activation_function_output FANN_SIGMOID_SYMMETRIC_STEPWISE
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X restore 150 203 pd activation algorithm;
-#X msg 151 287 details;
-#X text 229 285 details on the current nn;
-#X msg 145 333 help;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 13 0 0 0;
-#X restore 128 258 pd other commands;
-#N canvas 1 53 665 525 save 0;
-#X obj 39 264 outlet;
-#X msg 64 20 filename test.net;
-#X msg 66 46 save;
-#X msg 82 103 load;
-#X text 221 19 set the filename;
-#X text 214 42 save the net to the file;
-#X text 138 104 you can reload it too;
-#X text 144 182 nn can be loaded from a file at creation time simply
-passing the filename as argument;
-#X msg 68 71 save test.net;
-#X msg 93 130 load test.net;
-#X text 144 217 like [ann_td num_inputs frames filename];
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X restore 118 218 pd save the net;
-#X text 270 66 create a nn;
-#X text 244 179 run your net;
-#X text 258 215 save your net;
-#N canvas 0 0 712 542 tips 0;
-#X text 51 84 for better performances inputs value should be normalized
-\, all input should have the same range (if one input has a larger
-range it will be more "important"). the range of each input should
-be 0 centered. so [-1 \, 1] is good [-2 \, 2] is good \, [0 \, 1] not
-so good [1 \, 2] is bad. the range sould not be too small ([-0.1 \,
-0.1] is bad).;
-#X text 41 19 TIPS;
-#X text 41 56 inputs;
-#X text 39 211 outputs;
-#X text 50 235 each class of outputs should have its own output value:
-don't use the same output for 2 meanings \, use 2 outputs intead \,
-1 for each.;
-#X restore 167 285 pd tips;
-#X text 272 371 an interface to fann classes (http://fann.sourceforge.net)
-;
-#X text 274 389 by Davide Morelli - info@davidemorelli.it;
-#N canvas 228 212 580 411 train 0;
-#X obj 32 241 outlet;
-#N canvas 100 44 892 558 train 0;
-#X obj 57 397 outlet;
-#X msg 60 31 train;
-#X text 126 33 1- set the train mode;
-#X text 116 81 2- build a list with inputs and desired output;
-#X text 139 101 be shure you provide the correct numbers of inputs
-and outputs;
-#X obj 168 202 pack s f f f;
-#X obj 197 248 pack f f f;
-#X obj 168 225 unpack s f f f;
-#X msg 192 374 run;
-#X obj 198 170 tgl 15 0 empty empty in1 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 228 170 tgl 15 0 empty empty in2 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 259 170 tgl 15 0 empty empty output 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 148 169 bng 15 250 50 0 empty empty train! 0 -6 0 8 -262144
--1 -1;
-#X text 299 183 set inputs and output value \, then send the list clicking
-on the "train!" bang;
-#X text 229 374 3- when you are ready switch again to run mode before
-exiting;
-#X text 311 308 NOTE2: while training the right outlet gives you the
-mean square error after each training pattern.;
-#X msg 316 278 create 2 1 5;
-#X text 315 226 NOTE1: before training with this example you should
-have created a nn with 2 ins and 1 out and 5 frames with a command
-like:;
-#X connect 1 0 0 0;
-#X connect 5 0 7 0;
-#X connect 6 0 0 0;
-#X connect 7 1 6 0;
-#X connect 7 2 6 1;
-#X connect 7 3 6 2;
-#X connect 8 0 0 0;
-#X connect 9 0 5 1;
-#X connect 10 0 5 2;
-#X connect 11 0 5 3;
-#X connect 12 0 5 0;
-#X connect 16 0 0 0;
-#X restore 68 50 pd train it on the fly;
-#X text 62 5 there are 2 ways to train your net;
-#X text 253 47 on the fly is simpler;
-#X text 86 128 with a trainfile the net could be more accurate;
-#X msg 89 149 train-on-file test.txt;
-#X connect 1 0 0 0;
-#X connect 5 0 0 0;
-#X restore 115 119 pd train;
-#X text 190 118 train a nn;
-#X obj 113 360 print mse;
-#X obj 54 391 print out;
-#X text 150 315 2 args needed: num_inputs and frames;
-#X text 148 331 see [pd creation examples] for details;
-#X obj 33 319 ann_td 2 5;
-#X text 9 2 ann_td: time delay neural networks in pd;
-#N canvas 406 195 494 332 META 0;
-#X text 12 210 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 5 KEYWORDS control;
-#X text 12 150 OUTLET_0;
-#X text 12 170 OUTLET_1;
-#X text 12 190 AUTHOR Davide Morelli - info@davidemorelli.it;
-#X text 12 45 DESCRIPTION time delay neural networks in pd;
-#X text 12 65 INLET_0 list create train train-on-file filename save
-load setmode run FANN_TRAIN_INCREMENTAL FANN_TRAIN_BATCH FANN_TRAIN_RPROP
-FANN_TRAIN_QUICKPROP desired_error max_iterations iterations_between_reports
-set_activation_function_output;
-#X restore 734 408 pd META;
-#X connect 0 0 16 0;
-#X connect 1 0 16 0;
-#X connect 2 0 16 0;
-#X connect 3 0 16 0;
-#X connect 10 0 16 0;
-#X connect 16 0 13 0;
-#X connect 16 1 12 0;
diff --git a/externals/ann/src/ann.c b/externals/ann/src/ann.c
deleted file mode 100644
index 3fab3766f588b9d930f6a41e9401a533e8ad0746..0000000000000000000000000000000000000000
--- a/externals/ann/src/ann.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* ...this is an externals for comouting Aritficial Neural Networks...
-   thikn aboiut this
-	
-   0201:forum::für::umläute:2001
-*/
-
-#include "ann.h"
-
-//#include "ann_som.c"
-//#include "ann_mlp.c"
-//#include "ann_td.c"
-
-typedef struct ann 
-{
-  t_object t_ob;
-} t_ann;
-
-t_class *ann_class;
-
-/* do a little help thing */
-
-static void ann_help(void)
-{
-  post("\n\n...this is the ann external "VERSION"..\n");
-  post("self-organized maps"
-       "\n\tann_som"
-       "");
-  post("\n(l) forum::für::umläute 2001\n"
-       "this software is under the GnuGPL that is provided with these files");
-}
-
-void *ann_new(void)
-{
-  t_ann *x = (t_ann *)pd_new(ann_class);
-  return (void *)x;
-}
-
-void ann_som_setup(void);
-void ann_mlp_setup(void);
-void ann_td_setup(void);
-
-
-
-/*
-  waiting to be released in near future:
-  ANN_SOM : self organized maps
-  ANN_PERCEPTRON : perceptrons
-  ANN_MLP : multilayer perceptrons
-  
-  waiting to be realeased sometimes
-  ANN_RBF : radial basis functions
-*/
-
-
-
-void ann_setup(void) 
-{
-  ann_som_setup();
-  ann_mlp_setup();
-  ann_td_setup();
-
-  
-  /* ************************************** */
-  
-  post("\n\t................................");
-  post("\t...artificial neural networks...");
-  post("\t..........version "VERSION"..........");
-  post("\t....forum::für::umläute 2001....");
-  post("\t....send me a 'help' message....");
-  post("\t................................\n");
-  
-  ann_class = class_new(gensym("ann"), ann_new, 0, sizeof(t_ann), 0, 0);
-  class_addmethod(ann_class, ann_help, gensym("help"), 0);
-}
diff --git a/externals/ann/src/ann.h b/externals/ann/src/ann.h
deleted file mode 100644
index 48452d8b68df4383e12e178715c96f8b041c6f1c..0000000000000000000000000000000000000000
--- a/externals/ann/src/ann.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* ********************************************** */
-/* the ANN external                              */
-/* ********************************************** */
-/*                            forum::für::umläute */
-/* ********************************************** */
-
-#ifndef INCLUDE_ANN_H__
-#define INCLUDE_ANN_H__
-
-#include "m_pd.h"
-
-/* to beautify the logo make sure to make the VERSION-info 4 chars long */
-#define VERSION "0.1."
-
-#endif
diff --git a/externals/ann/src/ann_mlp.c b/externals/ann/src/ann_mlp.c
deleted file mode 100644
index 53f61daf0813a7daa5f4734c4ad3fd3ccd1bfe8b..0000000000000000000000000000000000000000
--- a/externals/ann/src/ann_mlp.c
+++ /dev/null
@@ -1,752 +0,0 @@
-/*	ann_mlp : Neural Networks for PD
-	by Davide Morelli - info@davidemorelli.it - http://www.davidemorelli.it
-	this software is simply an interface for FANN classes
-	http://fann.sourceforge.net/
-	FANN is obviously needed for compilation
-	USE 1.2 VERSION ONLY
-	this software is licensed under the GNU General Public License
-*/
-
-/*
-  hacked by Georg Holzmann for some additional methods, bug fixes, ...
-  2005, grh@mur.at
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include "m_pd.h"
-#include "fann.h"
-
-#ifndef VERSION 
-#define VERSION "0.2"
-#endif
-
-#ifndef __DATE__ 
-#define __DATE__ ""
-#endif
-
-#define TRAIN 0
-#define RUN  1
-
-static t_class *ann_mlp_class;
-
-typedef struct _ann_mlp {
-	t_object  x_obj;
-	struct fann *ann;
-	int mode; // 0 = training, 1 = running
-	t_symbol *filename; // name of the file where this ann is saved
-	t_symbol *filenametrain; // name of the file with training data
-	float desired_error;
-	unsigned int max_iterations;
-	unsigned int iterations_between_reports;
-  fann_type *input;     // grh: storage for input
-  t_atom *output;       // grh: storage for output (t_atom)
-  fann_type *out_float; // grh: storage for output (fann_type)
-  t_canvas *x_canvas;
-	t_outlet *l_out, *f_out;
-} t_ann_mlp;
-
-// allocation
-static void ann_mlp_allocate_storage(t_ann_mlp *x)
-{
-  unsigned int i;
-
-  if(!x->ann)
-    return;
-  
-  x->input = (fann_type *)getbytes(x->ann->num_input*sizeof(fann_type));
-  x->output = (t_atom *)getbytes(x->ann->num_output*sizeof(t_atom));
-  x->out_float = (fann_type *)getbytes(x->ann->num_output*sizeof(fann_type));
-  
-  // init storage with zeros
-  for (i=0; i<x->ann->num_input; i++)
-    x->input[i]=0;
-  for (i=0; i<x->ann->num_output; i++)
-  {
-    SETFLOAT(x->output+i, 0);
-    x->out_float[i]=0;
-  }
-}
-
-// deallocation
-static void ann_mlp_free(t_ann_mlp *x)
-{
-  if(!x->ann)
-    return;
-  
-  freebytes(x->input, x->ann->num_input * sizeof(fann_type));
-  freebytes(x->output, x->ann->num_output * sizeof(t_atom));
-  freebytes(x->out_float, x->ann->num_output * sizeof(fann_type));
-  fann_destroy(x->ann);
-}
-
-static void ann_mlp_help(t_ann_mlp *x)
-{
-	post("");
-	post("ann_mlp: neural nets for PD");
-	post("ann_mlp:Davide Morelli - info@davidemorelli.it - (c)2005");
-	post("ann_mlp:create or load an ann, train it and run it passing a list with inputs to the inlet, nn will give a list of float as output");
-	post("ann_mlp:main commands: create, filename, load, save, train-on-file, run");
-	post("ann_mlp:see help-nn.pd for details on commands and usage");
-	post("ann_mlp:this is an interface to FANN");
-
-}
-
-static void ann_mlp_createFann(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int num_input = 2;
-	unsigned int num_output = 1;
-	unsigned int num_layers = 3;
-	unsigned int *neurons_per_layer = NULL;
-  int activated=0;
-  int i, count_args = 0;
-	float connection_rate = 1;
-	float learning_rate = (float)0.7;
-  
-  
-  // okay, start parsing init args ...
-  
-	if (argc > count_args++)
-		num_input = atom_getint(argv++);
-
-	if (argc > count_args++)
-		num_output = atom_getint(argv++);
-
-	if (argc > count_args++)
-  {
-    int hidden=0;
-    
-    num_layers = atom_getint(argv++);
-    hidden = num_layers-2;
-    
-    neurons_per_layer = (unsigned int *)getbytes(num_layers*sizeof(unsigned int));
-    
-    neurons_per_layer[0] = num_input;
-    
-    // make standard initialization (if there are too few init args)
-    for (i=1; i<hidden+1; i++)
-      neurons_per_layer[i] = 3;
-    
-    // now check init args
-    for (i=1; i<hidden+1; i++)
-    {
-      if (argc > count_args++)
-        neurons_per_layer[i] = atom_getint(argv++);
-    }
-    
-    neurons_per_layer[num_layers-1] = num_output;
-    
-    activated=1;
-  }
-	
-  if (argc > count_args++)
-		connection_rate = atom_getfloat(argv++);
-
-	if (argc > count_args++)
-		learning_rate = atom_getfloat(argv++);
-
-  // make one hidden layer as standard, if there were too few init args
-  if(!activated)
-  {
-    neurons_per_layer = (unsigned int *)getbytes(3*sizeof(unsigned int));
-    neurons_per_layer[0] = num_input;
-    neurons_per_layer[1] = 3;
-    neurons_per_layer[2] = num_output;
-  }
-
-  // ... end of parsing init args
-  
-  
-  if(x->ann)
-    ann_mlp_free(x);
-  
-  x->ann = fann_create_array(connection_rate, learning_rate, num_layers, neurons_per_layer);
-  
-  // deallocate helper array
-  freebytes(neurons_per_layer, num_layers * sizeof(unsigned int));
-  
-	if(!x->ann)
-  {
-    error("error creating the ann");
-    return;
-  }
-  
-  ann_mlp_allocate_storage(x);
-	fann_set_activation_function_hidden(x->ann, FANN_SIGMOID_SYMMETRIC);
-	fann_set_activation_function_output(x->ann, FANN_SIGMOID_SYMMETRIC);
-  
-  // set error log to stdout, so that you see it in the pd console
-  //fann_set_error_log((struct fann_error*)x->ann, stdout);
-  // unfortunately this doesn't work ... but it should do in a similar way !!
-  
-	post("created ann with:");
-	post("num_input = %i", num_input);
-	post("num_output = %i", num_output);
-	post("num_layers = %i", num_layers);
-	post("connection_rate = %f", connection_rate);
-	post("learning_rate = %f", learning_rate);
-}
-
-static void ann_mlp_print_status(t_ann_mlp *x)
-{
-		if (x->mode == TRAIN)
-			post("nn:training");
-		else
-			post("nn:running");
-}
-
-static void ann_mlp_train(t_ann_mlp *x)
-{
-	x->mode=TRAIN;
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-	fann_reset_MSE(x->ann);
-	ann_mlp_print_status(x);
-}
-
-static void ann_mlp_run(t_ann_mlp *x)
-{
-	x->mode=RUN;
-	ann_mlp_print_status(x);
-}
-
-static void ann_mlp_set_mode(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc<1)
-	{
-		error("usage: setmode 0/1: 0 for training, 1 for running");
-	}
-	else	
-	{	
-		x->mode = atom_getint(argv++);
-		ann_mlp_print_status(x);
-	}
-}
-
-static void ann_mlp_train_on_file(t_ann_mlp *x, t_symbol *s)
-{
-  // make correct path
-  char patcher_path[MAXPDSTRING];
-  char filename[MAXPDSTRING];
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-  // make correct path
-  canvas_makefilename(x->x_canvas, s->s_name, patcher_path, MAXPDSTRING);
-  sys_bashfilename(patcher_path, filename);
-  x->filenametrain = gensym(filename);
-
-  if(!x->filenametrain)
-    return;
-  
-	post("nn: starting training on file %s, please be patient and wait ... (it could take severeal minutes to complete training)", x->filenametrain->s_name);
-
-	fann_train_on_file(x->ann, x->filenametrain->s_name, x->max_iterations,
-		x->iterations_between_reports, x->desired_error);
-	
-	post("ann_mlp: finished training on file %s", x->filenametrain->s_name);
-}
-
-static void ann_mlp_set_desired_error(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	float desired_error = (float)0.001;
-	if (0<argc)
-	{
-		desired_error = atom_getfloat(argv);
-		x->desired_error = desired_error;
-		post("nn:desired_error set to %f", x->desired_error);
-	} else
-	{
-		error("you must pass me a float");
-	}
-}
-
-static void ann_mlp_set_max_iterations(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int max_iterations = 500000;
-	if (argc>0)
-	{
-		max_iterations = atom_getint(argv);
-		x->max_iterations = max_iterations;
-		post("nn:max_iterations set to %i", x->max_iterations);
-	} else
-	{
-		error("you must pass me an int");
-	}
-}
-
-static void ann_mlp_set_iterations_between_reports(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	
-	unsigned int iterations_between_reports = 1000;
-	if (argc>0)
-	{
-		iterations_between_reports = atom_getint(argv);
-		x->iterations_between_reports = iterations_between_reports;
-		post("nn:iterations_between_reports set to %i", x->iterations_between_reports);
-	} else
-	{
-		error("you must pass me an int");
-	}
-
-}
-
-// run the ann using floats in list passed to the inlet as input values
-// and send result to outlet as list of float
-static void ann_mlp_run_the_net(t_ann_mlp *x, t_symbol *sl, unsigned int argc, t_atom *argv)
-{
-	unsigned int i=0;	
-	fann_type *calc_out;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-  
-  if(argc < x->ann->num_input)
-  {
-    error("ann_mlp: too few input values!!");
-    return;
-  }
-
-	// fill input array with actual data sent to inlet
-	for (i=0;i<x->ann->num_input;i++)
-	{
-		x->input[i] = atom_getfloat(argv++);
-	}
-	
-	// run the ann
-	calc_out = fann_run(x->ann, x->input);
-
-	// fill the output array with result from ann
-	for (i=0;i<x->ann->num_output;i++)
-		SETFLOAT(x->output+i, calc_out[i]);
-
-	// send output array to outlet
-	outlet_anything(x->l_out, gensym("list"),
-                  x->ann->num_output, x->output);
-}
-
-static void ann_mlp_train_on_the_fly(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-  int quantiINs, quantiOUTs;
-	float mse;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	quantiINs = x->ann->num_input;
-	quantiOUTs = x->ann->num_output;
-
-	if ((quantiINs + quantiOUTs)>argc)
-	{
-		error("insufficient number of arguments passed, in training mode you must prive me a list with (num_input + num_output) floats");
-		return;
-	}
-
-	// fill input array with actual data sent to inlet
-	for (i=0;i<quantiINs;i++)
-		x->input[i] = atom_getfloat(argv++);
-
-	for (i=0;i<quantiOUTs;i++)
-		x->out_float[i] = atom_getfloat(argv++);
-	
-	//fann_reset_MSE(x->ann);
-
-	fann_train(x->ann, x->input, x->out_float);
-
-	mse = fann_get_MSE(x->ann);
-	
-	outlet_float(x->f_out, mse);
-}
-
-static void ann_mlp_manage_list(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->mode)
-		ann_mlp_run_the_net(x, sl, argc, argv);
-	else
-	{
-		ann_mlp_train_on_the_fly(x, sl, argc, argv);
-	}
-}
-
-static void ann_mlp_set_filename(t_ann_mlp *x, t_symbol *s)
-{
-  // make correct path
-  char patcher_path[MAXPDSTRING];
-  char filename[MAXPDSTRING];
-  
-  if(!s)
-    return;
-  
-  // make correct path
-  canvas_makefilename(x->x_canvas, s->s_name, patcher_path, MAXPDSTRING);
-  sys_bashfilename(patcher_path, filename);
-  x->filename = gensym(filename);
-}
-
-static void ann_mlp_load_ann_from_file(t_ann_mlp *x, t_symbol *s)
-{
-  ann_mlp_set_filename(x,s);
-  
-  if(!x->filename)
-  {
-    error("ann: no filename !!!");
-    return;
-  }
-  
-  // deallocate storage
-  if(x->ann)
-    ann_mlp_free(x);
-      
-  x->ann = fann_create_from_file(x->filename->s_name);
-  
-  if (x->ann == 0)
-    error("error opening %s", x->filename->s_name);
-  else
-    post("nn:ann loaded fom file %s", x->filename->s_name);
-  
-  // allocate storage
-  ann_mlp_allocate_storage(x);
-}
-
-static void ann_mlp_save_ann_to_file(t_ann_mlp *x, t_symbol *s)
-{
-  ann_mlp_set_filename(x,s);
-	
-  if(!x->filename)
-  {
-    error("ann: no filename !!!");
-    return;
-  }
-  
-  if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_save(x->ann, x->filename->s_name);
-		post("nn:ann saved in file %s", x->filename->s_name);
-	}
-}
-
-// functions for training algo:
-static void ann_mlp_set_FANN_TRAIN_INCREMENTAL(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_INCREMENTAL);
-		post("nn:training algorithm set to FANN_TRAIN_INCREMENTAL");
-	}
-}
-static void ann_mlp_set_FANN_TRAIN_BATCH(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_BATCH);
-		post("nn:training algorithm set to FANN_TRAIN_BATCH");
-	}
-}
-static void ann_mlp_set_FANN_TRAIN_RPROP(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_RPROP);
-		post("nn:training algorithm set to FANN_TRAIN_RPROP");
-	}
-}
-static void ann_mlp_set_FANN_TRAIN_QUICKPROP(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_QUICKPROP);
-		post("nn:training algorithm set to FANN_TRAIN_QUICKPROP");
-	}
-}
-
-static void ann_mlp_set_activation_function_output(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	t_symbol *parametro = 0;
-	int funzione = 0;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc>0) {
-		parametro = atom_gensym(argv);
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD")==0)
-			funzione = FANN_THRESHOLD;
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD_SYMMETRIC")==0)
-			funzione = FANN_THRESHOLD_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_LINEAR")==0)
-			funzione = FANN_LINEAR;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID")==0)
-			funzione = FANN_SIGMOID;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_STEPWISE")==0)
-			funzione = FANN_SIGMOID_STEPWISE;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC_STEPWISE")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN")==0)
-      funzione = FANN_GAUSSIAN;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN_STEPWISE")==0)
-      funzione = FANN_GAUSSIAN_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT")==0)
-      funzione = FANN_ELLIOT;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT_SYMMETRIC")==0)
-      funzione = FANN_ELLIOT_SYMMETRIC;
-    
-		fann_set_activation_function_output(x->ann, funzione);
-	} else
-	{
-		error("you must specify the activation function");
-	}
-	post("nn:activation function set to %s (%i)", parametro->s_name, funzione);
-
-}
-
-static void ann_mlp_set_activation_function_hidden(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	t_symbol *parametro = 0;
-	int funzione = 0;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc>0) {
-		parametro = atom_gensym(argv);
-    if (strcmp(parametro->s_name, "FANN_THRESHOLD")==0)
-      funzione = FANN_THRESHOLD;
-    if (strcmp(parametro->s_name, "FANN_THRESHOLD_SYMMETRIC")==0)
-      funzione = FANN_THRESHOLD_SYMMETRIC;
-    if (strcmp(parametro->s_name, "FANN_LINEAR")==0)
-      funzione = FANN_LINEAR;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID")==0)
-      funzione = FANN_SIGMOID;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID_STEPWISE")==0)
-      funzione = FANN_SIGMOID_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC")==0)
-      funzione = FANN_SIGMOID_SYMMETRIC;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC_STEPWISE")==0)
-      funzione = FANN_SIGMOID_SYMMETRIC_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN")==0)
-      funzione = FANN_GAUSSIAN;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN_STEPWISE")==0)
-      funzione = FANN_GAUSSIAN_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT")==0)
-      funzione = FANN_ELLIOT;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT_SYMMETRIC")==0)
-      funzione = FANN_ELLIOT_SYMMETRIC;
-    
-		fann_set_activation_function_hidden(x->ann, funzione);
-	} else
-	{
-		error("you must specify the activation function");
-	}
-	post("nn:activation function set to %s (%i)", parametro->s_name, funzione);
-
-}
-
-static void ann_mlp_randomize_weights(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-  t_float min = -1;
-  t_float max = 1;
-
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  if (argc>0)
-		min = atom_getfloat(argv++);
-
-	if (argc>1)
-		max = atom_getfloat(argv++);
-    
-  fann_randomize_weights(x->ann, min, max);
-}
-
-static void ann_mlp_learnrate(t_ann_mlp *x, t_float f)
-{
-  int learnrate = 0;
-  
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  learnrate = (f<0) ? 0 : f;
-  fann_set_learning_rate(x->ann, learnrate);
-}
-
-static void ann_mlp_set_activation_steepness_hidden(t_ann_mlp *x, t_float f)
-{
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  fann_set_activation_steepness_hidden(x->ann, f);
-}
-
-static void ann_mlp_set_activation_steepness_output(t_ann_mlp *x, t_float f)
-{
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  fann_set_activation_steepness_output(x->ann, f);
-}
-
-void fann_set_activation_steepness_hidden(struct fann * ann, fann_type steepness);
-
-static void ann_mlp_print_ann_details(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		post("ann_mlp:ann is not initialized");
-	} else
-	{
-		post("follows a description of the current ann:");
-		post("num_input=%i", x->ann->num_input);
-		post("num_output=%i", x->ann->num_output);
-		post("learning_rate=%f", x->ann->learning_rate);
-		post("connection_rate=%f", x->ann->connection_rate);
-		post("total_neurons=%i", x->ann->total_neurons);
-		post("total_connections=%i", x->ann->total_connections);
-		post("last error=%i", x->ann->errstr);
-		if (x->filename == 0)
-		{
-			post("ann_mlp:filename not set");
-		} else
-		{
-			post("filename=%s", x->filename->s_name);
-		}
-	}
-}
-
-static void ann_mlp_print_ann_print(t_ann_mlp *x)
-{
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-    
-  fann_print_connections(x->ann);
-  fann_print_parameters(x->ann);
-}
-
-static void *ann_mlp_new(t_symbol *s, int argc, t_atom *argv)
-{
-	t_ann_mlp *x = (t_ann_mlp *)pd_new(ann_mlp_class);
-	x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->f_out = outlet_new(&x->x_obj, &s_float);
-
-	x->desired_error = (float)0.001;
-	x->max_iterations = 500000;
-	x->iterations_between_reports = 1000;
-	x->mode=RUN;
-  x->x_canvas = canvas_getcurrent();
-  x->filename = NULL;
-  x->filenametrain = NULL;
-  x->ann = NULL;
-  x->input = NULL;
-  x->output = NULL;
-  x->out_float = NULL;
-
-	if (argc>0) {
-		x->filename = atom_gensym(argv);
-		ann_mlp_load_ann_from_file(x, NULL);
-	}
-
-	return (void *)x;
-}
-
-void ann_mlp_setup(void) {
-	post("");
-	post("ann_mlp: multilayer perceptron for PD");
-	post("version: "VERSION"");
-	post("compiled: "__DATE__);
-	post("author: Davide Morelli");
-	post("contact: info@davidemorelli.it www.davidemorelli.it");
-
-	ann_mlp_class = class_new(gensym("ann_mlp"),
-		(t_newmethod)ann_mlp_new,
-		(t_method)ann_mlp_free, sizeof(t_ann_mlp),
-		CLASS_DEFAULT, A_GIMME, 0);
-
-	// general..
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_help, gensym("help"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_createFann, gensym("create"), A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_train, gensym("train"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_run, gensym("run"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_mode, gensym("setmode"), A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_train_on_file, gensym("train-on-file"), A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_manage_list, gensym("data"), A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_filename, gensym("filename"), A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_load_ann_from_file, gensym("load"),A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_save_ann_to_file, gensym("save"),A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_print_ann_details, gensym("details"), 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_print_ann_print, gensym("print"), 0);
-	
-	// change training parameters
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_desired_error, gensym("desired_error"),A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_learnrate, gensym("learnrate"), A_FLOAT, 0);
-
-	// change training  and activation algorithms
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_function_hidden, gensym("set_activation_function_hidden"),A_GIMME, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_steepness_hidden, gensym("set_activation_steepness_hidden"), A_FLOAT, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_steepness_output, gensym("set_activation_steepness_output"), A_FLOAT, 0);
-	
-  // initialization:
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_randomize_weights, gensym("randomize_weights"),A_GIMME, 0);
-  
-	// the most important one: running the ann
-	class_addlist(ann_mlp_class, (t_method)ann_mlp_manage_list);
-
-
-}
diff --git a/externals/ann/src/ann_som.c b/externals/ann/src/ann_som.c
deleted file mode 100644
index 4f9fef4c2e670bce85c087ed361ce0e639873869..0000000000000000000000000000000000000000
--- a/externals/ann/src/ann_som.c
+++ /dev/null
@@ -1,806 +0,0 @@
-/* ann_som :
-   part of the ARTIFICIAL NEURAL NETWORK external for PURE DATA
-   SELF-ORGANIZED MAP : instar learning-rule
-
-   (l) 0201:forum::für::umläute:2001
-   this software is licensed under the GNU General Public License
-*/
-
-#include "ann.h"
-#include <math.h>
-#ifdef NT
-#define sqrtf sqrt
-#endif
-
-#if 1
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <sys/timeb.h>
-
-#ifdef linux
-#include <unistd.h>
-#endif
-#ifdef NT
-#include <io.h>
-#endif
-#endif
-
-/* ****************************************************************************** */
-/* som : save and load messages... */
-
-#define INSTAR  1
-#define OUTSTAR 2
-#define KOHONEN 0
-
-/* learning-rule
- INSTAR : instar learning-rule
-*/
-
-#define TRAIN 0
-#define TEST  1
-
-
-typedef struct _som {
-  t_object x_obj;
-  t_outlet *left, *right;
-
-  int rule;  /* INSTAR, OUTSTAR, KOHONEN */
-  int mode;  /* TRAIN, TEST */
-
-  t_symbol *filename;
-  int defaultfilename; /* TRUE if filename is still "default.som" */
-
-  int num_neurX, num_neurY; /* for 2dim-fields */
-  int num_neurons; /* num_neurX * num_neurY */
-  int num_sensors;
-
-  t_float **weights; /* the neural network (pointer to neuron (neuron is a pointer to an array of weights)) */
-  t_float **dist; /* squaredistances between neurons (for neighbourhood) (pointer to neuron (is a pointer to an array of distances))*/
-
-  t_float *workingspace; /* a for comparing data*/
-
-  double lr, lr_factor, lr_bias; /* learning rate: lr(n)=(lr(n-1)*lr_factor; LR=lr(n)+lr_bias */
-  double nb, nb_factor, nb_bias; /* neighbourhood */
-
-  /* something for reading/writing to files */
-  t_canvas *x_canvas;
-  t_symbol *x_dir;
-
-} t_som;
-
-static t_class *som_class;
-
-/* -----------------  private functions -------------------- */
-
-static void som_killsom(t_som *x)
-{
-  /* kill the weights-field */
-  int i=x->num_neurons;
-
-  while (i--) {
-    freebytes(x->weights[i], sizeof(x->weights[i]));
-    x->weights[i]=0;
-  }
-  freebytes(x->weights, sizeof(x->weights));
-  x->weights = 0;
-
-  /* kill the dist-field */
-  i=x->num_neurons;
-
-  while (i--) {
-    freebytes(x->dist[i], sizeof(x->dist[i]));
-    x->dist[i]=0;
-  }
-  freebytes(x->dist, sizeof(x->dist));
-  x->dist = 0;
-
-  /* kill the working-space */
-  freebytes(x->workingspace, sizeof(x->workingspace));
-  x->workingspace = 0;
-}
-
-static void som_makedist(t_som *x)
-{
-  int i, j;
-
-  x->dist = (t_float **)getbytes(x->num_neurons * sizeof(t_float *));
-
-  for (i=0; i<x->num_neurons; i++) {
-    int X1 = (i%x->num_neurX), Y1 = (i/x->num_neurX);
-    x->dist[i]=(t_float *)getbytes(x->num_neurons * sizeof(t_float));
-
-    for (j=0; j<x->num_neurons; j++) {
-      int X2 = (j%x->num_neurX), Y2 = (j/x->num_neurX);
-      x->dist[i][j] = sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
-    }
-  }
-}
-
-static int som_whosthewinner(t_som *x, t_float *senses)
-{
-  t_float min_dist = 0;
-  int min_n = x->num_neurons-1;
-  t_float *weight = x->weights[min_n];
-  int n = x->num_sensors;
-
-  while (n--) {
-    t_float f = senses[n] - weight[n];
-    min_dist += f*f;
-  }
-
-  n=x->num_neurons-1;
-  while (n--) {
-    int s = x->num_sensors;
-  
-    t_float dist = 0;
-    weight = x->weights[n];
-
-    while (s--) {
-      t_float f;
-      f = senses[s] - weight[s];
-      dist += f*f;
-    }
-    if (dist<min_dist) {
-      min_dist = dist;
-      min_n    = n;
-    }
-  }
-
-  return min_n;
-}
-
-static void som_createnewsom(t_som *x, int sens, int nx, int ny)
-{ /* create a new SOM */
-  int i, j;
-
-  /* clean up the old SOM */
-  som_killsom(x);
-
-
-  /* make new SOM */
-  x->num_neurons = nx * ny;
-  x->num_neurX = nx;
-  x->num_neurY = ny;
-  x->num_sensors = sens;
-
-  x->weights = (t_float **)getbytes(x->num_neurons * sizeof(t_float *));
-  for (i=0; i<x->num_neurons; i++) {
-    x->weights[i]=(t_float *)getbytes(x->num_sensors * sizeof(t_float));
-
-    for (j=0; j<x->num_sensors; j++) x->weights[i][j] = 0;
-  }
-
-  /* make new dist */
-  som_makedist(x);
-
-  /* make new workingspace */
-  x->workingspace = (t_float *)getbytes(x->num_sensors * sizeof(t_float));
-  for (i=0; i<x->num_sensors; i++) x->workingspace[i]=0.f;
-}
-
-/* ----------------- public functions ---------------------- */
-
-static void som_list(t_som *x, t_symbol *sl, int argc, t_atom *argv)
-{ /* present the data */
-  int i = x->num_sensors;
-  //  t_float *data = (t_float *)getbytes(sizeof(t_float) * i);
-  t_float *data = x->workingspace;
-  t_float *dummy = data;
-  int winner;
-
-  t_float learningrate = x->lr+x->lr_bias, neighbourhood = x->nb+x->nb_bias;
-
-  /* first: extract the data */
-  /* check if there is enough input data; fill up with zeros if not; if there's plenty, maybe forget about the rest */
-  if ((i = x->num_sensors - argc) > 0) {
-    dummy = data + argc;
-    while (i--) *dummy++ = 0;
-    i = x->num_sensors;
-  } else i = x->num_sensors;
-  dummy = data;
-  /* really get the data */
-  while (i--) *dummy++ = atom_getfloat(argv++);
-
-  /* second: get the winning neuron */
-  winner = som_whosthewinner(x, data);
-
-  if (x->mode == TRAIN) {
-    /* third: learn something */
-    /* update all the neurons that are within the neighbourhood */
-    i=x->num_neurons;
-    switch (x->rule) {
-    case OUTSTAR:
-      while (i--) {
-	t_float dist = x->dist[winner][i];
-	if (neighbourhood > dist) {
-	  t_float factor = 1 - dist/neighbourhood;
-	  t_float *weight=x->weights[i];
-	  int s = x->num_sensors;
-
-	  while (s--) weight[s] += learningrate*data[s]*(factor-weight[s]);
-	}
-      }
-      break;
-    case INSTAR:
-      while (i--) {
-	t_float dist = x->dist[winner][i];
-	if (neighbourhood > dist) {
-	  t_float factor = learningrate * (1 - dist/neighbourhood);
-	  t_float *weight=x->weights[i];
-	  int s = x->num_sensors;
-
-	  while (s--) weight[s] += (data[s]-weight[s])*factor;
-	}
-      }
-      break;
-    default:
-      /* KOHONEN rule */
-      while (i--) {
-	t_float dist = x->dist[winner][i];
-	if (neighbourhood > dist) {
-	  t_float *weight=x->weights[i];
-	  int s = x->num_sensors;
-
-	  while (s--) weight[s] += (data[s]-weight[s])*learningrate;
-	}
-      }
-    }
-
-    /* update learning-rate and neighbourhood */
-    x->lr *= x->lr_factor;
-    x->nb *= x->nb_factor;
-  }
-
-  /* finally: do the output thing */
-  /* do the output thing */
-  outlet_float(x->x_obj.ob_outlet, winner);
-
-  //  freebytes(data, sizeof(t_float)*x->num_sensors);
-}
-
-static void som_bang(t_som *x)
-{ /* re-trigger the last output */
-  error("som_bang: nothing to do");
-}
-
-static void som_init(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* initialize the neuron-weights */
-  int i, j;
-  t_float f;
-
-  switch (argc) {
-  case 0:
-  case 1:
-    f = (argc)?atom_getfloat(argv):0;
-    for (i=0; i<x->num_neurons; i++)
-      for (j=0; j<x->num_sensors; j++)
-	x->weights[i][j]=f;
-    break;
-  default:
-    if (argc == x->num_sensors) {
-      for (i=0; i<x->num_neurons; i++)
-	for (j=0; j<x->num_sensors; j++)
-	  x->weights[i][j]=atom_getfloat(&argv[j]);
-    } else 
-      error("som_init: you should pass a list of expected mean-values for each sensor to the SOM");
-  }
-}
-
-/* centered initialization: 
- * the "first" neuron will be set to all zeros
- * the "middle" neuron will be set to the given data
- * the "last" neuron will be set to teh double of the given data
- */
-static void som_cinit(t_som *x, t_symbol *s, int argc, t_atom *argv){
-  /* initialize the neuron-weights */
-  int i, j;
-  t_float f;
-  t_float v = 1.0f;
-  
-  switch (argc) {
-  case 0:
-  case 1:
-    f = (argc)?atom_getfloat(argv):0;
-    for (i=0; i<x->num_neurons; i++){
-      v=i*2.0/x->num_neurons;
-      for (j=0; j<x->num_sensors; j++)
-	x->weights[i][j]=f*v;
-    }
-    break;
-  default:
-    if (argc == x->num_sensors) {
-      for (i=0; i<x->num_neurons; i++){
-	v=i*2.0/x->num_neurons;
-	for (j=0; j<x->num_sensors; j++)
-	  x->weights[i][j]=v*atom_getfloat(&argv[j]);
-      }
-    } else 
-      error("som_init: you should pass a list of expected mean-values for each sensor to the SOM");
-  }
-}
-
-static void som_rinit(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* initialize the neuron-weights to time-seeded random values*/
-  int i, j;
-  float m,r;
-  struct timeb mytime;
-
-  ftime(&mytime); // get current time
-  srand(mytime.time*1000+mytime.millitm); // Seed with time (in millisecs)
-
-  switch (argc) {
-  case 0:
-    for (i=0; i<x->num_neurons; i++) {
-      for (j=0; j<x->num_sensors; j++) {
-	r = (float)rand()/RAND_MAX;
-	x->weights[i][j]=r;
-      }
-    }
-  case 1:
-    m = atom_getfloat(argv);
-    for (i=0; i<x->num_neurons; i++) {
-      for (j=0; j<x->num_sensors; j++) {
-	r = (float)rand()/RAND_MAX*m;
-	x->weights[i][j]=r;
-      }
-    }
-    break;
-  default:
-    if (argc > 1) {
-      error("som_rinit: Pass a single float (random value multiplier).");
-     }
-  }
-}
-
-/* dump the weights of the queried neuron to the output */
-static void som_dump(t_som *x, t_float nf){
-  int n=nf;
-  int i=x->num_sensors;
-  t_atom*ap=0;
-  if (n<0 || n>=x->num_neurons)return;
-  ap=(t_atom*)getbytes(sizeof(t_atom)*x->num_sensors);
-  while(i--)SETFLOAT(&ap[i], x->weights[n][i]);
-  outlet_list(x->x_obj.ob_outlet, &s_list, x->num_sensors, ap);
-
-  freebytes(ap, x->num_sensors*sizeof(t_atom));
-}
-
-static void som_makenewsom(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* create a new SOM */
-  int sens, nx, ny;
-
-
-  /* check whether there is sufficient data to create a new SOM */
-  if ((argc != 2) && (argc !=3)) {
-    error("som_new: wrong number of arguments (only 2 or 3 parameters are allowed)");
-    return;
-  }
-
-  /* 3 arguments : #sensors #neurX #neurY :: 2D-field of neurons with neurX * neurY  items
-     2 arguments : #sensors #neurXY       :: 2D-field of neurons with neurXY* neurXY items
-
-     to create more-dimensional fields, we now have to manually adjust the SOM-file (change the distances...)
-     LATER, we might do a function "ann_makedist"
-  */
-
-  sens = atom_getfloat(argv);
-  if (sens <= 0) {
-    error("some_new: number of sensors must be >= 1");
-    return;
-  }
-
-  if (argc==3) {
-    nx = atom_getint(argv+1);
-    ny = atom_getint(argv+2);
-    if ((nx<=0) || (ny<=0)) {
-      error("some_new: number of neurons must be >= 1");
-      return;
-    }
-  } else {
-    nx = atom_getint(argv+1);
-    if (nx<=0) {
-      error("some_new: number of neurons must be >= 1");
-      return;
-    }
-    ny = nx;
-  }
-
-  som_createnewsom(x, sens, nx, ny);
-}
-
-static void som_train(t_som *x)
-{ /* set the mode to TRAIN */
-  x->mode = TRAIN;
-}
-static void som_test(t_som *x)
-{ /* set the mode to TEST */
-  x->mode = TEST;
-}
-
-static void som_rule(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* set the learning rule */
-  int rule=-1;
-
-  if (argc>1) {
-    error("som_rule: only 1 argument may be specified");
-    return;
-  }
-  if (argc == 0) {
-    post("som_rule: you are currently training with the %s rule", (x->rule==INSTAR)?"INSTAR":(x->rule==OUTSTAR)?"OUTSTAR":"KOHONEN");
-    return;
-  }
-
-  if (argv->a_type==A_FLOAT) rule=atom_getint(argv);
-  else if (argv->a_type==A_SYMBOL) {
-    char name=*atom_getsymbol(argv)->s_name;
-    if (name=='I' || name=='i')  rule=INSTAR;
-    else if (name=='O' || name=='O')  rule=OUTSTAR;
-    else if (name=='K' || name=='k')  rule=KOHONEN;
-  }
-
-  switch (rule) {
-  case KOHONEN:
-  case INSTAR:
-  case OUTSTAR:
-    x->rule=rule;
-    break;
-  default:
-    error("som_rule: you specified an invalid rule !");
-  }
-}
-
-
-static void som_learn(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* set a new LEARNINGRATE */
-  switch (argc) {
-  case 3:
-    x->lr_bias = atom_getfloat(&argv[2]);
-  case 2:
-    x->lr_factor = atom_getfloat(&argv[1]);
-  case 1:
-    x->lr = atom_getfloat(&argv[0]);
-    break;
-  default:
-    error("som_learn: you should pass up to 4 learning-rate parameters");
-  }
-}
-static void som_neighbour(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* set a new NEIGHBOURHOOD */
-  switch (argc) {
-  case 3:
-    x->nb_bias = atom_getfloat(&argv[2]);
-  case 2:
-    x->nb_factor = atom_getfloat(&argv[1]);
-  case 1:
-    x->nb = atom_getfloat(&argv[0]);
-    break;
-  default:
-    error("som_neighbour: you should pass up to 4 neighbourhood parameters");
-  }
-} 
-
-static void som_read(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* read a som-file */
-
-  int fd;
-  char filnam[MAXPDSTRING];
-  char buf[MAXPDSTRING], *bufptr;
-
-  int neuronsX, neuronsY, sensors, rule=0;
-  double lr[3], nb[3];
-  t_float dummy;
-  char *text=0;
-  int i, j;
-  t_float *fp;
-
-  FILE *f=0;
-
-  text = (char *)getbytes(MAXPDSTRING*sizeof(char));
-
-  if (argc>0) {
-    x->filename = atom_gensym(argv);
-    x->defaultfilename = 0;
-  }
-  if (x->defaultfilename) error("som_read: reading from default file \"%s\"", x->filename->s_name);
-
-  if ((fd = open_via_path(canvas_getdir(x->x_canvas)->s_name,
-		  x->filename->s_name, "", buf, &bufptr, MAXPDSTRING, 0)) < 0) {
-    error("%s: can't open", x->filename->s_name);
-    return;
-  }
-  else
-    close (fd);
-
- /* open */
-  sys_bashfilename(x->filename->s_name, filnam);
-  dummy = 0;
-
-  while (f == 0) {
-    if (!(f = fopen(filnam, "r"))) {
-      error("msgfile_read: unable to open %s", filnam);
-      return;
-    }
-
-    /* read */
-
-    /* read header */
-    if ( (dummy=fscanf(f,"SOM:\n%d",&sensors)) != 1) {
-      error("som_read: error reading file\n");
-      break;
-    }
-    if ( (dummy=fscanf(f,"%d",&neuronsX)) != 1) {
-      error("som_read: error reading file\n");
-      break;
-    }
-    if ( (dummy=fscanf(f,"%d",&neuronsY)) != 1) {
-     error("som_read: error reading file\n");
-      break;
-    }
-    fscanf(f,"%s",text);
-    if (!strcmp("INSTAR", text)) rule = INSTAR;
-    else if (!strcmp("OUTSTAR", text)) rule = OUTSTAR;
-    else if (!strcmp("KOHONEN", text)) rule = KOHONEN;
-
-    for (i=0; i<3; i++)
-      if ( (fscanf(f,"%lf",&lr[i])) != 1) {
-	error("som_read: error reading file\n");
-	break;
-      }
-    for (i=0; i<3; i++)
-      if ( (fscanf(f,"%lf",&nb[i])) != 1) {
-	error("som_read: error reading file\n");
-	break;
-      }
-
-    /* we now have a valid SOM-definition
-       let's create a dummy SOM */
-
-    som_createnewsom(x, sensors, neuronsX, neuronsY);
- 
-    x->rule = rule;
-
-    x->lr=lr[0];
-    x->lr_factor=lr[1];
-    x->lr_bias=lr[2];
-
-    x->nb=nb[0];
-    x->nb_factor=nb[1];
-    x->nb_bias=nb[2];
-
-    /* read the weights */
-
-    if ((fscanf(f,"\nweights:\n %f",&dummy)) != 1) {
-      break;
-    }
-    
-    i=0;
-    while (i<x->num_neurons) {
-      j = x->num_sensors;
-      fp= x->weights[i];
-      while (j--) {
-	*fp++=dummy;
-	if ((fscanf(f,"%f",&dummy)) != 1) {
-	  break;
-	}
-      }
-      j = x->num_sensors;
-      i++;
-    }
-
-    /* finally read the distances */
-    if ((fscanf(f,"\ndists:\n %f",&dummy)) != 1) {
-      break;
-    }
-    
-    i=0;
-    while (i<x->num_neurons) {
-      j = x->num_neurons;
-      fp= x->dist[i];
-      while (j--) {
-	*fp++=dummy;
-	if ((fscanf(f,"%f",&dummy)) != 1) {
-	  break;
-	}
-      }
-      j = x->num_sensors;
-      i++;
-    }
-
-  }
-
-  /* close file */
-  if (f) fclose(f);
-
-
-}
-
-static void som_write(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* write a som-file */
-  char filnam[MAXPDSTRING];
-  char buf[MAXPDSTRING];
-  char *text=0;
-  int textlen;
-
-  FILE *f=0;
-
-  int i;
-
-  if (argc>0) {
-    x->filename = atom_gensym(argv);
-    x->defaultfilename = 0;
-  }
-  if (x->defaultfilename) error("som_write: writing to default file \"%s\"", x->filename->s_name);
-
-  canvas_makefilename(x->x_canvas, x->filename->s_name, buf, MAXPDSTRING);
-  sys_bashfilename(x->filename->s_name, filnam);
-
-  while (f==0) {
-    /* open file */
-    if (!(f = fopen(filnam, "w"))) {
-      error("msgfile : failed to open %s", filnam);
-    } else {
-
-      /* write header information */
-      text=(char *)getbytes(sizeof(char)*MAXPDSTRING);
-      sprintf(text, "SOM:\n%d %d %d %s\n%.15f %.15f %.15f\n%.15f %.15f %.15f\nweights:\n",
-	      x->num_sensors, x->num_neurX, x->num_neurY, (x->rule==INSTAR)?"INSTAR":(x->rule==OUTSTAR)?"OUTSTAR":"KOHONEN",
-	      x->lr, x->lr_factor, x->lr_bias,
-	      x->nb, x->nb_factor, x->nb_bias);
-      textlen = strlen(text);
-
-      if (fwrite(text, textlen*sizeof(char), 1, f) < 1) {
-	error("msgfile : failed to write %s", filnam); break;
-      }
-    
-      /* write weights */
-      for (i=0; i<x->num_neurons; i++) {
-	int j=x->num_sensors;
-	t_float *weight = x->weights[i];
-	while (j--) {
-	  sprintf(text, " %.15f", *weight++);
-	  textlen=strlen(text);
-	  if (fwrite(text, textlen*sizeof(char), 1, f) < 1) {
-	    error("msgfile : failed to write %s", filnam); break;
-	  }
-	}
-	if (fwrite("\n", sizeof(char), 1, f) < 1) {
-	  error("msgfile : failed to write %s", filnam); break;
-	}
-      }
-
-      /* write dists */
-      if (fwrite("dists:\n", 7*sizeof(char), 1, f) < 1) {
-	error("msgfile : failed to write %s", filnam); break;
-      }
-      for (i=0; i<x->num_neurons; i++) {
-	int j=x->num_neurons;
-	t_float *dist = x->dist[i];
-	while (j--) {
-	  sprintf(text, " %.15f", *dist++);
-	  textlen=strlen(text);
-	  if (fwrite(text, textlen*sizeof(char), 1, f) < 1) {
-	    error("msgfile : failed to write %s", filnam); break;
-	  }
-	}
-	if (fwrite("\n", sizeof(char), 1, f) < 1) {
-	  error("msgfile : failed to write %s", filnam); break;
-	}
-      }   
-    }
-  }
-  /* close file */
-  if (f) fclose(f);
-
-  freebytes(text, sizeof(text));
-}
-
-
-static void som_help(t_som *x)
-{
-  post("\nann_som\t:: self orgranized map");
-  post("<f1> <f2> <f3>... <fn>\t: train/test som with data"
-       "\nlearn\t\t:... "
-
-       "\nhelp\t\t: show this help");
-  post("creation: \"ann_som <som-file>\": <som-file> defines a file to be loeaded as a som");
-}
-
-
-static void som_print(t_som *x)
-{
-  char c = (x->defaultfilename)?'\0':'\"';
-  post("\nann_som\t:: self orgranized map");
-  post("rule=%s\tmode=%s", (x->rule==INSTAR)?"INSTAR":(x->rule==OUTSTAR)?"OUTSTAR":"KOHONEN", (x->mode==TEST)?"TEST":"TRAIN");
-  post("file = %c%s%c", c, x->filename->s_name,c );
-  post("neurons = %d*%d = %d\tsensors=%d", x->num_neurX, x->num_neurY, x->num_neurons, x->num_sensors);
-  post("learning-rate : lr=%.15f\tlr_x=%.15f\tlr_o=%.15f", x->lr, x->lr_factor, x->lr_bias);
-  post("neighbourhood : nb=%.15f\tnb_x=%.15f\tnb_o=%.15f\n", x->nb, x->nb_factor, x->nb_bias);
-
-}
-static void som_free(t_som *x)
-{
-  som_killsom(x);
-}
-
-static void *som_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_som *x = (t_som *)pd_new(som_class);
-
-    outlet_new(&x->x_obj, 0);
-
-    x->rule = INSTAR;
-    x->mode = TRAIN;
-
-    x->filename = gensym("default.som");
-    x->defaultfilename = 1;
-
-    x->num_neurX   = 0;
-    x->num_neurY   = 0;
-    x->num_neurons = 0;
-
-    x->num_sensors = 0;
-
-    x->weights     = 0;
-    x->dist        = 0;
-
-    x->lr          = 1;
-    x->lr_factor   = 0.999999999;
-    x->lr_bias     = 0;
-
-    x->nb          = 10;
-    x->nb_factor   = 0.999999999;
-    x->nb_bias     = 0.999999999;
-
-    x->x_canvas = canvas_getcurrent();
-
-
-    if ((argc==0) || (argv->a_type == A_SYMBOL)) {
-      /* load the som-file */
-      if (argc != 0) x->defaultfilename = 0;
-      som_read(x, s, argc, argv);
-    } else {
-      /* create a new som */
-      som_makenewsom(x, s, argc, argv);
-    }
-
-    return (x);
-}
-
-static void som_setup(void)
-{
-  som_class = class_new(gensym("ann_som"), (t_newmethod)som_new,
-			    (t_method)som_free, sizeof(t_som), 0, A_GIMME, 0);
-
-  class_addlist(som_class, som_list);
-  class_addbang(som_class, som_bang);
-
-  class_addmethod(som_class, (t_method)som_makenewsom, gensym("new"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_init, gensym("init"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_cinit, gensym("cinit"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_rinit, gensym("rinit"), A_GIMME, 0);
-
-  class_addmethod(som_class, (t_method)som_learn, gensym("learn"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_neighbour, gensym("neighbour"), A_GIMME, 0);
- 
-  class_addmethod(som_class, (t_method)som_train, gensym("train"), 0);
-  class_addmethod(som_class, (t_method)som_test, gensym("test"), 0);
-  class_addmethod(som_class, (t_method)som_rule, gensym("rule"), A_GIMME, 0);
-
-  class_addmethod(som_class, (t_method)som_read, gensym("read"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_write, gensym("write"), A_GIMME, 0);
-
-  class_addmethod(som_class, (t_method)som_dump, gensym("dump"), A_FLOAT, 0);
-
-  class_addmethod(som_class, (t_method)som_print, gensym("print"), 0);
-  class_addmethod(som_class, (t_method)som_help, gensym("help"), 0);
-
-}
-
-void ann_som_setup(void)
-{
-  som_setup();
-}
-
diff --git a/externals/ann/src/ann_td.c b/externals/ann/src/ann_td.c
deleted file mode 100644
index f135d09830ccf567d6fe620e080944b19d758d5f..0000000000000000000000000000000000000000
--- a/externals/ann/src/ann_td.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/*	ann_td : Time Delay Neural Networks for PD
-	by Davide Morelli - info@davidemorelli.it - http://www.davidemorelli.it
-	this software is simply an interface for FANN classes
-	http://fann.sourceforge.net/
-	FANN is obviously needed for compilation
-	use 1.2 version only
-	this software is licensed under the GNU General Public License
-*/
-#include <stdio.h>
-#include <string.h>
-#include "m_pd.h"
-#include "fann.h"
-
-#ifndef VERSION 
-#define VERSION "0.2"
-#endif
-
-#ifndef __DATE__ 
-#define __DATE__ ""
-#endif
-
-#define TRAIN 0
-#define RUN  1
-
-#define MAXINPUT 1024
-#define MAXOUTPUT 256
-
-static t_class *ann_td_class;
-
-typedef struct _ann_td {
-	t_object  x_obj;
-	struct fann *ann;
-	int mode; // 0 = training, 1 = running
-	t_symbol *filename; // name of the file where this ann is saved
-	t_symbol *filenametrain; // name of the file with training data
-	float desired_error;
-	unsigned int max_iterations;
-	unsigned int iterations_between_reports;
-	unsigned int frames;
-	unsigned int num_input;
-	t_float *inputs;
-	unsigned int ins_frames_set;
-	t_outlet *l_out, *f_out;
-} t_ann_td;
-
-static void ann_td_help(t_ann_td *x)
-{
-	post("");
-	post("ann_td:time delay neural networks for PD");
-	post("ann_td:Davide Morelli - info@davidemorelli.it - (c)2005");
-	post("ann_td:create or load an ann, train it and run it passing a list with inputs to the inlet, nn will give a list of float as output");
-	post("ann_td:main commands: create, filename, load, save, train-on-file, run");
-	post("ann_td:see help-nn.pd for details on commands and usage");
-	post("ann_td:this is an interface to FANN");
-
-}
-
-static void ann_td_deallocate_inputs(t_ann_td *x)
-{
-	if (x->inputs != 0)
-	{
-		freebytes(x->inputs, sizeof(x->inputs));
-		x->inputs = 0;
-	}
-}
-
-static void ann_td_allocate_inputs(t_ann_td *x)
-{
-	unsigned int i;
-	ann_td_deallocate_inputs(x);
-	// allocate space for inputs array
-	x->inputs = (t_float *)getbytes((x->frames) * (x->num_input) * sizeof(t_float));
-	for (i=0; i<(x->frames * x->num_input); i++) x->inputs[i]=0.f;
-}
-
-static void ann_td_createFann(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int num_input = 2;
-	unsigned int num_output = 1;
-	unsigned int num_layers = 3;
-	unsigned int num_neurons_hidden = 3;
-	float connection_rate = 1;
-	float learning_rate = (float)0.7;
-	
-	if (argc<3)
-	{
-		error("you must provide at least num_input, num_output amd frames number");
-		return;
-	}
-	if (argc>0)
-		num_input = atom_getint(argv++);
-
-	if (argc>1)
-		num_output = atom_getint(argv++);
-	
-	if (argc>2)
-	{
-		x->frames = atom_getint(argv++);
-		x->ins_frames_set=1;
-	}
-
-	if (argc>3)
-		num_layers = atom_getint(argv++);
-
-	if (argc>4)
-		num_neurons_hidden = atom_getint(argv++);
-
-	if (argc>5)
-		connection_rate = atom_getfloat(argv++);
-
-	if (argc>6)
-		learning_rate = atom_getfloat(argv++);
-
-	if ((num_input * x->frames)>MAXINPUT)
-	{
-		error("too many inputs, maximum allowed is %f", MAXINPUT/x->frames);
-		return;
-	}
-
-	if (num_output>MAXOUTPUT)
-	{
-		error("too many outputs, maximum allowed is MAXOUTPUT");
-		return;
-	}
-
-	x->ann	= fann_create(connection_rate, learning_rate, num_layers,
-		(num_input*x->frames), num_neurons_hidden, num_output);
-
-	fann_set_activation_function_hidden(x->ann, FANN_SIGMOID_SYMMETRIC);
-	fann_set_activation_function_output(x->ann, FANN_SIGMOID_SYMMETRIC);
-
-	ann_td_allocate_inputs(x);
-
-	if (x->ann == 0)
-	{
-		error("error creating the ann");
-	} else
-	{
-		post("ann_td:created ann with:");
-		post("num_input = %i", num_input);
-		post("num_output = %i", num_output);
-		post("frames = %i", x->frames);
-		post("num_layers = %i", num_layers);
-		post("num_neurons_hidden = %i", num_neurons_hidden);
-		post("connection_rate = %f", connection_rate);
-		post("learning_rate = %f", learning_rate);
-	}
-}
-
-static void ann_td_print_status(t_ann_td *x)
-{
-		if (x->mode == TRAIN)
-			post("ann_td:training");
-		else
-			post("ann_td:running");
-}
-
-static void ann_td_train(t_ann_td *x)
-{
-	x->mode=TRAIN;
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-	fann_reset_MSE(x->ann);
-	ann_td_print_status(x);
-}
-
-static void ann_td_run(t_ann_td *x)
-{
-	x->mode=RUN;
-	ann_td_print_status(x);
-}
-
-static void ann_td_set_mode(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc<1)
-	{
-		error("usage: setmode 0/1: 0 for training, 1 for running");
-	}
-	else	
-	{	
-		x->mode = atom_getint(argv++);
-		ann_td_print_status(x);
-	}
-}
-
-
-
-static void ann_td_train_on_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc<1)
-	{
-		error("you must specify the filename with training data");
-		return;
-	} else
-	{
-		x->filenametrain = atom_gensym(argv);
-	}
-
-	//post("nn: starting training on file %s, please be patient and wait for my next message (it could take severeal minutes to complete training)", x->filenametrain->s_name);
-
-	fann_train_on_file(x->ann, x->filenametrain->s_name, x->max_iterations,
-		x->iterations_between_reports, x->desired_error);
-	
-	post("ann_td: finished training on file %s", x->filenametrain->s_name);
-}
-
-static void ann_td_set_desired_error(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	float desired_error = (float)0.001;
-	if (0<argc)
-	{
-		desired_error = atom_getfloat(argv);
-		x->desired_error = desired_error;
-		post("ann_td:desired_error set to %f", x->desired_error);
-	} else
-	{
-		error("you must pass me a float");
-	}
-}
-
-static void ann_td_set_max_iterations(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int max_iterations = 500000;
-	if (argc>0)
-	{
-		max_iterations = atom_getint(argv);
-		x->max_iterations = max_iterations;
-		post("ann_td:max_iterations set to %i", x->max_iterations);
-	} else
-	{
-		error("you must pass me an int");
-	}
-}
-
-static void ann_td_set_iterations_between_reports(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	
-	unsigned int iterations_between_reports = 1000;
-	if (argc>0)
-	{
-		iterations_between_reports = atom_getint(argv);
-		x->iterations_between_reports = iterations_between_reports;
-		post("ann_td:iterations_between_reports set to %i", x->iterations_between_reports);
-	} else
-	{
-		error("you must pass me an int");
-	}
-
-}
-
-
-static void ann_td_scale_inputs(t_ann_td *x)
-{
-	unsigned int j;
-	unsigned int k;
-
-	for(j = (x->frames - 1); j>0; j--)
-	{
-		// scorro la lista all'indietro
-		for (k=0; k < x->num_input; k++)
-		{
-			// scalo i valori dei frames
-			x->inputs[(x->num_input) * j + k]=x->inputs[(x->num_input) * (j-1) + k];
-		}
-	}
-}
-
-// run the ann using floats in list passed to the inlet as input values
-// and send result to outlet as list of float
-static void ann_td_run_the_net(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-	unsigned j=0;
-	//fann_type input[MAXINPUT];	
-	fann_type *calc_out;
-	t_atom lista[MAXOUTPUT];
-	int quanti;
-	float valoreTMP;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (x->ins_frames_set==0)
-	{
-		error("num_inputs and frames not set");
-		return;
-	}
-
-	if (argc < (int) x->num_input)
-	{
-		error("insufficient inputs");
-		return;
-	}
-	quanti = x->ann->num_output;
-
-	ann_td_scale_inputs(x);
-
-	// fill output array with zeros
-	for (i=0; i<MAXOUTPUT; i++)
-	{
-		SETFLOAT(lista + i,0);
-	}
-
-	// fill input array with actual data sent to inlet
-	for (j=0; j < x->num_input ;j++)
-	{
-		//input[j] = atom_getfloat(argv++);
-		x->inputs[j] = atom_getfloat(argv++);
-	}
-	
-	// run the ann
-	//calc_out = fann_run(x->ann, input);
-	calc_out = fann_run(x->ann, x->inputs);
-
-	// fill the output array with result from ann
-	for (i=0;i<quanti;i++)
-	{
-		valoreTMP = calc_out[i];
-		//post("calc_out[%i]=%f", i, calc_out[i]);
-		SETFLOAT(lista+i, valoreTMP);
-	}
-
-	// send output array to outlet
-	outlet_anything(x->l_out,
-                     gensym("list") ,
-					 quanti, 
-					 lista);
-	
-}
-
-static void ann_td_train_on_the_fly(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-	unsigned int j=0;
-	fann_type input_merged[MAXINPUT];	
-	fann_type output[MAXOUTPUT];
-	//fann_type *calcMSE;
-	//t_atom lista[MAXOUTPUT];
-	float mse;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if ((x->num_input + x->ann->num_output) > (unsigned int) argc)
-	{
-		error("insufficient number of arguments passed, in training mode you must prive me a list with (num_input + num_output) floats");
-		return;
-	}
-
-	// fill input array with zeros
-	for (i=0; i<MAXINPUT; i++)
-	{
-		input_merged[i]=0;
-	}
-	// fill input array with zeros
-	for (i=0; i<MAXOUTPUT; i++)
-	{
-		output[i]=0;
-	}
-
-	ann_td_scale_inputs(x);
-
-	// fill input array with actual data sent to inlet
-	for (j = 0; j < x->num_input; j++)
-	{
-		input_merged[j] = atom_getfloat(argv++);
-	}
-	for (j = x->num_input; j < (x->num_input * x->frames); j++)
-	{
-		input_merged[j] = x->inputs[j];
-	}
-
-	for (j = 0; j < (x->ann->num_output);j++)
-	{
-		output[j] = atom_getfloat(argv++);
-	}
-	
-	//fann_reset_MSE(x->ann);
-
-	fann_train(x->ann, input_merged, output);
-
-	mse = fann_get_MSE(x->ann);
-	
-	outlet_float(x->f_out, mse);
-
-
-}
-
-static void ann_td_manage_list(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->mode)
-		ann_td_run_the_net(x, sl, argc, argv);
-	else
-	{
-		ann_td_train_on_the_fly(x, sl, argc, argv);
-	}
-}
-
-static void ann_td_set_filename(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc>0) {
-    x->filename = atom_gensym(argv);
-	} else
-	{
-		error("you must specify the filename");
-	}
-	post("nn:filename set to %s", x->filename->s_name);
-}
-
-static void ann_td_load_ann_from_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->ins_frames_set==0)
-	{
-		error("set num_input and frames with [inputs_frames int int(");
-		error("I won't load without num_input and frames set");
-		return;
-	}
-	if (argc>0) {
-    x->filename = atom_gensym(argv);
-	}
-	x->ann = fann_create_from_file(x->filename->s_name);
-	if (x->ann == 0)
-		error("error opening %s", x->filename->s_name);
-	else
-		post("nn:ann loaded fom file %s", x->filename->s_name);
-	
-	ann_td_allocate_inputs(x);
-}
-
-static void ann_td_save_ann_to_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc>0) {
-    x->filename = atom_gensym(argv);
-	}
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_save(x->ann, x->filename->s_name);
-		post("nn:ann saved in file %s", x->filename->s_name);
-	}
-}
-
-// functions for training algo:
-static void ann_td_set_FANN_TRAIN_INCREMENTAL(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_INCREMENTAL);
-		post("nn:training algorithm set to FANN_TRAIN_INCREMENTAL");
-	}
-}
-static void ann_td_set_FANN_TRAIN_BATCH(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_BATCH);
-		post("nn:training algorithm set to FANN_TRAIN_BATCH");
-	}
-}
-static void ann_td_set_FANN_TRAIN_RPROP(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_RPROP);
-		post("nn:training algorithm set to FANN_TRAIN_RPROP");
-	}
-}
-static void ann_td_set_FANN_TRAIN_QUICKPROP(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_QUICKPROP);
-		post("nn:training algorithm set to FANN_TRAIN_QUICKPROP");
-	}
-}
-
-static void ann_td_set_activation_function_output(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	t_symbol *parametro = 0;
-	int funzione = 0;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc>0) {
-		parametro = atom_gensym(argv);
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD")==0)
-			funzione = FANN_THRESHOLD;
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD_SYMMETRIC")==0)
-			funzione = FANN_THRESHOLD_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_LINEAR")==0)
-			funzione = FANN_LINEAR;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID")==0)
-			funzione = FANN_SIGMOID;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_STEPWISE")==0)
-			funzione = FANN_SIGMOID_STEPWISE;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC_STEPWISE")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC_STEPWISE;
-		fann_set_activation_function_output(x->ann, funzione);
-	} else
-	{
-		error("you must specify the activation function");
-	}
-	post("nn:activation function set to %s (%i)", parametro->s_name, funzione);
-
-}
-
-static void ann_td_print_ann_details(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		post("ann_td:ann is not initialized");
-	} else
-	{
-		post("follows a description of the current ann:");
-		post("num_input=%i", x->ann->num_input);
-		post("num_output=%i", x->ann->num_output);
-		post("learning_rate=%f", x->ann->learning_rate);
-		post("connection_rate=%f", x->ann->connection_rate);
-		post("total_neurons=%i", x->ann->total_neurons);
-		post("total_connections=%i", x->ann->total_connections);
-		post("last error=%i", x->ann->errstr);
-		if (x->filename == 0)
-		{
-			post("filename not set");
-		} else
-		{
-			post("filename=%s", x->filename->s_name);
-		}
-	}
-}
-
-static void ann_td_set_num_input_frames(t_ann_td *x, t_floatarg ins, t_floatarg frames)
-{
-	x->num_input = ins;
-	x->frames = frames;
-	x->ins_frames_set=1;
-}
-
-static void *ann_td_new(t_symbol *s, int argc, t_atom *argv)
-{
-	t_ann_td *x = (t_ann_td *)pd_new(ann_td_class);
-	x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->f_out = outlet_new(&x->x_obj, &s_float);
-
-	x->desired_error = (float)0.001;
-	x->max_iterations = 500000;
-	x->iterations_between_reports = 1000;
-	x->mode=RUN;
-	x->ins_frames_set=0;
-
-	if (argc<2)
-	{
-		error("2 arguments needed: num_input and frames. filename optional");
-		return (void *)x;
-	}
-
-	if (argc>0) {
-		x->num_input = atom_getint(argv++);
-	}
-
-	if (argc>1) {
-		x->frames = atom_getint(argv++);
-		x->ins_frames_set=1;
-		ann_td_allocate_inputs(x);
-	}
-
-	if (argc>2) {
-		x->filename = atom_gensym(argv);
-		ann_td_load_ann_from_file(x, NULL , 0, NULL);
-	}
-
-	return (void *)x;
-}
-
-// free resources
-static void ann_td_free(t_ann_td *x)
-{
-  struct fann *ann = x->ann;
-  fann_destroy(ann);
-  ann_td_deallocate_inputs(x);
-  // TODO: free other resources!
-}
-
-void ann_td_setup(void) {
-	post("");
-	post("ann_td: time delay neural nets for PD");
-	post("version: "VERSION"");
-	post("compiled: "__DATE__);
-	post("author: Davide Morelli");
-	post("contact: info@davidemorelli.it www.davidemorelli.it");
-
-	ann_td_class = class_new(gensym("ann_td"),
-		(t_newmethod)ann_td_new,
-		(t_method)ann_td_free, sizeof(t_ann_td),
-		CLASS_DEFAULT, A_GIMME, 0);
-
-	// general..
-	class_addmethod(ann_td_class, (t_method)ann_td_help, gensym("help"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_createFann, gensym("create"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_train, gensym("train"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_run, gensym("run"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_mode, gensym("setmode"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_train_on_file, gensym("train-on-file"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_manage_list, gensym("data"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_filename, gensym("filename"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_load_ann_from_file, gensym("load"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_save_ann_to_file, gensym("save"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_print_ann_details, gensym("details"), 0);
-	
-	// change training parameters
-	class_addmethod(ann_td_class, (t_method)ann_td_set_desired_error, gensym("desired_error"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
-
-	// change training  and activation algorithms
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
-	
-	class_addmethod(ann_td_class, (t_method)ann_td_set_num_input_frames, gensym("inputs_frames"),A_DEFFLOAT, A_DEFFLOAT, 0);
-	
-	// the most important one: running the ann
-	class_addlist(ann_td_class, (t_method)ann_td_manage_list);
-
-
-}
diff --git a/externals/ann/src/makefile.darwin b/externals/ann/src/makefile.darwin
deleted file mode 100644
index 0c3fbc1be768904c74ac9509a4e684d3cffa1c8a..0000000000000000000000000000000000000000
--- a/externals/ann/src/makefile.darwin
+++ /dev/null
@@ -1,48 +0,0 @@
-current: pd_darwin
-
-clean: ; rm -f *.pd_linux *.o *.pd_darwin
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: ann_mlp.pd_darwin ann_td.pd_darwin ann_som.pd_darwin ann.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-
-# where are the PD header files?
-# leave it blank if it is a system directory (like /usr/local/include), 
-# 	since gcc 3.2 complains about it
-PDPATH=../../../pd/src
-#PDPATH=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-
-# where is the PD executable?
-#PD=/usr/local/bin/pd
-PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/bin/pd
-#PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-#PD=/Applications/Pd-extended.app/Contents/Resources/bin/pd
-
-# where do the fann libraries reside? Download and build them:
-# http://downloads.sourceforge.net/sourceforge/fann/fann-1.2.0.tar.gz
-#FANNLIB=/Users/davidemorelli/Desktop/robaDavide/fann-1.2.0/src/fann.o
-FANNBASE=/Users/davidemorelli/Desktop/robaDavide/fann-1.2.0
-FANNLIB=$(FANNBASE)/src/fann.o \
-		$(FANNBASE)/src/fann_train.o \
-		$(FANNBASE)/src/fann_train_data.o \
-		$(FANNBASE)/src/fann_io.o \
-		$(FANNBASE)/src/fann_error.o \
-		$(FANNBASE)/src/fann_options.o 
-#FANNLIB=/usr/local/lib/libfann.a
-
-DARWININCLUDE =  -I../../src -I$(PDPATH) -I$(PDPATH)/src/include
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
-#	cc -bundle  -bundle_loader $(PD) -flat_namespace -o $*.pd_darwin $(FANNLIB) *.o
-	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $(FANNLIB) *.o
-#	rm -f $*.o
-
-# $(FANNLIB)
diff --git a/externals/ann/src/makefile.irix b/externals/ann/src/makefile.irix
deleted file mode 100644
index 12272d1bb1771ade9b6180c24880a5c664869867..0000000000000000000000000000000000000000
--- a/externals/ann/src/makefile.irix
+++ /dev/null
@@ -1,20 +0,0 @@
-current: irix5
-
-TARGETS = linux \
-	ann_som
-
-SGI5OBJECTS = $(TARGETS:%=%.pd_irix5)
-
-# ----------------------- IRIX ----------------------------
-.SUFFIXES: .pd_irix5
-SGIINCLUDE = -I../../src
-
-irix5: $(SGIOBJECTS)
-
-.c.pd_irix5:
-	cc -g -w2 -fullwarn -mips2 -DFTS $(SGIINCLUDE) -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-clean::
-	rm *.o obj/* *.pd_irix5 so_locations rm *.pd_linux *~
diff --git a/externals/ann/src/makefile.linux b/externals/ann/src/makefile.linux
deleted file mode 100644
index bfef6e9b25711005566ce88b73b4fd1bf663076e..0000000000000000000000000000000000000000
--- a/externals/ann/src/makefile.linux
+++ /dev/null
@@ -1,98 +0,0 @@
-# the ANN-EXTERNAL-makefile
-# everything is GnuGPL that should come with the ann.tgz
-# NO WARRANTIES FOR ANYTHING
-# et cetera
-# (l) forum::für::umläute 2001
-
-# make sure that the "m_pd.h" is somehow available either by putting it into this
-# directory, by adding it's path to the INCLUDE-path or by putting it into an
-# already included path, e.g. "/usr/local/include/"
-# download fann libraries from http://fann.sourceforge.net
-# and install from source
-# make sure that fann.h is available
-
-#these are the user adjustables : adjust them to fit into your system
-# PD will install to $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR), which is /usr/local/lib/pd
-# by default
-DESTDIR =
-INSTALL_PREFIX = /usr/local
-PDLIBDIR = /lib/pd
-
-# the *.dll-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(LIBRARY_DIR)
-LIBRARY_DIR=/extra
-# the reference-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(REFERENCE_DIR)
-#REFERENCE_DIR=/doc/5.reference/ann
-REFERENCE_DIR=/extra/help-ann
-
-#these were the user adjustables
-#---------------------------------
-
-
-TARGETS = ann_som.c \
-	ann_mlp.c   \
-	ann_td.c    \
-
-# ----------------------- LINUX ----------------------------
-.SUFFIXES: .pd_linux
-
-
-LINUXOBJECTS = $(TARGETS:%=%.o)
-ARCH = $(shell uname --machine)
-
-PD_DIR = $(DESTDIR)$(INSTALL_PREFIX)$(PDLIBDIR)
-PD_INSTALLDIR_LIB = $(PD_DIR)$(LIBRARY_DIR)
-PD_INSTALLDIR_REF = $(PD_DIR)$(REFERENCE_DIR)
-
-ifeq (${ARCH},alpha)
-AFLAGS = -mieee	 -mcpu=ev56
-endif
-
-
-STRIP=strip
-STRIPFLAGS=--strip-unneeded
-
-
-LINCLUDE =
-
-OPTIMIZE_FLAGS = -O2 -O6 -funroll-loops -march=pentium3
-DEFS = -DPD
-
-#CFLAGS = -O2 -g -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS)
-CFLAGS = $(OPTIMIZE_FLAGS) -fomit-frame-pointer -fPIC -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS) $(DEFS)
-
-LDFLAGS = -Wl,--export-dynamic -shared
-LIBS = -lc -lm -lfann
-
-# here come the targets
-
-all: $(TARGETS:%.c=%.pd_linux)
-
-%.pd_linux: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -o "$*.pd_linux" "$*.c" $(LIBS)
-	$(STRIP) $(STRIPFLAGS) "$*.pd_linux"
-
-
-ann: $(TARGETS:%.c=%.o)
-	$(CC) $(CFLAGS) $(INCLUDE) -o ann.o -c ann.c
-	$(CC) $(LDFLAGS) -o ann.pd_linux *.o $(LIBS)
-	$(STRIP) $(STRIPFLAGS) ann.pd_linux
-
-%.o: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -o "$*.o" -c "$*.c"
-
-
-
-everything: clean all install distclean
-
-distclean:
-	-rm *.o *.pd_linux *~
-
-clean:
-	-rm *.o *.pd_linux
-
-install: installdocs
-	install -m 644 ann*.pd_linux $(PD_INSTALLDIR_LIB)
-
-installdocs:
-	install -d $(PD_INSTALLDIR_REF)
-	install -m644 ../examples/* $(PD_INSTALLDIR_REF)
diff --git a/externals/ann/src/makefile.msvc b/externals/ann/src/makefile.msvc
deleted file mode 100644
index 0e60fcff423acfc400da51cbbc6c0bf6e017d940..0000000000000000000000000000000000000000
--- a/externals/ann/src/makefile.msvc
+++ /dev/null
@@ -1,55 +0,0 @@
-# to compile ann fann libs are needed
-# go to http://fann.sourceforge.net/
-# current is http://prdownloads.sourceforge.net/fann/fann-1.2.0.zip?download
-# go to MSVC++ folder and open all.dsw
-# compile everything
-
-# customize here !
-VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7" 
-PDPATH="H:\PureData\pd-0.38-3.msw\pd"
-FANNSRC="H:\PureData\FANN\fann-1.2.0\fann-1.2.0\src\include"
-FANNLIB="H:\PureData\FANN\fann-1.2.0\fann-1.2.0\MSVC++\Release"
-
-
-current: clean pd_nt distclean
-
-pd_nt: ann_som.dll ann_mlp.dll ann_td.dll ann.dll
-#pd_nt: ann.dll
-
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-
-
-PDNTINCLUDE = /I. /I$(PDPATH)\tcl\include /I$(PDPATH)\src /I$(VC)\include /I$(FANNSRC) /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDPATH)\bin\pd.lib \
-	$(FANNLIB)\libfann.lib 
-#	ann_mlp.lib ann_som.lib ann_td.lib
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$*_setup $*.obj $(PDNTLIB) *.obj
-#	-del *.obj
-#	-del *.lib
-#	-del *.exp
-
-#install:
-#	copy help-*.pd $(PDPATH)/doc/5.reference/
-
-clean:
-	-del link.stamp
-	-del *.obj
-	-del *.lib
-	-del *.exp
-	-del *.dll
-
-distclean:
-	-del *.obj
-	-del *.lib
-	-del *.exp
diff --git a/externals/august/readanysf~/Makefile b/externals/august/readanysf~/Makefile
deleted file mode 100644
index 080b55e06cd4078b053bb9f8a61e96189c458a39..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-# Edit these two variables to suit your system.
-# You need both gavl and gmerlin_avdec libs to compile
-#
-GAVLPATH=/usr/local/include
-PDPATH=/usr/local/include
-
-
-VERSION=0.42
-UNAME := $(shell uname)
-
-ifeq ($(UNAME), Linux)
-TARGET=pd_linux
-else
-# assume darwin here
-GAVLPATH=/sw/include
-PDPATH=/Applications/Pd-extended.app/Contents/Resources/include/
-TARGET=pd_darwin
-endif
-
-##############################################
-LBITS := $(shell getconf LONG_BIT)
-ifeq ($(LBITS),64)
-   # do 64 bit stuff here, like set some CFLAGS
-CFLAGS =  -fPIC -I./  -I$(GAVLPATH) -I$(GAVLPATH)/gavl -I$(GAVLPATH)/gmerlin -I$(PDPATH) -Wall
-else
-   # do 32 bit stuff here
-CFLAGS =  -I./  -I$(GAVLPATH)  -I$(GAVLPATH)/gavl -I$(GAVLPATH)/gmerlin -I$(PDPATH) -Wall
-endif
-
-
-ifeq ($(UNAME), Linux)
-STRIP=strip --strip-unneeded
-# optimizations?
-#CFLAGS += -O1 -funroll-loops -fomit-frame-pointer \
-#    -Wall -W -Wshadow \
-#    -Wno-unused -Wno-parentheses -Wno-switch
-LDFLAGS =  -L/usr/local/lib -lpthread  -lgavl -lgmerlin_avdec 
-else
-# assume darwin here
-STRIP=strip -x
-CFLAGS += -I/sw/include -fast -fPIC
-LDFLAGS = -bundle -undefined dynamic_lookup -L/sw/lib -lgavl -lgmerlin_avdec
-#LDFLAGS += -bundle -bundle_loader $(pd_src)/bin/pd -undefined dynamic_lookup \
-#		-L/sw/lib -weak_framework Carbon -lc -L/sw/lib -lgavl -lgmerlin_avdec  
-# os 10.4
-#CFLAGS += -mmacosx-version-min=10.4  -arch i386  -isysroot /Developer/SDKs/MacOSX10.4u.sdk 
-#LDFLAGS =  -L/sw/lib -lgavl -lgmerlin_avdec \
-#        -dynamiclib -undefined dynamic_lookup  -lsupc++ -mmacosx-version-min=10.4 \
-#        -lSystem.B -arch i386  -isysroot /Developer/SDKs/MacOSX10.4u.sdk 
-endif
-
-
-
-
-all: $(TARGET) 
-
-pd_linux: src/readanysf~.cpp  objs/FifoVideoFrames.o objs/FifoAudioFrames.o objs/ReadMedia.o
-	g++  -shared  -o  readanysf~.pd_linux  $(CFLAGS) $(LDFLAGS) \
-	src/readanysf~.cpp \
-	objs/FifoAudioFrames.o \
-	objs/FifoVideoFrames.o \
-	objs/ReadMedia.o 
-	$(STRIP) readanysf~.pd_linux
-
-pd_darwin: src/readanysf~.cpp  objs/FifoVideoFrames.o objs/FifoAudioFrames.o objs/ReadMedia.o
-	g++  $(LDFLAGS)  -o  readanysf~.pd_darwin  $(CFLAGS)  \
-	src/readanysf~.cpp \
-	objs/FifoAudioFrames.o \
-	objs/FifoVideoFrames.o \
-	objs/ReadMedia.o 
-	$(STRIP) readanysf~.pd_darwin
-	mkdir -p readanysf~$(VERSION)_MacOSX-Intel
-	mkdir -p readanysf~$(VERSION)_MacOSX-Intel/readanysf~
-	cp readanysf~.pd_darwin readanysf~-help.pd readanysf~$(VERSION)_MacOSX-Intel/readanysf~
-	cp READMEmacpkg.txt anysndfiler.pd readanysf~$(VERSION)_MacOSX-Intel/
-	mv readanysf~$(VERSION)_MacOSX-Intel/READMEmacpkg.txt readanysf~$(VERSION)_MacOSX-Intel/README.txt
-	./embed-MacOSX-dependencies.sh readanysf~$(VERSION)_MacOSX-Intel/readanysf~
-	tar -cvf readanysf~$(VERSION)_MacOSX-Intel.tar readanysf~$(VERSION)_MacOSX-Intel/
-	gzip readanysf~$(VERSION)_MacOSX-Intel.tar
-
-objs/ReadMedia.o: src/ReadMedia.cpp src/ReadMedia.h objs/FifoAudioFrames.o objs/FifoVideoFrames.o
-	g++  -c -o objs/ReadMedia.o src/ReadMedia.cpp $(CFLAGS)
-
-objs/FifoAudioFrames.o: src/FifoAudioFrames.cpp src/FifoAudioFrames.h 
-	g++  -c -o objs/FifoAudioFrames.o src/FifoAudioFrames.cpp $(CFLAGS)
-
-objs/FifoVideoFrames.o: src/FifoVideoFrames.cpp src/FifoVideoFrames.h 
-	g++  -c -o objs/FifoVideoFrames.o src/FifoVideoFrames.cpp $(CFLAGS)
-
-clean:
-	if [ -d readanysf~$(VERSION)_MacOSX-Intel ]; then rm -rf readanysf~$(VERSION)_MacOSX-Intel; fi; 
-	if [ -f readanysf~$(VERSION)_MacOSX-Intel.tar.gz ]; then rm -rf readanysf~$(VERSION)_MacOSX-Intel.tar.gz; fi; 
-	rm -f objs/*.o readanysf~.pd_*
diff --git a/externals/august/readanysf~/README b/externals/august/readanysf~/README
deleted file mode 100644
index 3d7118bf4c49acf1817edb6a53b0cfa5d2ad48bb..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/README
+++ /dev/null
@@ -1,47 +0,0 @@
-readanysf~, a puredata external for reading multiple file formats.
------------------------------------------------------------------
-© august black 2003 - 2010
-licensed under the GNU GPL v2
-
-
-see: http://aug.ment.org/readanysf/
-
-you will need:
-
-          o Gavl : by Burkhard Plaum
-            Low level multimedia API.
-            http://gmerlin.sf.net/
-            cvs -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin login
-            cvs -z3 -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin co -P gavl
-            cd gavl/
-            ./autogen.sh
-            ./configure --without-doxygen
-            make
-            sudo make install
-
-          o Gmerlin_avdecode : by Burkhard Plaum
-            Gmerlin_avdecoder is a general purpose media decoding library.
-            http://gmerlin.sourceforge.net
-            cvs -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin login
-            cvs -z3 -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin co -P gmerlin_avdecoder
-            cd gmerlin_avdecoder
-            ./autogen.sh
-            ./configure --without-doxygen
-            make
-            sudo make install
-
-
-After installing gavl and gmerlin_avdecode, you should just be able to type make.
-
-----------------------------------------------------------------------------------------
-
-Mac users: 
-
-	you can install gavl/gmerlin-avdecoder either by source as above with linux or through fink.
-	
-	then, do "make" and let me know if it doesn't work 
-
-	
-
-
-
diff --git a/externals/august/readanysf~/READMEmacpkg.txt b/externals/august/readanysf~/READMEmacpkg.txt
deleted file mode 100644
index 2e43e2a3007b9d25718726e43dc2e25cd07c6d30..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/READMEmacpkg.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-
-http://aug.ment.org/readanysf/   
-
-by August Black
-
---
-To install, drag the readanysf~ folder and anysndfiler.pd to /Library/Pd.  Then you can create [readanysf~] anywhere you need it.
-
-If /Library/Pd does not exist, just create it.
-
-This build put together by Hans-Christoph Steiner, post to the pd-list with questions.
diff --git a/externals/august/readanysf~/anysndfiler.pd b/externals/august/readanysf~/anysndfiler.pd
deleted file mode 100644
index 86a0edf154f0567c99be9531c84080f795dd5319..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/anysndfiler.pd
+++ /dev/null
@@ -1,136 +0,0 @@
-#N canvas 403 78 800 378 10;
-#N canvas 314 180 836 579 loadfast 0;
-#X obj 398 364 switch~;
-#X obj 68 55 inlet;
-#X obj 304 95 loadbang;
-#X text 63 34 filename;
-#X obj 396 179 inlet;
-#X text 421 132 <--- upsampled by factor of 128 \, then switched off
-;
-#X obj 50 401 tabwrite~ \$0-samp-1;
-#X obj 209 399 tabwrite~ \$0-samp-2;
-#X msg 396 202 set 64 1 \$1 \, 0;
-#X msg 304 129 set 64 1 128 \, 0;
-#X msg 68 110 open \$1;
-#X msg 511 346 0;
-#X msg 309 332 1;
-#X obj 414 403 print starting;
-#X obj 549 360 print stoping;
-#X obj 277 281 select 1;
-#X obj 534 320 t b b;
-#X floatatom 480 294 5 0 0 0 - - -;
-#X obj 562 293 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X msg 111 183 play;
-#X obj 480 264 route ready bang samplerate length;
-#X floatatom 597 299 5 0 0 0 - - -;
-#X floatatom 656 300 5 0 0 0 - - -;
-#X msg 701 416 resize \$1;
-#X obj 701 467 s \$0-samp-2;
-#X obj 701 443 s \$0-samp-1;
-#X obj 68 247 readanysf~ 2 12 1024;
-#X obj 699 181 inlet;
-#X obj 698 337 f;
-#X obj 671 369 *;
-#X floatatom 671 392 14 0 0 0 - - -;
-#X obj 602 427 print size;
-#X floatatom 716 371 5 0 0 0 - - -;
-#X obj 277 303 t b b b b;
-#X obj 655 334 f;
-#X obj 602 325 t b b;
-#X obj 580 514 outlet;
-#X connect 1 0 10 0;
-#X connect 2 0 9 0;
-#X connect 4 0 8 0;
-#X connect 8 0 0 0;
-#X connect 10 0 26 0;
-#X connect 11 0 0 0;
-#X connect 11 0 36 0;
-#X connect 12 0 0 0;
-#X connect 12 0 13 0;
-#X connect 15 0 33 0;
-#X connect 16 0 11 0;
-#X connect 16 1 14 0;
-#X connect 19 0 26 0;
-#X connect 20 0 15 0;
-#X connect 20 0 17 0;
-#X connect 20 1 16 0;
-#X connect 20 1 18 0;
-#X connect 20 2 21 0;
-#X connect 20 3 22 0;
-#X connect 22 0 34 1;
-#X connect 23 0 24 0;
-#X connect 23 0 25 0;
-#X connect 26 0 6 0;
-#X connect 26 1 7 0;
-#X connect 26 2 20 0;
-#X connect 27 0 28 1;
-#X connect 28 0 29 1;
-#X connect 28 0 32 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 0;
-#X connect 30 0 23 0;
-#X connect 33 0 6 0;
-#X connect 33 0 7 0;
-#X connect 33 1 19 0;
-#X connect 33 2 12 0;
-#X connect 33 3 35 0;
-#X connect 34 0 29 0;
-#X connect 35 0 34 0;
-#X connect 35 1 28 0;
-#X restore 118 186 pd loadfast;
-#X obj 151 221 bng 15 250 50 0 empty empty done 17 7 1 10 -262144 -1
--1;
-#X obj 79 71 openpanel;
-#X msg 79 49 bang;
-#X obj 413 206 * 44100;
-#X floatatom 413 145 5 0 0 1 buffer_length_in_seconds - -;
-#X msg 413 235 resize \$1;
-#X msg 459 183 22050;
-#X msg 508 183 44100;
-#X text 569 185 choose file samplerate;
-#X obj 79 244 timer;
-#X obj 79 129 t b a;
-#X floatatom 79 275 10 0 0 0 - - -;
-#X obj 413 60 loadbang;
-#X msg 449 93 \; pd dsp 1;
-#X msg 413 124 8;
-#X obj 79 107 symbol;
-#X msg 152 71 bang;
-#X floatatom 185 138 5 0 0 0 - - -;
-#X msg 152 93 64;
-#X msg 185 94 128;
-#X msg 218 93 512;
-#X msg 253 93 1024;
-#X msg 339 222 const 0;
-#X obj 507 261 table \$0-samp-1;
-#X obj 507 287 table \$0-samp-2;
-#X obj 413 286 s \$0-samp-2;
-#X obj 413 262 s \$0-samp-1;
-#X obj 262 140 samplerate~;
-#X connect 0 0 1 0;
-#X connect 2 0 16 0;
-#X connect 3 0 2 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 26 0;
-#X connect 6 0 27 0;
-#X connect 7 0 4 1;
-#X connect 8 0 4 1;
-#X connect 10 0 12 0;
-#X connect 11 0 10 0;
-#X connect 11 1 0 0;
-#X connect 13 0 15 0;
-#X connect 13 0 14 0;
-#X connect 13 0 28 0;
-#X connect 15 0 5 0;
-#X connect 16 0 11 0;
-#X connect 17 0 16 0;
-#X connect 18 0 0 1;
-#X connect 19 0 18 0;
-#X connect 20 0 18 0;
-#X connect 21 0 18 0;
-#X connect 22 0 18 0;
-#X connect 23 0 26 0;
-#X connect 23 0 27 0;
-#X connect 28 0 0 2;
diff --git a/externals/august/readanysf~/embed-MacOSX-dependencies.sh b/externals/august/readanysf~/embed-MacOSX-dependencies.sh
deleted file mode 100755
index 0612b0c58ee00cbf0cd05a177d1f0edefe826d1f..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/embed-MacOSX-dependencies.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/sh
-#
-# This script finds all of the dependecies from Fink and included them into
-# current folder so that it becomes a libdir to be installed into /Library/Pd.
-# <hans@at.or.at>
-
-LIB_DIR=/Library/Pd/readanysf~
-PD_APP_LIB=$1
-
-echo " "
-
-for pd_darwin in `find . -name '*.pd_darwin'`; do
-    LIBS=`otool -L $pd_darwin | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $pd_darwin | sed 's|.*/\(.*\.pd_darwin$\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    install -vp /sw/lib/$lib $PD_APP_LIB
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $pd_darwin
-	done
-	echo " "
-    fi
-done
-
-for dylib in $PD_APP_LIB/*.dylib; do
-    LIBS=`otool -L $dylib | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $dylib | sed 's|.*/\(.*\.dylib\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    if [ -e  $PD_APP_LIB/$new_lib ]; then
-		echo "$PD_APP_LIB/$new_lib already exists, skipping copy."
-	    else
-		install -vp /sw/lib/$lib $PD_APP_LIB
-	    fi
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $dylib
-	done
-	echo " "
-    fi
-done
-
-# run it one more time to catch dylibs that depend on dylibs
-for dylib in $PD_APP_LIB/*.dylib; do
-    LIBS=`otool -L $dylib | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $dylib | sed 's|.*/\(.*\.dylib\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    if [ -e  $PD_APP_LIB/$new_lib ]; then
-		echo "$PD_APP_LIB/$new_lib already exists, skipping copy."
-	    else
-		install -vp /sw/lib/$lib $PD_APP_LIB
-	    fi
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $dylib
-	done
-	echo " "
-    fi
-done
-
-# seems like we need it one last time! phew...
-for dylib in $PD_APP_LIB/*.dylib; do
-    LIBS=`otool -L $dylib | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $dylib | sed 's|.*/\(.*\.dylib\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    if [ -e  $PD_APP_LIB/$new_lib ]; then
-		echo "$PD_APP_LIB/$new_lib already exists, skipping copy."
-	    else
-		install -vp /sw/lib/$lib $PD_APP_LIB
-	    fi
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $dylib
-	done
-	echo " "
-    fi
-done
diff --git a/externals/august/readanysf~/jamesdunn_buzz_stresstest.pd b/externals/august/readanysf~/jamesdunn_buzz_stresstest.pd
deleted file mode 100644
index 77d0ca17fdcc2c54c10de950cce95e95ec575d0b..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/jamesdunn_buzz_stresstest.pd
+++ /dev/null
@@ -1,53 +0,0 @@
-#N canvas 560 185 516 458 10;
-#X obj 100 192 readanysf~ 2;
-#X msg 40 106 open Gunfire.wav;
-#X obj 100 411 dac~;
-#X obj 101 373 *~;
-#X obj 134 374 *~;
-#X msg 104 162 play;
-#X msg 145 162 stop;
-#X obj 199 281 vsl 15 50 0 1 0 0 empty empty empty 0 -9 0 10 -257985
--1 -1 1470 1;
-#X msg 199 339 \$1 50;
-#X obj 198 358 line~;
-#X obj 396 247 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 169 216 route ready samplerate length cache float bang;
-#X obj 40 23 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
-;
-#X obj 178 245 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 40 60 metro 300;
-#X obj 386 42 loadbang;
-#X msg 349 98 \; pd dsp 1;
-#X msg 421 102 0.3;
-#X msg 259 42 1;
-#X floatatom 318 301 0 0 0 0 - - -;
-#X obj 318 276 + 1;
-#X obj 261 277 float;
-#X connect 0 0 3 0;
-#X connect 0 1 4 0;
-#X connect 0 2 11 0;
-#X connect 1 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 9 0;
-#X connect 9 0 4 1;
-#X connect 9 0 3 1;
-#X connect 11 0 13 0;
-#X connect 11 5 10 0;
-#X connect 12 0 14 0;
-#X connect 13 0 5 0;
-#X connect 13 0 21 0;
-#X connect 14 0 1 0;
-#X connect 15 0 16 0;
-#X connect 15 0 17 0;
-#X connect 15 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 12 0;
-#X connect 20 0 19 0;
-#X connect 20 0 21 1;
-#X connect 21 0 20 0;
diff --git a/externals/august/readanysf~/readanysf~-help.pd b/externals/august/readanysf~/readanysf~-help.pd
deleted file mode 100644
index a5eff59ca9ff14e2a8c5ff2ee652dd2ceddded43..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/readanysf~-help.pd
+++ /dev/null
@@ -1,117 +0,0 @@
-#N canvas 13 56 842 642 10;
-#X obj 28 367 dac~;
-#X obj 28 332 *~ 0;
-#X obj 69 332 *~ 0;
-#X obj 651 106 vsl 15 50 0.01 1.3 1 0 empty empty empty 0 -8 0 8 -241291
--1 -1 4411 0;
-#X msg 112 140 play;
-#X msg 193 139 pause;
-#X msg 348 121 speed \$1;
-#X floatatom 348 98 5 0 0 0 - - -;
-#X obj 588 15 loadbang;
-#X msg 390 75 1;
-#X msg 601 51 \; pd dsp 1 \;;
-#X floatatom 662 160 5 0 0 0 - - -;
-#X msg 12 126 open \$1;
-#X obj 12 98 openpanel;
-#X obj 12 66 bng 25 250 50 0 empty empty empty 17 7 0 10 -4032 -1 -1
-;
-#X msg 152 139 stop;
-#X floatatom 345 173 16 0 0 0 - - -;
-#X msg 345 193 pcm_seek \$1;
-#X obj 348 150 hsl 128 15 0 7.368e+06 0 0 empty empty empty -2 -8 0
-10 -260818 -1 -1 0 1;
-#X msg 348 74 0.21;
-#X msg 78 73 open http://www.fro.at:8008/fro-64.ogg.m3u;
-#X floatatom 262 552 5 0 0 0 - - -;
-#X floatatom 308 504 5 0 0 0 - - -;
-#X floatatom 217 582 5 0 0 0 - - -;
-#X msg 722 253 loop \$1;
-#X obj 722 233 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X floatatom 353 467 5 0 0 0 - - -;
-#X obj 444 404 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 217 378 route ready samplerate length cache float bang;
-#X floatatom 399 435 5 0 0 0 - - -;
-#X text 262 581 ready: status for when a file is loaded and ready;
-#X text 306 594 to play. If you load a file from disk or;
-#X text 306 608 from the net \, it may take a while to load;
-#X text 305 621 depending on disk activity and net bandwidth.;
-#X text 394 466 cache: percentage (0.0->1.0) of;
-#X text 435 479 cache being used.;
-#X text 469 405 bang: end of file.;
-#X msg 588 87 0.8;
-#X obj 29 269 readanysf~ 4 32 256;
-#X obj 651 179 s v;
-#X obj 38 294 r v;
-#X obj 108 332 *~ 0;
-#X obj 149 332 *~ 0;
-#X text 671 130 Volume;
-#X text 217 300 <- readanysf~ has 3 possible creation args 1) number
-of channels (all channels will be up or down mixed accordingly) default
-is 2 channels. 2) number of "frames" in the internal buffer. Default=24
-3) number of samples per frame in internal buffer. Default is your
-blocksize.;
-#X msg 98 96 open http://wnycam.streamguys.com;
-#X floatatom 494 176 16 0 0 0 - - -;
-#X obj 497 153 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -260818
--1 -1 0 1;
-#X msg 494 196 time_seek \$1;
-#X msg 329 242 tick 100;
-#X text 404 231 send cache \, length output every X ticks;
-#X text 402 244 "tick 1" sends out every single dsp cycle;
-#X text 720 214 loop on/off;
-#X text 441 434 float: position of file in seconds;
-#X text 482 447 relative to the file's samplerate;
-#X text 347 503 length: total duration of file in seconds;
-#X text 394 529 (will be empty for network streams);
-#X text 396 516 relative to file's internal samplerate;
-#X text 320 553 The samplerate of the file being played.;
-#X text 168 5 readanysf~ by August Black;
-#X text 170 40 august@alien.mur.at;
-#X text 172 26 please send comments \, suggest \, bugs \, donations
-->;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
-#X connect 3 0 11 0;
-#X connect 3 0 39 0;
-#X connect 4 0 38 0;
-#X connect 5 0 38 0;
-#X connect 6 0 38 0;
-#X connect 7 0 6 0;
-#X connect 8 0 37 0;
-#X connect 8 0 10 0;
-#X connect 9 0 7 0;
-#X connect 12 0 38 0;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 38 0;
-#X connect 16 0 17 0;
-#X connect 17 0 38 0;
-#X connect 18 0 16 0;
-#X connect 19 0 7 0;
-#X connect 20 0 38 0;
-#X connect 24 0 38 0;
-#X connect 25 0 24 0;
-#X connect 28 0 23 0;
-#X connect 28 1 21 0;
-#X connect 28 2 22 0;
-#X connect 28 3 26 0;
-#X connect 28 4 29 0;
-#X connect 28 5 27 0;
-#X connect 37 0 3 0;
-#X connect 38 0 1 0;
-#X connect 38 1 2 0;
-#X connect 38 2 41 0;
-#X connect 38 3 42 0;
-#X connect 38 4 28 0;
-#X connect 40 0 1 1;
-#X connect 40 0 2 1;
-#X connect 40 0 41 1;
-#X connect 40 0 42 1;
-#X connect 45 0 38 0;
-#X connect 46 0 48 0;
-#X connect 47 0 46 0;
-#X connect 48 0 38 0;
-#X connect 49 0 38 0;
diff --git a/externals/august/readanysf~/readanysf~-meta.pd b/externals/august/readanysf~/readanysf~-meta.pd
deleted file mode 100644
index 1c88459572253a0f54cbbd3acd6d2ccfbc31176e..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/readanysf~-meta.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 15 49 420 300 META 0;
-#X text 10 10 VERSION 0.4;
-#X text 10 24 AUTHOR August Black <august@alien.mur.at>;
-#X text 11 39 NAME readanysf~;
-#X restore 10 10 pd META;
diff --git a/externals/august/readanysf~/screengrab0.40.png b/externals/august/readanysf~/screengrab0.40.png
deleted file mode 100644
index a83017b4886cf6b3263fbd5d5542407d30020d90..0000000000000000000000000000000000000000
Binary files a/externals/august/readanysf~/screengrab0.40.png and /dev/null differ
diff --git a/externals/august/readanysf~/src/FifoAudioFrames.cpp b/externals/august/readanysf~/src/FifoAudioFrames.cpp
deleted file mode 100644
index a27029a0a9fcc7f61dd7eef858225d4abdfbc83d..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/FifoAudioFrames.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "FifoAudioFrames.h"
-
-/*
-#define RESET		0
-#define BRIGHT 		1
-#define DIM		2
-#define UNDERLINE 	3
-#define BLINK		4
-#define REVERSE		7
-#define HIDDEN		8
-
-#define BLACK 		0
-#define RED		1
-#define GREEN		2
-#define YELLOW		3
-#define BLUE		4
-#define MAGENTA		5
-#define CYAN		6
-#define	WHITE		7
-void textcolor(int attr, int fg, int bg) {	
-	char command[13];
-	// Command is the control command to the terminal 
-	sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
-	printf("%s", command);
-}
-*/
-
-
-FifoAudioFrames::FifoAudioFrames(int s, gavl_audio_format_t * f) {
-	size = s  ;  
-	start = 0 ;
-	end = 0 ; 
-	count = 0;
-	format = new gavl_audio_format_t;
-	gavl_audio_format_copy(format, f);
-	fifoPtr = new gavl_audio_frame_t * [size] ;
-	for(int i=0; i < size; i++) {
-		fifoPtr[i] = gavl_audio_frame_create( format );
-	}
-	pthread_mutex_init (&mut, 0);
-	//printf("FifoAudioFrames::size=%d\n", size);
-}
-
-FifoAudioFrames::~FifoAudioFrames() {
-	//printf("deleting fifo \n");
-	for(int i=0; i < size; i++) {
-		 gavl_audio_frame_destroy( fifoPtr[i] );
-	}
-	delete format;
-	delete[] fifoPtr;
-
-	pthread_mutex_destroy (&mut);
-	//printf("deleted fifo \n");
-}
-
-// empty the fifo of any content
-void FifoAudioFrames::Flush() {
-	pthread_mutex_lock (&mut);
-	start = 0 ; 
-	end = 0 ; 
-	count = 0;
-	//printf("FifoAudioFrames::flushed size=%d\n", count);
-	pthread_mutex_unlock (&mut);
-}
-
-// push an element onto the FifoAudioFrames 
-bool FifoAudioFrames::Append(  gavl_audio_frame_t * source) {
-	bool ret = false;
-	//Dump("Appending a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count < size  ) {  // if there is room for one more
-		int vs = gavl_audio_frame_copy(format, fifoPtr[end],  source, 0,0, format->samples_per_frame, format->samples_per_frame) ;
-		fifoPtr[end]->timestamp = source->timestamp;
-		fifoPtr[end]->valid_samples =vs;
-		if (++end >= size)
-			end = 0;
-		count++;
-		ret = true;
-	} // no room in fifo, return false
-	pthread_mutex_unlock (&mut);
-	//Dump("Appended a frame ");
-	return ret;
-}
-
-// get an element off the FifoAudioFrames
-bool FifoAudioFrames::Get( gavl_audio_frame_t * dest) {
-	bool ret = false;
-	//Dump("Getting a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count > 0 ) {  // if there any items in the fifo
-		int vs = gavl_audio_frame_copy(format, dest, fifoPtr[start], 0, 0, format->samples_per_frame, format->samples_per_frame) ;
-		dest->timestamp = fifoPtr[start]->timestamp;
-		dest->valid_samples = vs;
-		if ( ++start >= size )
-			start = 0;
-		count--;
-		ret = true;
-	}
-	pthread_mutex_unlock (&mut);
-	//Dump("Got a frame ");
-	return ret;
-}
-/*
-void FifoAudioFrames::Dump( char * c) {
-	int i,j = 0;
-	pthread_mutex_lock (&mut);
-	printf("%s -----------------------\n", c);
-	for( i=0;i<size;i++) {
-		//j=start+i;
-		//if (j >= size)
-		//	j = j -size;
-		j=i;
-		if ( j == start)
-			textcolor(BRIGHT, GREEN, BLACK);
-		if (j == end)
-			textcolor(BRIGHT, RED, BLACK);
-		if (j == end && j == start)
-			textcolor(BRIGHT, YELLOW, BLACK);
-		printf("[%d]=%ld ", j, fifoPtr[j]->timestamp);
-		textcolor(RESET, BLACK, WHITE);
-	}
-	printf("\n");
-	printf("start=%02d, end=%02d, count=%02d\n", start,end,count);
-	printf("-----------------------\n");
-	pthread_mutex_unlock (&mut);
-}
-*/
-bool FifoAudioFrames::FreeSpace() { 
-	bool ret = false; 
-	//printf("asking for free space on audio fifo\n");
-	pthread_mutex_lock(&mut); 
-	ret = (count < size);
-	pthread_mutex_unlock (&mut);  
-	return ret;
-}
-bool FifoAudioFrames::isEmpty() { bool c; pthread_mutex_lock(&mut); c = (count == 0) ; pthread_mutex_unlock (&mut); return c; }
-bool FifoAudioFrames::isFull()  { bool c; pthread_mutex_lock(&mut); c = (count == size ); pthread_mutex_unlock (&mut); return c; } 
-gavl_audio_format_t * FifoAudioFrames::getFormat() { return format; };
-float FifoAudioFrames::getSizePercentage() { float ret; pthread_mutex_lock(&mut);ret = count / (float) size; pthread_mutex_unlock (&mut); return ret;};
-
diff --git a/externals/august/readanysf~/src/FifoAudioFrames.h b/externals/august/readanysf~/src/FifoAudioFrames.h
deleted file mode 100644
index d3be3404d17bd23e42c13bccd8a0edfb1805f9a2..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/FifoAudioFrames.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#ifndef _FIFOAUDIOFRAMES_H_
-#define _FIFOAUDIOFRAMES_H_
-
-#include <string.h> // memcpy
-#include <stdio.h>
-#include <pthread.h>
-
-#ifndef _AVDEC_H_
-#define _AVDEC_H_
-extern "C" {
-#include <gmerlin/avdec.h>
-}
-#endif
-
-class FifoAudioFrames {
-	public:
-		FifoAudioFrames(int s, gavl_audio_format_t * format) ; 
-		~FifoAudioFrames();// { delete [] fifoPtr; }
-		bool Append( gavl_audio_frame_t * af);
-		bool Get( gavl_audio_frame_t * af) ;  // pop an element off the fifo
-		void Flush();
-		//void Dump(char *c);
-		bool FreeSpace();
-		bool isEmpty();
-		bool isFull();
-		void setDebug( bool b); 
-		gavl_audio_format_t * getFormat();
-		float getSizePercentage();
-	private:
-		int size ;  // Number of elements on FifoAudioFrames
-		int start ;
-		int end ;
-		int count;
-		gavl_audio_frame_t ** fifoPtr ;  
-		gavl_audio_format_t * format;  
-		pthread_mutex_t mut;
-} ;
-
-
-#endif
-
diff --git a/externals/august/readanysf~/src/FifoVideoFrames.cpp b/externals/august/readanysf~/src/FifoVideoFrames.cpp
deleted file mode 100644
index 054332c777af255e20cbda41358db4e91257cf19..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/FifoVideoFrames.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "FifoVideoFrames.h"
-
-FifoVideoFrames::FifoVideoFrames(int s, gavl_video_format_t * f) {
-	size = s  ;  
-	start = 0 ;
-	end = 0 ; 
-	count = 0;
-	format = new gavl_video_format_t;
-	gavl_video_format_copy(format, f);
-	fifoPtr = new gavl_video_frame_t * [size] ;
-	for(int i=0; i < size; i++) {
-		fifoPtr[i] = gavl_video_frame_create( format );
-	}
-	pthread_mutex_init (&mut, 0);
-}
-
-FifoVideoFrames::~FifoVideoFrames() {
-	//printf("deleting fifo \n");
-	for(int i=0; i < size; i++) {
-		 gavl_video_frame_destroy( fifoPtr[i] );
-	}
-	delete format;
-	delete[] fifoPtr;
-	pthread_mutex_destroy (&mut);
-	//printf("deleted fifo \n");
-}
-
-// empty the fifo of any content
-void FifoVideoFrames::Flush() {
-	pthread_mutex_lock (&mut);
-	start = 0 ; 
-	end = 0 ; 
-	count = 0;
-	//printf("FifoVideoFrames::flushed size=%d\n", count);
-	pthread_mutex_unlock (&mut);
-}
-
-// push an element onto the FifoVideoFrames 
-bool FifoVideoFrames::Append(  gavl_video_frame_t * source) {
-	bool ret = false;
-	//Dump("Appending a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count < size  ) {  // if there is room for one more
-		gavl_video_frame_copy(format, fifoPtr[end],  source) ;
-		fifoPtr[end]->timestamp = source->timestamp;
-		fifoPtr[end]->duration = source->duration;
-		if (++end >= size)
-			end = 0;
-		count++;
-		ret = true;
-	} // no room in fifo, return false
-	pthread_mutex_unlock (&mut);
-	//Dump("Appended a frame ");
-	return ret;
-}
-// remove an element off the front FifoVideoFrames
-bool FifoVideoFrames::Get( ) {
-	bool ret = false;
-	pthread_mutex_lock (&mut);
-	if ( count > 0 ) {  // if there any items in the fifo
-		if ( ++start >= size )
-			start = 0;
-		count--;
-		ret = true;
-	}
-	pthread_mutex_unlock (&mut);
-	//Dump("Got a frame ");
-	return ret;
-}
-
-// get an element off the FifoVideoFrames
-bool FifoVideoFrames::Get( gavl_video_frame_t * dest) {
-	bool ret = false;
-	//Dump("Getting a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count > 0 ) {  // if there any items in the fifo
-		gavl_video_frame_copy(format, dest, fifoPtr[start]) ;
-		dest->timestamp = fifoPtr[start]->timestamp;
-		dest->duration = fifoPtr[start]->duration;
-		if ( ++start >= size )
-			start = 0;
-		count--;
-		ret = true;
-	}
-	pthread_mutex_unlock (&mut);
-	//Dump("Got a frame ");
-	return ret;
-}
-/*
-void FifoVideoFrames::Dump( char * c) {
-	int i,j = 0;
-	pthread_mutex_lock (&mut);
-	printf("%s -----------------------\n", c);
-	for( i=0;i<size;i++) {
-		//j=start+i;
-		//if (j >= size)
-		//	j = j -size;
-		j=i;
-		if ( j == start)
-			textcolor(BRIGHT, GREEN, BLACK);
-		if (j == end)
-			textcolor(BRIGHT, RED, BLACK);
-		if (j == end && j == start)
-			textcolor(BRIGHT, YELLOW, BLACK);
-		printf("[%d]=%ld ", j, fifoPtr[j]->timestamp);
-		textcolor(RESET, BLACK, WHITE);
-	}
-	printf("\n");
-	printf("start=%02d, end=%02d, count=%02d\n", start,end,count);
-	printf("-----------------------\n");
-	pthread_mutex_unlock (&mut);
-}
-*/
-bool FifoVideoFrames::FreeSpace() { bool ret; pthread_mutex_lock(&mut); ret = (count < size);pthread_mutex_unlock (&mut);  return ret;}
-bool FifoVideoFrames::isEmpty() { bool c; pthread_mutex_lock(&mut); c = (count == 0) ; pthread_mutex_unlock (&mut); return c; }
-bool FifoVideoFrames::isFull()  { bool c; pthread_mutex_lock(&mut); c = (count == size ); pthread_mutex_unlock (&mut); return c; } 
-gavl_video_format_t * FifoVideoFrames::getFormat() { return format; };
-float FifoVideoFrames::getSizePercentage() { float ret; pthread_mutex_lock(&mut);ret = count / (float) size; pthread_mutex_unlock (&mut); return ret;};
-int FifoVideoFrames::getSize() { int ret; pthread_mutex_lock(&mut);ret = count; pthread_mutex_unlock (&mut); return ret;};
-
diff --git a/externals/august/readanysf~/src/FifoVideoFrames.h b/externals/august/readanysf~/src/FifoVideoFrames.h
deleted file mode 100644
index 25e24bc9e4f26abd77c1869bd5866bdba62c65fe..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/FifoVideoFrames.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#ifndef _FIFOVIDEOFRAMES_H_
-#define _FIFOVIDEOFRAMES_H_
-
-#include <string.h> // memcpy
-#include <stdio.h>
-#include <pthread.h>
-
-#ifndef _AVDEC_H_
-#define _AVDEC_H_
-extern "C" {
-#include <gmerlin/avdec.h>
-}
-#endif
-
-class FifoVideoFrames {
-	public:
-		FifoVideoFrames(int s, gavl_video_format_t * format) ; 
-		~FifoVideoFrames();// { delete [] fifoPtr; }
-		bool Append( gavl_video_frame_t * af);
-		bool Get( gavl_video_frame_t * af) ;  // pop an element off the fifo
-		bool Get( ) ;  // discard an element off the fifo
-		void Flush();
-		//void Dump(char *c);
-		bool FreeSpace();
-		bool isEmpty();
-		bool isFull();
-		void setDebug( bool b); 
-		gavl_video_format_t * getFormat();
-		int getSize();
-		float getSizePercentage();
-	private:
-		int size ;  // Number of elements on FifoVideoFrames
-		int start ;
-		int end ;
-		int count;
-		gavl_video_frame_t ** fifoPtr ;  
-		gavl_video_format_t * format;  
-		pthread_mutex_t mut;
-} ;
-
-
-#endif
-
diff --git a/externals/august/readanysf~/src/ReadMedia.cpp b/externals/august/readanysf~/src/ReadMedia.cpp
deleted file mode 100644
index 1d1b40be5159d4649efea01bfb06f3411af1949f..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/ReadMedia.cpp
+++ /dev/null
@@ -1,1198 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "ReadMedia.h"
-#include <pthread.h>
-#include <unistd.h> //usleep
-
-
-static void *the_thread_dispatcher(void * xp);
-static void *the_thread_opener(void * xp);
-static void *the_audiofifo_filler(void * xp);
-static void *the_videofifo_filler(void * xp);
-
- 
-ReadMedia::ReadMedia(  ) {
-
-	m_state = STATE_EMPTY;
-
-	m_audio_frame = NULL;
-	m_video_frame = NULL;
-	m_aeof = true;
-	m_veof = true;
-	//m_atime = 0.0;
-	//m_vtime = 0.0;
-	m_video_stream_count =0;
-	m_audio_stream_count =0;
-	
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-	m_length_in_seconds=0.0;
-	m_length_in_gavltime = 0;
-	m_num_frames=0;
-	m_num_samples=0;
-
-	m_video_format.frame_width=0;
-	m_video_format.frame_height=0;
-	m_video_format.image_width=0;
-	m_video_format.image_height=0;
-	m_video_format.pixel_width=0;
-	m_video_format.pixel_height=0;
-	m_video_format.pixelformat = GAVL_PIXELFORMAT_NONE ;
-	m_video_format.frame_duration=0;
-	m_video_format.timescale=0;
-	m_video_format.framerate_mode=GAVL_FRAMERATE_CONSTANT;
-	m_video_format.chroma_placement=GAVL_CHROMA_PLACEMENT_DEFAULT;
-	m_video_format.interlace_mode=GAVL_INTERLACE_NONE;
-	m_video_format.timecode_format.int_framerate =0;
-	m_video_format.timecode_format.flags =0;
-
-	m_audio_format.samples_per_frame = 0;
-	m_audio_format.samplerate = 0;
-	m_audio_format.num_channels = 0;
-	m_audio_format.sample_format = GAVL_SAMPLE_NONE ;
-	m_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-	m_audio_format.center_level = 1.0;
-	m_audio_format.rear_level = 1.0;
-	m_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-	
-
-	m_fifoaudio= NULL; // new FifoAudioFrames( frames_in_fifo ,  &tmp_audio_lormat); 
-	m_fifovideo= NULL; // new FifoVideoFrames( 12 ,  &output_video_format); 
-	m_audio_thread_ret = -1;
-	m_video_thread_ret = -1;
-	
-	m_open_callback = NULL;
-	m_open_callback_data = NULL;
-	m_buffer_callback = NULL;
-	m_buffer_callback_data = NULL;
-
-	quit_av_threads = false;
-	m_loop = false;
-	
-	sprintf(m_filename, "seinettbitte!");
-
-	//bgav stuff
-	m_file = NULL;
-	m_opt = bgav_options_create();
-
-	bgav_options_set_connect_timeout(m_opt,  5000);
-	bgav_options_set_read_timeout(m_opt,     5000);
-	bgav_options_set_network_bandwidth(m_opt, 524300);
-	bgav_options_set_network_buffer_size(m_opt, 1024*12);
-	bgav_options_set_http_shoutcast_metadata (m_opt, 1);
-	// set up the reading so that we can seek sample accurately
-	bgav_options_set_sample_accurate (m_opt, 1 );
-
-
-	pthread_cond_init(&m_cond_dispatch, 0);
-	pthread_mutex_init(&m_condmut_dispatch, 0);
-
-	pthread_cond_init(&m_cond_a, 0);
-	pthread_cond_init(&m_cond_v, 0);
-	pthread_mutex_init(&m_condmut_a, 0);
-	pthread_mutex_init(&m_condmut_v, 0);
-
-	pthread_mutex_init(&m_av_mut, 0);
-	pthread_mutex_init(&m_state_mut, 0);
-
-	// start the dispatcher thread
-	m_cmd = CMD_START;
-	m_dispatcher_thread_ret = pthread_create(&m_thread_dispatch, NULL, the_thread_dispatcher, (void *)this) ;
-	if (m_dispatcher_thread_ret != 0 )
-		printf("error starting the readmedia dispatcher thread.\n");
-
-	while( getCommand() != CMD_NULL)	
-		signalDispatcher();
-	//printf("dispatcher ready ...\n");
-}
-
-ReadMedia::~ReadMedia() {
-	printf("killing the media..\n");
-	setCommand( CMD_QUIT );		
-	signalDispatcher();
-		
-
-	// signal dispatcher joins the opener and AV threads	
-	pthread_join( m_thread_dispatch, NULL);
-
-	//printf("joined dispatcher\n");	
-	if (m_audio_frame != NULL) {
-		gavl_audio_frame_destroy(m_audio_frame);
-	}
-	if (m_video_frame != NULL) {
-		gavl_video_frame_destroy(m_video_frame);
-	}
-	if (m_file != NULL) {
-		bgav_close(m_file);
-	}
-
-	//printf("now, on to deleting fifo...\n");
-	if( m_fifoaudio != NULL) delete m_fifoaudio;
-	if( m_fifovideo != NULL) delete m_fifovideo;
-
-	// these are created only once	
-	bgav_options_destroy(m_opt);
-
-	pthread_cond_destroy(&m_cond_dispatch);
-	pthread_mutex_destroy(&m_condmut_dispatch);
-
-	pthread_cond_destroy(&m_cond_a);
-	pthread_cond_destroy(&m_cond_v);
-	pthread_mutex_destroy(&m_condmut_a);
-	pthread_mutex_destroy(&m_condmut_v);
-
-	pthread_mutex_destroy(&m_av_mut);
-	pthread_mutex_destroy(&m_state_mut);
-
-	printf("killed the media..\n");
-}
-
-int ReadMedia::decodeVideo( gavl_video_frame_t * vf ) {
-
-	// check state first, if state is ready, we can check the other vars without locking
-	lockState();
-	if (m_state != STATE_READY || m_video_stream_count < 1 || m_fifovideo == NULL ) {
-		unlockState();
-		return -1;
-	}
-
-	if (!m_fifovideo->Get( vf )  ) {
-		if ( m_veof ) {
-			m_frame_seek = SEEK_NOTHING;
-			unlockState();
-			signalV();
-			return 0;
-		} else {
-			//printf("Couldn't get a video frame, videofifo is %f full\n", m_fifovideo->getSizePercentage()); // this can only happen if the fifo is empty
-			unlockState();
-			signalV();
-			return -1; // return with error
-		}
-	}
-
-	//m_vtime = 	vf->timestamp / (double)m_video_format.timescale;
-	unlockState();
-	signalV();
-	return 1 ;
-}
-
-int ReadMedia::decodeAudio( gavl_audio_frame_t * af ) {
-	lockState();
-	if (m_state != STATE_READY || m_audio_stream_count < 1 || m_fifoaudio == NULL ) {
-		unlockState();
-		return -1;
-	}
-
-	if ( !m_fifoaudio->Get( af )  ) {
-		if ( m_aeof ) {
-			m_pcm_seek = SEEK_NOTHING;
-			unlockState();
-			signalA();
-			return 0;
-		} else {
-			//printf("Couldn't get an audio frame, audiofifo is %f full.\n", m_fifoaudio->getSizePercentage()); // this can only happen if the fifo is empty
-			unlockState();
-			signalA();
-			return -1;
-		}
-	}
-
-	//m_atime = af->timestamp / (double)m_audio_format.samplerate;
-	unlockState();
-	signalA();
-	return 1 ;
-}
-
-bool ReadMedia::rewind() {
-	// NOTE!! Always check for stream count before setting aeof or veof
-	lockState();
-	if ( m_state == STATE_READY && m_file != NULL) {
-		//printf("ReadMedia::rewind(), valid_samples=%d\n", m_audio_frame->valid_samples);
-		m_pcm_seek = SEEK_REWIND;	
-		if(m_audio_stream_count) m_aeof = false;
-		//m_atime = 0;
-		m_frame_seek=SEEK_REWIND;
-		if (m_video_stream_count) m_veof = false;
-		//m_vtime=0;
-
-		unlockState();
-		if (m_audio_stream_count) {
-			signalA();  // only signal one or the other here
-			//printf("ReadMedia::rewind(), signaled audio\n");
-			// we are gong to flush here even though it is flushed
-			// during the audio or video thread.  This will ensure our fifo 
-			// is clean and empty.  Otherwise, the audio thread may be waiting
-			// at the bottom of its loop and not make it to the flush part even 
-			// though we signalled it.
-			if (m_fifoaudio)
-				m_fifoaudio->Flush();
-		}
-		else if (m_video_stream_count) {
-			signalV();
-			if (m_fifovideo)
-				m_fifovideo->Flush();
-		}
-
-		return true;
-	}
-	unlockState();
-	return false;
-}
-
-gavl_time_t ReadMedia::getLengthInGavlTime() {
-	gavl_time_t time = 0;
-	lockState();
-	time = m_length_in_gavltime;
-	unlockState();
-	return time;
-}
-
-double ReadMedia::getLengthInSeconds() {
-	double secs = 0.0;
-	lockState();
-	secs = m_length_in_seconds;
-	unlockState();
-	return secs;
-}
-
-int64_t ReadMedia::getLengthInAudioSamples() {
-	int64_t samples = 0;
-	lockState();
-	samples = m_num_samples;
-	unlockState();
-	return samples;
-}
-
-int64_t ReadMedia::getLengthInVideoFrames() {
-	int64_t frames = 0;
-	lockState();
-	frames = m_num_frames;
-	unlockState();
-	return frames;
-}
-
-bool ReadMedia::frameSeek( int64_t frames ) {
-	lockState();
-	if (m_state == STATE_READY && m_file && bgav_can_seek( m_file ) && frames >= 0 && frames < m_num_frames ) {
-		m_frame_seek = frames;	
-		unlockState();
-		signalAV();
-		return true;
-	} else {
-		m_frame_seek = SEEK_NOTHING;
-		unlockState();
-		return false;
-	}
-}
-
-// NOT PUBLIC
-int64_t ReadMedia::frameSeek() {
-	int64_t tmp=SEEK_NOTHING;
-	lockState();
-	tmp = m_frame_seek;	
-	m_frame_seek = SEEK_NOTHING;
-	unlockState();
-	return tmp;
-}
-
-bool ReadMedia::pcmSeek( int64_t samples ) {
-	lockState();
-	if (m_state == STATE_READY && m_file && bgav_can_seek( m_file) && samples >= 0 && samples < m_num_samples ) {
-		m_pcm_seek = samples;	
-		unlockState();
-		signalAV();
-		return true;
-	} else {
-		m_pcm_seek = SEEK_NOTHING;
-		unlockState();
-		return false;
-	}
-}
-
-// NOT PUBLIC
-int64_t ReadMedia::pcmSeek() {
-	int64_t tmp=SEEK_NOTHING;
-	lockState();
-	tmp = m_pcm_seek;	
-	m_pcm_seek = SEEK_NOTHING;
-	unlockState();
-	return tmp;
-}
-
-bool ReadMedia::timeSeek(double seconds) {
-	gavl_time_t gt = gavl_seconds_to_time(  seconds ) ;        
-
-	lockState();
-	if (m_state == STATE_READY && m_file && bgav_can_seek( m_file) && seconds >= 0.0 && seconds < m_length_in_seconds ) {
-		if (m_audio_stream_count) {
-			m_pcm_seek = gavl_time_to_samples(m_audio_format.samplerate, gt );
-			if (m_pcm_seek >= m_num_samples || m_pcm_seek < 0) 
-				m_pcm_seek = SEEK_NOTHING;
-			unlockState();
-			signalAV();
-			return true;	
-		} else if ( m_video_stream_count  && m_video_format.framerate_mode == GAVL_FRAMERATE_CONSTANT ) {
-			m_frame_seek =	gavl_time_to_frames( m_video_format.timescale, m_video_format.frame_duration,  gt );
-			if (m_frame_seek >= m_num_frames || m_frame_seek < 0 )
-				m_frame_seek = SEEK_NOTHING;
-			unlockState();
-			signalAV();
-			return true;
-		}
-	}
-	unlockState();
-	return false;
-}
-
-bool ReadMedia::quitAVThreads() {
-	bool b =false;
-	lockState();
-	b = quit_av_threads;
-	unlockState();
-	return b;
-}
-
-void ReadMedia::openFile( char * fn, int vsize, int asize, int spf) {
-	lockState();
-	/*
-	if (  strcmp(m_filename, fn) == 0  && m_state == STATE_READY) {
-		printf("%s is already open for action. \n", m_filename);
-		unlockState();
-		callOpenCallback();
-		return;
-	}
-	*/
-	// signal the dispatcher that we want an new file
-	m_audio_format.samples_per_frame = spf ;
-	m_afifosize = asize;
-	m_vfifosize = vsize;
-	sprintf(m_filename, "%s", fn);
-
-	m_cmd = CMD_OPEN ;
-
-	unlockState();
-	signalDispatcher();
-}
-
-void ReadMedia::copyAudioFormat(gavl_audio_format_t * dst ){ 
-	lockState();
-	//if (m_state == STATE_READY)
-	gavl_audio_format_copy(dst, &m_audio_format);
-	unlockState();
-}
-
-void ReadMedia::copyVideoFormat(gavl_video_format_t * dst ){ 
-	lockState();
-	//if (m_state == STATE_READY)
-	gavl_video_format_copy(	dst, &m_video_format);
-	unlockState();
-}
-
-int ReadMedia::getAudioSamplerate() { 
-	int sr=0;  
-	lockState();
-	//if (m_state == STATE_READY )
-		sr = m_audio_format.samplerate;
-	unlockState();
-	return sr;
-}
-
-int ReadMedia::getAudioChannelCount() { 
-	int ch=0;
-	lockState();	
-	//if (m_state == STATE_READY )
-		ch = m_audio_format.num_channels;
-	unlockState();
-	return ch;
-}
-
-int ReadMedia::getVideoTimescale() { 
-	int t=0;
-	lockState();	
-	t = m_video_format.timescale;
-	unlockState();
-	return t;
-}
-
-
-char * ReadMedia::getFilename() {
-	return  m_filename;
-}
-
-bgav_t * ReadMedia::getFile() {return  m_file;}
-FifoAudioFrames * ReadMedia::getAudioFifo() { return m_fifoaudio; } 
-FifoVideoFrames * ReadMedia::getVideoFifo() { return m_fifovideo; } 
-gavl_audio_frame_t * ReadMedia::getAudioFrame() { return m_audio_frame;}
-gavl_video_frame_t * ReadMedia::getVideoFrame() { return m_video_frame;}
-
-
-void ReadMedia::setState(int b) { 
-	lockState(); 
-	m_state = b; 
-	unlockState();
-}
-
-int ReadMedia::getState() { 
-	int s=STATE_EMPTY;
-	lockState();
-	s = m_state;
-	unlockState();
-	return s;
-}
-
-bool ReadMedia::isReady() { if ( getState() == STATE_READY) return true; else return false;}
-// no need to lock on these
-//double ReadMedia::getATimeInSeconds() { return m_atime;};
-//double ReadMedia::getVTimeInSeconds() { return m_vtime;};
-/*
-float ReadMedia::getTimeInSeconds() { 
-	lockState();
-	if (m_audio_stream_count > 0 ) {
-		unlockState();
-		return m_atime;
-	} else {
-		// FIXME :  see if the following is really true
-		unlockState();
-		return m_vtime;
-	}
-};
-*/
-
-float ReadMedia::getAudioFifoSizePercentage() { 
-	float f=0.0;
-	lockState();
-	if (m_fifoaudio)	
-		f = m_fifoaudio->getSizePercentage();
-	unlockState();
-	return f;
-}
-
-void ReadMedia::pealOffVideoFrames( int howmany) { 
-	lockAV();
-	if (m_fifovideo == NULL) {
-		unlockAV();
-		return;
-	}
-	int max = howmany > m_fifovideo->getSize() ? m_fifovideo->getSize() : howmany;
-	for (int i=0;i< max; i++) {
-		m_fifovideo->Get();
-		//printf("pealing of a video frame size = %d\n", m_fifovideo->getSize());
-	}
-	unlockAV();
-} 
-
-void ReadMedia::setAEOF(bool b) { 
-	lockState();
-	m_aeof = b;
-	m_pcm_seek = SEEK_NOTHING;
-	unlockState();
-}
-void ReadMedia::setVEOF(bool b) { 
-	lockState();
-	m_veof = b;
-	m_frame_seek = SEEK_NOTHING;
-	unlockState();
-}
-
-
-bool ReadMedia::getEOF() { 
-	bool tmp = true;
-	lockState();
-	if (m_state == STATE_READY)
-		tmp = (m_aeof && m_veof);
-	unlockState();
-	//printf("ReadMedia:getEOF=%d, aeof=%d, veof=%d\n", tmp, m_aeof, m_veof);
-	return tmp;
-}
-
-void ReadMedia::setLoop( bool b) {
-	lockState();
-	m_loop = b;	
-	unlockState();
-}
-bool ReadMedia::getLoop() {
-	bool tmp = true;
-	lockState();
-	if (m_file && bgav_can_seek( m_file) ) {
-		tmp = m_loop;	
-	} else {
-		tmp = false; // we can't loop on file, return false 
-		// but leave the loop var untouched
-	}
-	unlockState();
-	return tmp;
-}
-
-// NOT PUBILC
-// only used in fifo filler
-bool ReadMedia::getAEOF() {
-	bool tmp = false;
-	lockState();
-	tmp = m_aeof;
-	unlockState();
-	return tmp;
-}
-
-// NOT PUBLIC
-bool ReadMedia::getVEOF() { 
-	bool tmp = false;
-	lockState();
-	tmp =  m_veof;
-	unlockState();
-	return tmp;
-}
-
-int ReadMedia::getSamplesPerFrame() { 
-	int spf=0;
-	lockState();
-	spf = m_audio_format.samples_per_frame;
-	unlockState();
-	return spf;
-}
-
-int ReadMedia::lockAV() { 
-	//printf("locking AV\n"); 
-  return pthread_mutex_lock(&m_av_mut);
-}
-int ReadMedia::unlockAV() { 
-	//printf("unlocking AV\n");
-	return pthread_mutex_unlock(&m_av_mut);
-}
-
-int ReadMedia::lockState() { 
-	//	printf("locking state.\n"); 
-	return pthread_mutex_lock(&m_state_mut);
-}
-int ReadMedia::unlockState() { 
-	//printf("unlocking state.\n"); 
-	return pthread_mutex_unlock(&m_state_mut);
-}
-
-
-void ReadMedia::waitA() { pthread_cond_wait( &m_cond_a, &m_condmut_a); }
-void ReadMedia::waitV() { pthread_cond_wait( &m_cond_v, &m_condmut_v); }
-void ReadMedia::signalAV() { signalA(); signalV(); }
-void ReadMedia::signalA() { pthread_cond_signal( &m_cond_a); }
-void ReadMedia::signalV() { pthread_cond_signal( &m_cond_v); }
-
-void ReadMedia::signalDispatcher() { pthread_cond_signal( &m_cond_dispatch); }
-void ReadMedia::waitDispatch() { pthread_cond_wait( &m_cond_dispatch, &m_condmut_dispatch); }
-
-void ReadMedia::setOpenCallback(void (*oc)(void *), void *v ) {
-	lockState();// do we need this?
-	m_open_callback = oc; 
-	m_open_callback_data = v;  
-	unlockState();
-}	
-void ReadMedia::callOpenCallback() {	
-	// do NOT lock on the callback, user must do call public functions
-	// that also lock
-	if(m_open_callback != NULL) 
-		m_open_callback( m_open_callback_data);
- };
-
-void ReadMedia::setBufferCallback(bgav_buffer_callback bc, void *v ) { 
-	lockState();
-	m_buffer_callback = bc; 
-	m_buffer_callback_data = v;  
-	// set up callbacks.
-	if (m_buffer_callback) {
-		bgav_options_set_buffer_callback( m_opt, m_buffer_callback, m_buffer_callback_data);
-	}
-	unlockState();
-};
-
-
-
-
-int ReadMedia::getAudioStreamCount() {
-	int asc=0;
-	lockState();
-	asc = m_audio_stream_count;
-	unlockState();
-	return asc;
-} 
-int ReadMedia::getVideoStreamCount() {
-	int vsc=0;
-	lockState();
-	vsc = m_video_stream_count;
-	unlockState();
-	return vsc;
-}
-
-
-// NOT PUBLIC
-void ReadMedia::setAudioStreamCount(int s){
-	lockState();
-	m_audio_stream_count=s;
-	if (s == 0) // no audio streams, we are already at audio eof
-		m_aeof = true;
-	else m_aeof = false;
-	unlockState();
-}
-// NOT PUBLIC
-void ReadMedia::setVideoStreamCount(int s){
-	lockState();
-	m_video_stream_count=s; 
-	if (s==0) // if there are no video streams, video is at eof
-		m_veof = true; 
-	else m_veof =false;
-	unlockState();
-}
-
-// NOT PUBLIC
-void ReadMedia::setCommand(int s){
-	lockState();
-	m_cmd = s;
-	unlockState();
-}
-
-// NOT PUBLIC
-int ReadMedia::getCommand() {
-	int cmd= CMD_NULL;
-	lockState();
-	cmd = m_cmd;
-	unlockState();	
-	return cmd;
-}
-
-
-// NOT PUBLIC
-// Clears the bgav_t struct, destroying and then creating it
-// NO NEED TO DO AV LOCK, only called in the opener thread
-void ReadMedia::clearFile() {
-	if (m_file != NULL)
-		bgav_close( m_file );
-
-	m_file = bgav_create();
-	bgav_options_copy( bgav_get_options( m_file ) , m_opt);
-	m_aeof = true;
-	m_veof = true;
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-}
-
-// NOT PUBLIC
-// Closes the bgav_t struct, destroying it and setting to NULL
-// NO NEED TO DO AV LOCK, only called in the opener thread
-void ReadMedia::closeFile() {
-	if (m_file != NULL)
-		bgav_close( m_file );
-	m_file = NULL;
-	m_aeof = true;
-	m_veof = true;
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-
-	sprintf(m_filename, "seinettbitte!");
-}
-
-
-// NOT PUBLIC
-// killAVThreads is only called from the opener thread
-// and from the destructor
-// THIS IS NOT REALLY A PUBLIC function
-void ReadMedia::killAVThreads() {
-
-	lockState();
-	m_state = STATE_EMPTY;
-	quit_av_threads = true;
-	unlockState();
-
-	signalAV();
-	signalAV();
-
-	// FIRST need to join the threads that exist and are running
-	if (m_audio_thread_ret == 0) {
-		pthread_join( m_thread_fillaudiofifo, NULL);
-		//pthread_detach( m_thread_fillaudiofifo);
-	}
-	if (m_video_thread_ret == 0){
-		pthread_join( m_thread_fillvideofifo, NULL);
-		//pthread_detach( m_thread_fillvideofifo);
-	}
-	m_audio_thread_ret = -1;
-	m_video_thread_ret = -1;
-
-	// no need to lock here 	
-	quit_av_threads = false;
-
-}
-
-// NOT PUBLIC
-// Only called from the opener thread
-bool ReadMedia::startAVThreads() {
-
-	if (m_audio_thread_ret == 0 || m_video_thread_ret == 0 ) {
-		// ouch!, we have running AV threads, this is not good	
-		return false;
-	}
-
-	if (m_audio_stream_count > 0) {
-		m_audio_thread_ret = pthread_create(&m_thread_fillaudiofifo, NULL, the_audiofifo_filler, (void *)this);
-		if (m_audio_thread_ret != 0 ) {
-			printf("ReadMedia:: problem starting the audio thread\n");
-			return false;
-		}
-	}
-
-	if (m_video_stream_count > 0) {
-		m_video_thread_ret =	pthread_create(&m_thread_fillvideofifo, NULL, the_videofifo_filler, (void *)this);
-	 if (m_video_thread_ret != 0 ) {
-		 printf("ReadMedia::  problem starting the video thread\n");
-		 return false;	
-		}
-	}
-	return true;
-}
-	
-bool ReadMedia::initFormat() {
-
-	const gavl_audio_format_t * open_audio_format;
-	const gavl_video_format_t * open_video_format;
-
-	// we use the m_vfifosize to see if the user app wants video or not
-	// then, we set m_video_stream_count to 0 if he doesn't want video
-	if (m_video_stream_count > 0 && m_vfifosize > 0) {
-		open_video_format = bgav_get_video_format(m_file, 0);
-
-		if (open_video_format->pixelformat == GAVL_PIXELFORMAT_NONE) {
-			printf("!!!sorry, pixelformat is not recognized.\n");
-			return false;
-		}
-
-		// let's check to see if the formats are the same, if they are the same
-		// there is no reason to recreate the fifo or frames
-		if ( gavl_video_formats_equal( &m_video_format, open_video_format) == 0 ) { 	
-			// the formats are different
-			gavl_video_format_copy (&m_video_format, open_video_format);
-			if (m_video_frame != NULL)
-				gavl_video_frame_destroy(m_video_frame);
-			m_video_frame = gavl_video_frame_create(&m_video_format);
-			gavl_video_frame_clear( m_video_frame, &m_video_format);
-			if (m_fifovideo != NULL)
-				delete m_fifovideo;
-			m_fifovideo=  new FifoVideoFrames( m_vfifosize ,  &m_video_format); 
-		}
-	} else {
-		m_video_stream_count = 0;
-		m_veof = true;
-	}
-
-	// we use the m_afifosize to see if the user app wants audio or not
-	// then, we set m_audio_stream_count to 0 if he doesn't want audio
-	if (m_audio_stream_count > 0 && m_afifosize > 0) {  
-		open_audio_format = bgav_get_audio_format(m_file, 0);    
-	
-		// we can get audio formats that are unkown
-		if ( open_audio_format->sample_format == GAVL_SAMPLE_NONE) {
-			printf("sorry, this file has unsupported audio.\n"); 
-			return false;	
-		}
-
-		if ( gavl_audio_formats_equal(&m_audio_format, open_audio_format) == 0 ) { 	
-			// audio formats are different
-			// save the old spf
-			int spf = m_audio_format.samples_per_frame; 
-			gavl_audio_format_copy(&m_audio_format, open_audio_format);
-
-			if (m_audio_frame != NULL) {
-				gavl_audio_frame_destroy(m_audio_frame);
-			}
-
-			// set it back to original
-			m_audio_format.samples_per_frame = spf ;
-
-			m_audio_frame = gavl_audio_frame_create(&m_audio_format);
-	
-			gavl_audio_frame_mute( m_audio_frame, &m_audio_format);
-			if( m_fifoaudio != NULL )
-				delete m_fifoaudio;
-			m_fifoaudio = new FifoAudioFrames( m_afifosize , &m_audio_format); 
-		}
-	} else {
-		// user doesn't want audio
-		m_audio_stream_count = 0;
-		m_aeof=true;
-	}
-
-
-	m_length_in_gavltime = bgav_get_duration ( m_file, 0);;
-	m_length_in_seconds = gavl_time_to_seconds(  m_length_in_gavltime );
-	m_num_samples = 0;
-	m_num_frames = 0;
-
-	if (m_audio_stream_count) {
-		if ( bgav_can_seek_sample(m_file) == 1 ) {
-			m_num_samples=	bgav_audio_duration ( m_file, 0) ;
-	 } else { 
-			m_num_samples=	gavl_time_to_samples( m_audio_format.samplerate ,  bgav_get_duration ( m_file, 0) );
-		}
-	}
-
-	// set frames   WE NEED TO take care here for non-constant frame-rates
-	if(m_video_stream_count) {
-		if ( bgav_can_seek_sample(m_file) == 1  && m_video_format.framerate_mode == GAVL_FRAMERATE_CONSTANT) { 
-			m_num_frames =	bgav_video_duration ( m_file, 0)/ m_video_format.frame_duration;
-		} else if ( bgav_can_seek_sample(m_file) == 1  && m_video_format.framerate_mode == GAVL_FRAMERATE_VARIABLE ) {
-			// FIXME what to do with non constant frame rates?
-			m_num_frames=0;
-		} else { 
-			m_num_frames =	gavl_time_to_frames( m_video_format.timescale, m_video_format.frame_duration ,  bgav_get_duration ( m_file, 0) );
-		}
-	}
-
-  //	printf("m_num_frames =%lld, duration = %lld , vid_duration=%lld\n", 
-	//		m_num_frames, bgav_get_duration ( m_file, 0),  bgav_video_duration ( m_file, 0) );
-	// set seconds
-	if ( bgav_can_seek_sample(m_file) == 1) {
-		gavl_time_t atime=0,vtime=0;
-		if ( m_audio_stream_count ) 
-			atime =  gavl_samples_to_time( m_audio_format.samplerate, m_num_samples );
-		if (m_video_stream_count &&  m_video_format.frame_duration > 0) {
-			vtime =  gavl_frames_to_time( m_video_format.timescale, m_video_format.frame_duration, m_num_frames );
-		} else if ( m_video_stream_count  ) { // non constant framerate			
-			vtime = bgav_video_duration( m_file, 0);
-		}
-		// else rely on audio time
-		m_length_in_gavltime = atime > vtime ? atime :vtime;
-		m_length_in_seconds = gavl_time_to_seconds( m_length_in_gavltime );
-		//printf("atime=%ld,  vtime=%ld, l_in_sec=%f\n", atime, vtime, m_length_in_seconds);
-	} 
-
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-
-	return true;
-}
-
-
-void *the_thread_dispatcher(void *xp) {
-
-	ReadMedia *rm = (ReadMedia *)xp;
-	int cmd = CMD_NULL;
-	pthread_t thread_open;
-	int start_thread_ret = -1;
-	cmd = rm->getCommand();
-
-	while ( cmd != CMD_QUIT ) {
-		if (cmd == CMD_OPEN) {
-			// We already check in the openFile function if the user is trying to open
-			// a file that is already open.
-
-			// join the opener thread, this will protect again any other calls to open
-			if (start_thread_ret == 0 )
-				pthread_join( thread_open, NULL ); 
-			
-			// we join the AV threads
-			// the opener thread will start the AV threads anew upon success
-			rm->killAVThreads();
-
-			start_thread_ret = pthread_create(&thread_open, NULL, the_thread_opener, (void *)rm) ;
-			if (start_thread_ret != 0 )
-				printf( "Failed to create m_thread_open thread.\n");
-
-		}	
-		if (rm->getCommand() == CMD_QUIT)
-			break;
-		rm->setCommand( CMD_NULL);
-		rm->waitDispatch();
-		cmd = rm->getCommand();
-	}
-	
-	//printf("dispatcher: joining thread open\n");
-	if( start_thread_ret == 0 )
-		pthread_join( thread_open , NULL); 
-	//printf("dispatcher: joined thread open, joining AV's\n");
-	rm->killAVThreads();
-	//printf("dispatcher: joined  AV's\n");
-	pthread_exit(NULL);	
-};
-
-void *the_thread_opener(void *xp) {
-	ReadMedia *rm = NULL;
-	int num_urls=0, num_tracks=0, audio_stream_count=0, video_stream_count =0;
-
-	rm = (ReadMedia *)xp;
-	rm->setState(STATE_OPENING);
-
-	//  AFTER WE KILL THE THREADS, THERE IS NO NEED TO LOCK AV mutex
-	//  ALL functions that want to get info on the file, seek, 
-	//  or decode a frame, MUST first check the state.  If the
-	//  state is STATE_READY, then it can perform it's function, 
-	//  locking on the necessary variables that might conflict with
-	//  the AV.   
-
-	// clearFile  deletes old file and creates new File
-	rm->clearFile();
-	if(!bgav_open(rm->getFile(), rm->getFilename())) {
-		printf( "Could not open file %s\n", rm->getFilename());
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL);
-		//return NULL;
-	} else {
-		printf("opened %s\n", rm->getFilename());
-	}
-
-	// check to see if it is a redirector
-	if(bgav_is_redirector( rm->getFile() )) {
-		num_urls = bgav_redirector_get_num_urls( rm->getFile() );
-		printf( "Found redirector with %d urls inside, we will try to use the first one.\n", num_urls);
-		printf( "Name %d: %s\n", 1, bgav_redirector_get_name(rm->getFile() , 0));
-		printf("URL %d: %s\n",  1, bgav_redirector_get_url(rm->getFile(), 0));
-		sprintf(rm->getFilename(), "%s", bgav_redirector_get_url(rm->getFile(), 0) );
-		rm->clearFile();
-		if (!bgav_open( rm->getFile(),  rm->getFilename() )) {
-			printf("Could not open redirector\n");
-			rm->setState( STATE_EMPTY );
-			rm->closeFile();
-			rm->callOpenCallback();
-			pthread_exit(NULL);
-			//return NULL;
-		} else {
-			printf("opened redirector %s\n", rm->getFilename());
-		}
-	}
-	
-	num_tracks = bgav_num_tracks(rm->getFile());
-	if ( num_tracks ) {
-		bgav_select_track(rm->getFile(), 0);
-	} else {
-		printf("No tracks associated with file:%s\n", rm->getFilename() );
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL);
-	}
-
-	audio_stream_count = bgav_num_audio_streams(rm->getFile(), 0);
-	if( audio_stream_count )
-		bgav_set_audio_stream(rm->getFile(), 0, BGAV_STREAM_DECODE);
-
-	video_stream_count = bgav_num_video_streams(rm->getFile(), 0);
-	if( video_stream_count )
-		bgav_set_video_stream(rm->getFile(), 0, BGAV_STREAM_DECODE);
-	
-	rm->setVideoStreamCount(video_stream_count);
-	rm->setAudioStreamCount(audio_stream_count);
-	
-	//printf("astream_count = %d, vstream_count=%d\n", audio_stream_count, video_stream_count);
-	if(!bgav_start(rm->getFile())) {
-		printf( "failed to start file\n");
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL) ;
-		//return NULL;
-	}
-
-	if( !rm->initFormat() ){
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL) ;
-	}
-
-	if( !rm->startAVThreads() ){
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL) ;
-	}
-
-	// AV threads are now running, blocking will be necessary
-	// STATE_READY and callOpenCallback is set/called in the 
-	// fifo fill callbacks
-	rm->signalAV();
-	rm->signalAV(); //extra signal for second thread
-	pthread_exit(NULL);
-	//return NULL;
-}
-
-void *the_audiofifo_filler( void * xp) {
-	int samples_returned=0;
-	ReadMedia *rm = (ReadMedia *)xp;
-	int first = true;
-	int dovideo = rm->getVideoStreamCount();	
-	int spf = rm->getSamplesPerFrame();
-	int samplerate = rm->getAudioSamplerate();
-	int64_t seekto = SEEK_NOTHING;
-	int can_seek = bgav_can_seek ( rm->getFile() );
-	int can_seek_sample = bgav_can_seek_sample ( rm->getFile() );
-	
-	while ( !rm->quitAVThreads() ) {
-		//while ( rm->getAudioFifo() != NULL && rm->getAudioFifo()->FreeSpace() && !rm->getAEOF() ) {
-		while ( rm->getAudioFifo()->FreeSpace() && !rm->getAEOF() ) {
-
-			if (rm->quitAVThreads() ) pthread_exit(NULL) ; //return NULL;
-			
-			rm->lockAV();
-			// check to see if we need to seek
-			// if this is set, we already know we can seek on this file 
-			// and don't need to check with bgav_can_seek
-			if ( can_seek ) {
-				seekto = rm->pcmSeek();
-				if (  seekto != SEEK_NOTHING ) {
-					if ( seekto == SEEK_REWIND)  {
-						// bgav_seek_audio ONLY seeks on the audio stream
-						seekto = 0;
-					//	bgav_seek_scaled(rm->getFile(), &seekto, samplerate);
-					} //else {
-					bgav_seek_scaled(rm->getFile(), &seekto, samplerate);
-					//}
-					rm->getAudioFifo()->Flush();
-					if (dovideo && rm->getVideoFifo() ) {
-						 rm->getVideoFifo()->Flush();
-						 rm->signalV();
-					}
-				}
-			}
-
-			samples_returned = bgav_read_audio(rm->getFile(), rm->getAudioFrame(), 0,  spf );
-			//rm->unlockAV();
-
-			if (samples_returned == 0 ) {
-				if( rm->getLoop() ) {
-					if ( can_seek ) {
-						// Now, rewind the file, don't flush the fifo's
-						if (can_seek_sample) { // only seek on audio stream
-							bgav_seek_audio(rm->getFile(), 0, 0);
-						} else { 
-							seekto =0;
-							bgav_seek_scaled(rm->getFile(), &seekto, samplerate);
-							if (dovideo && rm->getVideoFifo() ) {
-								rm->setVEOF(false);
-								rm->signalV();
-							}
-						}	
-						// SAVE THIS FOR ANOTHER TIME, OVERLAPPED SMOOTH LOOPING 
-						//if ( rm->getLoop() > 1 && bgav_read_audio(rm->getFile(), rm->getAudioFrame(), 0,  spf ) ) {
-						// add to the fifo, overlapping
-						//		rm->getAudioFifo()->AppendOverlap( rm->getAudioFrame(), 5 );
-						//	}	
-						
-					} else { // this file is not seekable, what do we do?
-						printf("cannot seek on file, but we want to loop. setting end of file.\n");
-						rm->setAEOF(true);
-					}
-				} else {
-					rm->setAEOF(true);
-				}
-				rm->unlockAV();
-				break;
-			}
-			rm->unlockAV();
-			if( !rm->getAudioFifo()->Append( rm->getAudioFrame() ))
-				printf("problem with appending Audio Frame\n");
-		}
-		if (first && !dovideo) {
-			rm->setState( STATE_READY );
-			rm->callOpenCallback();
-			first = false;
-		}
-		if (rm->quitAVThreads() ) pthread_exit(NULL); //return NULL;
-		rm->waitA();
-	}
-	pthread_exit(NULL);//return NULL;
-}
-
-void *the_videofifo_filler( void * xp) {
-	ReadMedia *rm = (ReadMedia *)xp;
-	int ret = 0;
-	int first = true;
-	int doaudio = rm->getAudioStreamCount();	
-	int64_t seekto =SEEK_NOTHING;
-	int can_seek = bgav_can_seek ( rm->getFile() );
-	int can_seek_sample = bgav_can_seek_sample ( rm->getFile() );
-	int timescale = rm->getVideoTimescale();
-	
-	while (!rm->quitAVThreads() ) {
-	
-		while ( rm->getVideoFifo() !=NULL && rm->getVideoFifo()->FreeSpace() && !rm->getVEOF() ) {
-
-			if (rm->quitAVThreads() ) pthread_exit(NULL);//return NULL;
-
-			rm->lockAV();
-			// check to see if we need to seek
-			// if this is set, we already know we can seek on this file 
-			// and don't need to check with bgav_can_seek
-			if (can_seek) {
-				seekto = rm->frameSeek();
-				if ( seekto  >= 0 ) {  
-					if (doaudio && rm->getAudioFifo() ) rm->getAudioFifo()->Flush();
-					rm->getVideoFifo()->Flush();
-					bgav_seek_scaled(rm->getFile(), &seekto, timescale);
-				} else if (seekto == SEEK_REWIND && !doaudio) {
-					// rewind is a special case  for Video.
-					rm->getVideoFifo()->Flush();
-					seekto =0;
-					bgav_seek_scaled(rm->getFile(), &seekto, timescale);
-				}
-			}
-				
-			ret = bgav_read_video(rm->getFile(), rm->getVideoFrame(), 0 );
-
-			if ( !ret ) {
-				// only loop from video if there is no audio
-				// audio controls loop timing
-				if ( rm->getLoop() ){
-					if ( can_seek ) {
-						if (doaudio && can_seek_sample) {
-							// seek on video stream only if we have audio
-							// audio and video seeking are separate in sample accurate 
-							// seeking.  If no sample accurate seeking, then let audio
-							// handle seeking
-							bgav_seek_video(rm->getFile(), 0,0);
-						} else if (!doaudio) {	
-							// if we don't have audio...just seek to 0
-							seekto=0;
-							bgav_seek_scaled(rm->getFile(), &seekto, timescale);
-						}
-					} else { // if (can_seek)
-						printf ("We want to loop video, but we cannot seek on this video stream,setting VEOF\n");
-						rm->setVEOF(true);
-					}
-				} else {
-					rm->setVEOF(true);
-				}
-				rm->unlockAV();
-				break;
-			} 
-			rm->unlockAV();
-			if( !rm->getVideoFifo()->Append( rm->getVideoFrame() ))
-				printf("problem with appending VideoFrame\n");
-		}
-		// on the first time 'round we will call the open callback
-		// if there is no video in the file, the audio will handle it.
-		if (first) {
-			rm->setState( STATE_READY );
-			rm->callOpenCallback();
-			first = false;
-		}
-
-		if (rm->quitAVThreads() ) pthread_exit(NULL); //return NULL;
-		rm->waitV();
-	}
-	pthread_exit(NULL); //return NULL;
-}
-
-
diff --git a/externals/august/readanysf~/src/ReadMedia.h b/externals/august/readanysf~/src/ReadMedia.h
deleted file mode 100644
index 6499f7344e428820231a563f6a8d282d2f445b89..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/ReadMedia.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#ifndef _READMEDIA_H_
-#define _READMEDIA_H_
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-#include "FifoAudioFrames.h"
-#include "FifoVideoFrames.h"
-
-
-#ifndef _AVDEC_H_
-#define _AVDEC_H_
-extern "C" {
-#include <avdec.h>
-}
-#endif
-
-
-#define STATE_EMPTY              0
-#define STATE_OPENING           1
-#define STATE_READY            2
-
-#define SRC_MAX                 256.0
-#define SRC_MIN                 1/256.0
-
-#define CMD_START	3
-#define CMD_NULL	0
-#define CMD_OPEN 1
-#define CMD_QUIT 2
-
-#define SEEK_NOTHING -1
-#define SEEK_REWIND -2
-
-class ReadMedia  {
-
-	public:
-		ReadMedia();
-		~ReadMedia();
-
-		void openFile( char * filename, int vfifosize, int afifosize, int samples_per_frame);
-
-		int decodeAudio( gavl_audio_frame_t *af);
-		int decodeVideo( gavl_video_frame_t *vf);
-	
-		bool isReady(); // see if file is loaded or not
-		bool getEOF();
-
-		bool rewind();
-		bool rewindNoFlush();
-		bool frameSeek(int64_t frames);
-		bool pcmSeek(int64_t samples);
-		bool timeSeek(double seconds);
-
-		int getAudioSamplerate();
-		int getAudioChannelCount();
-		int getVideoTimescale();
-
-		double getLengthInSeconds(); 
-		gavl_time_t getLengthInGavlTime(); 
-		int64_t getLengthInAudioSamples();
-		int64_t getLengthInVideoFrames();
-
-		int getAudioStreamCount();
-		int getVideoStreamCount();
-
-		// this is used to sync AV frames
-		void pealOffVideoFrames(int howmany);
-
-		void dump() { lockState(); if (m_file != NULL) bgav_dump(m_file); unlockState(); }; 
-	
-		double getATimeInSeconds();
-		double getVTimeInSeconds();
-		//float getTimeInSeconds();
-		float getAudioFifoSizePercentage();
-
-		void copyAudioFormat(gavl_audio_format_t * dst ); 
-		void copyVideoFormat(gavl_video_format_t * dst ); 
-		void setLoop( bool b); 
-		bool getLoop(); 
-
-
-		//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-		// NON-PUBLIC public functions
-		//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-
-		int64_t pcmSeek();
-		int64_t frameSeek();
-		//bool seek(gavl_time_t gt);
-
-		void killAVThreads();
-		bool startAVThreads();
-		void setAudioStreamCount(int s);
-		void setVideoStreamCount(int s);
-
-		FifoAudioFrames * getAudioFifo(); 
-		FifoVideoFrames * getVideoFifo(); 
-
-		bgav_t * getFile();
-		char * getFilename();
-
-		gavl_audio_frame_t * getAudioFrame();
-		gavl_video_frame_t * getVideoFrame();
-		
-		void closeFile();
-		void clearFile();
-
-		void setState(int b);
-		int getState();
-		gavl_audio_format_t * getAudioFormat() { return &m_audio_format;}; 
-		gavl_video_format_t * getVideoFormat() { return &m_video_format;}; 
-
-		void setCommand( int c);
-		int getCommand();
-
-		void setAEOF(bool b);
-		void setVEOF(bool b);
-		bool getAEOF();
-		bool getVEOF();
-
-		int getSamplesPerFrame();
-
-		int lockAV();
-		int unlockAV();
-		//int lockAV(const char *s);
-		//int unlockAV(const char *s);
-		int lockState();
-		int unlockState();
-		//int lockState(const char *s);
-		//int unlockState(const char *s);
-
-
-		void waitA();
-		void waitV();
-		void signalAV();
-		void signalA();
-		void signalV();
-		void waitDispatch();
-		void signalDispatcher();
-	
-		bool initFormat();
-
-		void setOpenCallback(void (*oc)(void *), void *v );
-		void callOpenCallback();
-
-		void setBufferCallback( bgav_buffer_callback bc, void *v );
-		
-		bool quitAVThreads();
-
-	private:
-		bool quit_av_threads;
-		// callbacks for open, input buffer etc.	
-		void * m_open_callback_data;	
-		void (* m_open_callback)(void * v);
-		bgav_buffer_callback m_buffer_callback;
-		void * m_buffer_callback_data;			
-
-		// end of file for audio and video
-		bool m_aeof;
-		bool m_veof;
-	
-		// seek vars
-		int64_t m_pcm_seek;
-		int64_t m_frame_seek;
-		
-		double m_length_in_seconds;
-		gavl_time_t m_length_in_gavltime;
-		int64_t m_num_samples;
-		int64_t m_num_frames;
-
-		// command for dispatcher thread
-		int m_cmd;
-
-		// internal state of media reader and 
-		// current filename
-		int m_state;
-		char m_filename[1024];
-		bool m_loop;
-
-	
-		// current time of audio in seconds
-		//double m_atime;
-		//double m_vtime;
-
-		int m_afifosize;
-		int m_vfifosize;
-		int m_audio_stream_count;
-		int m_video_stream_count;
-		
-		bgav_t * m_file;
-		bgav_options_t * m_opt;
-
-		// audio stuff
-		gavl_audio_frame_t * m_audio_frame;
-		gavl_audio_format_t m_audio_format;
-	
-		//video stuff 
-		gavl_video_frame_t * m_video_frame;
-		gavl_video_format_t m_video_format;
-
-		FifoAudioFrames  *m_fifoaudio;
-		FifoVideoFrames  *m_fifovideo;
-
-		int m_audio_thread_ret;
-		int m_video_thread_ret;
-		int m_dispatcher_thread_ret;
-
-		pthread_t m_thread_fillaudiofifo;
-		pthread_t m_thread_fillvideofifo;
-		pthread_t m_thread_dispatch;
-
-		pthread_mutex_t m_condmut_a;
-		pthread_mutex_t m_condmut_v;
-		pthread_mutex_t m_condmut_dispatch;
-
-		pthread_mutex_t m_state_mut;
-		pthread_mutex_t m_av_mut;
-
-		pthread_cond_t m_cond_a;
-		pthread_cond_t m_cond_v;
-		pthread_cond_t m_cond_dispatch;
-		
-};
-
-#endif
diff --git a/externals/august/readanysf~/src/readanysf~.cpp b/externals/august/readanysf~/src/readanysf~.cpp
deleted file mode 100644
index e07c7b63397670d222706ccc47b7cc0ac39c08a4..0000000000000000000000000000000000000000
--- a/externals/august/readanysf~/src/readanysf~.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Readanysf  PD object for reading and playing multiple soundfile types
- * from disk and from the web using gmerlin_avdecode
- *
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * readanysf.cpp
- */
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdbool.h>  //IMPORTANT bool
-#include <stdlib.h>   // for malloc
-#include <stdio.h>	//sprintf
-#include <string.h>  //strcmp
-#include <math.h>   // ceil
-
-#include "m_pd.h"
-#include "ReadMedia.h"
-
-#define MAXSFCHANS 64	// got this from d_soundfile.c in pd/src
-
-
-static t_class *readanysf_class;
-
-typedef struct readanysf {
-	t_object x_obj;
-	t_sample *(x_outvec[MAXSFCHANS]);
-	t_outlet *outinfo;
-
-	int blocksize; // size of the pd block for this object
-	int num_channels;
-	int num_frames_in_fifo;
-	int num_samples_per_frame;
-	unsigned int tick;  // how often to send outlet info
-	bool play;
-	bool is_opening;
-	unsigned int count;
-	float src_factor;
-
-	bool do_t2o_audio_convert;
-	bool do_i2t_audio_convert;
-
-	int samplesleft;  // how many audio samples left in our curren read buf
-
-
-	ReadMedia *rm;
-	gavl_audio_frame_t * out_audio_frame;
-	gavl_audio_frame_t * tmp_audio_frame;
-	gavl_audio_frame_t * in_audio_frame;
-
-	gavl_audio_format_t out_audio_format;
-	gavl_audio_format_t tmp_audio_format;
-	gavl_audio_format_t in_audio_format;
-
-	gavl_audio_converter_t *  i2t_audio_converter;
-	gavl_audio_converter_t *  t2o_audio_converter;
-	
-	pthread_mutex_t mut;	
-
-} t_readanysf;
-
-
-void m_play(t_readanysf *x) {
-
-	pthread_mutex_lock(&x->mut);
-	if (x->rm->isReady() && !x->is_opening ) {	
-		// is_opening protects the play variable, which in turn protects 
-		// the memory accessed in m_decode_block inside of the perform function
-		// as long as play is false, no memory is accessed
-		// as long as is_opening is true, play is false and no memory is accessed
-		// to be safe, we will protect the is_opening var so that when the open callback
-		// is called, and the memory is de-allocated and re-allocated, that memory is not
-		// access by the perform function 
-		x->play = true;  // this is the only place where play is true
-	} else {
-		if (x->is_opening ) {
-			post("Current file is still starting.");
-			post("This probably means that it is a stream and it needs to buffer in from the network.");
-		} else {
-			post("Current file is either invalid or an unsupported codec.");
-		}
-	}
-	pthread_mutex_unlock(&x->mut);
-}
-
-void readanysf_bang(t_readanysf *x) {
-	m_play(x);
-}
-
-
-void m_pause(t_readanysf *x) {
-	x->play = false;
-}
-
-void m_pcm_seek(t_readanysf *x, float f) {
-	if (! x->rm->pcmSeek( (long)f) )		
-		post("can't seek on this file.");
-}	
-
-void m_time_seek(t_readanysf *x, float f) {
-	if (! x->rm->timeSeek( (double)f) )		
-		post("can't seek on this file.");
-}	
-
-void m_tick(t_readanysf *x, float f) {
-	if (f >= 0.0) {
-		x->tick = (unsigned int) f ;
-	}
-}	
-
-void m_stop(t_readanysf *x) {
-	x->play = false;
-	x->samplesleft=0;
-	x->count=0;
-/*
-	if( x->out_audio_frame != NULL)
-		gavl_audio_frame_mute_samples(x->out_audio_frame, &x->out_audio_format, x->out_audio_format.samples_per_frame);
-	if( x->in_audio_frame != NULL)
-		gavl_audio_frame_mute_samples(x->in_audio_frame, &x->in_audio_format, x->in_audio_format.samples_per_frame);
-	if( x->tmp_audio_frame != NULL)
-		gavl_audio_frame_mute_samples(x->tmp_audio_frame, &x->tmp_audio_format, x->tmp_audio_format.samples_per_frame);
-*/
-
-	x->rm->rewind();
-}
-
-void m_init_audio( t_readanysf *x) {
-	// Now,. do Audio stuff
-	x->rm->copyAudioFormat( &x->in_audio_format); 
-	x->in_audio_format.samples_per_frame = x->num_samples_per_frame;
-
-	x->tmp_audio_format.samplerate = x->in_audio_format.samplerate;
-	x->tmp_audio_format.samples_per_frame = x->in_audio_format.samples_per_frame;
-	x->tmp_audio_format.num_channels = x->out_audio_format.num_channels;
-	x->tmp_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-	gavl_set_channel_setup (&x->tmp_audio_format); // Set channel locations
-
-	if (x->in_audio_frame != NULL)
-		gavl_audio_frame_destroy(x->in_audio_frame);
-	x->in_audio_frame = gavl_audio_frame_create(&x->in_audio_format);
-
-	if (x->tmp_audio_frame != NULL)
-		gavl_audio_frame_destroy(x->tmp_audio_frame);
-	x->tmp_audio_frame = gavl_audio_frame_create(&x->tmp_audio_format);
-
-	/* m_out_audio_format.samples_per_frame = (m_out_audio_format.samplerate / (double)m_get_audio_format.samplerate) * 
-		 m_get_audio_format.samples_per_frame + 10;
-	 */
-
-	if (x->i2t_audio_converter == NULL)
-		x->i2t_audio_converter = gavl_audio_converter_create( );
-	x->do_i2t_audio_convert = gavl_audio_converter_init( x->i2t_audio_converter, &x->in_audio_format, &x->tmp_audio_format); 
-
-	if (x->t2o_audio_converter == NULL)
-		x->t2o_audio_converter = gavl_audio_converter_create( );
-	x->do_t2o_audio_convert = gavl_audio_converter_init_resample( x->t2o_audio_converter, &x->out_audio_format); 
-
-	// FIXME: this should be protected
-	x->src_factor = x->out_audio_format.samplerate / (float) x->in_audio_format.samplerate;
-	/*
-		 printf("in audio format: \n");
-		 gavl_audio_format_dump( &x->in_audio_format);
-		 printf("tmp audio format,  converting from input=%d \n", x->do_i2t_audio_convert);
-		 gavl_audio_format_dump( &x->tmp_audio_format);
-		 printf("output audio format,  converting from tmp=%d \n", x->do_t2o_audio_convert);
-		 gavl_audio_format_dump( &x->out_audio_format);
-	*/
-};
-
-
-void m_open_callback( void * data) {
-	t_atom lst;
-	t_readanysf * x = (t_readanysf *)data;
-
-	pthread_mutex_lock(&x->mut);
-	x->is_opening = true; // set it here again just to be safe
-	
-	if (x->rm->isReady() && x->rm->getAudioStreamCount() ) {	
-
-		m_init_audio(x);
-
-		// FIXME:  is it safe to call these here?
-		SETFLOAT(&lst, (float)x->rm->getAudioSamplerate() );
-		outlet_anything(x->outinfo, gensym("samplerate"), 1, &lst);
-		
-		SETFLOAT(&lst, x->rm->getLengthInSeconds() );
-		outlet_anything(x->outinfo, gensym("length"), 1, &lst);
-
-		outlet_float(x->outinfo, 0.0);
-
-		// ready should be last	
-		SETFLOAT(&lst, 1.0 );
-		outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-		// set time to 0 again here just to be sure
-	} else {
-		SETFLOAT(&lst, 0.0 );
-		outlet_anything(x->outinfo, gensym("samplerate"), 1, &lst);
-		SETFLOAT(&lst, 0.0 );
-		outlet_anything(x->outinfo, gensym("length"), 1, &lst);
-		SETFLOAT(&lst, 0.0 );
-		outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-		outlet_float(x->outinfo, 0.0);
-		post("Invalid file or unsupported codec.");
-	}
-	x->is_opening=false;
-	pthread_mutex_unlock(&x->mut);
-}
-
-void m_open(t_readanysf *x, t_symbol *s) {
-
-	t_atom lst;
-	SETFLOAT(&lst, 0.0 );
-	outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-
-	SETFLOAT(&lst, 0.0 );
-	outlet_anything(x->outinfo, gensym("length"), 1, &lst);
-	
-	outlet_float(x->outinfo, 0.0);
-
-	x->play = false;
-	pthread_mutex_lock(&x->mut);
-	x->is_opening = true;
-	pthread_mutex_unlock(&x->mut);
-	x->rm->openFile( s->s_name, 0, x->num_frames_in_fifo, x->num_samples_per_frame );
-}
-
-void m_speed(t_readanysf *x, float f) {
-	//	x->rm->setSpeed( f );
-	if (f > SRC_MAX) 
-		return;
-	if (f < SRC_MIN)
-		return;
-	// lock on src_factor because it is set called during open callback
-	// we can be sure then it won't conflict
-	pthread_mutex_lock(&x->mut);
-	x->src_factor = 1.0/f;
-	pthread_mutex_unlock(&x->mut);
-}
-
-void m_loop(t_readanysf *x, float f) {
-	if ( f == 0)
-		x->rm->setLoop( false );
-	else 
-		x->rm->setLoop( true );
-	post("looping = %d", x->rm->getLoop());
-}
-
-
-static void *readanysf_new(t_float f, t_float f2, t_float f3 ) {
-  
-  int nchannels = (int)f;
-  int nframes = (int)f2;
-  int nsamples = (int)f3;
-  int i;
-  t_atom lst;
-
-  // if the external is created without any options
-  if (nchannels <=0)
-	  nchannels = 2;
-
-  if (nframes <=0)
-	  nframes = 24;
-
-  if (nsamples <=0)
-	  nsamples = sys_getblksize();
-
-  t_readanysf *x = (t_readanysf *)pd_new(readanysf_class);
-	x->blocksize=0;
-  x->num_channels = nchannels;
-  x->num_frames_in_fifo = nframes;
-  x->num_samples_per_frame = nsamples;
-  x->tick = 1000;
-  x->play =false; 
-	x->is_opening=false;
-  x->count = 0;
-	x->src_factor = 1.0;
-	x->do_t2o_audio_convert = false;
-	x->do_i2t_audio_convert = false;
-	x->samplesleft = 0;
-
-  x->rm = NULL; 
-
-	x->out_audio_frame=NULL;	
-	x->tmp_audio_frame=NULL;	
-	x->in_audio_frame=NULL;	
-
-	// set up the audio formats.  Need to also set them in dsp call
-	x->tmp_audio_format.samplerate = sys_getsr();
-	x->tmp_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-	x->tmp_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-	x->tmp_audio_format.num_channels = x->num_channels;
-	x->tmp_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-	x->tmp_audio_format.samples_per_frame = x->num_samples_per_frame;
-
-	x->out_audio_format.samplerate = sys_getsr();
-	x->out_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-	x->out_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-	x->out_audio_format.num_channels = x->num_channels;
-	x->out_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-
-
-	x->i2t_audio_converter=NULL;
-	x->t2o_audio_converter=NULL;
-
-	pthread_mutex_init(&x->mut, 0);
-
-	for (i=0; i < nchannels; i++) {
-  	outlet_new(&x->x_obj,  gensym("signal"));
-  }
-  x->outinfo = outlet_new(&x->x_obj, &s_anything);
-  SETFLOAT(&lst, 0.0 );
-  outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-  
-  // set time to 0.0
-  outlet_float(x->outinfo, 0.0);
-	if (x->rm == NULL) {
-		x->rm = new ReadMedia ( ); // (int)sys_getsr(), x->num_channels, x->num_frames_in_fifo, x->num_samples_per_frame);
-		post("Created new readanysf~ with %d channels and internal buffer of %d * %d = %d", x->num_channels,
-				x->num_frames_in_fifo, x->num_samples_per_frame, x->num_frames_in_fifo *  x->num_samples_per_frame);
-	}
-	x->rm->setOpenCallback( m_open_callback, (void *)x); 
-
-  return (void *)x;
-}
-
-int m_get_frame( t_readanysf *x ) {
-	int ret =0;	
-	ret = x->rm->decodeAudio(x->in_audio_frame);
-	if (ret != 1) // EOF
-		return ret;
-
-	if (x->do_i2t_audio_convert) {
-		gavl_audio_convert( x->i2t_audio_converter, x->in_audio_frame, x->tmp_audio_frame) ;
-		x->tmp_audio_frame->valid_samples = x->in_audio_frame->valid_samples;
-	} else {
-		gavl_audio_frame_copy(&x->in_audio_format, x->tmp_audio_frame,  x->in_audio_frame, 
-				0,0, x->in_audio_frame->valid_samples, x->in_audio_frame->valid_samples) ;
-		x->tmp_audio_frame->valid_samples = x->in_audio_frame->valid_samples;
-	}
-
-	if ( x->do_t2o_audio_convert  ) { // should be true all of the time
-		gavl_audio_converter_resample( x->t2o_audio_converter, x->tmp_audio_frame, x->out_audio_frame, x->src_factor );
-		//  Don't know why, but on the first conversion, I get one extra sample
-		//  THIS SHOULD NOT HAPPEN...this is a fix for now..check it out later.
-		//if (x->src_factor == 1.0 && x->out_audio_frame->valid_samples > x->num_samples_per_frame) { 
-		//	printf("Got wierd return value for audio frames,  taf->vs %d, oaf->vs %d, src_factor=%f\n",
-		//			x->tmp_audio_frame->valid_samples, x->out_audio_frame->valid_samples, x->src_factor);
-			//x->samplesleft = x->out_audio_frame->valid_samples = x->num_samples_per_frame;
-		//} else {
-		x->samplesleft = x->out_audio_frame->valid_samples;
-		//}
-	} else {
-		// copy the samples to the output
-		gavl_audio_frame_copy(&x->tmp_audio_format, x->out_audio_frame, x->tmp_audio_frame, 
-				0,0, x->tmp_audio_frame->valid_samples, x->tmp_audio_frame->valid_samples) ;
-		//printf("copying taf to oaf,  taf->vs %d, oaf->vs %d\n", taf->valid_samples, oaf->valid_samples);
-		x->samplesleft = x->out_audio_frame->valid_samples = x->tmp_audio_frame->valid_samples;
-	}
-	return ret;
-}
-
-int m_decode_block( t_readanysf * x ) {
-	int i=0,j=0, samps_done=0;
-	int samps_to_do = x->blocksize;
-
-	while( samps_to_do > 0) {
-		if ( samps_to_do <= x->samplesleft) {
-			//if (x->out_audio_frame->valid_samples < x->samplesleft) 	
-			//	printf("error\n");
-			// copy our samples out to the pd audio buffer
-			for (i = 0; i < x->num_channels; i++) {
-				for (j = 0; j <  samps_to_do ;  j++) {
-					x->x_outvec[i][samps_done + j] = x->out_audio_frame->channels.f[i][ x->out_audio_frame->valid_samples - x->samplesleft +j ];
-				}
-			}
-			x->samplesleft -= samps_to_do;
-			samps_done += samps_to_do;
-			samps_to_do = 0;
-			break;
-		} else if ( x->samplesleft > 0 ) {
-			//if( x->out_audio_frame->valid_samples  < x->samplesleft)
-			//	printf("valid_samples < samplesleft, shouldn't happen\n");
-			for (i = 0; i < x->num_channels; i++) {
-				for (j = 0; j <  x->samplesleft;  j++) {
-					x->x_outvec[i][samps_done + j] = x->out_audio_frame->channels.f[i][ x->out_audio_frame->valid_samples - x->samplesleft +j ];
-				}
-			}
-			samps_to_do = samps_to_do - x->samplesleft;	
-			samps_done += x->samplesleft;
-			x->samplesleft = 0;
-		} else { // samplesleft is zero
-			int ret = m_get_frame(x);
-			if (ret == 0) {
-				return samps_done;
-			} else if (ret == -1) {
-				//printf("error getting frame...must be seeking\n");
-				return ret;
-			} 
-		}
-	} 
-	return samps_done;
-}
-
-static t_int *readanysf_perform(t_int *w) {
-	t_readanysf *x = (t_readanysf *) (w[1]);
-	int i=0,j=0;
-	int samples_returned = 0;
-	t_atom lst;
-
-
-	if (x->play ) { // play protects the memory accessed in m_decode_block
-		samples_returned = m_decode_block( x );	
-		if (samples_returned == 0 ) { // EOF
-			m_stop(x);
-			outlet_bang(x->outinfo);
-		} else if (samples_returned == -1) {
-			// error in getting audio, normally from seeking
-			samples_returned=0;
-		}
-	} 
-	
-	for (i = 0; i < x->num_channels; i++) {
-		for (j = samples_returned; j < x->blocksize;  j++) {
-			x->x_outvec[i][j] = 0.0;
-		}
-	}
-
-
-	// just set some variables
-	if ( ++x->count > x->tick ) {
-		SETFLOAT (&lst, x->rm->getAudioFifoSizePercentage() );
-		outlet_anything(x->outinfo, gensym("cache"), 1, &lst);
-		if (x->play) {
-			outlet_float( x->outinfo,
-					gavl_time_to_seconds(gavl_time_unscale(x->in_audio_format.samplerate, x->in_audio_frame->timestamp))
-			);
-		}
-		x->count = 0;
-	}
-	
-	return (w+2);	
-}
-
-void readanysf_dsp(t_readanysf *x, t_signal **sp) {
-	int i=0;
-	if (x->blocksize != sp[0]->s_n) {
-		x->blocksize = sp[0]->s_n;
-
-		x->tmp_audio_format.samplerate = sys_getsr();
-		x->tmp_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-		x->tmp_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-		x->tmp_audio_format.num_channels = x->num_channels;
-		x->tmp_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-		x->tmp_audio_format.samples_per_frame = x->num_samples_per_frame;
-
-		x->out_audio_format.samplerate = sys_getsr();
-		x->out_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-		x->out_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-		x->out_audio_format.num_channels = x->num_channels;
-		x->out_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-
-		// leave enough room in our out format and frame for resampling
-		x->out_audio_format.samples_per_frame = x->num_samples_per_frame * SRC_MAX +10;
-		gavl_set_channel_setup (&x->out_audio_format); // Set channel locations
-		
-		if(x->out_audio_frame != NULL)
-			gavl_audio_frame_destroy( x->out_audio_frame);
-		x->out_audio_frame = gavl_audio_frame_create(&x->out_audio_format);
-		//printf("created new out frame in readanysf_dsp\n");
-  	post("pd blocksize=%d, spf=%d", x->blocksize, x->num_samples_per_frame);
-	}
-
-  for (i = 0; i < x->num_channels; i++)
-	  x->x_outvec[i] = sp[i]->s_vec;
-		    
-  dsp_add(readanysf_perform, 1, x);
-	
-}
-
-static void readanysf_free(t_readanysf *x) {
-	// delete the readany objs
-
-	if (x->in_audio_frame != NULL) gavl_audio_frame_destroy(x->in_audio_frame);
-	if (x->tmp_audio_frame != NULL) gavl_audio_frame_destroy(x->tmp_audio_frame);
-	if (x->out_audio_frame != NULL) gavl_audio_frame_destroy(x->out_audio_frame);
-	
-	if (x->i2t_audio_converter != NULL)
-		gavl_audio_converter_destroy(x->i2t_audio_converter);
-	
-	if (x->t2o_audio_converter != NULL)
-		gavl_audio_converter_destroy(x->t2o_audio_converter);
-
-	pthread_mutex_destroy(&x->mut);
-
-	delete x->rm;
-	x->rm = NULL;
-}
-
-extern "C" void readanysf_tilde_setup(void) {
-
-  readanysf_class = class_new(gensym("readanysf~"), (t_newmethod)readanysf_new,
-  	(t_method)readanysf_free, sizeof(t_readanysf), 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
-  class_addmethod(readanysf_class, (t_method)readanysf_dsp, gensym("dsp"), A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_open, gensym("open"), A_SYMBOL, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_play, gensym("play"),  A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_pause, gensym("pause"),  A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_stop, gensym("stop"),  A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_tick, gensym("tick"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_speed, gensym("speed"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_loop, gensym("loop"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_pcm_seek, gensym("pcm_seek"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_time_seek, gensym("time_seek"), A_FLOAT, A_NULL);
-  class_addbang(readanysf_class, readanysf_bang);
-
-}
diff --git a/externals/clr/Counter/AssemblyInfo.cs b/externals/clr/Counter/AssemblyInfo.cs
deleted file mode 100644
index f341568015160a718fbb8560fd45139fdacc9dd8..0000000000000000000000000000000000000000
--- a/externals/clr/Counter/AssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// Le informazioni generali relative a un assembly sono controllate dal seguente 
-// insieme di attributi. Per modificare le informazioni associate a un assembly 
-// occorre quindi modificare i valori di questi attributi.
-//
-[assembly: AssemblyTitle("")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori:
-//
-//      Numero di versione principale
-//      Numero di versione secondario 
-//      Numero revisione
-//      Numero build
-//
-// È possibile specificare tutti i valori o impostare come predefiniti i valori Numero revisione e Numero build 
-// utilizzando l'asterisco (*) come illustrato di seguito:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// Per firmare l'assembly è necessario specificare una chiave da utilizzare.
-// Fare riferimento alla documentazione di Microsoft .NET Framework per ulteriori informazioni sulla firma degli assembly.
-//
-// Utilizzare gli attributi elencati di seguito per verificare la chiave utilizzata per la firma. 
-//
-// Note: 
-//   (*) Se non è specificata alcuna chiave, non sarà possibile firmare l'assembly.
-//   (*) KeyName fa riferimento a una chiave installata nel provider di servizi di
-//       crittografia (CSP) sul computer in uso. KeyFile fa riferimento a un file che contiene
-//       una chiave.
-//   (*) Se entrambi i valori KeyFile e KeyName sono specificati, si 
-//       verificherà il seguente processo:
-//       (1) Se KeyName è presente in CSP, verrà utilizzata tale chiave.
-//       (2) Se KeyName non esiste e KeyFile esiste, la chiave 
-//           di KeyFile verrà installata nel CSP e utilizzata.
-//   (*) Per creare un KeyFile, è possibile utilizzare l'utilità sn.exe (Strong Name).
-//       Quando si specifica il KeyFile, il percorso dovrà essere
-//       relativo alla directory di output del progetto, ovvero
-//       %Project Directory%\obj\<configuration>. Se ad esempio il KeyFile si
-//       trova nella directory del progetto, occorre specificare l'attributo AssemblyKeyFile 
-//       come [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) La firma ritardata è un'opzione avanzata. Vedere la documentazione di Microsoft
-//       .NET Framework per ulteriori informazioni.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
diff --git a/externals/clr/Counter/Counter.cs b/externals/clr/Counter/Counter.cs
deleted file mode 100644
index 7b370d91a5a59a30df2bd4d6cf3c45ee51e5039f..0000000000000000000000000000000000000000
--- a/externals/clr/Counter/Counter.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using PureData;
-
-/// <summary>
-/// Descrizione di riepilogo per Counter.
-/// </summary>
-public class Counter:
-	External
-{
-    int i_count,i_down,i_up;
-    float step;
-
-    public Counter() { }
-
-    public Counter(Atom[] args)
-	{
-	    this.step = args.Length >= 3?(float)args[2]:1;
-        
-        float f2 = args.Length >= 2?(float)args[1]:0;
-        float f1 = args.Length >= 1?(float)args[0]:0;
-
-        if(args.Length < 2) f2 = f1;
-        
-        this.i_down = (int)((f1<f2)?f1:f2);
-        this.i_up = (int)((f1>f2)?f1:f2);
-        
-	    this.i_count = this.i_down;
-
-        AddInlet(_list,new Symbol("bound"));
-        AddInlet(ref step);
-
-        AddOutlet(_float);
-        AddOutlet(_bang);
-    }
-
-	// this function MUST exist
-	private static void Setup(Counter obj)
-	{
-	    AddMethod(obj.Bang);
-        AddMethod(0,"reset",obj.Reset);
-        AddMethod(0,"set",obj.Set);
-        AddMethod(0,"bound",obj.Bound);
-	}
-
-    protected void Bang() 
-    {
-    
-        float f = this.i_count;
-        int step = (int)this.step;
-        this.i_count += step;
-        
-        if(this.i_down-this.i_up != 0) {
-            if(step > 0 && this.i_count > this.i_up) {
-                this.i_count = this.i_down;
-                Outlet(1);
-            }
-            else if(this.i_count < this.i_down) {
-                this.i_count = this.i_up;
-                Outlet(1);
-            }
-        }
-        
-        Outlet(0,f);   
-    }
-
-    protected void Reset() 
-    { 
-        this.i_count = this.i_down;
-    }
-
-    protected void Set(float f) 
-    { 
-        this.i_count = (int)f;
-    }
-
-    protected void Bound(Atom[] args) 
-    { 
-        float f1 = (float)args[0];
-        float f2 = (float)args[1];
-        
-        this.i_down = (int)((f1<f2)?f1:f2);
-        this.i_up = (int)((f1>f2)?f1:f2);
-    }
-}
diff --git a/externals/clr/Counter/Counter.csproj b/externals/clr/Counter/Counter.csproj
deleted file mode 100644
index ab8a5eb4bc2fb3f1f6be40207685a00066d6083e..0000000000000000000000000000000000000000
--- a/externals/clr/Counter/Counter.csproj
+++ /dev/null
@@ -1,107 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{8CFEFB15-2A72-45B5-BC99-3BAFFB2B27C3}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>Counter</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Counter</RootNamespace>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>true</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-    <Reference Include="System.XML">
-      <Name>System.XML</Name>
-    </Reference>
-    <ProjectReference Include="..\PureData\PureData.csproj">
-      <Name>PureData</Name>
-      <Project>{0015D5E7-B0FB-4F06-B334-225447D1F992}</Project>
-      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Counter.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/externals/clr/Counter/README.txt b/externals/clr/Counter/README.txt
deleted file mode 100644
index abd1e597706f04f71b582ab7a2ca1de58bcf1fa9..0000000000000000000000000000000000000000
--- a/externals/clr/Counter/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-to compile External.dll put  PureData.dll in this folder then execute this command:
-
-Using the Mono C#: 
-mcs -out:Counter.dll -target:library -r:PureData.dll -optimize+ *.cs
-
-For the Microsoft C# compiler, use csc instead of mcs
diff --git a/externals/clr/Counter/counter-help.pd b/externals/clr/Counter/counter-help.pd
deleted file mode 100644
index 7648acc5d3680c70cddd2e3ba1b4f43d5aae4285..0000000000000000000000000000000000000000
--- a/externals/clr/Counter/counter-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 0 0 458 308 12;
-#X obj 233 204 Counter;
-#X msg 306 91 2 7;
-#X floatatom 372 91 5 0 0 0 - - -;
-#X obj 284 241 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 226 240 5 0 0 0 - - -;
-#X floatatom 90 55 5 0 0 0 - - -;
-#X msg 17 113 reset;
-#X obj 19 68 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X text 296 70 bounds;
-#X msg 164 80 bound 0 4;
-#X text 376 72 step;
-#X msg 90 79 set \$1;
-#X connect 0 0 4 0;
-#X connect 0 1 3 0;
-#X connect 1 0 0 1;
-#X connect 2 0 0 2;
-#X connect 5 0 11 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
-#X connect 11 0 0 0;
diff --git a/externals/clr/PureData/AssemblyInfo.cs b/externals/clr/PureData/AssemblyInfo.cs
deleted file mode 100644
index 93484d81c40baedf9c957ade63d9aa0c3b805e80..0000000000000000000000000000000000000000
--- a/externals/clr/PureData/AssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// Le informazioni generali relative a un assembly sono controllate dal seguente 
-// insieme di attributi. Per modificare le informazioni associate a un assembly 
-// occorre quindi modificare i valori di questi attributi.
-//
-[assembly: AssemblyTitle("PureData")]
-[assembly: AssemblyDescription("bridge between C sharp externals and pd")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("Davide Morelli, Thomas Grill")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori:
-//
-//      Numero di versione principale
-//      Numero di versione secondario 
-//      Numero revisione
-//      Numero build
-//
-// È possibile specificare tutti i valori o impostare come predefiniti i valori Numero revisione e Numero build 
-// utilizzando l'asterisco (*) come illustrato di seguito:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// Per firmare l'assembly è necessario specificare una chiave da utilizzare.
-// Fare riferimento alla documentazione di Microsoft .NET Framework per ulteriori informazioni sulla firma degli assembly.
-//
-// Utilizzare gli attributi elencati di seguito per verificare la chiave utilizzata per la firma. 
-//
-// Note: 
-//   (*) Se non è specificata alcuna chiave, non sarà possibile firmare l'assembly.
-//   (*) KeyName fa riferimento a una chiave installata nel provider di servizi di
-//       crittografia (CSP) sul computer in uso. KeyFile fa riferimento a un file che contiene
-//       una chiave.
-//   (*) Se entrambi i valori KeyFile e KeyName sono specificati, si 
-//       verificherà il seguente processo:
-//       (1) Se KeyName è presente in CSP, verrà utilizzata tale chiave.
-//       (2) Se KeyName non esiste e KeyFile esiste, la chiave 
-//           di KeyFile verrà installata nel CSP e utilizzata.
-//   (*) Per creare un KeyFile, è possibile utilizzare l'utilità sn.exe (Strong Name).
-//       Quando si specifica il KeyFile, il percorso dovrà essere
-//       relativo alla directory di output del progetto, ovvero
-//       %Project Directory%\obj\<configuration>. Se ad esempio il KeyFile si
-//       trova nella directory del progetto, occorre specificare l'attributo AssemblyKeyFile 
-//       come [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) La firma ritardata è un'opzione avanzata. Vedere la documentazione di Microsoft
-//       .NET Framework per ulteriori informazioni.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
diff --git a/externals/clr/PureData/Atom.cs b/externals/clr/PureData/Atom.cs
deleted file mode 100644
index 4e78eef0df30020fb47dc70a5fe8e1ef1d61a7cb..0000000000000000000000000000000000000000
--- a/externals/clr/PureData/Atom.cs
+++ /dev/null
@@ -1,289 +0,0 @@
-using System;
-using System.Runtime.InteropServices; // for structures
-using System.Collections;
-#if NET_2_0
-using System.Collections.Generic;
-#endif
-
-namespace PureData
-{
-    [StructLayout (LayoutKind.Sequential)]
-    public struct Symbol
-    {
-        // this should NOT be public (or at least read only)
-        private readonly IntPtr sym;
-
-        public Symbol(string s)
-        {
-            this = Internal.SymGen(s);
-        }
-
-        public override string ToString()
-        {
-            return Internal.SymEval(this);
-        }
-
-        public static bool operator ==(Symbol s1,Symbol s2)
-        {
-            return s1.sym == s2.sym;
-        }
-
-        public static bool operator !=(Symbol s1, Symbol s2)
-        {
-            return s1.sym != s2.sym;
-        }
-
-        public override bool Equals(object o)
-        {
-            try { return this == (Symbol)o; }
-            catch {}
-            return false;
-        }
-
-        public override int GetHashCode()
-        {
-            return (int)sym;
-        }
-    }
-
-    [StructLayout (LayoutKind.Sequential)]
-    public struct Pointer
-    {
-        private readonly IntPtr ptr;
-
-        public override string ToString()
-        {
-            return ptr.ToString();
-        }
-    }
-
-	[StructLayout (LayoutKind.Sequential)]
-	public struct Atom 
-	{
-        private enum AtomType {Null = 0, Float = 1, Symbol = 2, Pointer = 3};
-        
-        [StructLayout (LayoutKind.Explicit)]
-        private struct Word
-        {
-            [FieldOffset(0)] public float w_float;
-            [FieldOffset(0)] public Symbol w_sym;
-            [FieldOffset(0)] public Pointer w_ptr;
-        }
-
-		private AtomType type;
-		private Word word;
-		
-		public Atom(float f)
-		{
-			type = AtomType.Float;
-			word = new Word();
-			word.w_float = f;
-		}
-
-		public Atom(int i)
-		{
-            type = AtomType.Float;
-            word = new Word();
-            word.w_float = (float)i;
-        }
-
-        public Atom(Symbol s)
-        {
-            type = AtomType.Symbol;
-            word = new Word();
-            word.w_sym = s;
-        }
-        
-		public Atom(string s)
-		{
-            type = AtomType.Symbol;
-            word = new Word();
-            word.w_sym = new Symbol(s);
-		}
-
-        public Atom(Pointer p)
-        {
-            type = AtomType.Pointer;
-            word = new Word();
-            word.w_ptr = p;
-        }
-
-        public bool IsFloat { get { return type == AtomType.Float; } }
-        public bool IsSymbol { get { return type == AtomType.Symbol; } }
-        public bool IsPointer { get { return type == AtomType.Pointer; } }
-
-        public float ToFloat()
-        {
-            if(IsFloat)
-                return word.w_float;
-            else
-                throw new System.InvalidCastException("Can't be cast to float.");
-        }
-        
-        public Symbol ToSymbol()
-        {
-            if(IsSymbol)
-                return word.w_sym;
-            else
-                throw new System.InvalidCastException("Can't be cast to Symbol.");
-        }
-        
-        public Pointer ToPointer()
-        {
-            if(IsPointer)
-                return word.w_ptr;
-            else
-                throw new System.InvalidCastException("Can't be cast to Pointer.");
-        }
-        
-        override public string ToString()
-        {
-            if(IsFloat)
-                return word.w_float.ToString();
-            else if(IsSymbol)
-                return word.w_sym.ToString();
-            else if(IsPointer)
-                return word.w_ptr.ToString();
-            else
-                // should never happen
-                throw new System.InvalidProgramException("Internal error.");
-        }
-
-        public static explicit operator float(Atom a)
-        {
-            return a.ToFloat();
-        }
-
-        public static explicit operator Symbol(Atom a)
-        {
-            return a.ToSymbol();
-        }
-
-        public static explicit operator Pointer(Atom a)
-        {
-            return a.ToPointer();
-        }
-    }
-	
-    internal class AtomListEnum
-        : IEnumerator
-    {
-        public AtomList list;
-
-        // Enumerators are positioned before the first element
-        // until the first MoveNext() call.
-        int position = -1;
-
-        public AtomListEnum(AtomList l)
-        {
-            list = l;
-        }
-
-        public bool MoveNext()
-        {
-            return ++position < list.Count;
-        }
-
-        public void Reset()
-        {
-            position = -1;
-        }
-
-        public object Current
-        {
-            get
-            {
-                try
-                {
-                    return list[position];
-                }
-                catch (IndexOutOfRangeException)
-                {
-                    throw new InvalidOperationException();
-                }
-            }
-        }
-    }
-
-
-    // attention: this is dangerous, because we could do the following
-    // AtomList l2 = l;  
-    // with l also being an AtomList... the two private members of the struct will get copied, although atoms is only a temporary reference
-
-    [StructLayout (LayoutKind.Sequential)]
-    internal unsafe struct AtomList
-#if xNET_2_0
-		: ICollection<Atom>
-#else
-        : ICollection
-#endif
-    {
-        private readonly int len;
-        private readonly Atom *atoms;
-        
-        public int Count { get { return len; } }
-#if xNET_2_0
-        public bool IsReadOnly { get { return false; } } // member of generic.ICollection<Atom> (C# 2.0)
-#endif        
-        public bool IsSynchronized { get { return false; } }
-        public Object SyncRoot { get { return null; } }
-
-        // protect this from being used
-        private AtomList(AtomList a) { len = 0; atoms = null; }
-
-#if xNET_2_0
-        public void CopyTo(Atom[] array,int start)
-#else        
-        public void CopyTo(Array array,int start)
-#endif        
-        {
-            if(len > array.GetUpperBound(0)+1-start)
-                throw new System.ArgumentException("Destination array is not long enough.");
-            int i;                
-            for(i = 0; i < len-start; ++i)
-                array.SetValue(atoms[start+i],i);
-        }
-
-        public IEnumerator GetEnumerator()
-        {
-            return new AtomListEnum(this);
-        }
-        
-        public Atom this[int i]
-        {
-            get
-            {
-                if(i < 0 || i >= len)
-                    throw new System.IndexOutOfRangeException("Index outside array bounds.");
-                return atoms[i];
-            }
-            set
-            {
-                if(i < 0 || i >= len)
-                    throw new System.IndexOutOfRangeException("Index outside array bounds.");
-                atoms[i] = value;
-            }
-        }
-
-//#if 1 // !NET_2_0
-        public static explicit operator Atom[](AtomList l)
-        {
-            Atom[] ret = new Atom[l.Count];
-            int i;
-            for(i = 0; i < l.Count; ++i) ret[i] = l.atoms[i];
-            return ret;
-        }
-//#endif        
-
-        override public string ToString()
-        {
-            string n = "{";
-            if(len > 0) {
-                int i;
-                for(i = 0; i < len-1; ++i) n += atoms[i].ToString()+",";
-                n += atoms[i].ToString();
-            }
-            return n+"}";
-        }
-    }	
-}
diff --git a/externals/clr/PureData/DynamicMethod.cs b/externals/clr/PureData/DynamicMethod.cs
deleted file mode 100644
index 749bb1a826362816313a210e174c1670087c776c..0000000000000000000000000000000000000000
--- a/externals/clr/PureData/DynamicMethod.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-using System.Reflection;
-using System.Reflection.Emit;
-
-namespace PureData
-{
-    public delegate void DynamicMethodBang(External target);
-    public delegate void DynamicMethodFloat(External target,float f);
-    public delegate void DynamicMethodSymbol(External target,Symbol s);
-    public delegate void DynamicMethodPointer(External target,Pointer p);
-    public delegate void DynamicMethodList(External target,Atom[] l);
-    public delegate void DynamicMethodAnything(External target,int i,Symbol s,Atom[] l);
-    public delegate void DynamicMethodObject(External target,int i,object o);
-
-    class DynamicMethods
-    {
-        private static Delegate CreateIntern(Delegate del, Type dyntype)
-        {
-            MethodInfo dynmethod = dyntype.GetMethod("Invoke");
-            ParameterInfo[] dynparms = dynmethod.GetParameters();
-            MethodInfo method = del.Method;
-
-#if DEBUG
-            if (dynmethod.ReturnType != typeof(void)) throw new ArgumentException("Return type must be void");
-
-            ParameterInfo[] parms = method.GetParameters();
-            int numparms = parms.Length;
-
-            if (dynparms.Length != numparms + 1) throw new ArgumentException("Number of parameters don't match");
-
-            for (int i = 0; i < numparms; ++i)
-                if (dynparms[i + 1].ParameterType != parms[i].ParameterType) throw new ArgumentException("Parameter types don't match");
-#endif
-
-            Type[] argtypes = new Type[dynparms.Length];
-            for (int i = 0; i < dynparms.Length; ++i)
-                argtypes[i] = dynparms[i].ParameterType;
-
-            // Create dynamic method and obtain its IL generator to inject code.
-            DynamicMethod dynam = new DynamicMethod("dummy", typeof(void), argtypes, typeof(DynamicMethods));
-            ILGenerator il = dynam.GetILGenerator();
-
-            #region IL Code generation
-            // If method isn't static push target instance on top of stack.
-            if (!method.IsStatic)
-                // Argument 0 of dynamic method is target instance.
-                il.Emit(OpCodes.Ldarg_0);
-
-            // Push parameters onto the stack
-            for (int i = 0; i < dynparms.Length - 1; ++i)
-                il.Emit(OpCodes.Ldarg, i + 1);
-
-            // Perform actual call.
-            // If method is not final a callvirt is required otherwise a normal call will be emitted.
-            il.Emit(method.IsFinal ? OpCodes.Call : OpCodes.Callvirt, method);
-
-            // Emit return opcode.
-            il.Emit(OpCodes.Ret);
-            #endregion
-
-            return dynam.CreateDelegate(dyntype);
-        }
-
-        #region Specialized DynamicMethod makers
-        public static DynamicMethodBang Create(Public.MethodBang method)
-        {
-            return (DynamicMethodBang)CreateIntern(method, typeof(DynamicMethodBang));
-        }
-
-        public static DynamicMethodFloat Create(Public.MethodFloat method)
-        {
-            return (DynamicMethodFloat)CreateIntern(method,typeof(DynamicMethodFloat));
-        }
-
-        public static DynamicMethodSymbol Create(Public.MethodSymbol method)
-        {
-            return (DynamicMethodSymbol)CreateIntern(method,typeof(DynamicMethodSymbol));
-        }
-
-        public static DynamicMethodPointer Create(Public.MethodPointer method)
-        {
-            return (DynamicMethodPointer)CreateIntern(method,typeof(DynamicMethodPointer));
-        }
-
-        public static DynamicMethodList Create(Public.MethodList method)
-        {
-            return (DynamicMethodList)CreateIntern(method,typeof(DynamicMethodList));
-        }
-
-        public static DynamicMethodAnything Create(Public.MethodAnything method)
-        {
-            return (DynamicMethodAnything)CreateIntern(method,typeof(DynamicMethodAnything));
-        }
-
-        public static DynamicMethodObject Create(Public.MethodObject method)
-        {
-            return (DynamicMethodObject)CreateIntern(method, typeof(DynamicMethodObject));
-        }
-        #endregion
-    }
-}
diff --git a/externals/clr/PureData/PureData.cs b/externals/clr/PureData/PureData.cs
deleted file mode 100644
index 0174317918b6b293b850ad0ace115f364b8dca0f..0000000000000000000000000000000000000000
--- a/externals/clr/PureData/PureData.cs
+++ /dev/null
@@ -1,670 +0,0 @@
-using System;
-using System.Runtime.CompilerServices; // for extern import
-using System.Runtime.InteropServices; // for structures
-using System.Reflection;
-using System.Collections;
-
-namespace PureData
-{
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ClassPtr
-    {
-        private IntPtr ptr;
-
-        public void Clear() { ptr = IntPtr.Zero; }
-        public bool Valid() { return ptr != IntPtr.Zero; }
-
-        public override string ToString() { return ptr.ToString(); }
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ExternalPtr
-    {
-        private IntPtr ptr;
-
-        public void Clear() { ptr = IntPtr.Zero; }
-        public bool Valid() { return ptr != IntPtr.Zero; }
-
-        public override string ToString() { return ptr.ToString(); }
-    }
-
-    // data passed from/to native side
-    [StructLayout(LayoutKind.Sequential)]
-    internal class PassedData
-    {
-        public Class klass;
-        public External ext;
-        public object obj;
-    }
-
-    // PD core functions
-    public class Internal 
-    {
-        // the ExternalPtr when initializing an External instance
-        internal static ExternalPtr extptr;
-
-        internal static PassedData pass;
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static Symbol SymGen(string sym);        
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static string SymEval(Symbol sym);        
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, Symbol sel, Symbol to_sel);
-
-        // map to data member
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, ref float f); 
-
-        // map to data member
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, ref Symbol s);
-
-        // map to data member
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj,ref Pointer f);
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, Symbol type); // create proxy inlet (typed)
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj); // create proxy inlet (anything)
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddOutlet(ExternalPtr obj, Symbol type);
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, float f);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Symbol s);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Pointer p);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Atom a);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Symbol s, Atom[] l);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void OutletEx(ExternalPtr obj, int n, object o);
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Bind(ExternalPtr obj, Symbol dst);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Unbind(ExternalPtr obj, Symbol dst);
-    }
-
-
-    public abstract class Public
-        : Internal
-    {
-        // to be returned by Setup function
-        protected enum ClassType { Default = 0, PD = 1, GObj = 2, Patchable = 3, NoInlet = 8 }
-
-        // --------------------------------------------------------------------------
-
-        public delegate void MethodBang();
-        public delegate void MethodFloat(float f);
-        public delegate void MethodSymbol(Symbol s);
-        public delegate void MethodPointer(Pointer p);
-        public delegate void MethodList(Atom[] lst);
-        public delegate void MethodAnything(int inlet, Symbol tag, Atom[] lst);
-        public delegate void MethodObject(int inlet, object o);
-
-        // --------------------------------------------------------------------------
-
-        public readonly static Symbol _ = new Symbol("");
-        public readonly static Symbol _bang = new Symbol("bang");
-        public readonly static Symbol _float = new Symbol("float");
-        public readonly static Symbol _symbol = new Symbol("symbol");
-        public readonly static Symbol _pointer = new Symbol("pointer");
-        public readonly static Symbol _list = new Symbol("list");
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        public extern static void Post(string message);
-
-        public static void Post(string format, object arg0) { Post(String.Format(format, arg0)); }
-        public static void Post(string format, object arg0, object arg1) { Post(String.Format(format, arg0, arg1)); }
-        public static void Post(string format, object arg0, object arg1, object arg2) { Post(String.Format(format, arg0, arg1, arg2)); }
-        public static void Post(string format, params object[] args) { Post(String.Format(format, args)); }
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        public extern static void PostError(string message);
-
-        public static void PostError(string format, object arg0) { PostError(String.Format(format, arg0)); }
-        public static void PostError(string format, object arg0, object arg1) { PostError(String.Format(format, arg0, arg1)); }
-        public static void PostError(string format, object arg0, object arg1, object arg2) { PostError(String.Format(format, arg0, arg1, arg2)); }
-        public static void PostError(string format, params object[] args) { PostError(String.Format(format, args)); }
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        public extern static void PostVerbose(int lvl, string message);
-
-        public static void PostVerbose(int lvl, string format, object arg0) { PostVerbose(lvl, String.Format(format, arg0)); }
-        public static void PostVerbose(int lvl, string format, object arg0, object arg1) { PostVerbose(lvl, String.Format(format, arg0, arg1)); }
-        public static void PostVerbose(int lvl, string format, object arg0, object arg1, object arg2) { PostVerbose(lvl, String.Format(format, arg0, arg1, arg2)); }
-        public static void PostVerbose(int lvl, string format, params object[] args) { PostVerbose(lvl, String.Format(format, args)); }
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        public extern static string SearchPath(string file);
-    }
-
-
-    public sealed class Class
-        : Public
-    {
-        // PD class pointer
-        private readonly ClassPtr ptr;
-
-        // class type
-        private Type extclass;
-
-        // --------------------------------------------------------------------------        
-
-        // simple methods for inlet 0
-        private DynamicMethodBang m_bang = null;
-        private DynamicMethodFloat m_float = null;
-        private DynamicMethodSymbol m_symbol = null;
-        private DynamicMethodPointer m_pointer = null;
-        private DynamicMethodList m_list = null;
-        private DynamicMethodAnything m_anything = null;
-        private DynamicMethodObject m_object = null;
-
-        // --------------------------------------------------------------------------        
-
-        private static void ResizeArray(ref Hashtable[] oldArray, int newSize)
-        {
-            int oldSize = oldArray.Length;
-            System.Type elementType = oldArray.GetType().GetElementType();
-            Hashtable[] newArray = (Hashtable[])System.Array.CreateInstance(elementType, newSize);
-            int preserveLength = System.Math.Min(oldSize, newSize);
-            if (preserveLength > 0)
-                System.Array.Copy(oldArray, newArray, preserveLength);
-            oldArray = newArray;
-        }
-
-        private struct MapValue
-        {
-            public MapValue(Kind k,Delegate d) { this.k = k; this.d = d; }
-
-            public Kind k;
-            public Delegate d;
-        }
-
-        private Hashtable[] m_map = new Hashtable[0];
-
-        // --------------------------------------------------------------------------        
-
-        public override string ToString()
-        {
-            return extclass.Name;
-        }
-
-        // --------------------------------------------------------------------------        
-
-        private enum Kind { k_bang, k_float, k_symbol, k_pointer, k_list, k_anything, k_object }
-
-        private enum MethodFlags { f_none = 0,f_bang = 0x01, f_float = 0x02, f_symbol = 0x04, f_pointer = 0x08, f_list = 0x10, f_anything = 0x20 }
-
-        private static MethodFlags methodflags;
-
-
-        // --------------------------------------------------------------------------        
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        private extern static bool RegisterClass(ClassPtr ptr, Symbol sym, ClassType cflags, MethodFlags mflags);
-
-        private void AddMethodIntern(int inlet, Symbol sel, Kind k, Delegate d)
-        {
-            // add to map
-            if (m_map.Length <= inlet) ResizeArray(ref m_map, inlet + 1);
-            Hashtable h = m_map[inlet];
-            if(h == null) m_map[inlet] = h = new Hashtable(); 
-            h[sel] = new MapValue(k, d);
-
-            methodflags |= MethodFlags.f_anything;
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodBang d)
-        {
-            DynamicMethodBang dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _bang)
-            {
-                m_bang = dyn;
-                methodflags |= MethodFlags.f_bang;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_bang, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodFloat d)
-        {
-            DynamicMethodFloat dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _float)
-            {
-                m_float = dyn;
-                methodflags |= MethodFlags.f_float;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_float, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodSymbol d)
-        {
-            DynamicMethodSymbol dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _symbol)
-            {
-                m_symbol = dyn;
-                methodflags |= MethodFlags.f_symbol;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_symbol, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodPointer d)
-        {
-            DynamicMethodPointer dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _pointer)
-            {
-                m_pointer = dyn;
-                methodflags |= MethodFlags.f_pointer;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_pointer, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodList d)
-        {
-            DynamicMethodList dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _list)
-            {
-                m_list = dyn;
-                methodflags |= MethodFlags.f_list;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_list, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodAnything d)
-        {
-            DynamicMethodAnything dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _)
-            {
-                m_anything = dyn;
-                methodflags |= MethodFlags.f_anything;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_anything, dyn);
-        }
-
-        public void AddMethod(int inlet, MethodObject d)
-        {
-            DynamicMethodObject dyn = DynamicMethods.Create(d);
-            m_object = dyn;
-            methodflags |= MethodFlags.f_anything;
-        }
-
-        // --------------------------------------------------------------------------        
-
-        private Class(ClassPtr p,Type c)
-        {
-            ptr = p;
-            extclass = c;
-        }
-
-        private delegate void DelegateClass(ClassPtr ptr, Symbol sym);
-        private static void NewClass(ClassPtr ptr, Symbol sym)
-        {
-            Internal.pass.klass = null;
-
-            try 
-            {
-                string name = sym.ToString();
-
-                // load assembly according to name
-                string file = SearchPath(name + ".dll");
-                if (file.Length == 0) return; // throw new ArgumentException("Assembly file " + name + " not found");
-                Assembly assembly = Assembly.LoadFile(file);
-                if (assembly == null) return; // throw new ArgumentException("Assembly " + name + " could not be loaded");
-                Type exttp = assembly.GetType(name);
-                if (exttp == null) throw new ArgumentException("Class " + name + " could not be found");
-
-                Class klass = new Class(ptr, exttp);
-
-                // create dummy external
-                ConstructorInfo ctor = exttp.GetConstructor(System.Type.EmptyTypes);
-                if (ctor == null) throw new MissingMethodException("External class must have a default constructor");
-
-                Internal.pass.klass = klass;
-                Internal.extptr.Clear();
-
-                External dummy = (External)ctor.Invoke(null);
-
-                // reset flags
-                methodflags = MethodFlags.f_none;
-
-                // call Setup method
-                MethodInfo setup = exttp.GetMethod("Setup",BindingFlags.NonPublic|BindingFlags.Static,null, new Type[1] { exttp },null);
-                if (setup == null) throw new MissingMethodException("External class must have a Setup function");
-
-                object ret = setup.Invoke(exttp, new object[1] { dummy });
-                ClassType classflags;
-                try { classflags = (ClassType)ret; }
-                catch { classflags = ClassType.Default; }
-
-                // set callbacks
-                RegisterClass(ptr, sym, classflags, methodflags);
-            }
-            catch (Exception exc) 
-            {
-                Internal.pass.klass = null;
-                PostError(exc.ToString());
-            }
-        }
-
-        private delegate void DelegateNew(ExternalPtr ptr,AtomList args);
-        private static void NewInstance(ExternalPtr ptr,AtomList args)
-        {
-            External instance;
-            
-            Class cl = Internal.pass.klass; // set by native side
-            Internal.extptr = ptr;
-
-//            Post("CLASS-NEW {0}",cl);
-            try 
-            {
-                // TODO: create dynamic delegate for that....
-                System.Reflection.ConstructorInfo m = cl.extclass.GetConstructor(new Type[1] { typeof(Atom[]) });
-                if (m != null)
-                    instance = (External)m.Invoke(new object[1] { (Atom[])args });
-                else
-                {
-                    // search for the argument-less constructor... it must exist, we searched before
-                    m = cl.extclass.GetConstructor(System.Type.EmptyTypes);
-                    instance = (External)m.Invoke(null);
-                }
-            }
-            catch (Exception exc) 
-            {
-                instance = null;
-                PostError(exc.ToString()); 
-            }
-
-#if DEBUG
-            Internal.extptr.Clear();
-#endif
-
-            Internal.pass.ext = instance; // back to native
-         }
-
-        private delegate void DelegateBang();
-        private static void CallBang()
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_bang(e); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateFloat(float f);
-        private static void CallFloat(float f)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_float(e, f); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateSymbol(Symbol s);
-        private static void CallSymbol(Symbol s)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_symbol(e, s); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegatePointer(Pointer p);
-        private static void CallPointer(Pointer p)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_pointer(e, p); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateList(AtomList l);
-        private static void CallList(AtomList l)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_list(e, (Atom[])l); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateAnything(int inlet, Symbol s, AtomList l);
-        private static void CallAnything(int inlet, Symbol s, AtomList l)
-        {
-//            Post("CLASS-ANYTHING {0}->{1}:{2}", inlet,s,l);
-
-            try {
-                External e = Internal.pass.ext;
-                Class c = e.klass;
-
-                Hashtable h;
-                try { h = (Hashtable)c.m_map[inlet]; }
-                catch (IndexOutOfRangeException) { h = null; }
-
-                if(h != null)
-                {
-                    object fnd = h[s];
-                    if (fnd != null)
-                    {
-                        MapValue mv = (MapValue)fnd;
-                        switch(mv.k)
-                        {
-                            case Kind.k_bang:
-                                {
-                                    ((DynamicMethodBang)mv.d)(e);
-                                    return;
-                                }
-                            case Kind.k_float:
-                                {
-                                    float f = l.Count > 0 ? (float)l[0] : 0;
-                                    ((DynamicMethodFloat)mv.d)(e, f);
-                                    return;
-                                }
-                            case Kind.k_symbol:
-                                {
-                                    Symbol sym = l.Count > 0 ? (Symbol)l[0] : _;
-                                    ((DynamicMethodSymbol)mv.d)(e, sym);
-                                    return;
-                                }
-                            case Kind.k_pointer:
-                                {
-                                    Pointer p = l.Count > 0 ? (Pointer)l[0] : new Pointer();
-                                    ((DynamicMethodPointer)mv.d)(e, p);
-                                    return;
-                                }
-                            case Kind.k_list:
-                                ((DynamicMethodList)mv.d)(e,(Atom[])l);
-                                return;
-                            case Kind.k_anything:
-                                ((DynamicMethodAnything)mv.d)(e,inlet,s,(Atom[])l);
-                                return;
-                            default:
-                                throw new NotImplementedException("Selector " + s.ToString() + " not handled");
-                        }
-                    }
-                }
-
-                // no explicit method found...
-                c.m_anything(e, inlet, s, (Atom[])l); 
-            }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateObject(int inlet);
-        private static void CallObject(int inlet)
-        {
-//            Post("CLASS-OBJECT {0}", inlet);
-
-            External e = Internal.pass.ext;
-            try { e.klass.m_object(e, inlet, Internal.pass.obj); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        // --------------------------------------------------------------------------        
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        private extern static void Register(DelegateClass d_class, DelegateNew d_new, DelegateBang d_bang, DelegateFloat d_float, DelegateSymbol d_symbol, DelegatePointer d_pointer, DelegateList d_list, DelegateAnything d_anything, DelegateObject d_object);
-
-        private static void Setup()
-        {
-            try
-            {
-                Internal.pass = new PassedData();
-
-                Register(
-                    new DelegateClass(NewClass),
-                    new DelegateNew(NewInstance),
-                    new DelegateBang(CallBang),
-                    new DelegateFloat(CallFloat),
-                    new DelegateSymbol(CallSymbol),
-                    new DelegatePointer(CallPointer),
-                    new DelegateList(CallList),
-                    new DelegateAnything(CallAnything),
-                    new DelegateObject(CallObject)
-                );
-            }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-    }
-
-   
-    // This is the base class for a PD/CLR external
-    public abstract class External
-        : Public
-    {
-        // PD object pointer
-        internal readonly ExternalPtr ptr;
-        // Class
-        internal readonly Class klass;
-
-        // --------------------------------------------------------------------------
-
-        protected External()
-        {
-            ptr = Internal.extptr;
-            klass = Internal.pass.klass;
-        }
-
-        public override string ToString()
-        {
-            return ptr.Valid()?klass.ToString():"???";
-        }
-
-        // --------------------------------------------------------------------------
-
-        protected static void AddMethod(int inlet, Symbol sel, MethodBang m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodFloat m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodSymbol m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodPointer m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodList m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodAnything m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, MethodObject m) { ((External)m.Target).klass.AddMethod(inlet, m); }
-
-        protected static void AddMethod(int inlet, MethodBang m) { AddMethod(inlet, _bang, m); }
-        protected static void AddMethod(int inlet, MethodFloat m) { AddMethod(inlet, _float, m); }
-        protected static void AddMethod(int inlet, MethodSymbol m) { AddMethod(inlet, _symbol, m); }
-        protected static void AddMethod(int inlet, MethodPointer m) { AddMethod(inlet, _pointer, m); }
-        protected static void AddMethod(int inlet, MethodList m) { AddMethod(inlet, _list, m); }
-        protected static void AddMethod(int inlet, MethodAnything m) { AddMethod(inlet, _, m); }
-
-        protected static void AddMethod(MethodBang m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodFloat m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodSymbol m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodPointer m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodList m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodAnything m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodObject m) { AddMethod(0, m); }
-
-        protected static void AddMethod(int inlet, string sel, MethodBang m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodFloat m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodSymbol m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodPointer m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodList m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodAnything m) { AddMethod(inlet, new Symbol(sel), m); }
-
-        // --------------------------------------------------------------------------
-
-        protected void AddInlet(ref float f) { Internal.AddInlet(ptr, ref f); } // map to data member
-        protected void AddInlet(ref Symbol s) { Internal.AddInlet(ptr, ref s); } // map to data member
-        protected void AddInlet(ref Pointer p) { Internal.AddInlet(ptr,ref p); } // map to data member
-//        protected void AddInlet(Symbol type) { Internal.AddInlet(ptr,type); } // create typed inlet
-        protected void AddInlet() { Internal.AddInlet(ptr); } // create inlet responding to any message
-        protected void AddInlet(Symbol sel, Symbol to_sel) { Internal.AddInlet(ptr, sel, to_sel); } // redirect messages to defined selector
-
-        // --------------------------------------------------------------------------
-
-        protected void AddOutlet(Symbol type) { Internal.AddOutlet(ptr, type); }
-
-        protected void AddOutletBang() { AddOutlet(_bang); }
-        protected void AddOutletFloat() { AddOutlet(_float); }
-        protected void AddOutletSymbol() { AddOutlet(_symbol); }
-        protected void AddOutletPointer() { AddOutlet(_pointer); }
-        protected void AddOutletList() { AddOutlet(_list); }
-        protected void AddOutletAnything() { AddOutlet(_); }
-
-        // --------------------------------------------------------------------------
-
-        protected void Outlet(int n) { Internal.Outlet(ptr,n); }
-        protected void Outlet(int n,float f) { Internal.Outlet(ptr,n,f); }
-        protected void Outlet(int n,Symbol s) { Internal.Outlet(ptr,n,s); }
-        protected void Outlet(int n,Pointer p) { Internal.Outlet(ptr,n,p); }
-        protected void Outlet(int n,Atom a) { Internal.Outlet(ptr,n,a); }
-        protected void Outlet(int n,Atom[] l) { Internal.Outlet(ptr,n,_list,l); }
-        protected void Outlet(int n,Symbol s,Atom[] l) { Internal.Outlet(ptr,n,s,l); }
-
-        protected void OutletEx(int n,object o) { Internal.OutletEx(ptr,n,o); }
-
-        // --------------------------------------------------------------------------
-
-        // bind to symbol
-        protected void Bind(Symbol sym) { Internal.Bind(ptr,sym); }
-        protected void Unbind(Symbol sym) { Internal.Unbind(ptr,sym); }
-
-        // send to receiver symbol
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        protected extern static void Send(Symbol sym,Atom a);
-
-        protected static void Send(Symbol sym) { Send(sym,_bang,new Atom[0]); }
-        protected static void Send(Symbol sym,float f) { Send(sym,new Atom(f)); }
-        protected static void Send(Symbol sym,Symbol s) { Send(sym,new Atom(s)); }
-        protected static void Send(Symbol sym,Pointer p) { Send(sym,new Atom(p)); }
-        protected static void Send(Symbol sym,Atom[] l) { Send(sym,_list,l); }
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        protected extern static void Send(Symbol sym,Symbol s,Atom[] l);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        protected extern static void SendEx(Symbol sym,object o);
-    }
-}
diff --git a/externals/clr/PureData/PureData.csproj b/externals/clr/PureData/PureData.csproj
deleted file mode 100644
index 2d65f14df7348adbf801397e338ca70beb5e23c9..0000000000000000000000000000000000000000
--- a/externals/clr/PureData/PureData.csproj
+++ /dev/null
@@ -1,108 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{0015D5E7-B0FB-4F06-B334-225447D1F992}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>PureData</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Library</OutputType>
-    <RootNamespace>PureData</RootNamespace>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>TRACE;DEBUG;NET_2_0</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>TRACE;DEBUG;NET_2_0</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-    <Reference Include="System.Xml">
-      <Name>System.XML</Name>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Atom.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="DynamicMethod.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="PureData.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/externals/clr/PureData/README.txt b/externals/clr/PureData/README.txt
deleted file mode 100644
index effae7556d9a36a697d326dc092c388d203bf10c..0000000000000000000000000000000000000000
--- a/externals/clr/PureData/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-to compile PureData.dll execute this command:
-
-Using the Mono C#: 
-mcs -unsafe+ -out:PureData.dll -target:library -optimize+ *.cs 
-
-For the Microsoft C# compiler, use csc instead of mcs
-
-
-put the PureData.dll anywhere in the PD search path (like e.g. the extra folder)
-
diff --git a/externals/clr/clr.cpp b/externals/clr/clr.cpp
deleted file mode 100644
index cef43ff838aa9605086e221e105d64305f597272..0000000000000000000000000000000000000000
--- a/externals/clr/clr.cpp
+++ /dev/null
@@ -1,703 +0,0 @@
-// mono
-extern "C" {
-#include <mono/jit/jit.h>
-#include <mono/metadata/object.h>
-#include <mono/metadata/environment.h>
-#include <mono/metadata/assembly.h>
-#include <mono/metadata/debug-helpers.h>
-#include <mono/metadata/class.h>
-#include <mono/metadata/metadata.h>
-
-// we need this one - it's in mono-devel
-gpointer mono_delegate_to_ftnptr (MonoDelegate *delegate);
-}
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4091)
-#endif
-#include <m_pd.h>
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _WIN32
-#include <io.h> // for _close
-#define close _close
-#else
-#include <unistd.h>
-#endif
-
-#include <map>
-#include <vector>
-#include <list>
-
-
-#define CALL __stdcall
-
-// main class library
-#define CORELIB "PureData"
-#define DLLEXT "dll"
-
-// symbol for inter-object messages
-#define SYM_OBJECT "clr-object"
-
-static t_symbol *sym_object;
-
-
-struct PassedData
-{
-	MonoObject object;
-
-	MonoObject *klass;	
-	MonoObject *ext;
-	MonoObject *obj;
-};
-
-struct AtomList
-{
-	AtomList(int c,t_atom *v): argc(c),argv(v) {}
-	
-	int argc;
-    t_atom *argv;
-};
-
-
-// cached mono data
-static MonoDomain *monodomain;
-static PassedData *clr_pass;
-
-// transforms a pointer (like MonoObject *) into a atom list
-template <class T>
-struct ObjectAtom
-{
-    // 64-bit safe...
-    enum { bitshift = 22,size = sizeof(T)*8/bitshift+1 };
-
-    t_atom msg[size];
-
-    ObjectAtom() {}
-
-    ObjectAtom(T o)
-    {
-        long ptr = (long)o;
-        for(int i = 0; i < size; ++i) {
-            SETFLOAT(msg+i,(int)(ptr&((1<<bitshift)-1)));
-            ptr >>= bitshift;
-        }
-    }
-
-    static bool check(int argc,const t_atom *argv)
-    {
-        if(argc != size) return false;
-        for(int i = 0; i < size; ++i)
-            if(argv[i].a_type != A_FLOAT) return false;
-        return true;
-    }
-
-    static T ptr(const t_atom *argv)
-    {
-        long ret = 0;
-        for(int i = size-1; i >= 0; --i)
-            ret = (ret<<bitshift)+(int)argv[i].a_w.w_float;
-        return (T)ret;
-    }
-
-    operator t_atom *() { return msg; }
-};
-
-
-enum Kind { k_bang, k_float, k_symbol, k_pointer, k_list, k_anything, k_object };
-
-
-// this is the class structure
-// holding the pd and mono class
-struct t_clr_class
-{
-    t_class *pd_class;
-    MonoObject *mono_class;
-};
-
-static t_class *proxy_class;
-
-struct t_instance;
-
-struct t_proxy
-{
-    t_object pd_obj; // myself
-    t_instance *parent; // parent object
-    int inlet;
-};
-
-typedef std::map<t_symbol *,t_clr_class *> ClrMap;
-// this holds the class name to class structure association
-static ClrMap clr_map;
-
-typedef std::vector<t_outlet *> OutletArr;
-typedef std::list<t_proxy *> ProxyList;
-
-// this is the class to be setup (while we are in the CLR static Main method)
-static t_clr_class *clr_setup_class = NULL;
-
-// inlet index... must start with 0 every time a new object is made
-static int clr_inlet;
-
-
-// this is the class instance object structure
-struct t_instance
-{
-    t_object pd_obj; // myself
-	t_clr_class *pd_class;
-    MonoObject *mono_obj;  // the mono class instance
-    guint32 mono_handle;  // the mono class instance
-
-	OutletArr *outlets;
-    ProxyList *proxies;
-};
-
-
-typedef void (__stdcall NewClass)(t_clr_class *c,const t_symbol *sym);
-typedef void (__stdcall NewInstance)(t_instance *p,AtomList l);
-typedef void (__stdcall CallBang)();
-typedef void (__stdcall CallFloat)(float f);
-typedef void (__stdcall CallSymbol)(const t_symbol *sym);
-typedef void (__stdcall CallPointer)(const t_gpointer *ptr);
-typedef void (__stdcall CallList)(AtomList l);
-typedef void (__stdcall CallAnything)(int inlet,const t_symbol *sym,AtomList l);
-typedef void (__stdcall CallObject)(int inlet);
-
-static NewClass *newclass = NULL;
-static NewInstance *newinstance = NULL;
-static CallBang *callbang = NULL;
-static CallFloat *callfloat = NULL;
-static CallSymbol *callsymbol = NULL;
-static CallPointer *callpointer = NULL;
-static CallList *calllist = NULL;
-static CallAnything *callanything = NULL;
-static CallObject *callobject = NULL;
-
-#if 0
-// Print error message given by exception
-static void error_exc(char* txt,char* cname,MonoObject* exc)
-{
-    MonoMethod* m = mono_method_desc_search_in_class(clr_desc_tostring,mono_get_exception_class());
-    assert(m);
-    m = mono_object_get_virtual_method(exc,m);
-    assert(m);
-    MonoString* str = (MonoString*)mono_runtime_invoke(m,exc,NULL,NULL);
-    assert(str);
-    error("CLR class %s: %s",txt,cname);
-    error(mono_string_to_utf8(str));
-}
-#endif
-
-
-static void clr_method_bang(t_instance *x) 
-{
-    assert(x);
-	assert(callbang);
-	clr_pass->ext = x->mono_obj;
-	callbang();
-}
-
-static void clr_method_float(t_instance *x,t_float f) 
-{
-    assert(x);
-	assert(callfloat);
-	clr_pass->ext = x->mono_obj;
-	callfloat(f);
-}
-
-static void clr_method_symbol(t_instance *x,t_symbol *s) 
-{
-    assert(x);
-	assert(callsymbol);
-	clr_pass->ext = x->mono_obj;
-	callsymbol(s);
-}
-
-static void clr_method_pointer(t_instance *x,t_gpointer *p)
-{
-    assert(x);
-	assert(callpointer);
-	clr_pass->ext = x->mono_obj;
-	callpointer(p);
-}
-
-static void clr_method_list(t_instance *x,t_symbol *,int argc,t_atom *argv)
-{
-    assert(x);
-	assert(calllist);
-	clr_pass->ext = x->mono_obj;
-	calllist(AtomList(argc,argv));
-}
-
-static void call_anything(t_instance *x,int inlet,t_symbol *s,int argc,t_atom *argv)
-{
-    assert(x);
-	clr_pass->ext = x->mono_obj;
-	if(s == sym_object && ObjectAtom<guint32>::check(argc,argv)) {
-		assert(callobject);
-		guint32 hnd = ObjectAtom<guint32>::ptr(argv);
-		clr_pass->obj = mono_gchandle_get_target(hnd);
-		callobject(inlet);
-	}
-	else {
-		assert(callanything);
-		callanything(inlet,s,AtomList(argc,argv));
-	}
-}
-
-static void clr_method_anything(t_instance *x,t_symbol *s,int argc,t_atom *argv) { call_anything(x,0,s,argc,argv); }
-static void clr_method_proxy(t_proxy *x,t_symbol *s,int argc,t_atom *argv) { call_anything(x->parent,x->inlet,s,argc,argv); }
-
-static void CALL PD_Post(MonoString *str)
-{
-	post("%s",mono_string_to_utf8(str));	
-}
-
-static void CALL PD_PostError(MonoString *str)
-{
-	error("%s",mono_string_to_utf8(str));	
-}
-
-static void CALL PD_PostVerbose(int lvl,MonoString *str)
-{
-	verbose(lvl,"%s",mono_string_to_utf8(str));	
-}
-
-static void *CALL PD_SymGen(MonoString *str)
-{
-    assert(str);
-	return gensym(mono_string_to_utf8(str));	
-}
-
-static MonoString *CALL PD_SymEval(t_symbol *sym)
-{
-    assert(sym);
-    return mono_string_new(monodomain,sym->s_name);
-}
-
-
-static void CALL PD_AddInletAlias(t_instance *obj,t_symbol *sel,t_symbol *to_sel)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = inlet_new(&obj->pd_obj,&obj->pd_obj.ob_pd,sel,to_sel);
-    assert(in);
-}
-
-static void CALL PD_AddInletFloat(t_instance *obj,float *f)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = floatinlet_new(&obj->pd_obj,f);
-    assert(in);
-}
-
-static void CALL PD_AddInletSymbol(t_instance *obj,t_symbol **s)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = symbolinlet_new(&obj->pd_obj,s);
-    assert(in);
-}
-
-/*
-static void CALL PD_AddInletPointer(t_clr *obj,t_gpointer *p)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = pointerinlet_new(&obj->pd_obj,p);
-    assert(in);
-}
-*/
-
-static void CALL PD_AddInletProxyTyped(t_instance *obj,t_symbol *type)
-{
-    assert(obj);
-    t_proxy *p = (t_proxy *)pd_new(proxy_class);
-    p->parent = obj;
-    p->inlet = ++clr_inlet;
-    if(!obj->proxies) obj->proxies = new ProxyList;
-    obj->proxies->push_back(p);
-    t_inlet *in = inlet_new(&obj->pd_obj,&p->pd_obj.ob_pd,type,type);
-    assert(in);
-}
-
-static void CALL PD_AddInletProxy(t_instance *obj) { PD_AddInletProxyTyped(obj,NULL); }
-
-
-static void CALL PD_AddOutlet(t_instance *obj,t_symbol *type)
-{
-    assert(obj);
-    t_outlet *out = outlet_new(&obj->pd_obj,type);
-    assert(out);
-    if(!obj->outlets) obj->outlets = new OutletArr;
-    obj->outlets->push_back(out);
-}
-
-static void CALL PD_OutletBang(t_instance *obj,int n)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_bang((*obj->outlets)[n]);
-}
-
-static void CALL PD_OutletFloat(t_instance *obj,int n,float f)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_float((*obj->outlets)[n],f);
-}
-
-static void CALL PD_OutletSymbol(t_instance *obj,int n,t_symbol *s)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_symbol((*obj->outlets)[n],s);
-}
-
-static void CALL PD_OutletPointer(t_instance *obj,int n,t_gpointer *p)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_pointer((*obj->outlets)[n],p);
-}
-
-static void CALL PD_OutletAtom(t_instance *obj,int n,t_atom l)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    t_outlet* out = (*obj->outlets)[n];
-    switch(l.a_type) {
-        case A_FLOAT: outlet_float(out,l.a_w.w_float); break;
-        case A_SYMBOL: outlet_symbol(out,l.a_w.w_symbol); break;
-        case A_POINTER: outlet_pointer(out,l.a_w.w_gpointer); break;
-        default: assert(false);
-    }
-}
-
-static void CALL PD_OutletAnything(t_instance *obj,int n,t_symbol *s,MonoArray *l)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-//    assert(mono_object_get_class(&l->obj) == clr_atom);
-    outlet_anything((*obj->outlets)[n],s,mono_array_length(l),mono_array_addr(l,t_atom,0));
-}
-
-
-static void CALL PD_OutletObject(t_instance *obj,int n,MonoObject *o)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-	guint32 hnd = mono_gchandle_new(o,TRUE);
-    ObjectAtom<guint32> oa(hnd);
-    outlet_anything((*obj->outlets)[n],sym_object,oa.size,oa);
-	mono_gchandle_free(hnd);
-}
-
-
-static void CALL PD_SendAtom(t_symbol *dst,t_atom a)
-{
-    void *cl = dst->s_thing;
-    if(cl) pd_forwardmess((t_class **)cl,1,&a);
-}
-
-static void CALL PD_SendAnything(t_symbol *dst,t_symbol *s,MonoArray *l)
-{
-    void *cl = dst->s_thing;
-//    assert(mono_object_get_class(&l->obj) == clr_atom);
-    if(cl) pd_typedmess((t_class **)cl,s,mono_array_length(l),mono_array_addr(l,t_atom,0));
-}
-
-static void CALL PD_SendObject(t_symbol *dst,MonoObject *o)
-{
-    void *cl = dst->s_thing;
-//    assert(mono_object_get_class(&l->obj) == clr_atom);
-    if(cl) {
-		guint32 hnd = mono_gchandle_new(o,TRUE);
-        ObjectAtom<guint32> oa(hnd);
-        pd_typedmess((t_class **)cl,sym_object,oa.size,oa);
-		mono_gchandle_free(hnd);
-    }
-}
-
-static MonoString *CALL PD_SearchPath(MonoString *file)
-{
-	char *filestr = mono_string_to_utf8(file);
-    char dirbuf[MAXPDSTRING],*nameptr;
-    // search for classname.dll in the PD path
-    int fd;
-	if ((fd = open_via_path("",filestr,"",dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0) {
-    // found
-		if(dirbuf != nameptr) { 
-			// fix for the fact that open_via_path doesn't return a path, when it's found in .
-            strcat(dirbuf,"/");
-			strcat(dirbuf,filestr);
-
-//            close(fd);  // strange - we get an assertion failure here...
-		}
-		return mono_string_new(monodomain,dirbuf);
-	}
-	else
-		return mono_string_new(monodomain,"");
-}
-
-
-void *clr_new(t_symbol *classname, int argc, t_atom *argv)
-{
-	// find class name in map
-    ClrMap::iterator it = clr_map.find(classname);
-    if(it == clr_map.end()) {
-        error("CLR - class %s not found",classname->s_name);
-        return NULL;
-    }
-
-    t_clr_class *clss = it->second;
-
-    // make instance
-    t_instance *x = (t_instance *)pd_new(clss->pd_class);
-	x->pd_class = clss;
-    x->outlets = NULL;
-    x->proxies = NULL;
-
-    clr_inlet = 0;
-
-	assert(newinstance);
-
-	clr_pass->klass = clss->mono_class;
-	newinstance(x,AtomList(argc,argv));
-	x->mono_obj = clr_pass->ext;
-#ifdef _DEBUG
-	clr_pass->klass = NULL;
-#endif
-
-	if(x->mono_obj) {
-		x->mono_handle = mono_gchandle_new(x->mono_obj,TRUE);
-		return x;
-	}
-	else {
-        pd_free((t_pd *)x);
-        error("CLR - class %s could not be instantiated",classname->s_name);
-        return NULL;
-	}
-}
-
-void clr_free(t_instance *obj)
-{
-	mono_gchandle_free(obj->mono_handle);
-
-    if(obj->outlets) delete obj->outlets;
-
-    if(obj->proxies) {
-        for(ProxyList::iterator it = obj->proxies->begin(); it != obj->proxies->end(); ++it) pd_free((t_pd *)*it);
-        delete obj->proxies;
-    }
-}
-
-static void CALL PD_Register(MonoDelegate *d_class,MonoDelegate *d_new,MonoDelegate *d_bang,MonoDelegate *d_float,MonoDelegate *d_symbol,MonoDelegate *d_pointer,MonoDelegate *d_list,MonoDelegate *d_anything,MonoDelegate *d_object)
-{
-	newclass = (NewClass *)mono_delegate_to_ftnptr(d_class);
-	newinstance = (NewInstance *)mono_delegate_to_ftnptr(d_new);
-	callbang = (CallBang *)mono_delegate_to_ftnptr(d_bang);
-	callfloat = (CallFloat *)mono_delegate_to_ftnptr(d_float);
-	callsymbol = (CallSymbol *)mono_delegate_to_ftnptr(d_symbol);
-	callpointer = (CallPointer *)mono_delegate_to_ftnptr(d_pointer);
-	calllist = (CallList *)mono_delegate_to_ftnptr(d_list);
-	callanything = (CallAnything *)mono_delegate_to_ftnptr(d_anything);
-	callobject = (CallObject *)mono_delegate_to_ftnptr(d_object);
-}
-
-static bool CALL PD_RegisterClass(t_clr_class *c,t_symbol *classsym,int classflags,int methodflags)
-{
-	assert(c && !c->pd_class);
-    c->pd_class = class_new(classsym,(t_newmethod)clr_new,(t_method)clr_free, sizeof(t_instance), classflags, A_GIMME, A_NULL);
-	if(c->pd_class) {
-		if(methodflags&0x01) class_addbang(c->pd_class,clr_method_bang);
-		if(methodflags&0x02) class_addfloat(c->pd_class,clr_method_float);
-		if(methodflags&0x04) class_addsymbol(c->pd_class,clr_method_symbol);
-		if(methodflags&0x08) class_addpointer(c->pd_class,clr_method_pointer);
-		if(methodflags&0x10) class_addlist(c->pd_class,clr_method_list);
-		if(methodflags&0x20) class_addanything(c->pd_class,clr_method_anything);
-		return true;
-	}
-	else
-		return false;
-}
-
-
-static int classloader(char *dirname, char *classname, char *altname)
-{
-	if(!newclass) {
-		post("CLR - Entry point not set");
-		return 0;
-	}
-
-	t_symbol *classsym = gensym(classname);
-
-    t_clr_class *classdef = (t_clr_class *)getbytes(sizeof(t_clr_class));
-    // set all struct members to 0
-    memset(classdef,0,sizeof(t_clr_class));
-
-	newclass(classdef,classsym);
-	classdef->mono_class = clr_pass->klass;
-
-	if(!classdef->mono_class)
-	{
-		freebytes(classdef,sizeof(t_clr_class));
-		return 0;
-	}
-
-	mono_gchandle_new(classdef->mono_class,TRUE); // we don't remember the handle... won't be freed later
-
-    // put into map
-    clr_map[classsym] = classdef;
-
-    verbose(1,"CLR - Loaded class %s OK",classname);
-
-    return 1;
-}
-
-extern "C"
-#ifdef _MSC_VER
-__declspec(dllexport) 
-#endif
-void clr_setup(void)
-{
-#ifdef _WIN32
-    // set mono paths
-    const char *monopath = getenv("MONO_PATH");
-    if(!monopath) {
-        error("CLR - Please set the MONO_PATH environment variable to the folder of your MONO installation - CLR not loaded!");
-        return;
-    }
-    
-    char tlib[256],tconf[256];
-    strcpy(tlib,monopath);
-    strcat(tlib,"/lib");
-    strcpy(tconf,monopath);
-    strcat(tconf,"/etc");
-    mono_set_dirs(tlib,tconf);
-#endif
-
-    // try to find PureData.dll in the PD path
-    char dirbuf[MAXPDSTRING],*nameptr;
-    // search in the PD path
-    int fd;
-    if ((fd = open_via_path("",CORELIB,"." DLLEXT,dirbuf,&nameptr,MAXPDSTRING,1)) >= 0) {
-        if(dirbuf != nameptr) // fix for the fact that open_via_path doesn't return a path, when it's found in .
-            strcat(dirbuf,"/" CORELIB "." DLLEXT);
-//            close(fd);  // strange - we get an assertion failure here...
-    }
-	else {
-        error("CLR - " CORELIB "." DLLEXT " not found in path");
-		return;
-	}
-
-    try { 
-        monodomain = mono_jit_init(dirbuf); 
-    }
-    catch(...) {
-        monodomain = NULL;
-    }
-
-
-	if(monodomain) {
-        // look for PureData.dll
-        MonoAssembly *assembly = mono_domain_assembly_open (monodomain,dirbuf);
-	    if(!assembly) {
-		    error("CLR - assembly %s not found!",dirbuf);
-		    return;
-	    }
-
-	    MonoImage *image = mono_assembly_get_image(assembly);
-        assert(image);
-
-	    // add mono to C hooks
-
-        mono_add_internal_call("PureData.Internal::SymGen(string)", (const void *)PD_SymGen);
-        mono_add_internal_call("PureData.Internal::SymEval(PureData.Symbol)", (const void *)PD_SymEval);
-
-        mono_add_internal_call("PureData.Public::Post(string)",(const void *)PD_Post);
-        mono_add_internal_call("PureData.Public::PostError(string)",(const void *)PD_PostError);
-        mono_add_internal_call("PureData.Public::PostVerbose(int,string)",(const void *)PD_PostVerbose);
-        mono_add_internal_call("PureData.Public::SearchPath(string)",(const void *)PD_SearchPath);
-
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Symbol,PureData.Symbol)", (const void *)PD_AddInletAlias);
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,single&)", (const void *)PD_AddInletFloat);
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Symbol&)", (const void *)PD_AddInletSymbol);
-//        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Pointer&)", (const void *)PD_AddInletPointer);
-//        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_AddInletTyped);
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr)", (const void *)PD_AddInletProxy);
-
-        mono_add_internal_call("PureData.Internal::AddOutlet(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_AddOutlet);
-
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int)", (const void *)PD_OutletBang);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,single)", (const void *)PD_OutletFloat);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Symbol)", (const void *)PD_OutletSymbol);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Pointer)", (const void *)PD_OutletPointer);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Atom)", (const void *)PD_OutletAtom);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Symbol,PureData.Atom[])", (const void *)PD_OutletAnything);
-        mono_add_internal_call("PureData.Internal::OutletEx(PureData.ExternalPtr,int,object)", (const void *)PD_OutletObject);
-
-//        mono_add_internal_call("PureData.Internal::Bind(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_Bind);
-//        mono_add_internal_call("PureData.Internal::Unbind(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_Unbind);
-
-        mono_add_internal_call("PureData.Class::Register(PureData.Class/DelegateClass,PureData.Class/DelegateNew,PureData.Class/DelegateBang,PureData.Class/DelegateFloat,PureData.Class/DelegateSymbol,PureData.Class/DelegatePointer,PureData.Class/DelegateList,PureData.Class/DelegateAnything,PureData.Class/DelegateObject)", (const void *)PD_Register);
-        mono_add_internal_call("PureData.Class::RegisterClass(PureData.ClassPtr,PureData.Symbol,PureData.Public/ClassType,PureData.Class/MethodFlags)", (const void *)PD_RegisterClass);
-//        mono_add_internal_call("PureData.Class::AddMethodIntern(PureData.ClassPtr,int,PureData.Symbol,PureData.Class/Kind,System.Delegate)", (const void *)PD_AddMethodIntern);
-
-        mono_add_internal_call("PureData.External::Send(PureData.Symbol,PureData.Atom)", (const void *)PD_SendAtom);
-        mono_add_internal_call("PureData.External::Send(PureData.Symbol,PureData.Symbol,PureData.Atom[])", (const void *)PD_SendAnything);
-        mono_add_internal_call("PureData.External::SendEx(PureData.Symbol,object)", (const void *)PD_SendObject);
-
-
-		///////////////////////////////////////////////////////////
-
-        // make proxy class
-        proxy_class = class_new(gensym("clr proxy"),NULL,NULL,sizeof(t_proxy),CLASS_PD|CLASS_NOINLET,A_NULL);
-        class_addanything(proxy_class,clr_method_proxy);
-
-        // symbol for Mono object handling
-        sym_object = gensym(SYM_OBJECT);
-
-        // install loader hook
-        sys_register_loader(classloader);
-
-		///////////////////////////////////////////////////////////
-
-		// call static Class::Setup function
-        MonoClass *clr_class = mono_class_from_name(image,"PureData","Class");
-        assert(clr_class);
-        MonoMethodDesc *desc = mono_method_desc_new("::Setup()",FALSE);
-        MonoMethod *setup = mono_method_desc_search_in_class(desc,clr_class);
-
-        MonoObject *exc;
-        mono_runtime_invoke(setup,NULL,NULL,&exc);
-        if(exc)
-            post("CLR - setup function failed");
-        else {
-            // ready!
-	        post("CLR extension - (c)2006 Davide Morelli, Thomas Grill");
-        }
-
-		// necessary data should have been set by Setup
-		MonoClass *clr_internal = mono_class_from_name(image,"PureData","Internal");
-        assert(clr_internal);
-		MonoVTable *clr_internal_vt = mono_class_vtable(monodomain,clr_internal);
-		MonoClassField *fld = mono_class_get_field_from_name (clr_internal,"pass");
-		assert(fld);
-		mono_field_static_get_value(clr_internal_vt,fld,&clr_pass);
-		assert(clr_pass);
-    }
-    else
-        error("clr: mono domain couldn't be initialized!");
-}
diff --git a/externals/clr/makefile b/externals/clr/makefile
deleted file mode 100644
index 751bb09118eaf7680395562e0b72f011a5fa8c6f..0000000000000000000000000000000000000000
--- a/externals/clr/makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-current: cygwin
-
-clean: ; rm -f *.dll *.o
-
-cygwin: clr.dll	
-
-.SUFFIXES: .dll
-
-# where are the PD header files?
-# leave it blank if it is a system directory (like /usr/local/include), 
-# 	since gcc 3.2 complains about it
-
-PDPATH=/cygdrive/c/data/pd/pd-cvs
-MONOPATH=/cygdrive/c/programme/prog/mono
-
-CFLAGS = -DPD -mno-cygwin
-CFLAGS += -O2
-#CFLAGS += -g
-
-PDINC= -I$(PDPATH)/src
-PDLIB= $(PDPATH)/bin/pd.dll
-
-MONOINC = -I$(MONOPATH)/include -I$(MONOPATH)/include/glib-2.0 -I$(MONOPATH)/lib/glib-2.0/include
-MONOLIB = -L$(MONOPATH)/lib -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv -lmono
-
-.cpp.dll:
-	g++ $(CFLAGS) $(PDINC) $(MONOINC) -o $*.o -c $*.cpp
-	g++ --export-dynamic -shared -mno-cygwin $(PDLIB) -o $*.dll $*.o $(MONOLIB) -lm
diff --git a/externals/clr/makefile.darwin b/externals/clr/makefile.darwin
deleted file mode 100644
index ca33718f984bc62f48b8de37e73db300e0a400a3..0000000000000000000000000000000000000000
--- a/externals/clr/makefile.darwin
+++ /dev/null
@@ -1,35 +0,0 @@
-current: pd_darwin
-
-clean: ; rm -f *.o *.pd_darwin
-
-
-# ----------------------- Mac OSX -----------------------
-# You'll have to set the environment variable
-# MACOSX_DEPLOYMENT_TARGET=10.3
-
-pd_darwin: clr.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-
-PDPATH=/Users/thomas/Develop/pd/devel_0_39
-MONO=/Library/Frameworks/Mono.Framework
-
-CFLAGS += -DPD -O2 
-
-# where is the PD executable?
-PD=$(PDPATH)/bin/pd
-
-LDFLAGS=-framework Mono
-
-INCLUDE = -I$(MONO)/Headers -I$(MONO)/Headers/glib-2.0 -I$(MONO)/Libraries/glib-2.0/include -I$(PDPATH)/src
-
-# new version
-OPTIONS = -dynamiclib -undefined dynamic_lookup
-
-# old version
-#OPTIONS = -bundle -bundle_loader $(PD) 
-
-
-.cpp.pd_darwin:
-	g++ $(OPTIONS) $(INCLUDE) $(CFLAGS) $(LDFLAGS) -o $*.pd_darwin $*.cpp
diff --git a/externals/clr/test/AssemblyInfo.cs b/externals/clr/test/AssemblyInfo.cs
deleted file mode 100644
index 8783853a2aa4a8bbc39fbf81d27bef9817e3ddd8..0000000000000000000000000000000000000000
--- a/externals/clr/test/AssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// Allgemeine Informationen über eine Assembly werden über folgende Attribute 
-// gesteuert. Ändern Sie diese Attributswerte, um die Informationen zu modifizieren,
-// die mit einer Assembly verknüpft sind.
-//
-[assembly: AssemblyTitle("")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Versionsinformationen für eine Assembly bestehen aus folgenden vier Werten:
-//
-//      Hauptversion
-//      Nebenversion 
-//      Buildnummer
-//      Revision
-//
-// Sie können alle Werte oder die standardmäßige Revision und Buildnummer 
-// mit '*' angeben:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// Um die Assembly zu signieren, müssen Sie einen Schlüssel angeben. Weitere Informationen 
-// über die Assemblysignierung finden Sie in der Microsoft .NET Framework-Dokumentation.
-//
-// Mit den folgenden Attributen können Sie festlegen, welcher Schlüssel für die Signierung verwendet wird. 
-//
-// Hinweise: 
-//   (*) Wenn kein Schlüssel angegeben ist, wird die Assembly nicht signiert.
-//   (*) KeyName verweist auf einen Schlüssel, der im CSP (Crypto Service
-//       Provider) auf Ihrem Computer installiert wurde. KeyFile verweist auf eine Datei, die einen
-//       Schlüssel enthält.
-//   (*) Wenn die Werte für KeyFile und KeyName angegeben werden, 
-//       werden folgende Vorgänge ausgeführt:
-//       (1) Wenn KeyName im CSP gefunden wird, wird dieser Schlüssel verwendet.
-//       (2) Wenn KeyName nicht vorhanden ist und KeyFile vorhanden ist, 
-//           wird der Schlüssel in KeyFile im CSP installiert und verwendet.
-//   (*) Um eine KeyFile zu erstellen, können Sie das Programm sn.exe (Strong Name) verwenden.
-//       Wenn KeyFile angegeben wird, muss der Pfad von KeyFile
-//       relativ zum Projektausgabeverzeichnis sein:
-//       %Project Directory%\obj\<configuration>. Wenn sich KeyFile z.B.
-//       im Projektverzeichnis befindet, geben Sie das AssemblyKeyFile-Attribut 
-//       wie folgt an: [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) Das verzögern der Signierung ist eine erweiterte Option. Weitere Informationen finden Sie in der
-//       Microsoft .NET Framework-Dokumentation.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
diff --git a/externals/clr/test/test-help.pd b/externals/clr/test/test-help.pd
deleted file mode 100644
index a9313427deaf3e90d7a105513ce117685f5a6a57..0000000000000000000000000000000000000000
--- a/externals/clr/test/test-help.pd
+++ /dev/null
@@ -1,68 +0,0 @@
-#N canvas 617 153 866 845 12;
-#X floatatom 125 51 5 0 0 0 - - -;
-#X symbolatom 320 81 10 0 0 0 - - -;
-#X msg 536 45 msg one 2 three;
-#X obj 22 24 loadbang;
-#X floatatom 213 26 5 0 0 0 - - -;
-#X msg 213 52 1 \$1 3;
-#X msg 318 14 symbol abc;
-#X msg 328 42 symbol d3f;
-#X obj 21 54 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 535 82 set 1 7 8;
-#X msg 533 135 list;
-#X msg 532 164 list 1;
-#X msg 533 193 list abc;
-#X msg 528 251 list s e c o n d;
-#X obj 152 495 print OUT;
-#X floatatom 530 321 5 0 0 0 - - -;
-#X floatatom 290 173 5 0 0 0 - - -;
-#X msg 289 197 send \$1 b c;
-#X obj 407 497 print RECV1;
-#X obj 406 463 r receiver;
-#X floatatom 526 362 5 0 0 0 - - -;
-#X symbolatom 578 364 10 0 0 0 - - -;
-#X text 585 318 passive - bang to see;
-#X text 676 366 active;
-#X msg 526 386 1 2 3;
-#X floatatom 528 275 5 0 0 0 - - -;
-#X msg 589 386 turalu;
-#X msg 578 274 heyho;
-#X obj 151 443 test a b 5;
-#X obj 655 388 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 124 621 test;
-#X obj 124 696 test;
-#X obj 141 650 print A;
-#X obj 138 725 print B;
-#X msg 120 580 trigger;
-#X connect 0 0 28 0;
-#X connect 1 0 28 0;
-#X connect 2 0 28 0;
-#X connect 3 0 8 0;
-#X connect 4 0 5 0;
-#X connect 5 0 28 0;
-#X connect 6 0 1 0;
-#X connect 7 0 1 0;
-#X connect 8 0 28 0;
-#X connect 9 0 28 0;
-#X connect 10 0 28 0;
-#X connect 11 0 28 0;
-#X connect 12 0 28 0;
-#X connect 13 0 28 1;
-#X connect 15 0 28 2;
-#X connect 16 0 17 0;
-#X connect 17 0 28 0;
-#X connect 19 0 18 0;
-#X connect 20 0 28 3;
-#X connect 21 0 28 3;
-#X connect 24 0 28 3;
-#X connect 25 0 28 1;
-#X connect 26 0 28 3;
-#X connect 27 0 28 1;
-#X connect 28 0 14 0;
-#X connect 29 0 28 3;
-#X connect 30 0 31 0;
-#X connect 30 0 32 0;
-#X connect 31 0 33 0;
-#X connect 34 0 30 0;
diff --git a/externals/clr/test/test.cs b/externals/clr/test/test.cs
deleted file mode 100644
index cdb7ba74226e8ca6316e8442a7ef588dbeb4cdb2..0000000000000000000000000000000000000000
--- a/externals/clr/test/test.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-using Timing;
-using PureData;
-
-public class test:
-    External
-{
-    Atom[] args;
-    float farg;
-
-    // necessary (for now...)
-    public test() {}  
-
-    public test(Atom[] args)
-    {
-        Post("Test.ctor "+args.ToString());
-
-        // save args
-        this.args = args;
-
-        //        AddInlet(s_list,new PureData.Symbol("list2"));
-        AddInlet();
-        AddInlet(ref farg);
-        AddInlet();
-        AddOutletAnything();
-    }
-
-    // this function MUST exist
-    // returns void or ClassType
-    private static ClassType Setup(test obj)
-    {
-//        Post("Test.Setup");
-
-        AddMethod(obj.bang);
-        AddMethod(obj.MyFloat);
-        AddMethod(obj.symbol);
-        AddMethod(obj.list);
-        AddMethod(0,"set",obj.set);
-        AddMethod(0,"send",obj.send);
-        AddMethod(0,"trigger",obj.trigger);
-        AddMethod(0,obj.MyObject);
-        AddMethod(0,obj.MyAnything);
-        AddMethod(1,obj.MyFloat1);
-        AddMethod(1,obj.MyAny1);
-        return ClassType.Default;
-    }
-
-    protected void bang() 
-    { 
-        Post("Test-BANG "+farg.ToString()); 
-        Outlet(0);
-    }
-
-    protected virtual void MyFloat(float f) 
-    { 
-        Post("Test-FLOAT "+f.ToString()); 
-        Outlet(0,f);
-    }
-
-    protected virtual void MyFloat1(float f) 
-    { 
-        Post("Test-FLOAT1 "+f.ToString()); 
-    }
-
-    protected virtual void MyAny1(int ix,Symbol s,Atom[] l) 
-    { 
-        Post(ix.ToString()+": Test-ANY1 "+l.ToString()); 
-    }
-
-    protected virtual void symbol(Symbol s) 
-    { 
-        Post("Test-SYMBOL "+s.ToString()); 
-        Outlet(0,s);
-    }
-
-    protected virtual void list(Atom[] l) 
-    { 
-        Post("Test-LIST "+l.ToString()); 
-        Outlet(0,l);
-    }
-
-    protected virtual void set(int ix,Symbol s,Atom[] l) 
-    { 
-        Post("Test-SET "+l.ToString()); 
-        Outlet(0,new Symbol("set"),l);
-    }
-
-    protected virtual void send(int ix,Symbol s,Atom[] l) 
-    { 
-        Send(new Symbol("receiver"),l);
-    }
-
-    protected virtual void trigger() 
-    { 
-        OutletEx(0,"hey");
-    }
-
-    protected virtual void MyObject(int ix,object obj) 
-    { 
-        Post("OBJECT "+obj.ToString());
-        OutletEx(0,obj);
-    }
-
-    protected virtual void MyAnything(int ix,Symbol s,Atom[] l) 
-    { 
-        Post(ix.ToString()+": Test-("+s.ToString()+") "+l.ToString()); 
-        Outlet(0,s,l);
-    }
-}
diff --git a/externals/clr/test/test.csproj b/externals/clr/test/test.csproj
deleted file mode 100644
index 1b2d88890dc158a0cacc3419e542e7588b1f95c9..0000000000000000000000000000000000000000
--- a/externals/clr/test/test.csproj
+++ /dev/null
@@ -1,112 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{6CED2448-6407-4AF7-95B6-932D8118AF3D}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>Test</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Test</RootNamespace>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-    <UseVSHostingProcess>true</UseVSHostingProcess>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-    <UseVSHostingProcess>true</UseVSHostingProcess>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-    <Reference Include="System.Xml">
-      <Name>System.XML</Name>
-    </Reference>
-    <ProjectReference Include="..\PureData\PureData.csproj">
-      <Name>PureData</Name>
-      <Project>{0015D5E7-B0FB-4F06-B334-225447D1F992}</Project>
-      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="test.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="timing.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/externals/ffext/atox/Makefile b/externals/ffext/atox/Makefile
deleted file mode 100644
index fc76385caea707d68b1bad0798593895a6183465..0000000000000000000000000000000000000000
--- a/externals/ffext/atox/Makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/make
-
-DEBUG?=0
-OS := $(shell uname -s)
-
-ifeq ($(DEBUG),1)
-	CFLAGS += -O0 -g -ggdb -DDEBUG
-endif
-ifeq ($(OS),Linux)
-  PDSUF = .pd_linux
-  PDBUNDLEFLAGS = -shared -rdynamic
-  LDSOFLAGS = -lm
-endif
-ifeq ($(OS),Darwin)
-  PDSUF = .pd_darwin
-  INCLUDES = -I/Library/Frameworks/Tcl.framework/Headers
-  PDBUNDLEFLAGS = -bundle -flat_namespace -undefined dynamic_lookup
-  LDSOFLAGS = -lm
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  PDSUF = .dll
-  PDBUNDLEFLAGS = -shared
-  LDSOFLAGS = -lm
-endif
-
-INCLUDES =  -I../../pd/src -I/usr/include
-CFLAGS += -Wall -fPIC
-CFLAGS += -DPDSUF=\"$(PDSUF)\"
-ifeq ($(DEBUG),0)
-	CFLAGS += -O2
-endif
-
-all: atoi.pd_linux atof.pd_linux
-
-clean:
-	rm -f *.pd_linux *.o *~ atoi.c atof.c
-
-atoi.c: atox.c
-	sed -e s/ATOX/$*/g $< > $@
-
-atof.c: atox.c
-	sed -e s/ATOX/$*/g $< > $@
-
-.SUFFIXES: .c .o $(PDSUF)
-
-.o$(PDSUF):
-	$(CC) $(PDBUNDLEFLAGS) $(CFLAGS) $(INCLUDES) -o $*$(PDSUF) $< $(LDSOFLAGS)
diff --git a/externals/ffext/atox/atox.c b/externals/ffext/atox/atox.c
deleted file mode 100644
index 6097eb99a5c8e6c9ef60584f7cec9cabfbdcc463..0000000000000000000000000000000000000000
--- a/externals/ffext/atox/atox.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) 2005 Federico Ferri.
- * Release under the terms of GPL license.
- * Based on PureData by Miller Puckette and others. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "m_pd.h"
-
-#define buf_sz MAXPDSTRING
-
-typedef struct
-{
-    t_object       x_obj;
-    t_outlet      *x_out2;
-} t_ATOX;
-
-static t_class *ATOX_class;
-
-static void ATOX_out(t_ATOX *x, t_float f)
-{
-    outlet_float(x->x_obj.ob_outlet, f);
-}
-
-static void ATOX_float(t_ATOX *x, t_float f)
-{
-    ATOX_out(x, f);
-}
-
-static void ATOX_symbol(t_ATOX *x, t_symbol *s)
-{
-    char buf[buf_sz];
-    t_atom a;
-    SETSYMBOL(&a, s);
-    atom_string(&a, buf, buf_sz);
-    ATOX_out(x, ATOX(buf));
-}
-
-static void *ATOX_new(t_floatarg f)
-{
-    t_ATOX *x = (t_ATOX *)pd_new(ATOX_class);
-    outlet_new((t_object *)x, &s_float);
-    return (x);
-}
-
-void ATOX_setup(void)
-{
-    ATOX_class = class_new(gensym("ATOX"),
-			      (t_newmethod)ATOX_new, 0,
-			      sizeof(t_ATOX), CLASS_DEFAULT,
-			      A_DEFSYMBOL, 0);
-    class_addfloat(ATOX_class, ATOX_float);
-    class_addsymbol(ATOX_class, ATOX_symbol);
-}
diff --git a/externals/ffext/composer/AUTHORS b/externals/ffext/composer/AUTHORS
deleted file mode 100644
index cecde9a2ddc76f24be047bdfc9e864a18ddef2fb..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/AUTHORS
+++ /dev/null
@@ -1,4 +0,0 @@
-Authors of composer.
-
-Federico Ferri <mescalinum@gmail.com>
-
diff --git a/externals/ffext/composer/COPYING b/externals/ffext/composer/COPYING
deleted file mode 100644
index f47bd6d7af23de623dc5569d5ba7757f005bf1ce..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/COPYING
+++ /dev/null
@@ -1,280 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
diff --git a/externals/ffext/composer/Common.hpp b/externals/ffext/composer/Common.hpp
deleted file mode 100644
index f5d1e30710898c72205a0dcd2f52132950a80370..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Common.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef COMPOSER_COMMON_H_INCLUDED
-#define COMPOSER_COMMON_H_INCLUDED
-
-#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
-#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
-
-//get rid of the "deprecated conversion from string constant to char*'" warning
-#define sys_gui(x) sys_gui(const_cast<char*>(x))
-#define sys_vgui(format, args...) sys_vgui(const_cast<char*>(format), ## args)
-#define gensym(x) gensym(const_cast<char*>(x))
-#define binbuf_addv(b, format, args...) binbuf_addv(b, const_cast<char*>(format), ## args)
-#define WRAP(v,w) (((v)<0)?(((w)-1)-((-(v)-1)%(w))):((v)%(w)))
-
-#endif // COMPOSER_COMMON_H_INCLUDED
diff --git a/externals/ffext/composer/Editor.cpp b/externals/ffext/composer/Editor.cpp
deleted file mode 100644
index a5db283d8c79ba25960d8b12cf6e8a50f7801bf6..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Editor.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-#include "Editor.hpp"
-#include "Track.hpp"
-#include "Song.hpp"
-
-#include <iostream>
-#include <string>
-
-#include <m_pd.h>
-
-#include "Common.hpp"
-
-#include "editor_tk.cpp"
-static const unsigned int editor_tk_len = sizeof(editor_tk) / sizeof(editor_tk[0]);
-
-using std::cerr;
-using std::endl;
-using std::string;
-
-static char hexnibble(unsigned int i)
-{
-    i &= 0xf;
-    return (i < 0xa) ? ('0' + i) : ('a' + i - 0xa);
-}
-
-static const char* urlencode(char c)
-{
-    static char buf[4];
-    buf[0] = '%';
-    buf[1] = hexnibble((c & 0xf0) >> 4);
-    buf[2] = hexnibble(c & 0xf);
-    buf[3] = '\0';
-    return &buf[0];
-}
-
-void Editor::uploadCode()
-{
-    sys_gui("proc Xeval {c {d {}}} {switch $c {begin {set ::Xeval_map {}; for {set i 0} {$i < 256} {incr i} {lappend ::Xeval_map \%[format \%02x $i] [format \%c $i]}; set ::Xeval_data {}} data {append ::Xeval_data [string map $::Xeval_map $d]\\n} end {uplevel #0 $::Xeval_data; unset ::Xeval_map; unset ::Xeval_data}}}\n"); 
-    sys_gui("Xeval begin\n");
-    for(unsigned int i = 0; i < editor_tk_len; i++)
-    {
-        string s = "Xeval data {";
-        string l = editor_tk[i];
-        for(unsigned int j = 0; j < l.length(); j++)
-        {
-            if(isalnum(l[j])) s.append(1, l[j]);
-            else s += string(urlencode(l[j]));
-        }
-        s += "}\n";
-        sys_gui(const_cast<char*>(s.c_str()));
-    }
-    sys_gui("Xeval end\n");
-}
-
-void Editor::init(t_track_proxy *x)
-{
-    uploadCode();
-    sys_vgui("pd::composer::init %s %s %s %s %d\n",
-        x->editor_recv->s_name,
-        x->track->getSong()->getName().c_str(),
-        x->track->getName().c_str(),
-        "NULL",
-#ifdef DEBUG
-        1
-#else
-        0
-#endif
-    );
-}
-
-void Editor::dispatch(t_track_proxy *x, int argc, t_atom* argv)
-{
-    string s = "";
-    for(int i = 0; i < argc; i++)
-    {
-        s += " ";
-        char buf[MAXPDSTRING];
-        atom_string(&argv[i], buf, MAXPDSTRING);
-        s += buf;
-    }
-    sys_vgui("pd::composer::dispatch %s%s\n",
-        x->editor_recv->s_name,
-        s.c_str()
-        );
-}
-
-void Editor::openWindow(t_track_proxy *x)
-{
-    x->editor_open = 1;
-    sys_vgui("pd::composer::openWindow %s\n", x->editor_recv->s_name);
-}
-
-void Editor::closeWindow(t_track_proxy *x)
-{
-    x->editor_open = 0;
-    sys_vgui("pd::composer::closeWindow %s\n", x->editor_recv->s_name);
-}
diff --git a/externals/ffext/composer/Editor.hpp b/externals/ffext/composer/Editor.hpp
deleted file mode 100644
index 620aab5989ab883a97ce3f43c6faa379f4ac4e0a..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Editor.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef COMPOSER_EDITOR_H_INCLUDED
-#define COMPOSER_EDITOR_H_INCLUDED
-
-#include "PdClasses.hpp"
-#include <m_pd.h>
-
-class Editor
-{
-public:
-    static void uploadCode();
-    static void init(t_track_proxy *x);
-    static void dispatch(t_track_proxy *x, int argc, t_atom* argv);
-    static void openWindow(t_track_proxy *x);
-    static void closeWindow(t_track_proxy *x);
-};
-
-#endif // COMPOSER_EDITOR_H_INCLUDED
diff --git a/externals/ffext/composer/HasMeta.cpp b/externals/ffext/composer/HasMeta.cpp
deleted file mode 100644
index b80c94167d14e2d1025b45e1029271bd46faa091..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/HasMeta.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "HasMeta.hpp"
-
-bool HasMeta::hasMeta(const string &key)
-{
-    return meta.find(key) != meta.end();
-}
-
-const string HasMeta::getMeta(const string &key)
-{
-    return hasMeta(key) ? meta[key] : "";
-}
-
-void HasMeta::setMeta(const string &key, const string &value)
-{
-    meta[key] = value;
-}
diff --git a/externals/ffext/composer/HasMeta.hpp b/externals/ffext/composer/HasMeta.hpp
deleted file mode 100644
index 5bd74bb727997530271369414a2cad47108ea373..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/HasMeta.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef COMPOSER_HASMETA_H_INCLUDED
-#define COMPOSER_HASMETA_H_INCLUDED
-
-#include <map>
-#include <string>
-
-using std::map;
-using std::string;
-
-class HasMeta
-{
-private:
-	map<string,string> meta;
-public:
-	bool hasMeta(const string &key);
-    const string getMeta(const string &key);
-    void setMeta(const string &key, const string &value);
-
-    typedef map<string,string>::const_iterator meta_iterator;
-    inline meta_iterator meta_begin() const {return meta.begin();}
-    inline meta_iterator meta_end() const {return meta.end();}
-};
-
-#endif // COMPOSER_HASMETA_H_INCLUDED
diff --git a/externals/ffext/composer/Makefile b/externals/ffext/composer/Makefile
deleted file mode 100644
index 473a7ca06ce26c17ab51ecf38b9dea29f18cead3..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Makefile
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/make
-
-DEBUG?=0
-OS := $(shell uname -s)
-TCL_VERSION := $(shell echo 'puts $$tcl_version' | tclsh)
-
-ifeq ($(DEBUG),0)
-	CFLAGS += -O2
-else
-	CFLAGS += -O0 -g -ggdb -DDEBUG
-endif
-ifeq ($(OS),Linux)
-  PDSUF = pd_linux
-  PDBUNDLEFLAGS = -shared -rdynamic
-  LDSOFLAGS = -lm
-endif
-ifeq ($(OS),Darwin)
-  PDSUF = pd_darwin
-  INCLUDES = -I/Library/Frameworks/Tcl.framework/Headers
-  PDBUNDLEFLAGS = -bundle -flat_namespace -undefined dynamic_lookup
-  LDSOFLAGS = -lm
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  PDSUF = dll
-  PDBUNDLEFLAGS = -shared
-  LDSOFLAGS = -lm
-endif
-
-LIBNAME = composer
-INCLUDES =  -I../../pd/src -I/usr/include #-I/usr/include/tcl$(TCL_VERSION)
-CFLAGS += -funroll-loops -fno-operator-names -fno-omit-frame-pointer -falign-functions=16
-CFLAGS += -Wall -Wno-unused
-CFLAGS += -fPIC
-CFLAGS += -DPDSUF=\"$(PDSUF)\"
-LDSHARED = $(CXX) $(PDBUNDLEFLAGS)
-
-all: autogen_sources $(LIBNAME).$(PDSUF)
-	@echo '-----------------------------------------------------------------------------'
-	@echo ' $(LIBNAME).$(PDSUF) ('`test $(DEBUG) -eq 1 && echo debug || echo release`' build) '\
-		'[size: '`ls -gGh $(LIBNAME).$(PDSUF) | cut -d " " -f 3`']'
-
-$(PDSUF): all
-
-clean:
-	rm -f $(LIBNAME).$(PDSUF)
-	rm -f *.o *~
-	rm -f $(AUTOGENERATED_SOURCES)
-	rm -f editor_tk.cpp
-
-.SUFFIXES: .cpp .o
-
-SRCS = HasMeta.cpp Song.cpp Pattern.cpp Track.cpp Editor.o PdClasses.cpp
-OBJS = ${SRCS:.cpp=.o}
-AUTOGENERATED_SOURCES = methods.hpp methods_pd.hpp methods_ed.hpp classsetup.cpp callwrappers_pd.cpp callwrappers_ed.cpp
-HasMeta.o: HasMeta.cpp HasMeta.hpp
-Song.o: Song.cpp Song.hpp
-Pattern.o: Pattern.cpp Pattern.hpp
-Track.o: Track.cpp Track.hpp
-Editor.o: Editor.cpp Editor.hpp editor_tk.cpp
-PdClasses.o: PdClasses.cpp PdClasses.hpp
-
-.cpp.o: Makefile
-	$(CXX) $(CFLAGS) $(INCLUDES) -xc++ -c $<
-
-$(LIBNAME).$(PDSUF): Makefile $(OBJS)
-	$(LDSHARED) $(LDSOFLAGS) $(CFLAGS) -xnone $(OBJS) -o $(LIBNAME).$(PDSUF)
-
-editor_tk.cpp: editor.tk
-	@echo "Generating $@..."
-	@( echo 'static const char* editor_tk[] = {'; sed -e 's/\(["\\]\)/\\\1/g' -e 's/^/"/' -e 's/$$/",/' editor.tk; echo '"" };' ) > editor_tk.cpp
-
-autogen_sources: $(AUTOGENERATED_SOURCES)
-
-methods.hpp: PdClasses.hpp
-	@echo "Generating $@..."
-	@awk ' \
-		/^\/\*#end methods\*\/$$/{M=0} \
-		{if(M==1) print $$0} \
-		/^\/\*#begin methods\*\/$$/{M=1}' \
-		PdClasses.hpp \
-	| sed \
-		-e 's/\> *\(\**\) *\w\+\(,\|)\)/\1\2/g' \
-		-e 's/(/( /' -e 's/)/ )/' \
-	| awk '{ \
-		for(x=1; x<NF; x++) { \
-			if(x<=2||x==NF) \
-				printf($$x" "); \
-			else \
-				printf($$x" arg"(x-3)", "); \
-		} \
-		printf("\n"); \
-		}' \
-	| sed \
-		-e 's/,\( arg[0-9]\+\)/\1/g' \
-		-e 's/, $$/);/' \
-		-e 's/( /(/' \
-	> methods.hpp
-
-methods_pd.hpp: methods.hpp
-	@echo "Generating $@..."
-	@sed -e 's/\<track_proxy_\w\+\>/\0P/' methods.hpp > methods_pd.hpp
-
-methods_ed.hpp: methods.hpp
-	@echo "Generating $@..."
-	@sed -e 's/\<track_proxy_\w\+\>/\0E/' methods.hpp > methods_ed.hpp
-
-classsetup.cpp: methods.hpp
-	@echo "Generating $@..."
-	@sed \
-		-e 's/\<track_proxy_\(\w\+\)\>/\0 \1/' \
-		-e 's/);$$/, /' \
-		-e 's/(t_track_proxy\* arg0,\?//' \
-		-e 's/ arg[0-9]\+, / /g' \
-		-e 's/\<t_symbol\* int t_atom\>\*/A_GIMME, /g' \
-		-e 's/\<t_symbol\>\*/A_SYMBOL, /g' \
-		-e 's/\<t_floatarg\>/A_FLOAT, /g' \
-		methods.hpp \
-	| awk '{ \
-		printf("class_addmethod(track_proxy_class, (t_method)%sP, gensym(\"%s\"), ", $$2, $$3); \
-		for(i=4; i<=NF; i++) printf("%s ", $$i); \
-		printf("A_NULL);\n"); \
-		\
-		printf("class_addmethod(track_proxy_class, (t_method)%sE, gensym(\"%sE\"), ", $$2, $$3); \
-		for(i=4; i<=NF; i++) printf("%s ", $$i); \
-		printf("A_NULL);\n"); \
-	}' \
-	> classsetup.cpp
-
-callwrappers_pd.cpp: methods.hpp
-	@echo "Generating $@..."
-	@sed \
-		-e 's/;$$//' \
-		-e 's/^\(.*\)\(\<track_proxy_\w\+\>\)\((.*)\)$$/\1\2P\3 {\n    \2\3;\/\/real call\n    track_proxy_send_result(arg0, 1, 0);\n    return 0;\n}/' \
-		methods.hpp \
-	| sed \
-		-e '/\/\/real call/s/(t_track_proxy\* arg0/(arg0/' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-	> callwrappers_pd.cpp
-
-callwrappers_ed.cpp: methods.hpp
-	@echo "Generating $@..."
-	@sed \
-		-e 's/;$$//' \
-		-e 's/^\(.*\)\(\<track_proxy_\w\+\>\)\((.*)\)$$/\1\2E\3 {\n    \2\3;\/\/real call\n    track_proxy_send_result(arg0, 0, 1);\n    return 0;\n}/' \
-		methods.hpp \
-	| sed \
-		-e '/\/\/real call/s/(t_track_proxy\* arg0/(arg0/' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-	> callwrappers_ed.cpp
diff --git a/externals/ffext/composer/Pattern.cpp b/externals/ffext/composer/Pattern.cpp
deleted file mode 100644
index 070838a85d9dca2f0b98cecdeb8fbf4b41328888..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Pattern.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "Pattern.hpp"
-
-#include <iostream>
-
-#include "Common.hpp"
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-Pattern::Pattern(int numRows, int numCols, string patternName)
-: name(patternName)
-{
-	Cell empty_cell;
-	Row empty_row;
-
-	SETSYMBOL(&empty_cell, gensym("empty"));
-
-	while(numCols-- > 0)
-	{
-		empty_row.push_back(empty_cell);
-	}
-
-	columns = empty_row.size();
-
-	while(numRows-- > 0)
-	{
-		Row row(empty_row);
-		rows.push_back(row);
-	}
-}
-
-void Pattern::print()
-{
-	cerr << "---- Pattern: " << name << " ----" << endl;
-
-	char buf[MAXPDSTRING];
-
-	for(unsigned int i = 0; i < rows.size(); i++)
-	{
-		cerr << "  Row[" << i << "]: ";
-		for(unsigned int j = 0; j < rows[i].size(); j++)
-		{
-			if(j > 0) cerr << ", ";
-			atom_string(&rows[i][j], buf, MAXPDSTRING);
-			cerr << buf << endl;
-		}
-	}
-
-	cerr << "---- End pattern (" << name << ") ----" << endl;
-}
-
-void Pattern::resize(int numRows, int numCols)
-{
-	Cell empty_cell;
-	Row empty_row;
-
-	SETSYMBOL(&empty_cell, gensym("empty"));
-
-	while(numCols-- > 0)
-	{
-		empty_row.push_back(empty_cell);
-	}
-
-	rows.resize(numRows, empty_row);
-
-	for(unsigned int i = 0; i < rows.size(); i++)
-	{
-		rows[i].resize(empty_row.size(), empty_cell);
-	}
-
-	columns = empty_row.size();
-}
-
-void Pattern::setCell(int row, int col, Cell cell)
-{
-    row = WRAP(row, rows.size());
-    col = WRAP(col, columns);
-	rows[row][col] = cell;
-}
-
-Cell Pattern::getCell(int row, int col)
-{
-    row = WRAP(row, rows.size());
-    col = WRAP(col, columns);
-	return rows[row][col];
-}
diff --git a/externals/ffext/composer/Pattern.hpp b/externals/ffext/composer/Pattern.hpp
deleted file mode 100644
index fbafcecca15cdf114ef0352991122e993ade5f6b..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Pattern.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef COMPOSER_PATTERN_H_INCLUDED
-#define COMPOSER_PATTERN_H_INCLUDED
-
-#include <string>
-#include <vector>
-
-#include <m_pd.h>
-
-using std::string;
-using std::vector;
-
-typedef t_atom Cell;
-
-typedef vector<Cell> Row;
-
-class Pattern
-{
-private:
-	string name;
-	vector<Row> rows;
-	int columns;
-public:
-	Pattern(int numRows, int numCols, string patternName);
-	void print();
-	void resize(int numRows, int numCols);
-	void setCell(int row, int col, Cell cell);
-	Cell getCell(int row, int col);
-	inline const string &getName() {return name;}
-    inline void setName(const string &newName) {name = newName;}
-	inline unsigned int getRows() {return rows.size();}
-	inline unsigned int getColumns() {return columns;}
-};
-
-#endif // COMPOSER_PATTERN_H_INCLUDED
diff --git a/externals/ffext/composer/PdClasses.cpp b/externals/ffext/composer/PdClasses.cpp
deleted file mode 100644
index 162945d2ec81257164afc2338127e107e23616bf..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/PdClasses.cpp
+++ /dev/null
@@ -1,527 +0,0 @@
-#include "PdClasses.hpp"
-#include "Song.hpp"
-#include "Track.hpp"
-#include "Pattern.hpp"
-#include "Editor.hpp"
-
-#include "callwrappers_pd.cpp"
-#include "callwrappers_ed.cpp"
-
-#include <iostream>
-
-#include "Common.hpp"
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-t_atom result_argv[MAX_RESULT_SIZE];
-int result_argc;
-
-t_class *track_proxy_class;
-t_class *song_proxy_class;
-
-void track_proxy_setup(void)
-{
-    track_proxy_class = class_new(
-        gensym("track"),
-        (t_newmethod)track_proxy_new,
-        (t_method)track_proxy_free,
-        sizeof(t_track_proxy),
-        CLASS_DEFAULT,
-        A_SYMBOL, A_SYMBOL, A_NULL
-    );
-#include "classsetup.cpp" 
-    class_addmethod(track_proxy_class, (t_method)track_proxy_data, \
-            gensym("data"), A_GIMME, A_NULL);
-#if PD_MINOR_VERSION >= 37
-    class_setpropertiesfn(track_proxy_class, track_proxy_properties);
-    class_setsavefn(track_proxy_class, track_proxy_save);
-#endif
-    class_sethelpsymbol(track_proxy_class, gensym("track.pd"));
-}
-
-t_track_proxy *track_proxy_new(t_symbol *song_name, t_symbol *track_name)
-{
-    t_track_proxy *x = (t_track_proxy*)pd_new(track_proxy_class);
-    x->outlet = outlet_new(&x->x_obj, &s_list);
-    x->editor_open = 0;
-
-    // get or create Track object:
-    x->track = Track::byName(song_name->s_name, track_name->s_name);
-
-    // set send/recv for communication with editor    
-    Song *song = x->track->getSong();
-    string base_name = "track_proxy-" + song->getName() + "-" + x->track->getName();
-    string recv_name = base_name + "-r";
-    string send_name = base_name + "-s";
-    x->editor_recv = gensym(recv_name.c_str());
-    x->editor_send = gensym(send_name.c_str());
-    pd_bind(&x->x_obj.ob_pd, x->editor_recv);
-
-    // bind to TRACK_SELECTOR for loading in-patch data
-    pd_bind(&x->x_obj.ob_pd, gensym(TRACK_SELECTOR));
-
-    Editor::init(x);
-
-    return x;
-}
-
-void track_proxy_free(t_track_proxy *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, gensym(TRACK_SELECTOR));
-    /* LATER find a way to get TRACK_SELECTOR unbound earlier (at end of load?) */
-    /*t_pd* x2;
-    while((x2 = pd_findbyclass(gensym(TRACK_SELECTOR), track_proxy_class)))
-        pd_unbind(x2, gensym(TRACK_SELECTOR));*/
-
-    pd_unbind(&x->x_obj.ob_pd, x->editor_recv);
-}
-
-void track_proxy_save(t_gobj *z, t_binbuf *b)
-{
-    t_track_proxy *x = (t_track_proxy*)z;
-    Track *t = x->track;
-    Song *s = t->getSong();
-
-    binbuf_addv(b, "ssiisss;", gensym("#X"), gensym("obj"),
-        (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,
-        gensym("track"), gensym(s->getName().c_str()),
-	gensym(t->getName().c_str()));
-
-    // save paterns
-    for(Track::pattern_iterator i = t->pattern_begin(); i != t->pattern_end(); i++)
-    {
-        Pattern *pattern = i->second;
-        binbuf_addv(b, "ss", gensym(TRACK_SELECTOR), gensym("data"));
-        t_int r = pattern->getRows();
-        t_int c = pattern->getColumns();
-        binbuf_addv(b, "sii", gensym(pattern->getName().c_str()), r, c);
-        t_atom tmp;
-        for(unsigned int j = 0; j < r; j++)
-        {
-            for(unsigned int k = 0; k < c; k++)
-            {
-                tmp = pattern->getCell(j, k);
-                switch(tmp.a_type)
-                {
-                case A_SYMBOL:
-                    binbuf_addv(b, "s", tmp.a_w.w_symbol);
-                    break;
-                case A_FLOAT:
-                    binbuf_addv(b, "f", tmp.a_w.w_float);
-                    break;
-                default:
-                    binbuf_addv(b, "s", gensym("?"));
-                    break;
-                }
-            }
-        }
-        binbuf_addv(b, ";");
-    }
-
-    // save metadata
-    for(Track::meta_iterator i = t->meta_begin(); i != t->meta_end(); i++)
-    {
-        binbuf_addv(b, "ssssss;", gensym(TRACK_SELECTOR),
-                gensym("meta"), gensym("track"), gensym("set"),
-                gensym(i->first.c_str()), gensym(i->second.c_str()));
-    }
-
-    binbuf_addv(b, "sss;", gensym(TRACK_SELECTOR), gensym("data"), gensym("end"));
-}
-
-void track_proxy_data(t_track_proxy *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(argc == 1 && IS_A_SYMBOL(argv,0) && argv[0].a_w.w_symbol == gensym("end"))
-    {
-        pd_unbind(&x->x_obj.ob_pd, gensym(TRACK_SELECTOR));
-        return;
-    }
-    if(argc < 3 || !IS_A_SYMBOL(argv,0) || !IS_A_FLOAT(argv,1) || !IS_A_FLOAT(argv,2))
-    {
-        pd_error(x, "unrecognized format for in-patch data");
-        return;
-    }
-    t_symbol *pat = argv[0].a_w.w_symbol;
-    t_int rows = (t_int) argv[1].a_w.w_float;
-    t_int cols = (t_int) argv[2].a_w.w_float;
-    if(argc != (3 + rows * cols))
-    {
-        pd_error(x, "unrecognized format for in-patch data (malformed data?)");
-        return;
-    }
-    Track *t = x->track;
-    t->addPattern(rows, cols, pat->s_name);
-    Pattern *p = t->getPattern(pat->s_name);
-    if(!p)
-    {
-        pd_error(x, "fatal error: cannot create patern");
-        return;
-    }
-    int a = 3;
-    for(int r = 0; r < rows; r++)
-    {
-        for(int c = 0; c < cols; c++)
-        {
-            p->setCell(r, c, argv[a]);
-            a++;
-        }
-    }
-}
-
-void track_proxy_properties(t_gobj *z, t_glist *owner)
-{
-    t_track_proxy *x = (t_track_proxy *) z;
-    if(!x->editor_open) Editor::openWindow(x);
-    else Editor::closeWindow(x);
-}
-
-void track_proxy_send_result(t_track_proxy *x, int outlet, int editor)
-{
-    if(result_argc <= 0) return;
-    if(outlet)
-    {
-        outlet_list(x->outlet, &s_list, result_argc, &result_argv[0]);
-    }
-    if(editor)
-    {
-        Editor::dispatch(x, result_argc, &result_argv[0]);
-    }
-}
-
-int track_proxy_meta(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    t_symbol *action = 0, *target = 0, *key = 0;
-    int w = -1;
-
-    if(argc < 3 || !IS_A_SYMBOL(argv,0) || !IS_A_SYMBOL(argv,1) || !IS_A_SYMBOL(argv,2))
-    {
-        pd_error(x, "meta: bad arguments");
-        goto usage;
-    }
-    target = argv[0].a_w.w_symbol;
-    action = argv[1].a_w.w_symbol;
-    key = argv[2].a_w.w_symbol;
-
-    if(action == gensym("get")) w = 0;
-    if(action == gensym("set")) w = 1;
-    if(w < 0) goto badargs;
-
-    if(target == gensym("song"))
-    {
-        pd_error(x, "meta: %s target not implemented yet", target->s_name);
-        return -1;
-    }
-    else if(target == gensym("track"))
-    {
-        string arg = "";
-        string atomStr = "";
-        for(int i = 3; i < argc; i++)
-        {
-            if(arg.length()) arg += " ";
-            char buf[MAXPDSTRING];
-            atom_string(&argv[i], buf, MAXPDSTRING);
-            atomStr = buf;
-            if(atomStr.find(" ", 0) != string::npos)
-                arg += "{" + atomStr + "}";
-            else
-                arg += atomStr;
-        }
-
-        if(w)
-        {
-            if(argc < 4) goto badargs;
-            x->track->setMeta(key->s_name, arg);
-        }
-        else
-        {
-            if(argc < 3) goto badargs;
-            string value = "";
-            if(argc == 3 && !x->track->hasMeta(key->s_name))
-            {
-                pd_error(x, "meta: key '%s' does not exist into %s", key->s_name, target->s_name);
-                return -5;
-            }
-            if(x->track->hasMeta(key->s_name))
-                value = x->track->getMeta(key->s_name);
-            else
-                value = arg;
-            SETSYMBOL(&result_argv[0], gensym("meta"));
-            SETSYMBOL(&result_argv[1], target);
-            SETSYMBOL(&result_argv[2], key);
-            SETSYMBOL(&result_argv[3], gensym(value.c_str()));
-            result_argc = 4;
-        }
-        return 0;
-    }
-
-badargs:
-    pd_error(x, "meta: bad arguments");
-usage:
-    post("usage: meta song|track set <key> <value>");
-    post("       meta song|track get <key>");
-    return 1;
-}
-
-int track_proxy_editor(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    t_symbol *arg1 = 0, *arg2 = 0, *arg3 = 0;
-    if(argc < 1 || !IS_A_SYMBOL(argv,0))
-    {
-        pd_error(x, "editor: missing subcommand");
-        goto usage;
-    }
-
-    arg1 = argv[0].a_w.w_symbol;
-    if(arg1 == gensym("show"))
-    {
-        Editor::openWindow(x);
-    }
-    else if(arg1 == gensym("hide"))
-    {
-        Editor::closeWindow(x);
-    }
-    else if(arg1 == gensym("toggle"))
-    {
-        if(!x->editor_open) Editor::openWindow(x);
-        else Editor::closeWindow(x);
-    }
-    else
-    {
-        pd_error(x, "editor: unknown subcommand: %s", arg1->s_name);
-        goto usage;
-    }
-    return 0;
-
-usage:
-    post("track: editor: available subcommands:");
-    post("    editor show");
-    post("    editor hide");
-    post("    editor toggle");
-    return 1;
-}
-
-int track_proxy_getpatterns(t_track_proxy *x)
-{
-    SETSYMBOL(&result_argv[0], gensym("patternnames"));
-    result_argc = 1;
-    Track *t = x->track;
-    for(Track::pattern_iterator i = t->pattern_begin(); i != t->pattern_end(); i++)
-    {
-        if(result_argc >= MAX_RESULT_SIZE)
-        {
-            pd_error(x, "getpatternnames: result too long");
-            return -2;
-        }
-        Pattern *pattern = i->second;
-        SETSYMBOL(&result_argv[result_argc], gensym(pattern->getName().c_str()));
-        result_argc++;
-    }
-    return 0;
-}
-
-int track_proxy_getpatternsize(t_track_proxy *x, t_symbol *pat)
-{
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "getpatternsize: no such pattern: %s", pat->s_name);
-        return -1;
-    }
-    SETSYMBOL(&result_argv[0], gensym("patternsize"));
-    SETSYMBOL(&result_argv[1], pat);
-    SETFLOAT(&result_argv[2], pattern->getRows());
-    SETFLOAT(&result_argv[3], pattern->getColumns());
-    result_argc = 4;
-    return 0;
-}
-
-int track_proxy_setrow(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    if(argc < 2 || !IS_A_SYMBOL(argv,0) || !IS_A_FLOAT(argv,1))
-    {
-        pd_error(x, "setrow: usage: setrow <pattern> <row#> <atom0> <atom1> ...");
-        return -1;
-    }
-    t_symbol *pat = argv[0].a_w.w_symbol;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    t_int r = (t_int) argv[1].a_w.w_float;
-    if(!pattern)
-    {
-        pd_error(x, "setrow: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    unsigned int argc2 = argc - 2;
-    if(argc2 != pattern->getColumns())
-    {
-        pd_error(x, "setrow: input error: must provide exactly %d elements for a row", pattern->getColumns());
-        return -3;
-    }
-    for(unsigned int i = 0; i < argc2; i++)
-    {
-        pattern->setCell(r, i, argv[i + 2]);
-    }
-    return 0;
-}
-
-int track_proxy_getrow(t_track_proxy *x, t_symbol *pat, t_floatarg rownum)
-{
-    t_int r = (t_int) rownum;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "getrow: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    SETSYMBOL(&result_argv[0], gensym("patternrow"));
-    SETSYMBOL(&result_argv[1], pat);
-    SETFLOAT(&result_argv[2], (t_float) r);
-    result_argc = 3;
-    for(unsigned int i = 0; i < pattern->getColumns(); i++)
-    {
-        if(result_argc >= MAX_RESULT_SIZE)
-        {
-            pd_error(x, "getrow: result too long");
-            return -2;
-        }
-        result_argv[result_argc] = pattern->getCell(r, i);
-        result_argc++;
-    }
-    return 0;
-}
-
-int track_proxy_setcell(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    if(argc != 4 || !IS_A_SYMBOL(argv,0) || !IS_A_FLOAT(argv,1) || !IS_A_FLOAT(argv,2))
-    {
-        pd_error(x, "setrow: usage: setcell <pattern> <row#> <col#> <atom>");
-        return -1;
-    }
-    t_symbol *pat = argv[0].a_w.w_symbol;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    t_int r = (t_int) argv[1].a_w.w_float;
-    t_int c = (t_int) argv[2].a_w.w_float;
-    if(!pattern)
-    {
-        pd_error(x, "setcell: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    pattern->setCell(r, c, argv[3]);
-    return 0;
-}
-
-int track_proxy_getcell(t_track_proxy *x, t_symbol *pat, t_floatarg rownum, t_floatarg colnum)
-{
-    t_int r = (t_int) rownum;
-    t_int c = (t_int) colnum;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "getcell: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    SETSYMBOL(&result_argv[0], gensym("patterncell"));
-    SETSYMBOL(&result_argv[1], pat);
-    SETFLOAT(&result_argv[2], (t_float) r);
-    SETFLOAT(&result_argv[3], (t_float) c);
-    result_argv[4] = pattern->getCell(r, c);
-    result_argc = 5;
-    return 0;
-}
-
-
-int track_proxy_addpattern(t_track_proxy *x, t_symbol *name, t_floatarg rows, t_floatarg cols)
-{
-    result_argc = 0;
-    t_int r = (t_int) rows;
-    t_int c = (t_int) cols;
-    Pattern *pattern = x->track->getPattern(name->s_name);
-    if(pattern)
-    {
-        pd_error(x, "addpattern: pattern already exist: %s", name->s_name);
-        return -3;
-    }
-    x->track->addPattern(r, c, string(name->s_name));
-    return 0;
-}
-
-int track_proxy_removepattern(t_track_proxy *x, t_symbol *pat)
-{
-    result_argc = 0;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "removepattern: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    x->track->removePattern(pat->s_name);
-    return 0;
-}
-
-int track_proxy_resizepattern(t_track_proxy *x, t_symbol *pat, t_floatarg rows, t_floatarg cols)
-{
-    result_argc = 0;
-    t_int r = (t_int) rows;
-    t_int c = (t_int) cols;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "resizepattern: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    if(rows < 1 || cols < 1)
-    {
-        pd_error(x, "resizepattern: rows and columns must be positive");
-        return -6;
-    }
-    pattern->resize(r, c);
-    return 0;
-}
-
-int track_proxy_renamepattern(t_track_proxy *x, t_symbol *oldName, t_symbol *newName)
-{
-    result_argc = 0;
-    Pattern *pattern = x->track->getPattern(oldName->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "renamepattern: no such pattern: %s", oldName->s_name);
-        return -2;
-    }
-    pattern = x->track->getPattern(newName->s_name);
-    if(pattern)
-    {
-        pd_error(x, "renamepattern: destination pattern already exist: %s", newName->s_name);
-        return -3;
-    }
-    x->track->renamePattern(oldName->s_name, newName->s_name);
-    return 0;
-}
-
-int track_proxy_copypattern(t_track_proxy *x, t_symbol *src, t_symbol *dst)
-{
-    result_argc = 0;
-    Pattern *pattern = x->track->getPattern(src->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "copypattern: no such pattern: %s", src->s_name);
-        return -2;
-    }
-    pattern = x->track->getPattern(dst->s_name);
-    if(pattern)
-    {
-        pd_error(x, "copypattern: destination pattern already exist: %s", dst->s_name);
-        return -3;
-    }
-    x->track->copyPattern(src->s_name, dst->s_name);
-    return 0;
-}
-
-void composer_setup()
-{
-    track_proxy_setup();
-}
diff --git a/externals/ffext/composer/PdClasses.hpp b/externals/ffext/composer/PdClasses.hpp
deleted file mode 100644
index 15e401cb69cf314be2d1b839d3f47aae051041a6..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/PdClasses.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef COMPOSER_PDCLASSES_H_INCLUDED
-#define COMPOSER_PDCLASSES_H_INCLUDED
-
-#include <m_pd.h>
-
-#define MAX_RESULT_SIZE 128
-
-#define TRACK_SELECTOR "#composer::track"
-#define SONG_SELECTOR "#composer::song"
-
-class Track;
-class Song;
-
-typedef struct _track_proxy
-{
-    t_object x_obj;
-    t_outlet *outlet;
-    Track *track;
-    t_int editor_open;
-    t_symbol *editor_recv;
-    t_symbol *editor_send;
-} t_track_proxy;
-
-void track_proxy_setup(void);
-t_track_proxy *track_proxy_new(t_symbol *song_name, t_symbol *track_name);
-void track_proxy_free(t_track_proxy *x);
-void track_proxy_save(t_gobj *z, t_binbuf *b);
-void track_proxy_data(t_track_proxy *x, t_symbol *s, int argc, t_atom *argv);
-void track_proxy_properties(t_gobj *z, t_glist *owner);
-void track_proxy_send_result(t_track_proxy *x, int outlet, int editor);
-
-/*#begin methods*/
-int track_proxy_meta(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_editor(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_getpatterns(t_track_proxy *x);
-int track_proxy_getpatternsize(t_track_proxy *x, t_symbol *pat);
-int track_proxy_setrow(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_getrow(t_track_proxy *x, t_symbol *pat, t_floatarg rownum);
-int track_proxy_setcell(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_getcell(t_track_proxy *x, t_symbol *pat, t_floatarg rownum, t_floatarg colnum);
-int track_proxy_addpattern(t_track_proxy *x, t_symbol *name, t_floatarg rows, t_floatarg cols);
-int track_proxy_removepattern(t_track_proxy *x, t_symbol *pat);
-int track_proxy_resizepattern(t_track_proxy *x, t_symbol *pat, t_floatarg rows, t_floatarg cols);
-int track_proxy_renamepattern(t_track_proxy *x, t_symbol *oldName, t_symbol *newName);
-int track_proxy_copypattern(t_track_proxy *x, t_symbol *src, t_symbol *dst);
-/*#end methods*/
-
-#include "methods_pd.hpp"
-#include "methods_ed.hpp"
-
-extern "C" void composer_setup(void);
-
-#endif // COMPOSER_PDCLASSES_H_INCLUDED
diff --git a/externals/ffext/composer/Song.cpp b/externals/ffext/composer/Song.cpp
deleted file mode 100644
index c79350436c982777c87083a986177e15edc181a3..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Song.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "Song.hpp"
-
-#include <iostream>
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-map<string,Song *> Song::byname;
-
-Song::Song(string songName)
-: name(songName)
-{
-}
-
-Song *Song::byName(string songName)
-{
-	if(byname.find(songName) == byname.end())
-		byname[songName] = new Song(songName);
-
-	return byname[songName];
-}
-
-void Song::print()
-{
-	cerr << "---- Song: " << name << " ----" << endl;
-
-	for(map<string,Track *>::iterator i = tracks.begin(); i != tracks.end(); i++)
-	{
-		cerr << "  Track[" << i->first << "]: " << i->first << endl;
-	}
-
-	cerr << "---- End song (" << name << ") ----" << endl;
-}
-
-Track *Song::getTrackByName(string trackName)
-{
-	if(tracks.find(trackName) == tracks.end())
-		return 0;
-	else
-		return tracks[trackName];
-}
diff --git a/externals/ffext/composer/Song.hpp b/externals/ffext/composer/Song.hpp
deleted file mode 100644
index 7784ad5a221355030df92fc1294985c93f53893f..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Song.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef COMPOSER_SONG_H_INCLUDED
-#define COMPOSER_SONG_H_INCLUDED
-
-#include "HasMeta.hpp"
-
-#include <map>
-#include <string>
-
-#include <m_pd.h>
-
-#include "Track.hpp"
-
-using std::map;
-using std::string;
-
-class Song : public HasMeta
-{
-private:
-	static map<string,Song *> byname;
-public:
-	static Song *byName(string songName);
-private:
-	string name;
-	map<string,Track *> tracks;
-protected:
-	Song(string songName);
-public:
-	void print();
-	Track *getTrackByName(string trackName);
-	inline const string &getName() {return name;}
-};
-
-#endif // COMPOSER_SONG_H_INCLUDED
diff --git a/externals/ffext/composer/Track.cpp b/externals/ffext/composer/Track.cpp
deleted file mode 100644
index d0ed4de5a241c91036ae8825715bf423afef0472..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Track.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "Song.hpp"
-#include "Track.hpp"
-#include "Pattern.hpp"
-
-#include <iostream>
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-Track::Track(Song *_song, string trackName)
-: name(trackName), song(_song)
-{
-}
-
-Track *Track::byName(string songName, string trackName)
-{
-	Song *song = Song::byName(songName);
-
-	Track *track = song->getTrackByName(trackName);
-	if(!track) track = new Track(song, trackName);
-
-	return track;
-}
-
-void Track::print()
-{
-	cerr << "---- Track: " << name << " ----" << endl;
-
-    for(map<string,Pattern *>::iterator i = patterns.begin(); i != patterns.end(); i++)
-    {
-		cerr << "  Pattern[" << i->first << "]: " << i->second->getName() << endl;
-    }
-
-	cerr << "---- End track (" << name << ") ----" << endl;
-}
-
-void Track::addPattern(int rows, int cols, string name)
-{
-    Pattern *pattern = new Pattern(rows, cols, name);
-    patterns[name] = pattern;
-}
-
-Pattern *Track::getPattern(const string &p)
-{
-    if(patterns.find(p) != patterns.end())
-        return patterns[p];
-    else
-        return 0;
-}
-
-void Track::renamePattern(const string &oldName, const string &newName)
-{
-    Pattern *pattern = getPattern(oldName);
-    if(!pattern) return;
-    patterns[newName] = patterns[oldName];
-    patterns[newName]->setName(newName);
-    patterns.erase(oldName);
-}
-
-void Track::copyPattern(const string &src, const string &dst)
-{
-    Pattern *pattern = getPattern(src);
-    if(!pattern) return;
-    patterns[dst] = new Pattern(*patterns[src]);
-    patterns[dst]->setName(dst);
-}
-
-void Track::removePattern(const string &p)
-{
-    Pattern *pattern = getPattern(p);
-    if(!pattern) return;
-    patterns.erase(p);
-}
-
diff --git a/externals/ffext/composer/Track.hpp b/externals/ffext/composer/Track.hpp
deleted file mode 100644
index 93012143d889dd21cbc8b6c25b50ad587010f91e..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/Track.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef COMPOSER_TRACK_H_INCLUDED
-#define COMPOSER_TRACK_H_INCLUDED
-
-#include "HasMeta.hpp"
-
-#include <map>
-#include <string>
-
-#include <m_pd.h>
-
-using std::string;
-using std::map;
-
-class Song;
-class Pattern;
-
-class Track : public HasMeta
-{
-public:
-	static Track *byName(string songName, string trackName);
-private:
-	string name;
-    map<string,Pattern *> patterns;
-	Song *song;
-protected:
-	Track(Song *_song, string trackName);
-public:
-	void print();
-	void addPattern(int rows, int cols, string name);
-    Pattern *getPattern(const string &p);
-    void renamePattern(const string &oldName, const string &newName);
-    void copyPattern(const string &src, const string &dst);
-    void removePattern(const string &p);
-	inline unsigned int getPatternCount() {return patterns.size();}
-	inline Song *getSong() {return song;}
-	inline const string &getName() {return name;}
-
-    typedef map<string,Pattern *>::const_iterator pattern_iterator;
-    inline pattern_iterator pattern_begin() const {return patterns.begin();}
-    inline pattern_iterator pattern_end() const {return patterns.end();}
-};
-
-#endif // COMPOSER_TRACK_H_INCLUDED
diff --git a/externals/ffext/composer/editor.tk b/externals/ffext/composer/editor.tk
deleted file mode 100644
index f800bbe4efc33004eab7cb63807bb3017b3df782..0000000000000000000000000000000000000000
--- a/externals/ffext/composer/editor.tk
+++ /dev/null
@@ -1,688 +0,0 @@
-# ------------------------------------------------------------------------
-# Copyright (c) 2009 Federico Ferri.                                      
-# For information on usage and redistribution, and for a DISCLAIMER OF ALL
-# WARRANTIES, see the file, "LICENSE.txt," in this distribution.          
-#                                                                         
-# composer: a music composition framework for pure-data                   
-#                                                                         
-# This program is free software; you can redistribute it and/or           
-# modify it under the terms of the GNU General Public License             
-# as published by the Free Software Foundation; either version 2          
-# of the License, or (at your option) any later version.                  
-#                                                                         
-# See file LICENSE for further informations on licensing terms.           
-#                                                                         
-# This program is distributed in the hope that it will be useful,         
-# but WITHOUT ANY WARRANTY; without even the implied warranty of          
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           
-# GNU General Public License for more details.                            
-#                                                                         
-# You should have received a copy of the GNU General Public License       
-# along with this program; if not, write to the Free Software Foundation, 
-# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.         
-#                                                                         
-# Based on PureData by Miller Puckette and others.                        
-# ------------------------------------------------------------------------
-
-package require Tcl 8.5
-package require Tk 8.5
-package require Tktable 2.9
-
-namespace eval pd::composer {
-    variable debug
-    variable w
-    array set w {}
-    variable songname
-    array set songname {}
-    variable trackname
-    array set trackname {}
-    variable currentpattern
-    array set currentpattern {}
-    variable size
-    array set size {}
-    variable patterns
-    array set patterns {}
-    variable tracks
-    array set tracks {}
-
-    variable quirks_fix_int_floats 0
-    variable symbolmap {empty {}}
-    # set to 1 until startup, for getting soon a pattern list
-    # affects the behavior of dispatcher::patterns branch
-    variable startup
-    array set startup {}
-    variable showpattern
-    array set showpattern {}
-
-    proc debugPrint {args} {
-        variable debug
-        if {![info exists debug]} {set debug 0}
-        if {$debug} {puts stderr "composer-TCL: $args"}
-    }
-
-    proc sendGui {what} {
-        debugPrint "sendGui $what"
-        catch {netsend $what}
-        lappend what \;\n
-        catch {pdsend $what}
-        catch {pd {*}$what}
-    }
-
-    proc editCommand {method args} {
-        linsert $args 0 [uplevel {set id}] ${method}E
-    }
-
-    proc createPattern {id name rows cols} {
-        debugPrint [info level 0]
-        variable patterns
-
-        if {$name in $patterns($id)} {
-            return -code error "Pattern '$name' already exists"
-        }
-        set rows [expr {int($rows)}]
-        set cols [expr {int($cols)}]
-        if {$rows <= 0 || $cols <= 0} {
-            return -code error "Pattern dimensions must pe positive integer"
-        }
-
-        sendGui [editCommand addpattern $name $rows $cols]
-        sendGui [editCommand getpatterns]
-    }
-
-    proc removePattern {id name} {
-        debugPrint [info level 0]
-        sendGui [editCommand removepattern $name]
-        sendGui [editCommand getpatterns]
-    }
-
-    proc copyPattern {id src dst} {
-        debugPrint [info level 0]
-        sendGui [editCommand copypattern $src $dst]
-        sendGui [editCommand getpatterns]
-    }
-
-    proc resizePattern {id name rows cols} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable size;
-
-        if {[dict exists $size($id) $name]} {
-            if {[list $rows $cols] == [dict get $size($id) $name]} return
-        }
-
-        set rows [expr {int($rows)}]
-        set cols [expr {int($cols)}]
-        if {$rows <= 0 || $cols <= 0} {
-            return -code error "Pattern dimensions must pe positive integer"
-        }
-
-        sendGui [editCommand resizepattern $name $rows $cols]
-        if {$currentpattern($id) == $name} {
-            displayPattern $id $name
-        }
-    }
-
-    proc renamePattern {id name newName} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable patterns;
-
-        if {$name == $newName} return
-        if {$newName in $patterns($id)} {
-            return -code error "Pattern name '$newName' already exists"
-        }
-        set idx [lsearch -exact $patterns($id) $name]
-        if {$idx == -1} {
-            return -code error "No such pattern: '$name'"
-        }
-
-        sendGui [editCommand renamepattern $name $newName]
-        if {$currentpattern($id) == $name} {
-            set currentpattern($id) $newName
-        }
-        sendGui [editCommand getpatterns]
-    }
-
-    proc generateNewPatternName {id} {
-        debugPrint [info level 0]
-        variable patterns;
-        set n 0
-        while 1 {
-            set t "P[format %.02d $n]"
-            if {$t in $patterns($id)} {incr n} else {return $t}
-        }
-    }
-
-    proc displayPattern {id name} {
-        debugPrint "request-pattern-size"
-        variable showpattern
-        set showpattern($id) 1
-        sendGui [editCommand getpatternsize $name]
-    }
-
-    proc updateTitle {id} {
-        variable w
-        variable songname
-        variable trackname
-        variable currentpattern
-        set t "Song: $songname($id)"
-        if {$currentpattern($id) == "Arrangement"} {
-            append t "  Arrangement"
-        } else {
-            append t "  Track: $trackname($id)"
-            if {$currentpattern($id) != {}} {
-                append t "  Pattern: $currentpattern($id)"
-            }
-        }
-        wm title $w($id) $t
-    }
-
-    proc displayPattern_async {id name} {
-        debugPrint [info level 0]
-        variable currentpattern
-        variable patterns
-        variable size
-        variable w
-        variable songname
-        variable trackname
-        variable [getDataVar $id]
-
-        set currentpattern($id) $name
-        updateTitle $id
-       
-        if {$currentpattern($id) == {}} {
-            grid forget $w($id).t
-            return
-        }
-
-        lassign [dict get $size($id) $name] rows cols
-        grid $w($id).t -row 10 -column 0 -sticky news
-        debugPrint "resizing tktable widget to ${rows}x${cols}"
-        $w($id).t configure -state normal -variable [getDataVar $id] -rows $rows -cols [expr {1+$cols}]
-        $w($id).f.p configure -values $patterns($id)
-        $w($id).f.p current [lsearch -exact $patterns($id) $name]
-    }
-
-    proc displayCurrentPattern {id} {
-        debugPrint [info level 0]
-        variable currentpattern
-        variable w
-        debugPrint "current pattern is {$currentpattern($id)}"
-        displayPattern $id $currentpattern($id)
-    }
-
-    proc rowTag {id r} {
-        if {$r % $::div1($id) == 0} {return "alt0"}
-        if {$r % $::div2($id) == 0} {return "alt1"}
-    }
-
-    proc refreshGrid {id} {
-        debugPrint [info level 0]
-        variable currentpattern
-        debugPrint "currentPattern is {$currentpattern($id)}"
-        variable w
-        $w($id).t configure -padx [$w($id).t cget -padx]
-    }
-
-    proc dw {id n k op} {
-        if {$op != {write}} {return}
-        if {$n != [getDataVar $id]} {return}
-        if {$k == {active}} {return}
-        if {$k == {#TEST KEY#}} {return}
-        variable currentpattern
-        variable symbolmap
-
-        lassign [split $k ,] row col
-        upvar [getDataVar $id] data
-        set newVal $data($k)
-
-        debugPrint "BEFORE: newVal = '$newVal'"
-        set newVal [dict get [dict merge [list $newVal $newVal] [lreverse $symbolmap]] $newVal]
-        debugPrint "AFTER: newVal = '$newVal'"
-
-        sendGui [editCommand setcell $currentpattern($id) $row $col $newVal]
-    }
-
-    proc getDataVar {id {P {}}} {
-        variable currentpattern
-        variable songname
-        variable trackname
-        if {$P == ""} {set P $currentpattern($id)}
-        set n "[namespace current]::data_$songname($id)_$trackname($id)_$P"
-        if {![info exists $n]} {
-            array set $n {}
-            trace add variable $n write [list [namespace current]::dw $id]
-            # TODO: when to remove the above variable trace?
-        }
-        return $n
-    }
-
-    proc columnSizeChanged {id} {
-        variable w
-        variable columnsizes
-        set newsz {}
-        # tktable width returns a list of pairs (!)
-        foreach pair [$w($id).t width] {lappend newsz {*}$pair}
-        if {$columnsizes($id) != $newsz} {
-            set columnsizes($id) $newsz
-            sendGui [editCommand meta track set colw {*}$newsz]
-        }
-    }
-
-    proc divChanged {id} {
-        refreshGrid $id
-        sendGui [editCommand meta track set div \
-            [expr {int($::div1($id))}] \
-            [expr {int($::div2($id))}]]
-    }
-
-    proc createMainWindow {id} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable w
-        variable songname
-        variable trackname
-        variable patterns
-        variable startup
-        variable showpattern
-        variable columnsizes
-        variable [getDataVar $id]
-
-        catch {destroy $w($id)}
-        debugPrint "creating window with path = '$w($id)'"
-        toplevel $w($id) -class [winfo class .]
-
-        debugPrint "top-toolbar(frame)"
-        grid [ttk::frame $w($id).f] \
-            -row 5 -columnspan 2 -sticky news
-        debugPrint "label"
-        grid [ttk::label $w($id).f.l -text "Pattern: "] \
-            -row 0 -column 0 -in $w($id).f
-        debugPrint "combobox patterns"
-        grid [ttk::combobox $w($id).f.p \
-            -textvariable "[namespace current]::currentpattern($id)"] \
-            -row 0 -column 1 -in $w($id).f
-        debugPrint "divs"
-        grid [ttk::label $w($id).f.ld1 -text "Div1: "] \
-            -row 0 -column 2 -in $w($id).f
-        grid [spinbox $w($id).f.d1 -command "[namespace current]::divChanged $id" \
-            -from 8 -to 64 \
-            -increment 1 -format %3.0f -width 3 -textvar ::div1($id)] \
-            -row 0 -column 3 -in $w($id).f
-        grid [ttk::label $w($id).f.ld2 -text "Div2: "] \
-            -row 0 -column 4 -in $w($id).f
-        grid [spinbox $w($id).f.d2 -command "[namespace current]::divChanged $id" \
-            -from 2 -to 64 \
-            -increment 1 -format %3.0f -width 3 -textvar ::div2($id)] \
-            -row 0 -column 5 -in $w($id).f
-
-        debugPrint "step2"
-        $w($id).f.p state readonly
-
-        debugPrint "bindevent"
-        bind $w($id).f.p <<ComboboxSelected>> \
-            "[namespace current]::displayCurrentPattern $id"
-        debugPrint "table"
-
-        table $w($id).t -state disabled \
-            -insertofftime 0 \
-            -bordercursor sb_h_double_arrow \
-            -colorigin -1 -sparsearray 1 \
-            -relief ridge -takefocus 1 -borderwidth 1 -colwidth 4 \
-            -browsecmd "[namespace current]::activeCellChanges $id %r %c" \
-            -cols 0 -rows 0 \
-            -cache 0 \
-            -colstretchmode none -rowstretchmode none \
-            -flashmode 1 -flashtime 2 -autoclear 1 \
-            -justify left -multiline 0 -resizeborders col \
-            -selectmode extended -selecttype cell \
-            -titlecols 1 -titlerows 0 \
-            -validate 0 \
-            -variable [getDataVar $id] \
-            -sparsearray 0 \
-            -exportselection 1 \
-            -xscrollcommand "$w($id).hscroll set" \
-            -yscrollcommand "$w($id).vscroll set" \
-            -rowtagcommand "[namespace current]::rowTag $id"
-        #grid $w($id).t -row 10 -column 0 -sticky news
-
-        if {![llength [info procs ::tk::table::ChangeWidth_]]} {
-            rename ::tk::table::ChangeWidth ::tk::table::ChangeWidth_
-            proc ::tk::table::ChangeWidth {w i a} "
-                ::pd::composer::columnSizeChanged $id
-                uplevel ::tk::table::ChangeWidth_ \$w \$i \$a
-                "
-        }
-
-        set columnsizes($id) {}
-
-        debugPrint "scrollbars"
-        grid [ttk::scrollbar $w($id).vscroll -orient vertical -command "$w($id).t yview"] -row 10 -column 1 -sticky ns
-        grid [ttk::scrollbar $w($id).hscroll -orient horizontal -command "$w($id).t xview"] -row 15 -column 0 -sticky ew
-        #grid [ttk::sizegrip $w($id).resize] -row 15 -column 1 -sticky se
-
-        grid [ttk::entry $w($id).eval] -row 20 -columnspan 2 -sticky ew
-        bind $w($id).eval <Return> "set cmd \[$w($id).eval get]; namespace eval [namespace current] \$cmd; $w($id).eval delete 0 end"
-
-        debugPrint "grid"
-        grid columnconfigure $w($id) 0 -weight 1
-        grid rowconfigure $w($id) 10 -weight 1
-
-        debugPrint "table-tags"
-        $w($id).t tag configure active  -relief solid -background gray -foreground black
-        $w($id).t tag configure flash   -background red   -foreground white
-        $w($id).t tag configure sel     -background blue  -foreground white
-        $w($id).t tag configure title   -background gray  -foreground white -justify right
-        $w($id).t tag configure alt0    -background "#20a8b8"
-        $w($id).t tag configure alt1    -background "#0f7f9f"
-        $w($id).t tag configure notecol -background "#dddded"
-
-        debugPrint "wm"
-        wm minsize $w($id) 300 150
-        wm protocol $w($id) WM_DELETE_WINDOW [list [namespace current]::sendGui [editCommand editor hide]]
-
-        debugPrint "menu"
-        menu $w($id).m -tearoff 0
-        $w($id).m add command -label "New pattern..." \
-            -command "[namespace current]::newPatternDialog $id"
-        $w($id).m add command -label "Pattern properties..." \
-            -command "[namespace current]::patternPropertiesDialog $id"
-        $w($id).m add command -label "Remove pattern..." \
-            -command "[namespace current]::removePatternConfirm $id"
-        $w($id).m add command -label "Create copy..." \
-            -command "[namespace current]::copyPatternDialog $id"
-
-        menu $w($id).mb
-        $w($id) configure -menu $w($id).mb
-        menu $w($id).mb.tools -tearoff 0
-        $w($id).mb.tools add command -label {Reload} \
-            -command {uplevel 0 {source $argv0}}
-        $w($id).mb add cascade -label {Pattern} -menu $w($id).m
-        $w($id).mb add cascade -label {Utils} -menu $w($id).mb.tools
-
-        debugPrint "more-bind-events"
-        bind $w($id).t <ButtonPress-3> "$w($id).t activate @%x,%y; tk_popup $w($id).m %X %Y"
-        bind $w($id).t <Control-t> "switchColumnType $id"
-        bind $w($id).t <ButtonRelease-1> "[namespace current]::columnSizeChanged $id"
-
-        set startup($id) 1
-        set showpattern($id) 0
-        debugPrint "request-patterns"
-        sendGui [editCommand getpatterns]
-
-        return $w($id)
-    }
-
-    proc switchColumnType {id} {
-        debugPrint [info level 0]
-        variable w
-        global colType
-        set curcol [$w($id).t index active col]
-        set tag {}
-        if {![info exists colType(c$curcol)]} {
-            set colType(c$curcol) {notes}
-            set tag {notecol}
-        } elseif {$colType(c$curcol) == {notes}} {
-            unset colType(c$curcol)
-        }
-
-        $w($id).t tag col $tag $curcol
-        #refreshGrid
-    }
-
-    proc activeCellChanges {id row col} {
-        debugPrint [info level 0]
-        variable w
-        if {$col < 0} {$w($id).t activate $row,[incr col]}
-    }
-
-    proc patternPropertiesDialog_common {id options} {
-        debugPrint [info level 0]
-        variable currentpattern
-        variable w
-        set bname 1
-        set brows 1
-        set bcols 1
-        set old_name {}
-        catch {set old_name $currentpattern($id)}
-        set vname {}
-        set vrows {}
-        set vcols {}
-        set action_cancel {destroy %w}
-        set action_ok $action_cancel
-
-        set opts {vname vrows vcols bname brows bcols action_ok action_cancel}
-        foreach opt $opts {
-            catch {set $opt [dict get $options $opt]}
-        }
-        foreach {o v} $options {
-            if {$o ni $opts} {
-                return -code error "Invalid option: $o"
-            }
-        }
-
-        set w_ $w($id).patternProps
-        catch {destroy $w_}
-        toplevel $w_ -class [winfo class .]
-
-        foreach v {action_ok action_cancel} {
-            set $v [string map [list %ns [namespace current] %id $id %w $w_ %old_name $old_name] [set $v]]
-        }
-
-        grid [ttk::label $w_.lname -text "Name: "] -row 0 -column 0
-        grid [ttk::label $w_.lrows -text "Rows: "] -row 1 -column 0
-        grid [ttk::label $w_.lcols -text "Cols: "] -row 2 -column 0
-        grid [ttk::entry $w_.ename] -row 0 -column 1
-        grid [ttk::entry $w_.erows] -row 1 -column 1
-        grid [ttk::entry $w_.ecols] -row 2 -column 1
-        grid [ttk::frame $w_.b] -row 999 -columnspan 2
-        grid [ttk::button $w_.b.ok -text Ok -command $action_ok] -row 0 -column 0 -in $w_.b
-        grid [ttk::button $w_.b.cancel -text Cancel -command $action_cancel] -row 0 -column 1 -in $w_.b
-
-        $w_.ename insert 0 $vname
-        $w_.erows insert 0 $vrows
-        $w_.ecols insert 0 $vcols
-
-        if {!$bname} {$w_.ename configure -state disabled}
-        if {!$brows} {$w_.erows configure -state disabled}
-        if {!$bcols} {$w_.ecols configure -state disabled}
-    }
-
-    proc patternPropertiesDialog {id {options {}}} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable size;
-
-        dict set options action_ok {
-            %ns::renamePattern %id %old_name [%w.ename get]
-            %ns::resizePattern %id [%w.ename get] [%w.erows get] [%w.ecols get]
-            destroy %w
-        }
-        dict set options vname $currentpattern($id)
-        lassign [dict get $size($id) $currentpattern($id)] pat_rows pat_cols
-        dict set options vrows $pat_rows
-        dict set options vcols $pat_cols
-        patternPropertiesDialog_common $id $options
-    }
-
-    proc copyPatternDialog {id {options {}}} {
-        debugPrint [info level 0]
-        variable w;
-        variable size;
-        variable currentpattern;
-        dict set options brows 0
-        dict set options bcols 0
-        dict set options vname [generateNewPatternName $id]
-        lassign [dict get $size($id) $currentpattern($id)] pat_rows pat_cols
-        dict set options vrows $pat_rows
-        dict set options vcols $pat_rows
-        dict set options action_ok {
-            %ns::copyPattern %id %old_name [%w.ename get]
-            destroy %w
-        }
-        patternPropertiesDialog_common $id $options
-    }
-
-    proc removePatternConfirm {id} {
-        debugPrint [info level 0]
-        variable w;
-        variable currentpattern;
-        if {[tk_messageBox \
-            -type yesno -default no \
-            -title "Question" \
-            -icon question -message "Do you confirm pattern delete?" \
-            -detail "The operation cannot be undone" \
-            -parent $w($id)] == {yes}} {
-            removePattern $id $currentpattern($id)
-        }
-    }
-
-    proc newPatternDialog {id {options {}}} {
-        debugPrint [info level 0]
-        dict set options action_ok {
-            %ns::createPattern %id [%w.ename get] [%w.erows get] [%w.ecols get]
-            destroy %w
-        }
-        dict set options vname [generateNewPatternName $id]
-        dict set options vrows 16
-        dict set options vcols 8
-        patternPropertiesDialog_common $id $options
-    }
-
-    #entrypoint
-    proc init {id song_name track_name set_current_pattern debug_flag} {
-        debugPrint [info level 0]
-        variable debug
-        set debug [expr {$debug_flag != 0}]
-        variable w
-        variable songname
-        variable trackname
-        variable size
-        variable currentpattern
-        set w($id) .w_${song_name}_${track_name}
-        set songname($id) $song_name
-        set trackname($id) $track_name
-        if {$set_current_pattern == {NULL}} {
-            set currentpattern($id) {}
-        } else {
-            set currentpattern($id) $set_current_pattern
-        }
-        set size($id) {}
-    }
-
-    proc openWindow {id} {
-        debugPrint [info level 0]
-        createMainWindow $id
-        updateTitle $id
-    }
-
-    proc closeWindow {id} {
-        debugPrint [info level 0]
-        variable w
-        destroy $w($id)
-    }
-
-    proc setCellValueUI {id pat r c v} {
-        upvar 0 [getDataVar $id $pat] data
-        variable symbolmap
-        set data($r,$c) [dict get [dict merge [list $v $v] $symbolmap] $v]
-    }
-
-    proc dispatch {id args} {
-        debugPrint [info level 0]
-        variable w
-        variable patterns
-        variable size
-        variable currentpattern
-        variable startup
-        variable showpattern
-        variable quirks_fix_int_floats
-        switch -exact [lindex $args 0] {
-            patternnames {
-                # for track mode
-                set patterns($id) [lrange $args 1 end]
-                debugPrint "patterns <- $patterns($id)"
-                $w($id).f.p configure -values $patterns($id)
-                if {$startup($id)} {
-                    set startup($id) 0
-                    if {[llength $patterns($id)] > 0} {
-                        displayPattern $id [lindex $patterns($id) 0]
-                    }
-                }
-            }
-            patternsize {
-                set pat_name [lindex $args 1]
-                set pat_rows [lindex $args 2]
-                set pat_cols [lindex $args 3]
-                set new_size [list $pat_rows $pat_cols]
-                debugPrint "got patternsize: '$pat_name' (size = $pat_rows x $pat_cols)"
-                if {![dict exists $size($id) $pat_name] || [dict get $size($id) $pat_name] != $new_size || $showpattern($id)} {
-                    # TODO: uhm, does this really need to be inside the if???
-                    dict set size($id) $pat_name $new_size
-
-                    # request rows
-                    for {set i 0} {$i < $pat_rows} {incr i} {
-                        sendGui [editCommand getrow $pat_name $i]
-                    }
-                    # ...and column width
-                    sendGui [editCommand meta track get colw none]
-                    # ...and div1/div2 settings
-                    sendGui [editCommand meta track get div 8 4]
-                }
-            }
-            patternrow {
-                set pat_name [lindex $args 1]
-                if {$quirks_fix_int_floats} {
-                    set row_num [expr {int([lindex $args 2])}]
-                } else {
-                    set row_num [lindex $args 2]
-                }
-                set row [lrange $args 3 end]
-                debugPrint "got row: '$pat_name' ($row_num) {$row}"
-                setCellValueUI $id $pat_name $row_num -1 [expr {1+$row_num}]
-                for {set i 0} {$i < [llength $row]} {incr i} {
-                    setCellValueUI $id $pat_name $row_num $i [lindex $row $i]
-                }
-                lassign [dict get $size($id) $pat_name] pat_rows pat_cols
-                if {$row_num + 1 == $pat_rows} {
-                    if {$showpattern($id)} {
-                        set showpattern($id) 0
-                        displayPattern_async $id $pat_name
-                    }
-                }
-            }
-            patterncell {
-                set pat_name [lindex $args 1]
-                if {$quirks_fix_int_floats} {
-                    set row_num [expr {int([lindex $args 2])}]
-                    set col_num [expr {int([lindex $args 3])}]
-                } else {
-                    set row_num [lindex $args 2]
-                    set col_num [lindex $args 3]
-                }
-                set cell [lindex $args 4]
-                debugPrint "got cell: '$pat_name' ($row_num,$col_num) {$cell}"
-                debugPrint "dataVar = [getDataVar $id $pat_name]"
-                setCellValueUI $id $pat_name $row_num $col_num $cell
-            }
-            meta {
-                switch -exact [lindex $args 1] {
-                    track {
-                        switch -exact [lindex $args 2] {
-                            colw {
-                                set a [lrange $args 3 end]
-                                debugPrint "got meta: track: colw: '$a'"
-                                if {$a == {none}} return
-                                $w($id).t width {*}$a
-                            }
-                            div {
-                                lassign [lrange $args 3 end] ::div1($id) ::div2($id)
-                                debugPrint "got meta: track: div: '$::div1($id) $::div2($id)'"
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/externals/ffext/notemono/COPYING b/externals/ffext/notemono/COPYING
deleted file mode 100644
index 2128a66ea7d038eecac13febce1a26b3da3b7159..0000000000000000000000000000000000000000
--- a/externals/ffext/notemono/COPYING
+++ /dev/null
@@ -1,280 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
diff --git a/externals/ffext/notemono/README b/externals/ffext/notemono/README
deleted file mode 100644
index 1b765baf46a5e52f8989b47931c7d15313a41a00..0000000000000000000000000000000000000000
--- a/externals/ffext/notemono/README
+++ /dev/null
@@ -1,5 +0,0 @@
-this external is for tracking highest/lowest note
-pressed on a midi keyboard, so you can achieve
-monophonic midi input, in order to control monophonic
-synth/oscillators
-
diff --git a/externals/ffext/notemono/makefile b/externals/ffext/notemono/makefile
deleted file mode 100644
index 1bf18aaa23e08ef3fcf63cb93b9e11af0eaf6a62..0000000000000000000000000000000000000000
--- a/externals/ffext/notemono/makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-PD-PATH=/usr/lib/pd
-PD-SCR=/usr/include
-
-
-INCLUDE=-I$(PD-SCR) -I.
-LIB=-lc -lm
-CC_FLAGS = -DPD -c -Wall
-LD_FLAGS = --export-dynamic -shared -o
-
-
-TARGET=notemono.pd_linux
-OBJ=notemono.o
-#--------------------------------------------------------
-
-all: pd_linux
-
-pd_linux: $(TARGET)
-
-$(TARGET): $(OBJ)
-	$(LD) $(LD_FLAGS) $(TARGET) $(OBJ) $(LIB)
-	strip --strip-unneeded $(TARGET)
-	chmod 755 $(TARGET)
-
-.c.o:
-	$(CC) $(CC_FLAGS) $(INCLUDE) $<
-
-clean:
-	rm -f $(OBJ) $(TARGET)
diff --git a/externals/ffext/notemono/notemono-help.pd b/externals/ffext/notemono/notemono-help.pd
deleted file mode 100644
index cbbcd533b94fab0503bd20a27b57dceea986a56f..0000000000000000000000000000000000000000
--- a/externals/ffext/notemono/notemono-help.pd
+++ /dev/null
@@ -1,37 +0,0 @@
-#N canvas 409 325 572 404 10;
-#X obj 87 267 notemono low;
-#X obj 197 267 notemono high;
-#X obj 87 294 pack f f;
-#X obj 197 294 pack f f;
-#X obj 87 240 unpack f f;
-#X obj 197 240 unpack f f;
-#X obj 87 321 print low;
-#X obj 197 321 print high;
-#X obj 87 166 t a a;
-#X obj 87 52 notein;
-#X floatatom 181 53 5 1 16 1 <--select_midi_channel midich -;
-#X obj 87 92 pack f f;
-#X obj 87 128 spigot;
-#X obj 168 92 ==;
-#X msg 197 166 \; midich 1;
-#X obj 197 139 loadbang;
-#X connect 0 0 2 0;
-#X connect 0 1 2 1;
-#X connect 1 0 3 0;
-#X connect 1 1 3 1;
-#X connect 2 0 6 0;
-#X connect 3 0 7 0;
-#X connect 4 0 0 0;
-#X connect 4 1 0 1;
-#X connect 5 0 1 0;
-#X connect 5 1 1 1;
-#X connect 8 0 4 0;
-#X connect 8 1 5 0;
-#X connect 9 0 11 0;
-#X connect 9 1 11 1;
-#X connect 9 2 13 0;
-#X connect 10 0 13 1;
-#X connect 11 0 12 0;
-#X connect 12 0 8 0;
-#X connect 13 0 12 1;
-#X connect 15 0 14 0;
diff --git a/externals/ffext/notemono/notemono.c b/externals/ffext/notemono/notemono.c
deleted file mode 100644
index 4473f55d77bb32eec45fd2681749d2b7070876c8..0000000000000000000000000000000000000000
--- a/externals/ffext/notemono/notemono.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright (c) 2005 Federico Ferri.
- * Release under the terms of GPL license.
- * Based on PureData by Miller Puckette and others. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "m_pd.h"
-
-// change this if you have more than MAX_N fingers...
-#define MAX_N 16
-
-#define method(method_name) notemono ## _ ## method_name
-#define t_self t_notemono
-#define _self _notemono
-#define self_class notemono_class
-#define sz_classname "notemono"
-
-#define MODE_MIN    0
-#define MODE_MIN_S  "low"
-#define MODE_MAX    1
-#define MODE_MAX_S  "high"
-
-typedef struct _self
-{
-    t_object       x_obj;
-    t_outlet      *x_out2;
-    int            x_note_status[MAX_N]; //array
-    t_float        x_note_pitch;
-    t_float        x_note_vel;
-    t_float        x_out_midi;
-    int            x_out_gate;
-    int mode; // max or min ?
-} t_self;
-
-static t_class *self_class;
-
-static void method(out)(t_self *x) {
-    int j;
-    t_float m = -1;
-    int g = 0;
-    for(j=0; j<MAX_N; j++) {
-        if(x->x_note_status[j] >= 0) {
-            switch(x->mode) {
-                case MODE_MIN:
-                    if(x->x_note_status[j] < m || m == -1) {
-                        m = x->x_note_status[j];
-                        g = 1;
-                    }
-                    break;
-                case MODE_MAX:
-                    if(x->x_note_status[j] > m || m == -1) {
-                        m = x->x_note_status[j];
-                        g = 1;
-                    }
-                    break;
-            }
-        }
-    }
-    if(m != x->x_out_midi || g != x->x_out_gate) {
-        x->x_out_midi = m;
-        x->x_out_gate = g;
-        outlet_float(x->x_out2, g);
-	    outlet_float(x->x_obj.ob_outlet, m);
-    }
-}
-
-static void method(float)(t_self *x, t_float f) {
-    int j;
-    x->x_note_pitch = f;
-    for(j=0; j<MAX_N; j++) {
-	    if(x->x_note_status[j] == x->x_note_pitch) {
-		    if(x->x_note_vel > 0) {
-			    x->x_note_status[j] = x->x_note_pitch;
-			    method(out)(x);
-			    return;
-		    } else {
-			    x->x_note_status[j] = -1;
-			    method(out)(x);
-			    return;
-		    }
-	    }
-    }
-    if(x->x_note_vel > 0) {
-        for(j=0; j<MAX_N; j++) {
-            if(x->x_note_status[j] == -1 && x->x_note_vel > 0) {
-                x->x_note_status[j] = x->x_note_pitch;
-                method(out)(x);
-                return;
-            }
-        }
-    }
-}
-
-static void * method(new)(t_symbol* s, int ac, t_atom* av) {
-    t_self *x;
-    int err = 0;
-    if(ac == 1) {
-        x = (t_self *)pd_new(self_class);
-        x->x_out_midi = -1;
-        x->x_out_gate = 0;
-        t_symbol *arg = atom_getsymbolarg(0, ac, av);
-        if(gensym(MODE_MIN_S) == arg) {
-            x->mode = MODE_MIN;
-        } else if (gensym(MODE_MAX_S) == arg) {
-            x->mode = MODE_MAX;
-        } else {
-            err = 1;
-        }
-    } else {
-        err = 1;
-    }
-    if(err) {
-        error(sz_classname ": wrong arguments."
-            " possible values: " MODE_MIN_S " " MODE_MAX_S);
-        return NULL;
-    }
-    int j;
-    for(j=0; j<MAX_N; j++) x->x_note_status[j] = -1;
-    outlet_new((t_object *)x, &s_float);
-    floatinlet_new(&x->x_obj, &x->x_note_vel);
-    x->x_out2 = outlet_new(&x->x_obj, gensym("float"));
-    return (x);
-}
-
-void method(setup)(void) {
-    self_class = class_new(gensym(sz_classname), 
-			      (t_newmethod)method(new), 0,
-			      sizeof(t_self), 0,
-			      A_GIMME, 0);
-    class_addfloat(self_class, method(float));
-    class_sethelpsymbol(self_class, gensym(sz_classname));
-}
-
diff --git a/externals/ffext/tms5220~/Makefile b/externals/ffext/tms5220~/Makefile
deleted file mode 100644
index 7a84ae6bb0556ccbf052d1876a00a49f4cafd7bf..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/Makefile
+++ /dev/null
@@ -1,298 +0,0 @@
-## Pd library template version 1.0.1
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = tms5220~
-
-# add your .c source files to the SOURCES variable, help files will be
-# included automatically
-SOURCES = tms5220~.c
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-SOURCES_android = 
-SOURCES_cygwin = 
-SOURCES_macosx = 
-SOURCES_iphoneos = 
-SOURCES_linux = 
-SOURCES_windows = 
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = 
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = 
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, example patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = 
-
-LIBS = -lsamplerate
-
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-
-INSTALL = install
-INSTALL_FILE    = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g
-LDFLAGS =  
-#LIBS = 
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS) \
-      -I/Applications/Pd-extended.app/Contents/Resources/include
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include \
-      -I/Applications/Pd-extended.app/Contents/Resources/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L$(PD_PATH)/src
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L$(PD_PATH)/src -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_FILE) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_FILE) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_FILE) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || \
-		$(INSTALL_FILE) $(SOURCES:.c=-help.pd) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS:.pd=-help.pd) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_FILE) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_FILE) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_FILE) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_FILE) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_FILE) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_FILE) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_FILE) $(SOURCES:.c=-help.pd) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_FILE) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_FILE) Makefile  $(DISTDIR)
-	$(INSTALL_FILE) README.txt $(DISTDIR)
-	$(INSTALL_FILE) LICENSE.txt $(DISTDIR)
-	$(INSTALL_FILE) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_FILE) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_FILE) $(ALLSOURCES:.c=-help.pd) $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS:.pd=-help.pd) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_FILE) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_FILE) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_FILE) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/ffext/tms5220~/README.txt b/externals/ffext/tms5220~/README.txt
deleted file mode 100644
index d1308aec900eb5c3d4eb466cbc43300eeb3f8eb6..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/README.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-TMS5220 IC emulation for pure-data
-written by Federico Ferri
-Released under GPL-3 license.
-
-TMS5220 emulation core comes from MAME sources and it's written by Frank Palazzolo and others.
-
-The emulation should work the same as the original IC.
-A datasheet for the original IC can be found at:
-  http://www.gamessound.com/podcasts/podcast1/TI_TMS5220.pdf
-
-
diff --git a/externals/ffext/tms5220~/tms5220/driver.h b/externals/ffext/tms5220~/tms5220/driver.h
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/externals/ffext/tms5220~/tms5220/tms5220.c b/externals/ffext/tms5220~/tms5220/tms5220.c
deleted file mode 100644
index 1e61979fba1673807a34ea25cf857ca61620ffcc..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/**********************************************************************************************
-
-     TMS5220 simulator
-
-     Written for MAME by Frank Palazzolo
-     With help from Neill Corlett
-     Additional tweaking by Aaron Giles
-
-***********************************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include "driver.h"
-#include "tms5220.h"
-
-
-/* Pull in the ROM tables */
-#include "tms5220r.c"
-
-
-/* these contain data that describes the 128-bit data FIFO */
-#define FIFO_SIZE 16
-static unsigned char fifo[FIFO_SIZE];
-static int fifo_head;
-static int fifo_tail;
-static int fifo_count;
-static int bits_taken;
-
-
-/* these contain global status bits */
-static int speak_external;
-static int talk_status;
-static int buffer_low;
-static int buffer_empty;
-static int irq_pin;
-
-static void (*irq_func)(void);
-
-
-/* these contain data describing the current and previous voice frames */
-static unsigned short old_energy = 0;
-static unsigned short old_pitch = 0;
-static int old_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static unsigned short new_energy = 0;
-static unsigned short new_pitch = 0;
-static int new_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-
-/* these are all used to contain the current state of the sound generation */
-static unsigned short current_energy = 0;
-static unsigned short current_pitch = 0;
-static int current_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static unsigned short target_energy = 0;
-static unsigned short target_pitch = 0;
-static int target_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static int interp_count = 0;       /* number of interp periods (0-7) */
-static int sample_count = 0;       /* sample number within interp (0-24) */
-static int pitch_count = 0;
-
-static int u[11] = {0,0,0,0,0,0,0,0,0,0,0};
-static int x[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static int randbit = 0;
-
-
-/* Static function prototypes */
-static void process_command (void);
-static int extract_bits (int count);
-static int parse_frame (int removeit);
-static void check_buffer_low (void);
-static void cause_interrupt (void);
-
-
-/*#define DEBUG_5220*/
-#ifdef DEBUG_5220
-    static FILE *f;
-#endif
-
-
-/**********************************************************************************************
-
-     tms5220_reset -- resets the TMS5220
-
-***********************************************************************************************/
-
-void tms5220_reset (void)
-{
-    /* initialize the FIFO */
-    memset (fifo, 0, sizeof (fifo));
-    fifo_head = fifo_tail = fifo_count = bits_taken = 0;
-
-    /* initialize the chip state */
-    speak_external = talk_status = buffer_empty = irq_pin = 0;
-    buffer_low = 1;
-
-    /* initialize the energy/pitch/k states */
-    old_energy = new_energy = current_energy = target_energy = 0;
-    old_pitch = new_pitch = current_pitch = target_pitch = 0;
-    memset (old_k, 0, sizeof (old_k));
-    memset (new_k, 0, sizeof (new_k));
-    memset (current_k, 0, sizeof (current_k));
-    memset (target_k, 0, sizeof (target_k));
-
-    /* initialize the sample generators */
-    interp_count = sample_count = pitch_count = 0;
-    randbit = 0;
-    memset (u, 0, sizeof (u));
-    memset (x, 0, sizeof (x));
-
-    #ifdef DEBUG_5220
-        f = fopen ("tms.log", "w");
-    #endif
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_reset -- reset the TMS5220
-
-***********************************************************************************************/
-
-void tms5220_set_irq (void (*func)(void))
-{
-    irq_func = func;
-}
-
-
-/**********************************************************************************************
-
-     tms5220_data_write -- handle a write to the TMS5220
-
-***********************************************************************************************/
-
-void tms5220_data_write (int data)
-{
-    /* add this byte to the FIFO */
-    if (fifo_count < FIFO_SIZE)
-    {
-        fifo[fifo_tail] = data;
-        fifo_tail = (fifo_tail + 1) % FIFO_SIZE;
-        fifo_count++;
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Added byte to FIFO (size=%2d)\n", fifo_count);
-        #endif
-    }
-    else
-    {
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Ran out of room in the FIFO!\n");
-        #endif
-    }
-
-    /* update the buffer low state */
-    check_buffer_low ();
-}
-
-
-/**********************************************************************************************
-
-     tms5220_status_read -- read status from the TMS5220
-
-	  From the data sheet:
-        bit 0 = TS - Talk Status is active (high) when the VSP is processing speech data.
-                Talk Status goes active at the initiation of a Speak command or after nine
-                bytes of data are loaded into the FIFO following a Speak External command. It
-                goes inactive (low) when the stop code (Energy=1111) is processed, or
-                immediately by a buffer empty condition or a reset command.
-        bit 1 = BL - Buffer Low is active (high) when the FIFO buffer is more than half empty.
-                Buffer Low is set when the "Last-In" byte is shifted down past the half-full
-                boundary of the stack. Buffer Low is cleared when data is loaded to the stack
-                so that the "Last-In" byte lies above the half-full boundary and becomes the
-                ninth data byte of the stack.
-        bit 2 = BE - Buffer Empty is active (high) when the FIFO buffer has run out of data
-                while executing a Speak External command. Buffer Empty is set when the last bit
-                of the "Last-In" byte is shifted out to the Synthesis Section. This causes
-                Talk Status to be cleared. Speed is terminated at some abnormal point and the
-                Speak External command execution is terminated.
-
-***********************************************************************************************/
-
-int tms5220_status_read (void)
-{
-    /* clear the interrupt pin */
-    irq_pin = 0;
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "Status read: TS=%d BL=%d BE=%d\n", talk_status, buffer_low, buffer_empty);
-    #endif
-
-    return (talk_status << 7) | (buffer_low << 6) | (buffer_empty << 5);
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_ready_read -- returns the ready state of the TMS5220
-
-***********************************************************************************************/
-
-int tms5220_ready_read (void)
-{
-    return (fifo_count < FIFO_SIZE-1);
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_int_read -- returns the interrupt state of the TMS5220
-
-***********************************************************************************************/
-
-int tms5220_int_read (void)
-{
-    return irq_pin;
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_process -- fill the buffer with a specific number of samples
-
-***********************************************************************************************/
-
-void tms5220_process(unsigned char *buffer, unsigned int size)
-{
-    int buf_count=0;
-    int i, interp_period;
-
-tryagain:
-
-    /* if we're not speaking, parse commands */
-    while (!speak_external && fifo_count > 0)
-        process_command ();
-
-    /* if there's nothing to do, bail */
-    if (!size)
-        return;
-
-    /* if we're empty and still not speaking, fill with nothingness */
-    if (!speak_external)
-        goto empty;
-
-    /* if we're to speak, but haven't started, wait for the 9th byte */
-    if (!talk_status)
-    {
-        if (fifo_count < 9)
-           goto empty;
-
-        /* parse but don't remove the first frame, and set the status to 1 */
-        parse_frame (0);
-        talk_status = 1;
-        buffer_empty = 0;
-    }
-
-    /* loop until the buffer is full or we've stopped speaking */
-    while ((size > 0) && speak_external)
-    {
-        int current_val;
-
-        /* if we're ready for a new frame */
-        if ((interp_count == 0) && (sample_count == 0))
-        {
-            /* Parse a new frame */
-            if (!parse_frame (1))
-                break;
-
-            /* Set old target as new start of frame */
-            current_energy = old_energy;
-            current_pitch = old_pitch;
-            for (i = 0; i < 10; i++)
-                current_k[i] = old_k[i];
-
-            /* is this a zero energy frame? */
-            if (current_energy == 0)
-            {
-                //printf("processing frame: zero energy\n");
-                target_energy = 0;
-                target_pitch = current_pitch;
-                for (i = 0; i < 10; i++)
-                    target_k[i] = current_k[i];
-            }
-
-            /* is this a stop frame? */
-            else if (current_energy == (energytable[15] >> 6))
-            {
-                //printf("processing frame: stop frame\n");
-                current_energy = energytable[0] >> 6;
-                target_energy = current_energy;
-                speak_external = talk_status = 0;
-                interp_count = sample_count = pitch_count = 0;
-
-                /* generate an interrupt if necessary */
-                cause_interrupt ();
-
-                /* try to fetch commands again */
-                goto tryagain;
-            }
-            else
-            {
-                /* is this the ramp down frame? */
-                if (new_energy == (energytable[15] >> 6))
-                {
-                    //printf("processing frame: ramp down\n");
-                    target_energy = 0;
-                    target_pitch = current_pitch;
-                    for (i = 0; i < 10; i++)
-                        target_k[i] = current_k[i];
-                }
-                /* Reset the step size */
-                else
-                {
-                    //printf("processing frame: Normal\n");
-                    //printf("*** Energy = %d\n",current_energy);
-                    //printf("proc: %d %d\n",last_fbuf_head,fbuf_head);
-
-                    target_energy = new_energy;
-                    target_pitch = new_pitch;
-
-                    for (i = 0; i < 4; i++)
-                        target_k[i] = new_k[i];
-                    if (current_pitch == 0)
-                        for (i = 4; i < 10; i++)
-                        {
-                            target_k[i] = current_k[i] = 0;
-                        }
-                    else
-                        for (i = 4; i < 10; i++)
-                            target_k[i] = new_k[i];
-                }
-            }
-        }
-        else if (interp_count == 0)
-        {
-            /* Update values based on step values */
-            //printf("\n");
-
-            interp_period = sample_count / 25;
-            current_energy += (target_energy - current_energy) / interp_coeff[interp_period];
-            if (old_pitch != 0)
-                current_pitch += (target_pitch - current_pitch) / interp_coeff[interp_period];
-
-            //printf("*** Energy = %d\n",current_energy);
-
-            for (i = 0; i < 10; i++)
-            {
-                current_k[i] += (target_k[i] - current_k[i]) / interp_coeff[interp_period];
-            }
-        }
-
-        if (old_energy == 0)
-        {
-            /* generate silent samples here */
-            current_val = 0x00;
-        }
-        else if (old_pitch == 0)
-        {
-            /* generate unvoiced samples here */
-            randbit = (rand () % 2) * 2 - 1;
-            current_val = (randbit * current_energy) / 4;
-        }
-        else
-        {
-            /* generate voiced samples here */
-            if (pitch_count < sizeof (chirptable))
-                current_val = (chirptable[pitch_count] * current_energy) / 256;
-            else
-                current_val = 0x00;
-        }
-
-        /* Lattice filter here */
-
-        u[10] = current_val;
-
-        for (i = 9; i >= 0; i--)
-        {
-            u[i] = u[i+1] - ((current_k[i] * x[i]) / 32768);
-        }
-        for (i = 9; i >= 1; i--)
-        {
-            x[i] = x[i-1] + ((current_k[i-1] * u[i-1]) / 32768);
-        }
-
-        x[0] = u[0];
-
-        /* clipping, just like the chip */
-
-        if (u[0] > 511)
-            buffer[buf_count] = 127;
-        else if (u[0] < -512)
-            buffer[buf_count] = -128;
-        else
-            buffer[buf_count] = u[0] >> 2;
-
-        /* Update all counts */
-
-        size--;
-        sample_count = (sample_count + 1) % 200;
-
-        if (current_pitch != 0)
-            pitch_count = (pitch_count + 1) % current_pitch;
-        else
-            pitch_count = 0;
-
-        interp_count = (interp_count + 1) % 25;
-        buf_count++;
-    }
-
-empty:
-
-    while (size > 0)
-    {
-        buffer[buf_count] = 0x00;
-        buf_count++;
-        size--;
-    }
-}
-
-
-
-/**********************************************************************************************
-
-     process_command -- extract a byte from the FIFO and interpret it as a command
-
-***********************************************************************************************/
-
-static void process_command (void)
-{
-    unsigned char cmd;
-
-    /* if there are stray bits, ignore them */
-    if (bits_taken)
-    {
-        bits_taken = 0;
-        fifo_count--;
-        fifo_head = (fifo_head + 1) % FIFO_SIZE;
-    }
-
-    /* grab a full byte from the FIFO */
-    if (fifo_count > 0)
-    {
-        cmd = fifo[fifo_head] & 0x70;
-        fifo_count--;
-        fifo_head = (fifo_head + 1) % FIFO_SIZE;
-
-        /* only real command we handle now is speak external */
-        if (cmd == 0x60)
-        {
-            speak_external = 1;
-
-            /* according to the datasheet, this will cause an interrupt due to a BE condition */
-            if (!buffer_empty)
-            {
-                buffer_empty = 1;
-                cause_interrupt ();
-            }
-        }
-    }
-
-    /* update the buffer low state */
-    check_buffer_low ();
-}
-
-
-
-/**********************************************************************************************
-
-     extract_bits -- extract a specific number of bits from the FIFO
-
-***********************************************************************************************/
-
-static int extract_bits (int count)
-{
-    int val = 0;
-
-    while (count--)
-    {
-        val = (val << 1) | ((fifo[fifo_head] >> bits_taken) & 1);
-        bits_taken++;
-        if (bits_taken >= 8)
-        {
-            fifo_count--;
-            fifo_head = (fifo_head + 1) % FIFO_SIZE;
-            bits_taken = 0;
-        }
-    }
-    return val;
-}
-
-
-
-/**********************************************************************************************
-
-     parse_frame -- parse a new frame's worth of data; returns 0 if not enough bits in buffer
-
-***********************************************************************************************/
-
-static int parse_frame (int removeit)
-{
-    int old_head, old_taken, old_count;
-    int bits, indx, i, rep_flag;
-
-    /* remember previous frame */
-    old_energy = new_energy;
-    old_pitch = new_pitch;
-    for (i = 0; i < 10; i++)
-        old_k[i] = new_k[i];
-
-    /* clear out the new frame */
-    new_energy = 0;
-    new_pitch = 0;
-    for (i = 0; i < 10; i++)
-        new_k[i] = 0;
-
-    /* if the previous frame was a stop frame, don't do anything */
-    if (old_energy == (energytable[15] >> 6))
-        return 1;
-
-    /* remember the original FIFO counts, in case we don't have enough bits */
-    old_count = fifo_count;
-    old_head = fifo_head;
-    old_taken = bits_taken;
-
-    /* count the total number of bits available */
-    bits = fifo_count * 8 - bits_taken;
-
-    /* attempt to extract the energy index */
-    bits -= 4;
-    if (bits < 0)
-        goto ranout;
-    indx = extract_bits (4);
-    new_energy = energytable[indx] >> 6;
-
-	/* if the index is 0 or 15, we're done */
-	if (indx == 0 || indx == 15)
-	{
-		#ifdef DEBUG_5220
-			if (f) fprintf (f, "  (4-bit energy=%d frame)\n",new_energy);
-		#endif
-
-		/* clear fifo if stop frame encountered */
-		if (indx == 15)
-		{
-			fifo_head = fifo_tail = fifo_count = bits_taken = 0;
-			removeit = 1;
-		}
-		goto done;
-	}
-
-    /* attempt to extract the repeat flag */
-    bits -= 1;
-    if (bits < 0)
-        goto ranout;
-    rep_flag = extract_bits (1);
-
-    /* attempt to extract the pitch */
-    bits -= 6;
-    if (bits < 0)
-        goto ranout;
-    indx = extract_bits (6);
-    new_pitch = pitchtable[indx] / 256;
-
-    /* if this is a repeat frame, just copy the k's */
-    if (rep_flag)
-    {
-        for (i = 0; i < 10; i++)
-            new_k[i] = old_k[i];
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "  (11-bit energy=%d pitch=%d rep=%d frame)\n", new_energy, new_pitch, rep_flag);
-        #endif
-        goto done;
-    }
-
-    /* if the pitch index was zero, we need 4 k's */
-    if (indx == 0)
-    {
-        /* attempt to extract 4 K's */
-        bits -= 18;
-        if (bits < 0)
-            goto ranout;
-        new_k[0] = k1table[extract_bits (5)];
-        new_k[1] = k2table[extract_bits (5)];
-        new_k[2] = k3table[extract_bits (4)];
-        new_k[3] = k4table[extract_bits (4)];
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "  (29-bit energy=%d pitch=%d rep=%d 4K frame)\n", new_energy, new_pitch, rep_flag);
-        #endif
-        goto done;
-    }
-
-    /* else we need 10 K's */
-    bits -= 39;
-    if (bits < 0)
-        goto ranout;
-    new_k[0] = k1table[extract_bits (5)];
-    new_k[1] = k2table[extract_bits (5)];
-    new_k[2] = k3table[extract_bits (4)];
-    new_k[3] = k4table[extract_bits (4)];
-    new_k[4] = k5table[extract_bits (4)];
-    new_k[5] = k6table[extract_bits (4)];
-    new_k[6] = k7table[extract_bits (4)];
-    new_k[7] = k8table[extract_bits (3)];
-    new_k[8] = k9table[extract_bits (3)];
-    new_k[9] = k10table[extract_bits (3)];
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "  (50-bit energy=%d pitch=%d rep=%d 10K frame)\n", new_energy, new_pitch, rep_flag);
-    #endif
-
-done:
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "Parsed a frame successfully - %d bits remaining\n", bits);
-    #endif
-
-    /* if we're not to remove this one, restore the FIFO */
-    if (!removeit)
-    {
-        fifo_count = old_count;
-        fifo_head = old_head;
-        bits_taken = old_taken;
-    }
-
-    /* update the buffer_low status */
-    check_buffer_low ();
-    return 1;
-
-ranout:
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "Ran out of bits on a parse!\n");
-    #endif
-
-    /* this is an error condition; mark the buffer empty and turn off speaking */
-    buffer_empty = 1;
-    talk_status = speak_external = 0;
-    fifo_count = fifo_head = fifo_tail = 0;
-
-    /* generate an interrupt if necessary */
-    cause_interrupt ();
-    return 0;
-}
-
-
-
-/**********************************************************************************************
-
-     check_buffer_low -- check to see if the buffer low flag should be on or off
-
-***********************************************************************************************/
-
-static void check_buffer_low (void)
-{
-    /* did we just become low? */
-    if (fifo_count < 8)
-    {
-        /* generate an interrupt if necessary */
-        if (!buffer_low)
-            cause_interrupt ();
-        buffer_low = 1;
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Buffer low set\n");
-        #endif
-    }
-
-    /* did we just become full? */
-    else
-    {
-        buffer_low = 0;
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Buffer low cleared\n");
-        #endif
-    }
-}
-
-
-
-/**********************************************************************************************
-
-     cause_interrupt -- generate an interrupt
-
-***********************************************************************************************/
-
-static void cause_interrupt (void)
-{
-    irq_pin = 1;
-    if (irq_func) irq_func ();
-}
diff --git a/externals/ffext/tms5220~/tms5220/tms5220.h b/externals/ffext/tms5220~/tms5220/tms5220.h
deleted file mode 100644
index 614d7bc2a3daffa1461df1fc037db7e249c93354..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef tms5220_h
-#define tms5220_h
-
-void tms5220_reset (void);
-void tms5220_set_irq (void (*func)(void));
-
-void tms5220_data_write (int data);
-int tms5220_status_read (void);
-int tms5220_ready_read (void);
-int tms5220_int_read (void);
-
-void tms5220_process (unsigned char *buffer, unsigned int size);
-
-#endif
-
diff --git a/externals/ffext/tms5220~/tms5220/tms5220.txt b/externals/ffext/tms5220~/tms5220/tms5220.txt
deleted file mode 100644
index 8af747c7ff46a3cf13a9dfbd8d3d02e7a1d823c3..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-*****************************
-
-    TI TMS5220 Emulator
-    (c) Frank Palazzolo
-
-*****************************
-
-The TI TMS5220 Speech chip uses Linear-Predictive decoding scheme to produce
-speech from very compact data.  This scheme is very similar to the U.S.
-Federal Standard LPC-10e coding system, which was developed soon after
-this chip.
-
-It is virtually identical to the chip used in the landmark "Speak 'N Spell"
-toy produced in the '70s.
-
-Acknowledgements:
------------------
-
-I would like to thank Larry Brantingham, the original designer of the chip,
-for his technical help.
-
-I would also like to thank Neill Cortlett, who first showed that this chip
-could be emulated in real-time in his Multi-Gauntlet Emulator.
-
-Theory of operation:
---------------------
-
-The TI speech chip contains a 128-bit parallel-in, serial-out FIFO, a
-10-pole digital lattice filter which models the vocal tract, and a D/A
-converter.  It was originally design to operate either with a microcomputer
-interface, or with a serial speech ROM.  The Speech ROM functionality is
-not emulated as no arcade games require it.
-
-The input data is writen a byte at a time into the chip, and it is
-decoded bitwise into variable length frames.
-
-Possible Frame Types are as follows:
-
-          Energy RF Pitch  K1    K2    K3   K4   K5   K6   K7   K8  K9  K10
-          -----------------------------------------------------------------
-
-Silent    0000
-Stop      1111
-Repeat    XXXX   1  XXXXXX  
-Unvoiced  XXXX   0  000000 XXXXX XXXXX XXXX XXXX  
-Voiced    XXXX   0  XXXXXX XXXXX XXXXX XXXX XXXX XXXX XXXX XXXX XXX XXX XXX
-
-Stop Frame:     Stops the current speech
-Repeat Frame:   Uses the digital filter coefficients from the previous frame,
-                with new Energy and Pitch values
-Unvoiced Frame: Uses Noise generator to feed 4 pole digital filter
-                (All other coefficients are set to zero)
-Voiced Frame:   Uses Pulse Generator to feed 10 pole digital filter
-
-All parameters (Energy, Pitch, K1-K10) are indexes into a lookup table for
-actual values (see TMS5220R.c)
-
-K1-K10 are reflection coefficients for the lattice filter.
-
-Each frame is used to generate 200 samples, and 8 times during each frame,
-(every 25 samples), these values are linearly interpolated to smooth out
-frame transitions.
-
-The Noise generator is based on a shift-register type random-bit generator.
-The Pulse generator is based on a lookup table.
-
-API:
-----
-
-TBD
-
-More:
------
-
-For further technical info, the data sheet is floating around on the net.
-(I believe the name is TMS.PDF)  If you can't find a copy, email me and
-I'll point you towards it.  Feel free to contact me if you have a question.
-
-Frank Palazzolo
-
-palazzol@tir.com
-
-
-
-
-Downloaded from: http://files.emuwiki.com/tms5220.7z
diff --git a/externals/ffext/tms5220~/tms5220/tms5220r.c b/externals/ffext/tms5220~/tms5220/tms5220r.c
deleted file mode 100644
index 93ba249cff0ec5f70f75f8b6f404f73a4cea37a4..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220r.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* TMS5220 ROM Tables */
-
-/* This is the energy lookup table (4-bits -> 10-bits) */
-
-const unsigned short energytable[0x10]={
-0x0000,0x00C0,0x0140,0x01C0,0x0280,0x0380,0x0500,0x0740,
-0x0A00,0x0E40,0x1440,0x1C80,0x2840,0x38C0,0x5040,0x7FC0};
-
-/* This is the pitch lookup table (6-bits -> 8-bits) */
-
-const unsigned short pitchtable [0x40]={
-0x0000,0x1000,0x1100,0x1200,0x1300,0x1400,0x1500,0x1600,
-0x1700,0x1800,0x1900,0x1A00,0x1B00,0x1C00,0x1D00,0x1E00,
-0x1F00,0x2000,0x2100,0x2200,0x2300,0x2400,0x2500,0x2600,
-0x2700,0x2800,0x2900,0x2A00,0x2B00,0x2D00,0x2F00,0x3100,
-0x3300,0x3500,0x3600,0x3900,0x3B00,0x3D00,0x3F00,0x4200,
-0x4500,0x4700,0x4900,0x4D00,0x4F00,0x5100,0x5500,0x5700,
-0x5C00,0x5F00,0x6300,0x6600,0x6A00,0x6E00,0x7300,0x7700,
-0x7B00,0x8000,0x8500,0x8A00,0x8F00,0x9500,0x9A00,0xA000};
-
-/* These are the reflection coefficient lookup tables */
-
-/* K1 is (5-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k1table    [0x20]={
-0x82C0,0x8380,0x83C0,0x8440,0x84C0,0x8540,0x8600,0x8780,
-0x8880,0x8980,0x8AC0,0x8C00,0x8D40,0x8F00,0x90C0,0x92C0,
-0x9900,0xA140,0xAB80,0xB840,0xC740,0xD8C0,0xEBC0,0x0000,
-0x1440,0x2740,0x38C0,0x47C0,0x5480,0x5EC0,0x6700,0x6D40};
-
-/* K2 is (5-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k2table    [0x20]={
-0xAE00,0xB480,0xBB80,0xC340,0xCB80,0xD440,0xDDC0,0xE780,
-0xF180,0xFBC0,0x0600,0x1040,0x1A40,0x2400,0x2D40,0x3600,
-0x3E40,0x45C0,0x4CC0,0x5300,0x5880,0x5DC0,0x6240,0x6640,
-0x69C0,0x6CC0,0x6F80,0x71C0,0x73C0,0x7580,0x7700,0x7E80};
-
-/* K3 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k3table    [0x10]={
-0x9200,0x9F00,0xAD00,0xBA00,0xC800,0xD500,0xE300,0xF000,
-0xFE00,0x0B00,0x1900,0x2600,0x3400,0x4100,0x4F00,0x5C00};
-
-/* K4 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k4table    [0x10]={
-0xAE00,0xBC00,0xCA00,0xD800,0xE600,0xF400,0x0100,0x0F00,
-0x1D00,0x2B00,0x3900,0x4700,0x5500,0x6300,0x7100,0x7E00};
-
-/* K5 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k5table    [0x10]={
-0xAE00,0xBA00,0xC500,0xD100,0xDD00,0xE800,0xF400,0xFF00,
-0x0B00,0x1700,0x2200,0x2E00,0x3900,0x4500,0x5100,0x5C00};
-
-/* K6 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k6table    [0x10]={
-0xC000,0xCB00,0xD600,0xE100,0xEC00,0xF700,0x0300,0x0E00,
-0x1900,0x2400,0x2F00,0x3A00,0x4500,0x5000,0x5B00,0x6600};
-
-/* K7 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k7table    [0x10]={
-0xB300,0xBF00,0xCB00,0xD700,0xE300,0xEF00,0xFB00,0x0700,
-0x1300,0x1F00,0x2B00,0x3700,0x4300,0x4F00,0x5A00,0x6600};
-
-/* K8 is (3-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k8table    [0x08]={
-0xC000,0xD800,0xF000,0x0700,0x1F00,0x3700,0x4F00,0x6600};
-
-/* K9 is (3-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k9table    [0x08]={
-0xC000,0xD400,0xE800,0xFC00,0x1000,0x2500,0x3900,0x4D00};
-
-/* K10 is (3-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k10table   [0x08]={
-0xCD00,0xDF00,0xF100,0x0400,0x1600,0x2000,0x3B00,0x4D00};
-
-/* chirp table */
-
-static char chirptable[41]={
-0x00, 0x2a, 0xd4, 0x32,
-0xb2, 0x12, 0x25, 0x14,
-0x02, 0xe1, 0xc5, 0x02,
-0x5f, 0x5a, 0x05, 0x0f,
-0x26, 0xfc, 0xa5, 0xa5,
-0xd6, 0xdd, 0xdc, 0xfc,
-0x25, 0x2b, 0x22, 0x21,
-0x0f, 0xff, 0xf8, 0xee,
-0xed, 0xef, 0xf7, 0xf6,
-0xfa, 0x00, 0x03, 0x02,
-0x01
-};
-
-/* interpolation coefficients */
-
-static char interp_coeff[8] = {
-8, 8, 8, 4, 4, 2, 2, 1
-};
-
diff --git a/externals/ffext/tms5220~/tms5220~-help.pd b/externals/ffext/tms5220~/tms5220~-help.pd
deleted file mode 100644
index edf216a292752be6260da7a1102b28955fedd561..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220~-help.pd
+++ /dev/null
@@ -1,179 +0,0 @@
-#N canvas 221 103 826 512 10;
-#X obj 53 93 tms5220~;
-#X obj 53 382 dac~;
-#X obj 120 335 hsl 128 15 0 1 0 0 empty empty OUTPUT_LEVEL -2 -8 0
-10 -262144 -1 -1 12700 1;
-#X obj 53 334 *~ 0;
-#X msg 117 375 \; pd dsp 1;
-#X text 147 125 <-- interrupt;
-#X text 146 147 <-- ready;
-#X text 146 170 <-- status bits;
-#X msg 80 62 reset;
-#X text 43 473 (C) Federico Ferri - 2010;
-#X obj 68 168 t a a a;
-#X obj 68 265 & 16;
-#X obj 87 226 & 32;
-#X obj 107 187 & 64;
-#X obj 98 122 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 83 145 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X obj 107 206 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 64
-64;
-#X obj 87 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 32
-32;
-#X obj 68 284 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X text 138 206 <-- talk_status;
-#X text 118 244 <-- buffer_low;
-#X text 97 285 <-- buffer_empty;
-#X obj 53 35 r \$0.in;
-#X obj 344 123 s \$0.in;
-#X msg 344 36 silent;
-#X msg 361 64 stop;
-#X msg 334 273 repeat \$1 \$2;
-#X obj 334 299 s \$0.in;
-#X obj 382 223 hsl 64 15 0 63 0 0 empty empty PITCH -2 -8 0 10 -262144
--1 -1 2600 1;
-#X obj 337 194 hsl 64 15 1 14 0 0 empty empty ENERGY -2 -8 0 10 -262144
--1 -1 4400 1;
-#X obj 334 248 pack f f;
-#X obj 491 379 s \$0.in;
-#X obj 539 78 hsl 64 15 0 63 0 0 empty empty PITCH -2 -8 0 10 -262144
--1 -1 1400 1;
-#X obj 494 49 hsl 64 15 1 14 0 0 empty empty ENERGY -2 -8 0 10 -262144
--1 -1 600 1;
-#X obj 491 103 pack f f;
-#X obj 431 74 metro 25;
-#X obj 430 50 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 491 139 list append;
-#X obj 566 139 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 567 159 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 1900 1;
-#X obj 567 179 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 5100 1;
-#X obj 568 199 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 1600 1;
-#X obj 491 159 list append;
-#X obj 491 179 list append;
-#X obj 491 199 list append;
-#X obj 568 219 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 3500 1;
-#X obj 491 219 list append;
-#X obj 568 239 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 1500 1;
-#X obj 491 239 list append;
-#X obj 568 259 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 2700 1;
-#X obj 491 259 list append;
-#X obj 568 279 hsl 64 15 0 7 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 491 279 list append;
-#X obj 568 299 hsl 64 15 0 7 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 100 1;
-#X obj 491 299 list append;
-#X obj 568 319 hsl 64 15 0 7 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 600 1;
-#X obj 491 319 list append;
-#X obj 491 338 list prepend voiced;
-#X obj 491 359 list trim;
-#X obj 651 379 s \$0.in;
-#X obj 699 78 hsl 64 15 0 63 0 0 empty empty PITCH -2 -8 0 10 -262144
--1 -1 3300 1;
-#X obj 654 49 hsl 64 15 1 14 0 0 empty empty ENERGY -2 -8 0 10 -262144
--1 -1 6300 1;
-#X obj 651 103 pack f f;
-#X obj 651 139 list append;
-#X obj 726 139 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 4100 1;
-#X obj 727 159 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 727 179 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 5800 1;
-#X obj 728 199 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 651 159 list append;
-#X obj 651 179 list append;
-#X obj 651 199 list append;
-#X obj 651 359 list trim;
-#X obj 651 338 list prepend unvoiced;
-#X obj 621 71 metro 25;
-#X obj 620 47 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 297 220 metro 25;
-#X obj 296 196 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 503 74 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 677 75 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X connect 0 0 3 0;
-#X connect 0 1 10 0;
-#X connect 0 2 15 0;
-#X connect 0 3 14 0;
-#X connect 2 0 3 1;
-#X connect 2 0 4 0;
-#X connect 3 0 1 0;
-#X connect 3 0 1 1;
-#X connect 8 0 0 0;
-#X connect 10 0 11 0;
-#X connect 10 1 12 0;
-#X connect 10 2 13 0;
-#X connect 11 0 18 0;
-#X connect 12 0 17 0;
-#X connect 13 0 16 0;
-#X connect 22 0 0 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 0;
-#X connect 26 0 27 0;
-#X connect 28 0 30 1;
-#X connect 29 0 30 0;
-#X connect 30 0 26 0;
-#X connect 32 0 34 1;
-#X connect 33 0 34 0;
-#X connect 34 0 37 0;
-#X connect 35 0 34 0;
-#X connect 36 0 35 0;
-#X connect 37 0 42 0;
-#X connect 38 0 37 1;
-#X connect 39 0 42 1;
-#X connect 40 0 43 1;
-#X connect 41 0 44 1;
-#X connect 42 0 43 0;
-#X connect 43 0 44 0;
-#X connect 44 0 46 0;
-#X connect 45 0 46 1;
-#X connect 46 0 48 0;
-#X connect 47 0 48 1;
-#X connect 48 0 50 0;
-#X connect 49 0 50 1;
-#X connect 50 0 52 0;
-#X connect 51 0 52 1;
-#X connect 52 0 54 0;
-#X connect 53 0 54 1;
-#X connect 54 0 56 0;
-#X connect 55 0 56 1;
-#X connect 56 0 57 0;
-#X connect 57 0 58 0;
-#X connect 58 0 31 0;
-#X connect 60 0 62 1;
-#X connect 61 0 62 0;
-#X connect 62 0 63 0;
-#X connect 63 0 68 0;
-#X connect 64 0 63 1;
-#X connect 65 0 68 1;
-#X connect 66 0 69 1;
-#X connect 67 0 70 1;
-#X connect 68 0 69 0;
-#X connect 69 0 70 0;
-#X connect 70 0 72 0;
-#X connect 71 0 59 0;
-#X connect 72 0 71 0;
-#X connect 73 0 62 0;
-#X connect 74 0 73 0;
-#X connect 75 0 30 0;
-#X connect 76 0 75 0;
-#X connect 77 0 34 0;
-#X connect 78 0 62 0;
diff --git a/externals/ffext/tms5220~/tms5220~-meta.pd b/externals/ffext/tms5220~/tms5220~-meta.pd
deleted file mode 100644
index 38451af38ed6760dd6ac2acbf399a4de0b009328..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220~-meta.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#N canvas 10 10 200 200 10;
-#N canvas 20 20 420 300 META 0;
-#X text 10 10 META this is a prototype of a libdir meta file;
-#X text 10 30 NAME tms5220~;
-#X text 10 50 AUTHOR Federico Ferri;
-#X text 10 70 LICENSE GPL;
-#X text 10 90 VERSION 0.1;
-#X restore 10 10 pd META;
diff --git a/externals/ffext/tms5220~/tms5220~.c b/externals/ffext/tms5220~/tms5220~.c
deleted file mode 100644
index 31fb873d5117e58b549d8efcb90e1d034a2cf542..0000000000000000000000000000000000000000
--- a/externals/ffext/tms5220~/tms5220~.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* (C) 2010 Federico Ferri <mescalinum@gmail.com>
- * this software is gpl'ed software, read the file "README.txt" for details
- */
-
-#include "tms5220/tms5220.c"
-
-#define USE_LIBSAMPLERATE
-//#define DEBUG_TMS5220_TILDE
-
-// rate at which tms5220 emulator produces samples (according to datasheet)
-#define TMS5220_SAMPLE_RATE 8000
-
-#ifdef USE_LIBSAMPLERATE
-#define SRC_TYPE SRC_LINEAR //fastest
-//#define SRC_TYPE SRC_SINC_BEST_QUALITY
-#include <samplerate.h>
-#endif
-
-#include "m_pd.h"
-
-static t_class *tms5220_tilde_class;
-
-typedef struct _tms5220_tilde {
-	t_object x_obj;
-
-	// sample rate
-	t_float sr;
-	t_float resample_factor;
-
-#ifdef USE_LIBSAMPLERATE
-	SRC_STATE* src;
-#else
-#error Missing alternative implementation of sample rate converter. Please use libsamplerate.
-#endif
-
-	// status outlets
-	t_int status;
-	t_outlet *x_status;
-	t_int ready;
-	t_outlet *x_ready;
-	t_int interrupt;
-	t_outlet *x_interrupt;
-
-	t_float dummy;
-} t_tms5220_tilde;
-
-
-
-void tms5220_tilde_reset(t_tms5220_tilde *x) {
-	tms5220_reset();
-}
-
-void *tms5220_tilde_new(t_symbol *s, int argc, t_atom *argv) {
-	t_tms5220_tilde *x = (t_tms5220_tilde *)pd_new(tms5220_tilde_class);
-
-	x->status = x->ready = x->interrupt = 0;
-
-	outlet_new(&x->x_obj, &s_signal);
-	x->x_status = outlet_new(&x->x_obj, &s_float);
-	x->x_ready = outlet_new(&x->x_obj, &s_float);
-	x->x_interrupt = outlet_new(&x->x_obj, &s_float);
-
-	tms5220_tilde_reset(x);
-
-#ifdef USE_LIBSAMPLERATE
-	if(x->src) src_delete(x->src);
-
-	int err = -1;
-	x->src = src_new(SRC_TYPE, 1, &err);
-
-	if(x->src == NULL) {
-		error("Failed libsamplerate initialization.");
-		post("libsamplerate returned error code %d (%s).", err, src_strerror(err));
-	} else {
-#ifdef DEBUG_TMS5220_TILDE
-		post("tms5220~: DEBUG: Initialized sample rate converter '%s'", src_get_name(SRC_TYPE));
-#endif
-	}
-#endif
-
-	return (void *)x;
-}
-
-void tms5220_tilde_free(t_tms5220_tilde *x) {
-#ifdef USE_LIBSAMPLERATE
-	// deallocate sample rate converter object
-	if(x->src) {
-		src_delete(x->src);
-#ifdef DEBUG_TMS5220_TILDE
-		post("tms5220~: DEBUG: Destroyed sample rate converter '%s'", src_get_name(SRC_TYPE));
-#endif
-	}
-#endif
-}
-
-void tms5220_tilde_write(t_tms5220_tilde *x, t_floatarg data) {
-	tms5220_data_write((int)data);
-}
-
-#define CHECK_ARGS(argcvar, num, errmsg) if(argcvar != num) { error(errmsg); return; }
-#define CLIP_VAL(v, min, max) (((v) < (min)) ? (min) : (((v) > (max)) ? (max) : (v)))
-
-void tms5220_tilde_framefunc(t_tms5220_tilde *x, t_symbol *s, int argc, t_atom *argv) {
-	int energy, pitch, k[10], i;
-
-	energy = argc > 0 ? argv[0].a_w.w_float : -1;
-	pitch = argc > 1 ? argv[1].a_w.w_float : -1;
-	for(i = 2; i < 12; i++) k[i - 2] = argc > i ? argv[i].a_w.w_float : -1;
-
-	energy = CLIP_VAL(energy, 1, 14);
-	pitch = CLIP_VAL(pitch, 0, 63);
-	k[0] = CLIP_VAL(k[0], 0, 31);
-	k[1] = CLIP_VAL(k[1], 0, 31);
-	k[2] = CLIP_VAL(k[2], 0, 15);
-	k[3] = CLIP_VAL(k[3], 0, 15);
-	k[4] = CLIP_VAL(k[4], 0, 15);
-	k[5] = CLIP_VAL(k[5], 0, 15);
-	k[6] = CLIP_VAL(k[6], 0, 15);
-	k[7] = CLIP_VAL(k[7], 0, 7);
-	k[8] = CLIP_VAL(k[8], 0, 7);
-	k[9] = CLIP_VAL(k[9], 0, 7);
-
-	unsigned char data[8];
-	memset(&data[0], 0, 8);
-
-	data[0] = 0x60; //speak external
- 
-	if(energy == 0 || energy == 15) { error("illegal value for energy"); return; }
-
-	if(s == gensym("silent")) {
-		CHECK_ARGS(argc, 0, "usage: silent");
-		data[1] = 0;
-	} else if(s == gensym("stop")) {
-		CHECK_ARGS(argc, 0, "usage: stop");
-		data[1] = 0xf0;
-	} else if(s == gensym("repeat")) {
-		CHECK_ARGS(argc, 2, "usage: repeat <energy> <pitch>");
-		data[1] = ((energy << 4) | (1 << 3) | ((pitch & 56) >> 3));
-		data[2] = (((pitch & 7) << 5));
-	} else if(s == gensym("unvoiced")) {
-		CHECK_ARGS(argc, 6, "usage: repeat <energy> <pitch> <k1> <k2> <k3> <k4>");
-		data[1] = ((energy << 4) | 0 | 0);
-		data[2] = (k[0]);
-		data[3] = ((k[1] << 3) | ((k[2] & 14) >> 1));
-		data[4] = (((k[2] & 1) << 7) | (k[3] << 3));
-	} else if(s == gensym("voiced")) {
-		CHECK_ARGS(argc, 12, "usage: repeat <energy> <pitch> <k1> <k2> <k3> <k4> <k5> <k6> <k7> <k8> <k9> <k10>");
-		data[1] = ((energy << 4) | 0 | 0);
-		data[2] = (k[0]);
-		data[3] = ((k[1] << 3) | ((k[2] & 14) >> 1));
-		data[4] = (((k[2] & 1) << 7) | (k[3] << 3) | ((k[4] & 14) >> 1));
-		data[5] = (((k[4] & 1) << 7) | (k[5] << 3) | ((k[6] & 14) >> 1));
-		data[6] = (((k[6] & 1) << 7) | (k[7] << 4) | (k[8] << 1) | ((k[9] & 4) >> 2));
-		data[7] = (((k[9] & 3) << 6));
-	} else {
-		error("unknown method called: %s", s->s_name);
-		return;
-	}
-	//tms5220_reset();
-	for(i = 0; i < 8; i++) tms5220_data_write(data[i]);
-	//tms5220_data_write(0);
-}
-
-void tms5220_tilde_update_status(t_tms5220_tilde *x) {
-	t_int new_status, new_ready, new_interrupt;
-
-	new_status = tms5220_status_read();
-	new_ready = tms5220_ready_read();
-	new_interrupt = tms5220_int_read();
-
-	if(new_interrupt != x->interrupt) {
-		outlet_float(x->x_interrupt, new_interrupt);
-		x->interrupt = new_interrupt;
-	}
-
-	if(new_ready != x->ready) {
-		outlet_float(x->x_ready, new_ready);
-		x->ready = new_ready;
-	}
-
-	if(new_status != x->status) {
-		outlet_float(x->x_status, new_status);
-		x->status = new_status;
-	}
-}
-
-t_int *tms5220_tilde_perform(t_int *w) {
-	t_tms5220_tilde *x = (t_tms5220_tilde *)(w[1]);
-	t_sample       *in =        (t_sample *)(w[2]);
-	t_sample      *out =        (t_sample *)(w[3]);
-	int              n =               (int)(w[4]);
-
-	int m = (int)(0.0 + n / x->resample_factor);
-
-	unsigned char *bytebuf = (unsigned char *)malloc(sizeof(unsigned char) * m);
-	if(!bytebuf) {error("FATAL: cannot allocate signal buffer (byte)"); return w;}
-
-	float *floatbuf = (float *)malloc(sizeof(float) * m);
-	if(!floatbuf) {error("FATAL: cannot allocate signal buffer (float)"); return w;}
-
-	tms5220_process(bytebuf, m);
-	unsigned char *pb = bytebuf;
-	float *fb = floatbuf;
-	int m1 = m;
-	while (m1--) *fb++ = (0.5 + ((t_sample) *pb++)) / 127.5;
-	free(bytebuf);
-
-#ifdef USE_LIBSAMPLERATE
-	if(x->src != NULL) {
-		SRC_DATA src_data;
-		src_data.data_in = floatbuf;
-		src_data.input_frames = m;
-		src_data.data_out = out;
-		src_data.output_frames = n;
-		src_data.src_ratio = x->resample_factor;
-		src_data.end_of_input = 0;
-		int err;
-		if(0 != (err = src_process(x->src, &src_data))) {
-			error("error during resample (libsamplerate)");
-			post("error code: %d (%s)", err, src_strerror(err));
-		}
-#ifdef DEBUG_TMS5220_TILDE
-		// check residual:
-		if(src_data.input_frames_used < m) {
-			error("used only %d input frames, instead of %d", src_data.input_frames_used, m);
-		}
-		if(src_data.output_frames_gen < n) {
-			error("generated only %d output frames, instead of %d", src_data.output_frames_gen, n);
-		}
-#endif
-	} else {
-		error("libsamplerate not initialized.");
-	}
-#else
-	// missing implementation of poor man's sample rate converter
-	// use libsamplerate for now
-#endif
-
-	free(floatbuf);
-
-	tms5220_tilde_update_status(x);
-	
-	return (w + 5);
-}
-
-void tms5220_tilde_dsp(t_tms5220_tilde *x, t_signal **sp) {
-	// update sample rate & resample factor:
-	x->resample_factor = sp[0]->s_sr / TMS5220_SAMPLE_RATE;
-#ifdef DEBUG_TMS5220_TILDE
-	if(sp[0]->s_sr != x->sr)
-		post("tms5220~: DEBUG: samplerate has changed to %f; new resample factor is %f.", sp[0]->s_sr, (float)x->resample_factor);
-#endif
-	x->sr = sp[0]->s_sr;
-
-	dsp_add(tms5220_tilde_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
-}
-
-void tms5220_tilde_setup(void) {
-	tms5220_tilde_class = class_new(gensym("tms5220~"),
-		(t_newmethod)tms5220_tilde_new,
-		(t_method)tms5220_tilde_free,
-		sizeof(t_tms5220_tilde),
-		CLASS_DEFAULT, A_GIMME, 0);
-
-	CLASS_MAINSIGNALIN(tms5220_tilde_class, t_tms5220_tilde, dummy);
-
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_dsp, gensym("dsp"), A_CANT, 0);
-	//class_addfloat(tms5220_tilde_class, (t_method)tms5220_tilde_write);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_write, gensym("write"), A_DEFFLOAT, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_reset, gensym("reset"), 0);
-	// frame building commands:
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("silent"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("stop"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("repeat"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("unvoiced"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("voiced"), A_GIMME, 0);
-
-	post("tms5220~: TSM5220 IC emulation");
-	post("tms5220~:   external by Federico Ferri <mescalinum@gmail.com>");
-	post("tms5220~:   based on code by Frank Palazzolo <palazzol@tir.com>");
-}
diff --git a/externals/ffext/tracker/CHANGELOG b/externals/ffext/tracker/CHANGELOG
deleted file mode 100644
index f7bac4a4af713e226ea7b9f7cd70afe5041f6a70..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/CHANGELOG
+++ /dev/null
@@ -1,26 +0,0 @@
-0.1.0 --------------------------------------------------------------------
-  initial version. minimal set of features
-
-0.1.1 --------------------------------------------------------------------
-  fixes to drawing, minor bugs
-
-0.2.0 --------------------------------------------------------------------
-  more features: added keyboard input
-                 new parameter saving
-                 saving data is now optional
-                 file load/save support
-
-0.2.1 --------------------------------------------------------------------
-  fixed makefile. added pd_darwin target
-
-0.2.2 --------------------------------------------------------------------
-  added send/receive symbols support
-
-0.2.3 --------------------------------------------------------------------
-  numbers are now aligned to right
-  notification messages are sent from user interaction
-  mouse behavior improved. now dragging faster changes more.
-  added nice makefile for target:
-    Linux
-    MacOS (thanks Steffen)
-    Win32 (thanks tof)
diff --git a/externals/ffext/tracker/COPYING b/externals/ffext/tracker/COPYING
deleted file mode 100644
index 2128a66ea7d038eecac13febce1a26b3da3b7159..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/COPYING
+++ /dev/null
@@ -1,280 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
diff --git a/externals/ffext/tracker/README b/externals/ffext/tracker/README
deleted file mode 100644
index 1cf7e377273adf14d6033ddd41123188ce45bfad..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/README
+++ /dev/null
@@ -1,2 +0,0 @@
-this is a 2D grid editor you can use like a tracker
-see the help patch for a demonstration
diff --git a/externals/ffext/tracker/TODO b/externals/ffext/tracker/TODO
deleted file mode 100644
index bdc71595010a0f31a77422d17e37a94945adb329..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-ToDo list for tracker external:
-===============================
-
diff --git a/externals/ffext/tracker/makefile b/externals/ffext/tracker/makefile
deleted file mode 100644
index 264a1e88947739f2dd277338ad400323a5abd7d1..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/makefile
+++ /dev/null
@@ -1,63 +0,0 @@
-all: pd_linux
-#all: pd_win
-#all: pd_darwin
-
-.SUFFIXES: .pd_linux .pd_darwin .dll .tk .tk2c
-
-PDPATH = /home/pat/pd
-
-
-
-
-# ----------------------- WINDOWS -------------------------
-pd_win: tracker.dll
-tracker.dll: tracker.c tracker.h tracker.tk2c
-
-WINCFLAGS = -Wall -W -Wshadow -Wstrict-prototypes -DPD -DNT -W3 -WX -Werror -Wno-unused -mms-bitfields -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer
-WININCLUDE =  -I.. -I../include -I$(PDPATH)/src
-
-WINLDFLAGS = -shared
-
-.c.dll:
-	gcc -mms-bitfields $(WINCFLAGS) $(WININCLUDE) -o $*.o -c $*.c
-	gcc $(WINLDFLAGS) -o $*.dll $*.o $(PDPATH)/bin/pd.dll
-	strip --strip-unneeded $*.dll
-	rm -f $*.o
-
-# ----------------------- LINUX i386 ----------------------
-pd_linux: tracker.pd_linux
-tracker.pd_linux: tracker.c tracker.h tracker.tk2c
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-   -Wall -W -Wno-shadow -Wstrict-prototypes \
-   -Wno-unused -Wno-parentheses -Wno-switch
-LINUXINCLUDE = -I/usr/include -I$(PDPATH)/src
-LINUXLDFLAGS = --export-dynamic  -shared
-
-.c.pd_linux:
-	$(CC) $(LINUXCFLAGS) $(CFLAGS) $(LINUXINCLUDE) -fPIC -o $*.o -c $*.c
-	$(LD) $(LINUXLDFLAGS) -o $*.pd_linux $*.o -lc -lm
-	strip --strip-unneeded $*.pd_linux
-
-# ----------------------- Darwin (OSX) --------------------
-pd_darwin: tracker.pd_darwin
-tracker.pd_darwin: tracker.c tracker.h tracker.tk2c
-
-DARWINCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-   -Wall -W -Wno-shadow -Wstrict-prototypes \
-   -Wno-unused -Wno-parentheses -Wno-switch
-DARWININCLUDE = -I/usr/include -I$(PDPATH)/src
-DARWINLDFLAGS = -bundle -undefined suppress -flat_namespace
-
-.c.pd_darwin:
-	$(CC) $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
-	$(LD) $(DARWINLDFLAGS) -o $*.pd_darwin $*.o -lc -lm
-
-# ----------------------- Miscellaneous -------------------
-.tk.tk2c:
-	sh tk2c.bash < $*.tk > $*.tk2c
-
-clean:
-	rm -f *.o *.pd_linux *.pd_darwin *.pd_win *.dll so_locations *.tk2c
-
-
diff --git a/externals/ffext/tracker/tk2c.bash b/externals/ffext/tracker/tk2c.bash
deleted file mode 100755
index 9dfeb0301c72225db73fbed97b66f52b51dbb7b1..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/tk2c.bash
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-#set -x
-
-while read line
-do
-  for word in $line
-  do
-    if [ "X"$word != "X"${word#\#} ]
-    then
-       echo // ${line#\#}
-       break
-    else
-       line=${line//\'/\\\'}
-#useless, slashes never gets in
-       line=${line//\\/\\\\}
-#this one's dirty, i know
-       line=${line//;/\\\\;}
-       line=${line//\"/\\\"}
-       echo 'sys_gui("'$line'\n");'
-       break
-    fi
-  done
-done
diff --git a/externals/ffext/tracker/tracker-help.pd b/externals/ffext/tracker/tracker-help.pd
deleted file mode 100644
index ba472910b765de68f8bfb2c92908caafef13b4e3..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/tracker-help.pd
+++ /dev/null
@@ -1,106 +0,0 @@
-#N canvas 355 23 810 615 10;
-#X obj 56 370 tracker -data 10 10 9 8 7 6 5 4 3 2 1 0 10 9 8 7 6 5
-4 3 2 1 11 10 9 8 7 6 5 4 3 2 12 11 10 9 8 7 6 5 4 3 13 12 11 10 9
-8 7 6 5 4 14 13 12 11 10 9 8 7 6 5 15 14 13 12 11 10 9 8 7 6 16 15
-14 13 12 11 10 9 8 7 17 16 15 14 13 12 11 10 9 8 18 17 16 15 14 13
-12 11 10 9 -send trk-out -recv trk;
-#X msg 54 128 setrow 0 10 11 12 13 14 15 16 17 18 19;
-#X msg 68 150 setrow 0 999 999 999 999 999 999 999 999 999 999;
-#X msg 85 197 set 2 3 \$1;
-#X floatatom 85 180 5 0 0 0 - - -;
-#N canvas 0 0 450 300 display_output 0;
-#X obj 60 186 outlet;
-#X obj 60 132 list prepend set;
-#X obj 60 159 list trim;
-#X obj 60 51 r trk-out;
-#X obj 60 105 route output;
-#X obj 60 78 list trim;
-#X text 145 77 strip list selector;
-#X text 163 107 filter by output selector;
-#X text 192 136 prepend with set just to display in a msg;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 5 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 0;
-#X restore 55 278 pd display_output;
-#X msg 55 309 12 11 10 9 8 7 6 5 4 3;
-#X obj 276 244 f;
-#X obj 303 244 + 1;
-#X obj 276 268 % 10;
-#X obj 276 219 metro 100;
-#X obj 276 191 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 446 150 resize 10 10;
-#X msg 460 175 resize 10 20;
-#X text 577 150 load/save:;
-#X obj 444 272 tgl 15 0 empty \$0-tgl-trk empty 17 7 0 10 -262144 -1
--1 0 1;
-#X text 470 268 <- toggle row tracking;
-#X obj 54 244 s trk;
-#X obj 446 213 s trk;
-#X msg 444 297 \; trk trackrow \$1;
-#X msg 276 295 \; trk getrow \$1;
-#X msg 570 179 load test.trk;
-#X msg 586 205 save test.trk;
-#X obj 570 234 s trk;
-#X text 313 184 <- playback;
-#X text 51 93 MANY WAYS TO GET OR SET DATA: ----------------------------
-;
-#X msg 168 197 getrow \$1;
-#X msg 193 234 get 2 3;
-#X floatatom 168 178 5 0 0 0 - - -;
-#X obj 168 278 s trk;
-#X obj 31 22 cnv 15 650 35 empty empty tracker 20 12 0 14 -62784 -262144
-0;
-#X text 226 25 tracker external - by Federico Ferri <mescalinum[at]gmail[dot]com>
-;
-#N canvas 0 0 450 300 known_bugs 0;
-#X text 63 47 * GOP doesn't work;
-#X text 63 79 * dollarZero in send/recv doesn't work;
-#X restore 521 31 pd known_bugs;
-#N canvas 0 0 450 300 license 0;
-#X text 60 51 licensed under the terms of GNU/GPL license;
-#X text 60 79 see COPYING for details;
-#X restore 610 31 pd license;
-#N canvas 569 336 450 300 keyboard_control 0;
-#X text 41 44 first \, give focus with mouse. the focused item becomes
-red.;
-#X text 42 69 you can change value by mouse dragging \, or by keyboard.
-;
-#X text 42 97 to change the selected value with keyboard \, type digits
-and press return. if you typed some digits you can cancel editing by
-pressing esc. you can increase decrease value with keys +/-. you can
-move selected item (cursor) with HJKL keys.;
-#X restore 556 71 pd keyboard_control;
-#X obj 31 542 cnv 15 650 35 empty empty v0.2.3 20 12 0 14 -62784 -262144
-0;
-#N canvas 212 405 361 431 notify_and_synchronization 0;
-#X obj 42 43 tracker -rows 10 -cols 10;
-#X obj 42 213 route changenotify;
-#X obj 42 246 tracker -rows 10 -cols 10;
-#X obj 42 190 route list;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 1 0;
-#X restore 496 95 pd notify_and_synchronization;
-#X text 446 127 resize:;
-#X connect 1 0 17 0;
-#X connect 2 0 17 0;
-#X connect 3 0 17 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 9 0 20 0;
-#X connect 10 0 7 0;
-#X connect 11 0 10 0;
-#X connect 12 0 18 0;
-#X connect 13 0 18 0;
-#X connect 15 0 19 0;
-#X connect 21 0 23 0;
-#X connect 22 0 23 0;
-#X connect 26 0 29 0;
-#X connect 27 0 29 0;
-#X connect 28 0 26 0;
diff --git a/externals/ffext/tracker/tracker.c b/externals/ffext/tracker/tracker.c
deleted file mode 100644
index 69a28645293a6ff06bdcfd6e283e5e193c45dee5..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/tracker.c
+++ /dev/null
@@ -1,781 +0,0 @@
-/* ------------------------------------------------------------------------ */
-/* Copyright (c) 2007 Federico Ferri.                                       */
-/* For information on usage and redistribution, and for a DISCLAIMER OF ALL */
-/* WARRANTIES, see the file, "LICENSE.txt," in this distribution.           */
-/*                                                                          */
-/* tracker: a general purpose gbrid-like widget                                */
-/*                                                                          */
-/* This program is free software; you can redistribute it and/or            */
-/* modify it under the terms of the GNU General Public License              */
-/* as published by the Free Software Foundation; either version 2           */
-/* of the License, or (at your option) any later version.                   */
-/*                                                                          */
-/* See file LICENSE for further informations on licensing terms.            */
-/*                                                                          */
-/* This program is distributed in the hope that it will be useful,          */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of           */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            */
-/* GNU General Public License for more details.                             */
-/*                                                                          */
-/* You should have received a copy of the GNU General Public License        */
-/* along with this program; if not, write to the Free Software Foundation,  */
-/* Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.          */
-/*                                                                          */
-/* Based on PureData by Miller Puckette and others.                         */
-/* Many thanks to Yves Degoyon for its externals.                           */
-/* ------------------------------------------------------------------------ */
-
-#include <stdlib.h>
-#include <string.h>
-#include "tracker.h"
-
-t_widgetbehavior tracker_widgetbehavior;
-static t_class* tracker_class;
-static t_symbol* keyname_sym;
-
-#define MARGIN_X 3
-#define MARGIN_Y 2
-#define CHR_EDIT "<"
-#define CHR_NORM " "
-#define DIGITS_MIN 1
-#define DIGITS_MAX 10
-
-static void tracker_clip_row_col(t_tracker* x, t_int* pr, t_int* pc) {
-    if((*pr) < 0) {
-        (*pr) = x->x_rows - (((-(*pr) - 1) % x->x_rows) + 1);
-    } else {
-        (*pr) = (*pr) % x->x_rows;
-    }
-    if((*pc) < 0) {
-        (*pc) = x->x_columns - (((-(*pc) - 1) % x->x_columns) + 1);
-    } else {
-        (*pc) = (*pc) % x->x_columns;
-    }
-}
-
-static t_float tracker_data_get(t_tracker* x, t_floatarg r, t_floatarg c) {
-    t_int ir = (t_int)r;
-    t_int ic = (t_int)c;
-    tracker_clip_row_col(x, &ir, &ic);
-    return x->x_data[(int)ir][(int)ic];
-}
-
-static void tracker_data_set(t_tracker* x, t_floatarg r, t_floatarg c, t_floatarg d) {
-    t_int ir = (t_int)r;
-    t_int ic = (t_int)c;
-    tracker_clip_row_col(x, &ir, &ic);
-    x->x_data[(int)ir][(int)ic] = d;
-}
-
-static const char* tracker_isedititem(t_tracker* x, int r, int c) {
-    if(x->x_active_row == r && x->x_active_row >= 0 &&
-       x->x_active_column == c && x->x_active_column >= 0 &&
-       x->x_buf[0]) return CHR_EDIT;
-    else return CHR_NORM;
-}
-
-static int tracker_getdisplayval(t_tracker* x, int r, int c) {
-    if(tracker_isedititem(x, r, c) == CHR_EDIT) {
-        return atoi(x->x_buf);
-    } else {
-        return tracker_data_get(x, r, c);
-    }
-}
-
-/* ---- drawing stuff ------------------------------------------------------ */
-
-static void tracker_draw_new(t_tracker* x, t_glist* glist) {
-    int r,c;
-    t_canvas* canvas = glist_getcanvas(glist);
-    sys_vgui(".x%x.c create rectangle %d %d %d %d -outline black -fill gray -tags %xSHAPE\n", canvas, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist)+x->x_columns*x->x_cell_width+2*MARGIN_X, text_ypix(&x->x_obj, glist)+x->x_rows*x->x_cell_height+2*MARGIN_Y, x);
-    sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #dddddd -outline {} -tags {%xCURSOR}\n", canvas, 0, 0, 0, 0, x);
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            sys_vgui(".x%x.c create text %d %d -text {%d%s} -font -*-courier-bold--normal--%d-* -anchor ne -tags {%xTEXT %xTEXT.%d.%d} -fill black\n", canvas, text_xpix(&x->x_obj, glist)+(c+1)*x->x_cell_width+MARGIN_X, text_ypix(&x->x_obj, glist)+r*x->x_cell_height+MARGIN_Y, tracker_getdisplayval(x, r, c), tracker_isedititem(x, r, c), glist_getfont(glist), x, x, r, c);
-        }
-    }
-    //canvas_fixlinesfor(canvas, (t_text*)x);
-    tracker_draw_update(x);
-}
-
-static void tracker_draw_update(t_tracker* x) {
-    int r,c;
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -text {%d%s}\n", canvas, x, r, c, tracker_getdisplayval(x, r, c), tracker_isedititem(x, r, c));
-        }
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_update_row(t_tracker* x, t_floatarg r) {
-    t_int ir = (t_int)r;
-    t_int ic = 0;
-    tracker_clip_row_col(x, &ir, &ic);
-    int c;
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    for(c = 0; c < x->x_columns; c++) {
-        sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -text {%d%s}\n", canvas, x, ir, c, tracker_getdisplayval(x, r, c), tracker_isedititem(x, r, c));
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_update_single(t_tracker* x, t_floatarg r, t_floatarg c) {
-    t_int ir = (t_int)r;
-    t_int ic = (t_int)c;
-    tracker_clip_row_col(x, &ir, &ic);
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -text {%d%s}\n", canvas, x, ir, ic, tracker_getdisplayval(x, ir, ic), tracker_isedititem(x, ir, ic));
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_update_cursor_pos(t_tracker* x) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    if(x->x_cursor_pos >= 0 && x->b_cursor) {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, x->x_glist)+MARGIN_X-1, text_ypix(&x->x_obj, x->x_glist)+x->x_cursor_pos*x->x_cell_height+MARGIN_Y-1, text_xpix(&x->x_obj, x->x_glist)+x->x_columns*x->x_cell_width+MARGIN_X+1, text_ypix(&x->x_obj, x->x_glist)+(x->x_cursor_pos+1)*x->x_cell_height+MARGIN_Y+1);
-    } else {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, 0, 0, 0, 0);
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_move(t_tracker* x, t_glist* glist) {
-    int r,c;
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    sys_vgui(".x%x.c coords %xSHAPE %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist)+x->x_columns*x->x_cell_width+2*MARGIN_X, text_ypix(&x->x_obj, glist)+x->x_rows*x->x_cell_height+2*MARGIN_Y);
-    if(x->x_cursor_pos >= 0) {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, x->x_glist)+MARGIN_X-1, text_ypix(&x->x_obj, x->x_glist)+x->x_cursor_pos*x->x_cell_height+MARGIN_Y-1, text_xpix(&x->x_obj, x->x_glist)+x->x_columns*x->x_cell_width+MARGIN_X+1, text_ypix(&x->x_obj, x->x_glist)+(x->x_cursor_pos+1)*x->x_cell_height+MARGIN_Y+1);
-    } else {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, 0, 0, 0, 0);
-    }
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            sys_vgui(".x%x.c coords %xTEXT.%d.%d %d %d\n", canvas, x, r, c, text_xpix(&x->x_obj, glist)+(c+1)*x->x_cell_width+MARGIN_X, text_ypix(&x->x_obj, glist)+r*x->x_cell_height+MARGIN_Y);
-        }
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_erase(t_tracker* x, t_glist* glist) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    sys_vgui(".x%x.c delete %xSHAPE\n", canvas, x);
-    sys_vgui(".x%x.c delete %xTEXT\n", canvas, x);
-    sys_vgui(".x%x.c delete %xCURSOR\n", canvas, x);
-}
-
-static void tracker_draw_select(t_tracker* x, t_glist* glist) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    if(x->x_selected) {
-        sys_vgui(".x%x.c itemconfigure %xSHAPE -fill blue\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xTEXT -fill white\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xCURSOR -fill blue\n", canvas, x);
-    } else {
-        sys_vgui(".x%x.c itemconfigure %xSHAPE -fill gray\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xTEXT -fill black\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xCURSOR -fill #dddddd\n", canvas, x);
-    }
-    if(x->x_active_row >= 0 && x->x_active_column >= 0)
-        sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill red\n", canvas, x, x->x_active_row, x->x_active_column);
-}
-
-/* ---- widget behavior stuff ---------------------------------------------- */
-
-static void tracker_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2) {
-    t_tracker* x = (t_tracker*)z;
-
-    *xp1 = text_xpix(&x->x_obj, owner);
-    *yp1 = text_ypix(&x->x_obj, owner);
-    *xp2 = text_xpix(&x->x_obj, owner)+x->x_columns*x->x_cell_width+2*MARGIN_X;
-    *yp2 = text_ypix(&x->x_obj, owner)+x->x_rows*x->x_cell_height+2*MARGIN_Y;
-}
-
-static void tracker_save(t_gobj* z, t_binbuf* b) {
-    t_tracker* x = (t_tracker*)z;
-
-    binbuf_addv(b, "ssiis", gensym("#X"), gensym("obj"),
-        (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,
-        atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)));
-
-    if(x->b_save_data) {
-        int ei,gi;
-        binbuf_addv(b, "sii", gensym("-data"), x->x_columns, x->x_rows);
-        /* save data: */
-        for (ei = 0; ei < x->x_rows; ei++) {
-            for (gi = 0; gi < x->x_columns; gi++) {
-                binbuf_addv(b, "i", (int)tracker_data_get(x, ei, gi));
-            }
-        }
-    } else {
-        binbuf_addv(b, "sisi",
-            gensym("-rows"), x->x_rows,
-            gensym("-cols"), x->x_columns
-        );
-    }
-
-    if(*x->s_send->s_name)
-        binbuf_addv(b, "ss", gensym("-send"), x->s_send);
-
-    if(*x->s_recv->s_name)
-        binbuf_addv(b, "ss", gensym("-recv"), x->s_recv);
-
-    binbuf_addv(b, ";");
-}
-
-static void tracker_properties(t_gobj* z, t_glist* owner) {
-    char buf[800];
-    t_tracker* x = (t_tracker*)z;
-
-    sprintf(buf, "pdtk_tracker_dialog %%s %d %d %d %d {%s} {%s}\n",
-        (int)x->x_columns, (int)x->x_rows,
-        (int)x->b_save_data, (int)x->x_ndigits,
-        x->s_send->s_name, x->s_recv->s_name
-    );
-    //post("buf=%s", buf);
-    gfxstub_new(&x->x_obj.ob_pd, x, buf);
-}
-
-static void tracker_select(t_gobj* z, t_glist* glist, int selected) {
-    t_tracker* x = (t_tracker*)z;
-
-    x->x_selected = selected;
-    tracker_draw_select(x, glist);
-}
-
-static void tracker_activate(t_gobj* z, t_glist* glist, int state) {
-    //post("tracker: activate(%d)", state);
-}
-
-static void tracker_vis(t_gobj* z, t_glist* glist, int vis) {
-    t_tracker* x = (t_tracker*)z;
-    t_rtext* y;
-
-    if(vis) {
-        tracker_draw_new(x, glist);
-    } else {
-        tracker_draw_erase(x, glist);
-    }
-}
-
-static void tracker_delete(t_gobj* z, t_glist* glist) {
-    canvas_deletelinesfor(glist_getcanvas(glist), (t_text*)z);
-}
-
-static void tracker_displace(t_gobj* z, t_glist* glist, int dx, int dy) {
-    t_tracker* x = (t_tracker*)z;
-    int oldx = text_xpix(&x->x_obj, glist);
-    int oldy = text_ypix(&x->x_obj, glist);
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    if(oldx != x->x_obj.te_xpix || oldy != x->x_obj.te_ypix) {
-        tracker_draw_move(x, x->x_glist);
-    }
-}
-
-static void tracker_reset_buffer(t_tracker* x) {
-    int n = MAX_BUF;
-    while(n--) x->x_buf[n] = 0;
-    x->x_buf[MAX_BUF] = 0;
-}
-
-static void tracker_key(void* z, t_floatarg fkey) {
-    t_tracker* x = (t_tracker*)z;
-    int k = (int)fkey, n = 0;
-
-    //if(k) post("key=%d (0x%.2x) ('%c')", k, k, k);
-
-    if(k >= '0' && k <= '9') {
-        //k -= '0';
-        if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-            while(x->x_buf[n]) n++;
-            if (n < MAX_BUF && n < x->x_ndigits) x->x_buf[n] = (char)k;
-            tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-        }
-    } else if(k == '\n') {
-        if(x->x_buf[0]) {
-            n = atoi(x->x_buf);
-            if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-                int oldr,oldc;
-                tracker_setitem(x, x->x_active_row, x->x_active_column, n);
-                tracker_changenotify(x, x->x_active_row, x->x_active_column);
-                tracker_reset_buffer(x);
-                tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-                //tracker_select_item(x, -1, -1);
-            }
-        }
-    } else if(k == '\x7f' || k == 8) {
-        if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-            while(x->x_buf[n]) n++;
-            n--;
-            if(n >= 0) x->x_buf[n] = 0;
-            tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-        }
-    } else if(k == '\x1b' || k == 27) {
-        tracker_reset_buffer(x);
-        tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-    } else if(k == '+') {
-        tracker_reset_buffer(x);
-        tracker_motion(x, 0, -1);
-    } else if(k == '-') {
-        tracker_reset_buffer(x);
-        tracker_motion(x, 0, 1);
-    // VIM-STYLE CURSOR MOVEMENT (how to use arrow keys?)
-    } else if(k == 'J' || k == 'j') { tracker_select_movecur(x,  0, -1);
-    } else if(k == 'K' || k == 'k') { tracker_select_movecur(x,  0,  1);
-    } else if(k == 'H' || k == 'h') { tracker_select_movecur(x, -1,  0);
-    } else if(k == 'L' || k == 'l') { tracker_select_movecur(x,  1,  0);
-    }
-}
-
-static void tracker_motion(t_tracker* x, t_floatarg dx, t_floatarg dy) {
-    if(x->x_active_row >= 0 && x->x_active_column >= 0 && dy != 0) {
-        t_float d = tracker_data_get(x, x->x_active_row, x->x_active_column);
-        d -= dy;
-        tracker_data_set(x, x->x_active_row, x->x_active_column, d);
-        tracker_changenotify(x, x->x_active_row, x->x_active_column);
-        tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-    }
-}
-
-static void tracker_select_movecur(t_tracker* x, int dx, int dy) {
-    int r = x->x_active_row, c = x->x_active_column;
-    if(r >= 0 && c >= 0) {
-        r += dy;
-        if(r < 0) r = 0;
-        if(r >= x->x_rows) r = x->x_rows - 1;
-        c += dx;
-        if(c < 0) c = 0;
-        if(c >= x->x_columns) c = x->x_columns - 1;
-        tracker_select_item(x, r, c);
-    }
-}
-
-static void tracker_select_item(t_tracker* x, int r, int c) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    // -1, -1 unselects
-    if(r >= 0 && c >= 0) {
-        if(r != x->x_active_row || c != x->x_active_column) {
-            if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-                sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill black\n", canvas, x, x->x_active_row, x->x_active_column);
-                tracker_reset_buffer(x);
-                tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-            }
-            x->x_active_row = r;
-            x->x_active_column = c;
-            sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill red\n", canvas, x, x->x_active_row, x->x_active_column);
-        }
-    } else {
-        if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-            sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill black\n", canvas, x, x->x_active_row, x->x_active_column);
-        }
-        x->x_active_row = -1;
-        x->x_active_column = -1;
-    }
-}
-
-static int tracker_click(t_gobj* z, t_glist* glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) {
-    t_tracker* x = (t_tracker*)z;
-    t_canvas* canvas = glist_getcanvas(glist);
-
-    if(doit) {
-        glist_grab(glist, &x->x_obj.te_g,
-            (t_glistmotionfn)tracker_motion, tracker_key, xpix, ypix);
-
-        int r,c,rx,ry;
-        rx = xpix - text_xpix(&x->x_obj, glist) - MARGIN_X;
-        ry = ypix - text_ypix(&x->x_obj, glist) - MARGIN_Y;
-        c = rx / x->x_cell_width;
-        r = ry / x->x_cell_height;
-        tracker_select_item(x, r, c);
-        tracker_reset_buffer(x);
-    }
-
-    return 1;
-}
-
-/* ------------------------------------------------------------------------- */
-
-static void tracker_update(t_tracker* x, t_symbol* s, int argc, t_atom* argv) {
-    tracker_draw_update(x);
-}
-
-static void tracker_resize(t_tracker* x, int newrows, int newcols) {
-    int oldrows = x->x_rows;
-    int oldcols = x->x_columns;
-    if(oldrows == newrows && oldcols == newcols) return;
-
-    int ei,ej;
-    t_float** oldbuf = x->x_data;
-    x->x_data = (t_float**)getbytes(newrows*sizeof(t_float*));
-    for(ei = 0; ei < newrows; ei++) {
-        x->x_data[ei] = (t_float*)getbytes(newcols*sizeof(t_float));
-        for(ej = 0; ej < newcols; ej++) {
-            x->x_data[ei][ej] = oldbuf[ei % oldrows][ej % oldcols];
-        }
-    }
-
-    for(ei = 0; ei < oldrows; ei++) {
-        freebytes(oldbuf[ei], oldcols*sizeof(t_float));
-    }
-    freebytes(oldbuf, oldrows*sizeof(t_float));
-
-    x->x_rows = newrows;
-    x->x_columns = newcols;
-}
-
-static void tracker_gresize(t_tracker* x, t_floatarg newrows, t_floatarg newcols) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    tracker_draw_erase(x, x->x_glist);
-    tracker_resize(x, (int)newrows, (int)newcols);
-    tracker_draw_new(x, x->x_glist);
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_gdigits(t_tracker* x, t_floatarg d) {
-    x->x_ndigits = (int)d;
-    if(x->x_ndigits < DIGITS_MIN) x->x_ndigits = DIGITS_MIN;
-    if(x->x_ndigits > DIGITS_MAX) x->x_ndigits = DIGITS_MAX;
-    tracker_vis((t_gobj*)x, x->x_glist, 0);
-    tracker_vis((t_gobj*)x, x->x_glist, 1);
-}
-
-static void tracker_free(t_tracker* x) {
-    int ei;
-    for(ei = 0; ei < x->x_rows; ei++) {
-        freebytes(x->x_data[ei], x->x_columns*sizeof(t_float));
-    }
-    freebytes(x->x_data, x->x_rows*sizeof(t_float));
-}
-
-static void tracker_set_saveflag(t_tracker* x, t_floatarg b) {
-    x->b_save_data = (int)(b == 0 ? 0 : 1);
-}
-
-static void tracker_set_send(t_tracker* x, t_symbol *s) {
-    x->s_send = s;
-}
-
-static void tracker_set_recv(t_tracker* x, t_symbol *s) {
-    if(x->s_recv != gensym(""))
-        pd_unbind(&x->x_obj.ob_pd, x->s_recv);
-
-    x->s_recv = s;
-    //x->s_recv_r = canvas_realizedollar(glist_getcanvas(x->x_glist), s);
-
-    pd_bind(&x->x_obj.ob_pd, s);
-}
-
-static t_tracker* tracker_new(t_symbol* s, int argc, t_atom* argv) {
-    t_tracker* x;
-    t_pd* x2;
-    int ei;
-    
-    //post("tracker_new: create %s argc=%d", s->s_name, argc);
-
-    x = (t_tracker*)pd_new(tracker_class);
-    x->outlet0 = outlet_new(&x->x_obj, &s_list); //&s_float ??
-
-    tracker_reset_buffer(x);
-
-    //pd_bind(&x->x_obj.ob_pd, keyname_sym);
-
-    x->x_data = (t_float**)getbytes(sizeof(t_float*));
-    x->x_data[0] = (t_float*)getbytes(sizeof(t_float));
-    x->x_data[0][0] = 0;
-    x->x_columns = 1;
-    x->x_rows = 1;
-    x->x_ndigits = 3;
-    x->x_cursor_pos = -1;
-    x->b_cursor = 0;
-    x->b_save_data = 1;
-
-    x->s_send = gensym("");
-    x->s_recv = gensym("");
-
-    int cols = 10, rows = 10;
-    int got_data = 0;
-    if(argc > 0) {
-        #define ARG_CHECK_LOOP_BEGIN while(ei < argc) { if(0) {}
-        #define ARG_CHECK_LOOP_END }
-        #define MATCH_ARG(sz) else if(argv[ei].a_type == A_SYMBOL && \
-            strcmp(sz, argv[ei].a_w.w_symbol->s_name) == 0)
-        #define MATCH_ARG_T(sz,t) else if(argv[ei].a_type == A_SYMBOL && \
-            strcmp(sz, argv[ei].a_w.w_symbol->s_name) == 0 && (ei + 1) < \
-            argc && argv[ei+1].a_type == t)
-        #define MATCH_FAILED else
-        ei = 0;
-        /*----------------*/ARG_CHECK_LOOP_BEGIN
-        MATCH_ARG_T("-rows", A_FLOAT) {
-            ei++;
-            rows = (int)argv[ei++].a_w.w_float;
-        }
-        MATCH_ARG_T("-cols", A_FLOAT) {
-            ei++;
-            cols = (int)argv[ei++].a_w.w_float;
-        }
-        MATCH_ARG_T("-digits", A_FLOAT) {
-            ei++;
-            x->x_ndigits = (int)argv[ei++].a_w.w_float;
-            if(x->x_ndigits < DIGITS_MIN) x->x_ndigits = DIGITS_MIN;
-            if(x->x_ndigits > DIGITS_MAX) x->x_ndigits = DIGITS_MAX;
-        }
-        MATCH_ARG_T("-bg", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-bg", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-fg", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-fg", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-sl", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-sl", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-bd", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-bd", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-send", A_SYMBOL){
-            ei++;
-            //x->s_send = argv[ei++].a_w.w_symbol;
-            tracker_set_send(x, argv[ei++].a_w.w_symbol);
-        }
-        MATCH_ARG_T("-recv", A_SYMBOL){
-            ei++;
-            //x->s_recv = argv[ei++].a_w.w_symbol;
-            tracker_set_recv(x, argv[ei++].a_w.w_symbol);
-        }
-        MATCH_ARG("-data") {
-            ei++;
-            if((argc - ei) < 2) {
-                post("tracker: too few arguments to option -data");
-                post("tracker: expeting: -data <rows> <cols> #rows*cols ...");
-                return NULL;
-            }
-            cols = argv[ei++].a_w.w_float;
-            rows = argv[ei++].a_w.w_float;
-            if((argc - ei) < (rows * cols)) {
-                post("tracker: too few arguments to option -data");
-                post("tracker: expeting: -data %d %d followed by %d floats",
-                    rows, cols, rows * cols);
-                return NULL;
-            }
-            tracker_resize(x, rows, cols);
-            int j;
-            for(j = 0; j < (rows * cols); j++) {
-                tracker_data_set(x, j / cols, j % cols, argv[ei++].a_w.w_float);
-            }
-            got_data = 1;
-            tracker_set_saveflag(x, 1);
-        }
-        MATCH_FAILED {
-            post("tracker: argument error: w_float=%f, w_symbol=%s",
-                argv[ei].a_w.w_float, argv[ei].a_w.w_symbol->s_name);
-            return NULL;
-        }
-        /*----------------*/ARG_CHECK_LOOP_END
-    }
-    if(!got_data) {
-        tracker_set_saveflag(x, 0);
-        tracker_resize(x, rows, cols);
-    }
-
-    x->x_glist = (t_glist*)canvas_getcurrent();
-
-    /* calculate font metrics */
-    int font = glist_getfont(x->x_glist);
-    int width = sys_fontwidth(font);
-    int height = sys_fontheight(font);
-    x->x_cell_width = width*(x->x_ndigits+1);
-    x->x_cell_height = height;
-
-    return x;
-}
-
-static void tracker_file_load(t_tracker* x, t_symbol* f) {
-    void* binbuf = binbuf_new();
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    if(binbuf_read_via_canvas(binbuf, f->s_name, canvas, 0)) {
-        //error("tracker: %s: read failed", f->s_name);
-        return;
-    }
-    
-    int argc = binbuf_getnatom(binbuf);
-    t_atom* argv = binbuf_getvec(binbuf);
-
-    if(argc < 2) {
-        error("tracker: empty or invalid file");
-    }
-
-    int j = 0;
-    int rows = (int)argv[j++].a_w.w_float,
-        cols = (int)argv[j++].a_w.w_float;
-    tracker_gresize(x, rows, cols);
-
-    int r,c;
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            tracker_data_set(x, r, c, argv[j++].a_w.w_float);
-        }
-    }
-    tracker_gresize(x, rows, cols);
-
-    binbuf_free(binbuf);
-}
-
-static void tracker_file_save(t_tracker* x, t_symbol* f) {
-    void* binbuf = binbuf_new();
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    char buf[MAXPDSTRING];
-    canvas_makefilename(canvas, f->s_name, buf, MAXPDSTRING);
-    
-    int r,c;
-    binbuf_addv(binbuf, "ii", x->x_rows, x->x_columns);
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            binbuf_addv(binbuf, "i", (int)tracker_data_get(x, r, c));
-        }
-    }
-
-    if(binbuf_write(binbuf, buf, "", 0))
-        error("%s: write failed", f->s_name);
-    binbuf_free(binbuf);
-}
-
-static void tracker_getrow(t_tracker* x, t_floatarg row) {
-    int ei;
-    int argc = x->x_columns + 1;
-
-    t_atom *atombuf = (t_atom*)getbytes(sizeof(t_atom)*argc);
-
-    SETSYMBOL(&atombuf[0], gensym("output"));
-
-    for(ei = 0; ei < x->x_columns; ei++) {
-        SETFLOAT(&atombuf[ei+1], tracker_data_get(x, row, ei));
-    }
-    
-    outlet_list(x->outlet0, &s_list, argc, atombuf);
-    if(x->s_send != gensym(""))
-        pd_list(x->s_send->s_thing, &s_list, argc, atombuf);
-
-    freebytes(atombuf, sizeof(t_atom)*(x->x_columns+1));
-
-    if(x->b_cursor) {
-        t_int ir = (t_int)row;
-        t_int ic = 0;
-        tracker_clip_row_col(x, &ir, &ic);
-        x->x_cursor_pos = ir;
-        tracker_draw_update_cursor_pos(x);
-    }
-}
-
-static void tracker_changenotify(t_tracker* x, t_floatarg row, t_floatarg col) {
-    int ei = 0;
-    t_atom *atombuf = (t_atom*)getbytes(sizeof(t_atom)*5);
-
-    SETSYMBOL(&atombuf[ei], gensym("changenotify"));           ei++;
-    SETSYMBOL(&atombuf[ei], gensym("set"));                    ei++;
-    SETFLOAT(&atombuf[ei], row);                               ei++;
-    SETFLOAT(&atombuf[ei], col);                               ei++;
-    SETFLOAT(&atombuf[ei], tracker_data_get(x, row, col));     ei++;
-
-    outlet_list(x->outlet0, &s_list, ei, atombuf);
-    if(x->s_send != gensym(""))
-        pd_list(x->s_send->s_thing, &s_list, ei, atombuf);
-
-    freebytes(atombuf, sizeof(t_atom)*ei);
-}
-
-static void tracker_toggle_cursor(t_tracker* x, t_floatarg b) {
-    x->b_cursor = (int)(b == 0 ? 0 : 1);
-    tracker_draw_update_cursor_pos(x);
-}
-
-static void tracker_setrow(t_tracker* x, t_symbol* s, int argc, t_atom* argv) {
-    if(argc < 2) {
-        post("tracker: setrow: too few arguments");
-        return;
-    }
-    int ei;
-    for(ei = 1; ei < argc; ei++) {
-        if((ei - 1) >= x->x_columns) break;
-
-        if(argv[ei].a_type == A_FLOAT) {
-            tracker_data_set(x, argv[0].a_w.w_float, ei - 1, argv[ei].a_w.w_float);
-        } else {
-            post("tracker: warning: non-float atom converted to zero-value");
-            tracker_data_set(x, argv[0].a_w.w_float, ei - 1, 0);
-        }
-    }
-    tracker_draw_update_row(x, argv[0].a_w.w_float);
-}
-
-static void tracker_getitem(t_tracker* x, t_float row, t_float col) {
-    t_atom a[2];
-    SETSYMBOL(&a[0], gensym("output"));
-    SETFLOAT(&a[1], tracker_data_get(x, row, col));
-    outlet_list(x->outlet0, &s_list, 2, &a[0]);
-    if(x->s_send != gensym(""))
-        pd_list(x->s_send->s_thing, &s_list, 2, &a[0]);
-}
-
-static void tracker_setitem(t_tracker* x, t_float row, t_float col, t_float val) {
-    tracker_data_set(x, row, col, val);
-    tracker_draw_update_single(x, row, col);
-}
-
-static void tracker_list(t_tracker* x, t_symbol* s, int ac, t_atom* av) {
-//    startpost("tracker: list> %s", s->s_name);
-//    postatom(ac, av);
-//    endpost();
-}
-
-void tracker_setup(void) {
-keyname_sym = gensym("#keyname");
-#include "tracker.tk2c"
-    tracker_class = class_new(
-        gensym("tracker"),
-        (t_newmethod)tracker_new,
-        (t_method)tracker_free,
-        sizeof(t_tracker),
-        0,
-        A_GIMME,
-        0
-    );
-    class_addlist(tracker_class, tracker_list);
-    class_addmethod(tracker_class, (t_method)tracker_toggle_cursor,
-        gensym("trackrow"), A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_update,
-        gensym("update"), A_GIMME, 0);
-    class_addmethod(tracker_class, (t_method)tracker_setrow,
-        gensym("setrow"), A_GIMME, 0);
-    class_addmethod(tracker_class, (t_method)tracker_getrow,
-        gensym("getrow"), A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_setitem,
-        gensym("set"), A_FLOAT, A_FLOAT, A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_getitem,
-        gensym("get"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_gresize,
-        gensym("resize"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_set_saveflag,
-        gensym("set_saveflag"), A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_set_send,
-        gensym("set_send"), A_SYMBOL, 0);
-    class_addmethod(tracker_class, (t_method)tracker_set_recv,
-        gensym("set_recv"), A_SYMBOL, 0);
-    class_addmethod(tracker_class, (t_method)tracker_file_load,
-        gensym("load"), A_SYMBOL, 0);
-    class_addmethod(tracker_class, (t_method)tracker_file_save,
-        gensym("save"), A_SYMBOL, 0);
-
-    tracker_widgetbehavior.w_getrectfn =    tracker_getrect;
-    tracker_widgetbehavior.w_displacefn =   tracker_displace;
-    tracker_widgetbehavior.w_selectfn =     tracker_select;
-    tracker_widgetbehavior.w_activatefn =   NULL;
-    tracker_widgetbehavior.w_deletefn =     tracker_delete;
-    tracker_widgetbehavior.w_visfn =        tracker_vis;
-    tracker_widgetbehavior.w_clickfn =      tracker_click;
-
-#if PD_MINOR_VERSION >= 37
-    class_setpropertiesfn(tracker_class, tracker_properties);
-    class_setsavefn(tracker_class, tracker_save);
-#else
-    tracker_widgetbehavior.w_propertiesfn = tracker_properties;
-    tracker_widgetbehavior.w_savefn = tracker_save;
-#endif
-
-    class_setwidget(tracker_class, &tracker_widgetbehavior);
-    class_sethelpsymbol(tracker_class, gensym("tracker.pd"));
-}
diff --git a/externals/ffext/tracker/tracker.h b/externals/ffext/tracker/tracker.h
deleted file mode 100644
index 7097ab04119a6b0d1d75e2370d2f34757b53ecee..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/tracker.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) 2007 Federico Ferri
- * For information on usage and redistribution, and for a DISCLAIMER OF ALL
- * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
-
-#ifndef __G_GRID_H
-#define __G_GRID_H
-
-#include <ctype.h>
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-#include "s_stuff.h"
-
-#include <unistd.h>
-#include <stdio.h>
-
-#define MAX_BUF 10
-
-typedef struct _tracker
-{
-    t_object x_obj;
-    t_glist *x_glist;
-    t_int x_selected;      // selected flag (in edit mode)
-    t_int x_columns;       // # of cols
-    t_int x_rows;          // # of rows
-    t_int x_active_row;    // selected item row
-    t_int x_active_column; // selected item col
-    t_int x_ndigits;       // cell width (+1 of margin added automatically)
-    t_int x_cursor_pos;    // visual cursor position (row indicator)
-    t_int b_cursor;        // track cursor?
-    t_int b_save_data;     // save data?
-    char x_buf[MAX_BUF+1]; // edit buffer
-    t_int x_cell_width;    // cell width in pixels  (auto computed)
-    t_int x_cell_height;   // cell height in pixels (auto computed)
-    t_float** x_data;      // data (2d matrix)
-    t_outlet* outlet0;     // outlet
-    t_symbol* s_send;
-    t_symbol* s_recv;
-} t_tracker;
-
-static void tracker_draw_new(t_tracker* x, t_glist* glist);
-static void tracker_draw_update(t_tracker* x);
-static void tracker_draw_move(t_tracker* x, t_glist* glist);
-static void tracker_draw_erase(t_tracker* x, t_glist* glist);
-static void tracker_draw_select(t_tracker* x, t_glist* glist);
-static void tracker_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2);
-static void tracker_save(t_gobj* z, t_binbuf* b);
-static void tracker_properties(t_gobj* z, t_glist* owner);
-static void tracker_dialog(t_tracker* x, t_symbol* s, int argc, t_atom* argv);
-static void tracker_select(t_gobj* z, t_glist* glist, int selected);
-static void tracker_vis(t_gobj* z, t_glist* glist, int vis);
-static void tracker_delete(t_gobj* z, t_glist* glist);
-static void tracker_displace(t_gobj* z, t_glist* glist, int dx, int dy);
-static void tracker_resize(t_tracker* x, int newrows, int newcols);
-static void tracker_free(t_tracker* x);
-static void tracker_getrow(t_tracker* x, t_float row);
-static void tracker_setrow(t_tracker* x, t_symbol* s, int argc, t_atom* argv);
-static void tracker_getitem(t_tracker* x, t_float row, t_float col);
-static void tracker_setitem(t_tracker* x, t_float row, t_float col, t_float val);
-static void tracker_motion(t_tracker* x, t_floatarg dx, t_floatarg dy);
-static void tracker_select_item(t_tracker* x, int r, int c);
-static void tracker_select_movecur(t_tracker* x, int dx, int dy);
-static void tracker_changenotify(t_tracker* x, t_floatarg row, t_floatarg col);
-void tracker_setup(void);
-
-#endif // __G_GRID_H
diff --git a/externals/ffext/tracker/tracker.tk b/externals/ffext/tracker/tracker.tk
deleted file mode 100644
index e5887ab614a52fedfc71fa4cfb814496cf781ce5..0000000000000000000000000000000000000000
--- a/externals/ffext/tracker/tracker.tk
+++ /dev/null
@@ -1,121 +0,0 @@
-proc tracker_apply {id} {
-# strip "." from the TK id to make a variable name suffix 
-    set vid [string trimleft $id .]
-# for each variable, make a local variable to hold its name...
-    set var_graph_width [concat graph_width_$vid]
-    global $var_graph_width
-    set var_graph_height [concat graph_height_$vid]
-    global $var_graph_height
-    set var_saveflag [concat saveflag_$vid]
-    global $var_saveflag
-    set var_sym_send [concat sym_send_$vid]
-    global $var_sym_send
-    set var_sym_recv [concat sym_recv_$vid]
-    global $var_sym_recv
- 
-    set cmd [concat $id resize \
-        [eval concat $$var_graph_height] \
-        [eval concat $$var_graph_width] \
-        \;]
-    pd $cmd
-
-    set cmd [concat $id set_saveflag \
-        [eval concat $$var_saveflag] \
-        \;]
-    pd $cmd
-
-    set ss [string trim [set $var_sym_send]]
-    if {$ss != {}} {pd [concat $id set_send $ss \;]}
-
-    set rs [string trim [set $var_sym_recv]]
-    if {$rs != {}} {pd [concat $id set_recv $rs \;]}
-}
- 
-proc tracker_cancel {id} {
-    set cmd [concat $id cancel \;]
-    #puts stderr $cmd
-    pd $cmd
-}
- 
-proc tracker_ok {id} {
-    tracker_apply $id
-    tracker_cancel $id
-}
- 
-proc pdtk_tracker_dialog {id width height saveflag digitw ss rs} {
-    set vid [string trimleft $id .]
- 
-    set var_graph_width [concat graph_width_$vid]
-    global $var_graph_width
-    set var_graph_height [concat graph_height_$vid]
-    global $var_graph_height
-    set var_saveflag [concat saveflag_$vid]
-    global $var_saveflag
-    set var_sym_send [concat sym_send_$vid]
-    global $var_sym_send
-    set var_sym_recv [concat sym_recv_$vid]
-    global $var_sym_recv
-
-    set $var_graph_width $width
-    set $var_graph_height $height
-    set $var_saveflag $saveflag
-    set $var_sym_recv $rs
-    set $var_sym_send $ss
- 
-    toplevel $id -class [winfo class .]
-    wm title $id {tracker}
-    wm protocol $id WM_DELETE_WINDOW [concat tracker_cancel $id]
- 
-    label $id.label -text {GRID PROPERTIES}
-    pack $id.label -side top
- 
-    frame $id.buttonframe
-    pack $id.buttonframe -side bottom -fill x -pady 2m
-    button $id.buttonframe.cancel -text {Cancel}\
-        -command "tracker_cancel $id"
-    button $id.buttonframe.apply -text {Apply}\
-        -command "tracker_apply $id"
-    button $id.buttonframe.ok -text {OK}\
-        -command "tracker_ok $id"
-    pack $id.buttonframe.cancel -side left -expand 1
-    pack $id.buttonframe.apply -side left -expand 1
-    pack $id.buttonframe.ok -side left -expand 1
-     
-    frame $id.1rangef
-    pack $id.1rangef -side top
-    label $id.1rangef.lwidth -text "Width :"
-    #entry $id.1rangef.width -textvar $var_graph_width -width 7
-    spinbox $id.1rangef.width -textvariable $var_graph_width -width 7 -from 1 -to 99 -increment 1
-    pack $id.1rangef.lwidth $id.1rangef.width -side left
- 
-    frame $id.2rangef
-    pack $id.2rangef -side top
-    label $id.2rangef.lheight -text "Height :"
-    #entry $id.2rangef.height -textvar $var_graph_height -width 7
-    spinbox $id.2rangef.height -textvariable $var_graph_height -width 7 -from 1 -to 99 -increment 1
-    pack $id.2rangef.lheight $id.2rangef.height -side left
-
-    frame $id.3rangef
-    pack $id.3rangef -side top
-    label $id.3rangef.lsaveflag -text ""
-    checkbutton $id.3rangef.saveflag -variable $var_saveflag -text "save contents"
-    pack $id.3rangef.lsaveflag $id.3rangef.saveflag -side left
- 
-    frame $id.4rangef
-    pack $id.4rangef -side top
-    label $id.4rangef.lwidth -text "Send symbol :"
-    entry $id.4rangef.ss -textvar $var_sym_send -width 10
-    pack $id.4rangef.lwidth $id.4rangef.ss -side left
- 
-    frame $id.5rangef
-    pack $id.5rangef -side top
-    label $id.5rangef.lwidth -text "Receive symbol :"
-    entry $id.5rangef.rs -textvar $var_sym_recv -width 10
-    pack $id.5rangef.lwidth $id.5rangef.rs -side left
- 
-    bind $id.1rangef.width <KeyPress-Return> [concat tracker_ok $id]
-    bind $id.2rangef.height <KeyPress-Return> [concat tracker_ok $id]
-    bind $id.4rangef.ss <KeyPress-Return> [concat tracker_ok $id]
-    bind $id.5rangef.rs <KeyPress-Return> [concat tracker_ok $id]
-    focus $id.1rangef.width
-}
diff --git a/externals/framesync/LICENSE.txt b/externals/framesync/LICENSE.txt
deleted file mode 100644
index 443254047416efc10bc53cb1adb5421680d5a647..0000000000000000000000000000000000000000
--- a/externals/framesync/LICENSE.txt
+++ /dev/null
@@ -1,676 +0,0 @@
-
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
- 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-  
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/externals/framesync/Makefile b/externals/framesync/Makefile
deleted file mode 100644
index 09371389c1ff4f14c678cd9b889c7fc2ce7ece2f..0000000000000000000000000000000000000000
--- a/externals/framesync/Makefile
+++ /dev/null
@@ -1,331 +0,0 @@
-## Pd library template version 1.0.6
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = framesync
-
-# add your .c source files, one object per file, to the SOURCES
-# variable, help files will be included automatically
-SOURCES = 
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = clockrunning.pd fadeinout.pd fadeinout~.pd filelooper~.pd fps.pd fps_ms.pd frameclock.pd fsline.pd fsreadsf~.pd fsrecordctrl.pd fstabplay~.pd rangemod.pd tablooper~.pd tabpitcher~.pd tabstretcher~.pd
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = sdf.wav
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, test patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = 
-
-
-
-#------------------------------------------------------------------------------#
-#
-# things you might need to edit if you are using other C libraries
-#
-#------------------------------------------------------------------------------#
-
-CFLAGS = -I"$(PD_INCLUDE)" -Wall -W -g
-LDFLAGS =  
-LIBS = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-CFLAGS += DPD -DVERSION='"$(LIBRARY_VERSION)"'
-
-PD_INCLUDE = $(PD_PATH)/include
-# where to install the library, overridden below depending on platform
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL) -p -m 644
-INSTALL_DATA = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU)
-  # GNU/Hurd, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU/kFreeBSD)
-  # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  PD_PATH = $(cygpath $(PROGRAMFILES))/pd
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-# in case somebody manually set the HELPPATCHES above
-HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_DATA) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_DATA) Makefile  $(DISTDIR)
-	$(INSTALL_DATA) README.txt $(DISTDIR)
-	$(INSTALL_DATA) LICENSE.txt $(DISTDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_DATA) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(HELPPATCHES))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "CFLAGS: $(CFLAGS)"
-	@echo "LDFLAGS: $(LDFLAGS)"
-	@echo "LIBS: $(LIBS)"
-	@echo "PD_INCLUDE: $(PD_INCLUDE)"
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/framesync/README.txt b/externals/framesync/README.txt
deleted file mode 100644
index a3e9f802a156637fcb1ab5b43995ae890e577521..0000000000000000000000000000000000000000
--- a/externals/framesync/README.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-
-framesync
-
-framesync is a library for syncing sounds to video using frame numbers as the
-unit of time.  It was developed as part of the sound design for the Cartier
-Foundation's Terre Natale project.  There are a couple of concepts in this
-library necessary to understand in order to use it:
-
-- the FPS (Frames-Per-Second) is a global value set everywhere in Pd
-- the frameclock is global, and each framesync object receives it automatically
-- the frameclock starts at 0 and flows linearly
-
diff --git a/externals/framesync/TODO.txt b/externals/framesync/TODO.txt
deleted file mode 100644
index 35be162c828f64e1f23c3a82b62a965fb60ceb5f..0000000000000000000000000000000000000000
--- a/externals/framesync/TODO.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-- convert fps handling to use a name that includes the parent-most patch
diff --git a/externals/framesync/clockrunning-help.pd b/externals/framesync/clockrunning-help.pd
deleted file mode 100644
index 5542a7cf3f53ab6a0a59d85e86d419b2ef26097b..0000000000000000000000000000000000000000
--- a/externals/framesync/clockrunning-help.pd
+++ /dev/null
@@ -1,9 +0,0 @@
-#N canvas 116 136 373 298 10;
-#X obj 95 187 clockrunning;
-#X obj 95 87 frameclock;
-#X obj 95 209 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X text 8 20 track whether the frameclock is running or not (there
-is a 1 frame delay to turn off);
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
diff --git a/externals/framesync/clockrunning.pd b/externals/framesync/clockrunning.pd
deleted file mode 100644
index 4319a147bbb690270ffc608a629b51258b42e048..0000000000000000000000000000000000000000
--- a/externals/framesync/clockrunning.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 228 488 450 300 10;
-#X msg 135 169 1;
-#X msg 184 169 0;
-#X obj 154 64 bang;
-#X obj 184 147 delay;
-#X obj 211 127 * 2;
-#X obj 211 87 loadbang;
-#X obj 154 41 inlet;
-#X obj 156 234 outlet;
-#X obj 211 107 fps_ms;
-#X connect 0 0 7 0;
-#X connect 1 0 7 0;
-#X connect 2 0 3 0;
-#X connect 2 0 0 0;
-#X connect 3 0 1 0;
-#X connect 4 0 3 1;
-#X connect 5 0 8 0;
-#X connect 6 0 2 0;
-#X connect 8 0 4 0;
diff --git a/externals/framesync/examples/sdf.wav b/externals/framesync/examples/sdf.wav
deleted file mode 100644
index eb48c25fa0f556094f39dade85a0ff6c06f77bbe..0000000000000000000000000000000000000000
Binary files a/externals/framesync/examples/sdf.wav and /dev/null differ
diff --git a/externals/framesync/fadeinout-help.pd b/externals/framesync/fadeinout-help.pd
deleted file mode 100644
index fa6e33adb16cc16e2ee6338ebd2d49411265752d..0000000000000000000000000000000000000000
--- a/externals/framesync/fadeinout-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 237 57 404 386 10;
-#X floatatom 80 212 9 0 0 0 - - -;
-#X obj 83 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 83 68 frameclock 100;
-#X floatatom 230 212 9 0 0 0 - - -;
-#X obj 233 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 80 184 fadeinout 10 20 40 50;
-#X text 33 16 Generate a 0-to-1-to-0 envelope based on frame numbers
-\, outputting once per frame.;
-#X text 31 285 the first argument/inlet sets the start frame of fade-in
-;
-#X obj 230 184 fadeinout 25 40 90 95;
-#X text 31 344 the fourth argument/inlet sets the end frame of fade-out
-;
-#X text 31 325 the third argument/inlet sets the start frame of fade-out
-;
-#X text 31 304 the second argument/inlet sets the end frame of fade-in
-;
-#X connect 0 0 1 0;
-#X connect 3 0 4 0;
-#X connect 5 0 0 0;
-#X connect 8 0 3 0;
diff --git a/externals/framesync/fadeinout.pd b/externals/framesync/fadeinout.pd
deleted file mode 100644
index 56c7122671b8be32571f20c2d903d98cd5ec3f0b..0000000000000000000000000000000000000000
--- a/externals/framesync/fadeinout.pd
+++ /dev/null
@@ -1,41 +0,0 @@
-#N canvas 761 232 404 407 10;
-#X text 143 16 frame;
-#X obj 62 192 bang;
-#X msg 62 212 0;
-#X obj 105 81 moses \$1;
-#X obj 150 102 moses \$2;
-#X obj 202 191 bang;
-#X msg 202 212 1;
-#X obj 195 125 moses \$3;
-#X obj 240 146 moses \$4;
-#X obj 260 232 mapping/reverse;
-#X obj 192 43 inlet;
-#X obj 232 43 inlet;
-#X obj 272 43 inlet;
-#X obj 312 43 inlet;
-#X obj 127 340 outlet;
-#X obj 107 212 fsline \$1 \$2;
-#X obj 260 211 fsline \$3 \$4;
-#X obj 105 13 receive framesync/frameclock;
-#X connect 1 0 2 0;
-#X connect 2 0 14 0;
-#X connect 3 0 1 0;
-#X connect 3 1 4 0;
-#X connect 4 1 7 0;
-#X connect 5 0 6 0;
-#X connect 6 0 14 0;
-#X connect 7 0 5 0;
-#X connect 7 1 8 0;
-#X connect 8 1 1 0;
-#X connect 9 0 14 0;
-#X connect 10 0 3 1;
-#X connect 10 0 15 0;
-#X connect 11 0 4 1;
-#X connect 11 0 15 1;
-#X connect 12 0 7 1;
-#X connect 12 0 16 0;
-#X connect 13 0 8 1;
-#X connect 13 0 16 1;
-#X connect 15 0 14 0;
-#X connect 16 0 9 0;
-#X connect 17 0 3 0;
diff --git a/externals/framesync/fadeinout~-help.pd b/externals/framesync/fadeinout~-help.pd
deleted file mode 100644
index c0995248783313dd71bb0201511a7014c4c05a37..0000000000000000000000000000000000000000
--- a/externals/framesync/fadeinout~-help.pd
+++ /dev/null
@@ -1,26 +0,0 @@
-#N canvas 189 78 404 386 10;
-#X obj 83 68 frameclock 100;
-#X text 33 16 Generate a 0-to-1-to-0 envelope based on frame numbers
-\, outputting once per frame.;
-#X text 31 285 the first argument/inlet sets the start frame of fade-in
-;
-#X text 31 344 the fourth argument/inlet sets the end frame of fade-out
-;
-#X text 31 325 the third argument/inlet sets the start frame of fade-out
-;
-#X text 31 304 the second argument/inlet sets the end frame of fade-in
-;
-#X obj 50 149 osc~ 300;
-#X obj 200 150 noise~;
-#X obj 50 199 *~ 0.1;
-#X obj 143 243 dac~;
-#X obj 200 199 *~ 0.1;
-#X text 33 265 the inlet~ is for the audio to be faded in and out;
-#X obj 200 174 fadeinout~ 5 40 90 95;
-#X obj 50 174 fadeinout~ 10 20 40 95;
-#X connect 6 0 13 0;
-#X connect 7 0 12 0;
-#X connect 8 0 9 0;
-#X connect 10 0 9 1;
-#X connect 12 0 10 0;
-#X connect 13 0 8 0;
diff --git a/externals/framesync/fadeinout~.pd b/externals/framesync/fadeinout~.pd
deleted file mode 100644
index e96b02db636a2d1e21205a8f3b698683ff737284..0000000000000000000000000000000000000000
--- a/externals/framesync/fadeinout~.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 757 456 358 381 10;
-#X obj 47 12 inlet~;
-#X obj 47 333 outlet~;
-#X obj 47 266 *~;
-#X obj 113 12 inlet;
-#X obj 153 12 inlet;
-#X obj 193 12 inlet;
-#X obj 233 12 inlet;
-#X obj 62 244 line~;
-#X obj 155 179 loadbang;
-#X obj 62 221 pack float float;
-#X obj 155 199 framesync/fps_ms;
-#X obj 62 117 fadeinout \$1 \$2 \$3 \$4;
-#X connect 0 0 2 0;
-#X connect 2 0 1 0;
-#X connect 3 0 11 0;
-#X connect 4 0 11 1;
-#X connect 5 0 11 2;
-#X connect 6 0 11 3;
-#X connect 7 0 2 1;
-#X connect 8 0 10 0;
-#X connect 9 0 7 0;
-#X connect 10 0 9 1;
-#X connect 11 0 9 0;
diff --git a/externals/framesync/filelooper~-help.pd b/externals/framesync/filelooper~-help.pd
deleted file mode 100644
index 744881355dcd6972f094be6a29265fb1c0af7fb5..0000000000000000000000000000000000000000
--- a/externals/framesync/filelooper~-help.pd
+++ /dev/null
@@ -1,23 +0,0 @@
-#N canvas 110 130 556 452 10;
-#X text 23 15 loops a sound file between a startframe and endframe
-;
-#X text 163 188 start;
-#X text 164 200 frame;
-#X text 288 199 frame;
-#X text 288 189 end;
-#X text 27 238 audio out;
-#X text 49 197 filename;
-#X obj 170 57 frameclock 400;
-#X obj 54 285 output~;
-#X text 311 214 args: filename startframe# endframe#;
-#X text 26 146 This will loop the voice.wav sound file starting at
-frame 50 and ending at frame 200:;
-#X obj 54 216 filelooper~ examples/sdf.wav 45 291;
-#X text 29 341 FYI: if the time between start frame and end frame is
-shorter than the sample file \, then you'll get an error message in
-the Pd window:;
-#X text 44 385 error: soundfiler_read: truncated to 2.249e+06 elements
-;
-#X text 29 401 It is safe to ignore this message \, it just means it
-didn't load the entire sample into memory.;
-#X connect 11 0 8 0;
diff --git a/externals/framesync/filelooper~.pd b/externals/framesync/filelooper~.pd
deleted file mode 100644
index ab8b6e11a05ad9f4c21595d4fe2bddb7b76d3263..0000000000000000000000000000000000000000
--- a/externals/framesync/filelooper~.pd
+++ /dev/null
@@ -1,93 +0,0 @@
-#N canvas 683 441 573 321 10;
-#X obj 240 21 inlet;
-#X obj 155 42 loadbang;
-#X obj 400 21 inlet;
-#X obj 146 264 outlet~;
-#X text 294 23 start frame;
-#X text 445 19 end frame;
-#X obj 240 96 purepd/float_argument \$2;
-#X obj 400 96 purepd/float_argument \$3;
-#X text 101 22 first arg is filename;
-#X obj 40 21 inlet;
-#X obj 40 96 purepd/symbol_argument \$1;
-#X obj 155 65 trigger bang bang bang;
-#X obj 40 176 table \$0-sample;
-#X obj 146 197 tablooper~ \$0-sample;
-#N canvas 206 494 511 317 load 0;
-#X obj 22 143 pack symbol symbol;
-#X obj 22 166 zexy/makesymbol %s/%s;
-#X obj 22 120 ggee/getdir 2;
-#X obj 22 74 symbol;
-#X obj 22 10 inlet;
-#X obj 92 194 symbol \$0-sample;
-#X obj 22 96 trigger bang anything bang;
-#X obj 22 262 soundfiler;
-#X obj 163 10 inlet;
-#X obj 22 218 pack symbol symbol float;
-#X msg 22 239 read -resize -maxsize \$3 \$1 \$2;
-#X obj 22 41 trigger anything bang;
-#X obj 200 110 print [filelooper~];
-#X msg 200 80 setting maxsize to truncate table to needed size:;
-#X connect 0 0 1 0;
-#X connect 1 0 9 0;
-#X connect 2 0 0 0;
-#X connect 3 0 6 0;
-#X connect 4 0 11 0;
-#X connect 5 0 9 1;
-#X connect 6 0 2 0;
-#X connect 6 1 0 1;
-#X connect 6 2 5 0;
-#X connect 8 0 9 2;
-#X connect 9 0 10 0;
-#X connect 10 0 7 0;
-#X connect 11 0 3 0;
-#X connect 11 1 13 0;
-#X connect 13 0 12 0;
-#X restore 40 155 pd load \$0-sample;
-#N canvas 0 22 450 300 calc 0;
-#X obj 89 16 inlet;
-#X obj 249 16 inlet;
-#X text 143 18 start frame;
-#X text 294 14 end frame;
-#X obj 126 269 outlet;
-#X obj 141 140 fps_ms;
-#X obj 126 106 -;
-#X obj 89 79 float;
-#X obj 126 160 *;
-#X obj 89 52 trigger bang 0 bang;
-#X obj 141 203 samplerate~;
-#X obj 126 182 / 1000;
-#X obj 126 247 + 1000;
-#X obj 126 222 *;
-#X text 171 247 give it a little extra pad;
-#X connect 0 0 9 0;
-#X connect 1 0 7 1;
-#X connect 5 0 8 1;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 11 0;
-#X connect 9 0 7 0;
-#X connect 9 1 6 1;
-#X connect 9 2 5 0;
-#X connect 9 2 10 0;
-#X connect 10 0 13 1;
-#X connect 11 0 13 0;
-#X connect 12 0 4 0;
-#X connect 13 0 12 0;
-#X restore 139 135 pd calc array maxsize;
-#X msg 252 45 bang;
-#X connect 0 0 6 0;
-#X connect 1 0 11 0;
-#X connect 2 0 7 0;
-#X connect 6 0 13 1;
-#X connect 6 0 15 0;
-#X connect 7 0 13 2;
-#X connect 7 0 15 1;
-#X connect 9 0 10 0;
-#X connect 10 0 14 0;
-#X connect 11 0 10 0;
-#X connect 11 1 6 0;
-#X connect 11 2 7 0;
-#X connect 13 0 3 0;
-#X connect 15 0 14 1;
-#X connect 16 0 11 0;
diff --git a/externals/framesync/fps-help.pd b/externals/framesync/fps-help.pd
deleted file mode 100644
index 04efc51146fb77e5c6807ac657e57b561838447a..0000000000000000000000000000000000000000
--- a/externals/framesync/fps-help.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#N canvas 262 51 450 300 10;
-#X text 38 24 Set the global Frames-Per-Second (FPS) for the global
-clock when using the 'framesync' library. You should only use this
-object once in a project. [frameclock] uses this object to set the
-FPS \, so if you are using [frameclock] \, don't use [fps] also.;
-#X msg 135 206 bang;
-#X floatatom 135 254 5 0 0 0 - - -;
-#X obj 135 230 value framesync/fps;
-#X text 39 157 If you want to get the current global FPS value \, then
-bang [value framesync/fps]:;
-#X obj 177 255 print current FPS;
-#X obj 165 117 framesync/fps 30;
-#X connect 1 0 3 0;
-#X connect 3 0 2 0;
-#X connect 3 0 5 0;
diff --git a/externals/framesync/fps.pd b/externals/framesync/fps.pd
deleted file mode 100644
index bc1c7a657505dce32892333adcdfb324f70ff685..0000000000000000000000000000000000000000
--- a/externals/framesync/fps.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 763 479 535 318 10;
-#X obj 112 189 value framesync/fps;
-#X text 279 100 default to 30fps;
-#X obj 112 79 initbang;
-#X obj 243 160 print [framesync/fps];
-#X msg 243 137 setting FPS to \$1;
-#X obj 112 100 purepd/float_argument \$1 30;
-#X text 97 235 TODO make it an actual singleton;
-#X connect 2 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 0 0;
-#X connect 5 0 4 0;
diff --git a/externals/framesync/fps_ms-help.pd b/externals/framesync/fps_ms-help.pd
deleted file mode 100644
index dd5d419a8051300cb687a2d221324dece51a6e7c..0000000000000000000000000000000000000000
--- a/externals/framesync/fps_ms-help.pd
+++ /dev/null
@@ -1,23 +0,0 @@
-#N canvas 183 103 450 300 10;
-#X obj 100 132 fps_ms;
-#X text 30 34 get the Frames-Per-Second (FPS) in milliseconds (ms)
-to use with [metro] \, [delay] \, etc.;
-#X obj 73 170 metro;
-#X floatatom 117 158 8 0 0 0 - - -;
-#X obj 56 140 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 73 203 float;
-#X obj 111 203 + 1;
-#X floatatom 73 230 5 0 0 0 - - -;
-#X text 152 77 set the global FPS here:;
-#X text 207 270 (the default framerate is 30 fps);
-#X obj 100 110 loadbang;
-#X obj 300 77 framesync/fps 30;
-#X connect 0 0 2 1;
-#X connect 0 0 3 0;
-#X connect 2 0 5 0;
-#X connect 4 0 2 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
-#X connect 6 0 5 1;
-#X connect 10 0 0 0;
diff --git a/externals/framesync/fps_ms.pd b/externals/framesync/fps_ms.pd
deleted file mode 100644
index 78e443b8d10bbc9649623e5446f43eb60f87a365..0000000000000000000000000000000000000000
--- a/externals/framesync/fps_ms.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#N canvas 521 451 395 377 10;
-#X obj 50 18 inlet;
-#X obj 50 339 outlet;
-#X obj 50 51 route bang;
-#X obj 95 275 /;
-#X msg 95 254 1 \$1;
-#X obj 95 296 * 1000;
-#X obj 50 124 value framesync/fps;
-#X obj 50 150 select 0;
-#X msg 50 215 33.3333;
-#X text 102 214 default to 30fps;
-#X obj 62 193 print [framesync/fps_ms];
-#X msg 62 174 setting to default fps (30);
-#X obj 107 93 print [framesync/fps_ms];
-#X obj 107 73 cyclone/prepend no method for;
-#X connect 0 0 2 0;
-#X connect 2 0 6 0;
-#X connect 2 1 13 0;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 7 0 11 0;
-#X connect 7 1 4 0;
-#X connect 8 0 1 0;
-#X connect 11 0 10 0;
-#X connect 13 0 12 0;
diff --git a/externals/framesync/frameclock-help.pd b/externals/framesync/frameclock-help.pd
deleted file mode 100644
index 4c943091053b10b0cabe31cdcb83e8927bcf7096..0000000000000000000000000000000000000000
--- a/externals/framesync/frameclock-help.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 104 124 487 404 10;
-#X floatatom 52 321 5 0 0 0 - - -;
-#X text 51 22 a GUI to generate and control the frame clock \, with
-a default frames-per-second (FPS) of 30 frames/second.;
-#X floatatom 248 319 5 0 0 0 - - -;
-#X text 49 72 the first argument/inlet sets the total number of frames
-;
-#X text 49 92 the second argument/inlet sets the frames-per-second
-(FPS);
-#X text 54 346 you can set the current frame by dragging the yellow
-bar or by clicking in the frame number box \, typing in a number \,
-and hitting enter;
-#X obj 249 247 frameclock 200 24;
-#X obj 154 142 frameclock 400;
-#X text 318 134 <-- set total frames;
-#X text 17 135 set current frame -->;
-#X obj 53 249 frameclock 200 29.97;
-#X connect 6 0 2 0;
-#X connect 10 0 0 0;
diff --git a/externals/framesync/frameclock.pd b/externals/framesync/frameclock.pd
deleted file mode 100644
index ec42f827a1b7baa71f130210d6646b27e54fc2af..0000000000000000000000000000000000000000
--- a/externals/framesync/frameclock.pd
+++ /dev/null
@@ -1,89 +0,0 @@
-#N canvas 122 280 727 505 10;
-#X obj 155 147 tgl 35 0 \$0-tgl \$0-tgl-receive run 5 7 0 14 -233017
--33289 -33289 0 1;
-#X obj 305 346 moses 0;
-#X obj 163 256 float;
-#X msg 150 49 0;
-#X obj 120 147 bng 35 250 50 0 empty empty reset 4 17 0 10 -262144
--4160 -258113;
-#X obj 327 434 outlet;
-#X obj 190 147 nbx 5 35 -1 1e+37 0 0 \$0-numbox \$0-numbox-receive
-empty 0 -8 0 16 -233017 -33289 -33289 0 256;
-#X obj 363 1 inlet;
-#N canvas 524 22 450 300 color 0;
-#X obj 161 16 inlet;
-#X obj 165 263 outlet;
-#X msg 158 214 color \$1 12 12;
-#X obj 159 162 select 0 1;
-#X msg 192 184 76;
-#X msg 157 184 10;
-#X obj 89 131 loadbang;
-#X connect 0 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 5 0;
-#X connect 3 1 4 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 5 0;
-#X restore 526 279 pd color;
-#X obj 363 64 purepd/float_argument \$1 1000;
-#X obj 344 366 moses;
-#X text 402 2 total frames;
-#X obj 433 19 loadbang;
-#X obj 433 39 trigger bang bang;
-#X obj 155 217 metro;
-#X obj 123 139 hsl 154 8 0 400 0 0 \$0-hsl \$0-hsl-receive empty -2
--8 0 10 -262130 -1 -1 0 1;
-#X msg 371 88 range 0 \$1;
-#X obj 435 337 bang;
-#X msg 490 20 bang;
-#X obj 263 75 + 1;
-#X obj 190 50 receive \$0-hsl;
-#X obj 93 333 send \$0-hsl-receive;
-#X obj 190 97 int;
-#X obj 526 256 receive \$0-tgl;
-#X obj 526 302 send \$0-tgl-receive;
-#X msg 93 310 set \$1;
-#X obj 375 434 send framesync/frameclock;
-#X text 377 379 output the last frame# from the right outlet;
-#X msg 150 97 set 0;
-#X obj 28 198 send framesync/reset;
-#X obj 571 24 framesync/fps \$2;
-#X obj 555 64 fps_ms;
-#X obj 24 14 inlet;
-#X text 65 13 set frame position;
-#X connect 0 0 14 0;
-#X connect 1 1 10 0;
-#X connect 2 0 1 0;
-#X connect 2 0 25 0;
-#X connect 3 0 22 0;
-#X connect 3 0 28 0;
-#X connect 4 0 3 0;
-#X connect 4 0 29 0;
-#X connect 6 0 2 1;
-#X connect 7 0 9 0;
-#X connect 8 0 24 0;
-#X connect 9 0 10 1;
-#X connect 9 0 16 0;
-#X connect 10 0 5 0;
-#X connect 10 0 19 0;
-#X connect 10 0 26 0;
-#X connect 10 1 17 0;
-#X connect 10 1 26 0;
-#X connect 10 1 5 0;
-#X connect 12 0 13 0;
-#X connect 13 0 9 0;
-#X connect 13 1 31 0;
-#X connect 14 0 2 0;
-#X connect 16 0 15 0;
-#X connect 17 0 0 0;
-#X connect 18 0 13 0;
-#X connect 19 0 22 0;
-#X connect 20 0 22 0;
-#X connect 22 0 6 0;
-#X connect 23 0 8 0;
-#X connect 25 0 21 0;
-#X connect 28 0 15 0;
-#X connect 31 0 14 1;
-#X connect 32 0 15 0;
-#X coords 0 -1 1 1 159 62 1 120 120;
diff --git a/externals/framesync/framesync-meta.pd b/externals/framesync/framesync-meta.pd
deleted file mode 100644
index b41901f645b231548f3ce907ba9b2b54244b23eb..0000000000000000000000000000000000000000
--- a/externals/framesync/framesync-meta.pd
+++ /dev/null
@@ -1,7 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 25 49 420 300 META 1;
-#X text 13 41 NAME framesync;
-#X text 10 25 AUTHOR Hans-Christoph Steiner <hans@eds.org>;
-#X text 10 10 VERSION 0.0;
-#X text 10 10 DESCRIPTION framesync is a library for syncing sounds to video using frame numbers as the unit of time;
-#X restore 10 10 pd META;
diff --git a/externals/framesync/fsline-help.pd b/externals/framesync/fsline-help.pd
deleted file mode 100644
index 2987f8d89ba77840c5392118ba9173c10c15edb4..0000000000000000000000000000000000000000
--- a/externals/framesync/fsline-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 256 115 588 378 10;
-#X obj 80 184 fsline 10 20;
-#X floatatom 80 212 9 0 0 0 - - -;
-#X obj 83 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 12700 1;
-#X obj 83 68 frameclock 100;
-#X floatatom 230 212 9 0 0 0 - - -;
-#X obj 233 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 12700 1;
-#X floatatom 380 212 9 0 0 0 - - -;
-#X obj 383 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 12700 1;
-#X text 33 16 Generate a 0-to-1 line based on frame numbers \, outputting
-once per frame.;
-#X obj 230 184 fsline 30 40;
-#X obj 380 184 fsline 50 60;
-#X text 31 285 the first argument/inlet sets the start frame;
-#X text 31 304 the second argument/inlet sets the end frame;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 4 0 5 0;
-#X connect 6 0 7 0;
-#X connect 9 0 4 0;
-#X connect 10 0 6 0;
diff --git a/externals/framesync/fsline.pd b/externals/framesync/fsline.pd
deleted file mode 100644
index ebdbbd2e4b31e402a5536c3c5ad15e69b3e3753f..0000000000000000000000000000000000000000
--- a/externals/framesync/fsline.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 497 472 479 363 10;
-#X obj 145 118 purepd/float_argument \$1;
-#X obj 145 11 inlet;
-#X obj 190 68 loadbang;
-#X obj 305 11 inlet;
-#X text 199 13 start frame;
-#X text 350 9 end frame;
-#X obj 305 118 purepd/float_argument \$2;
-#X obj 190 91 trigger bang bang;
-#X obj 47 151 moses;
-#X obj 74 185 moses;
-#X obj 74 255 -;
-#X msg 219 209 \$2 \$1;
-#X obj 219 231 -;
-#X obj 219 189 pack float float;
-#X obj 74 280 /;
-#X obj 74 325 outlet;
-#X obj 101 165 + 1;
-#X obj 47 45 receive framesync/frameclock;
-#X text 44 28 current frame #;
-#X obj 225 166 trigger bang float;
-#X connect 0 0 8 1;
-#X connect 0 0 10 1;
-#X connect 0 0 13 0;
-#X connect 1 0 0 0;
-#X connect 2 0 7 0;
-#X connect 3 0 6 0;
-#X connect 6 0 16 0;
-#X connect 6 0 19 0;
-#X connect 7 0 0 0;
-#X connect 7 1 6 0;
-#X connect 8 1 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 14 1;
-#X connect 13 0 11 0;
-#X connect 14 0 15 0;
-#X connect 16 0 9 1;
-#X connect 17 0 8 0;
-#X connect 19 0 13 0;
-#X connect 19 1 13 1;
diff --git a/externals/framesync/fsreadsf~-help.pd b/externals/framesync/fsreadsf~-help.pd
deleted file mode 100644
index d7c6d6281012d267688436471742bd5e92d705d3..0000000000000000000000000000000000000000
--- a/externals/framesync/fsreadsf~-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 285 106 438 400 10;
-#X text 272 227 frame;
-#X text 71 265 audio out;
-#X text 25 20 Plays a sound file til it ends \, synced up to the frame
-clock. Should stay in sync when randomly accessing different frame
-numbers.;
-#X text 96 227 name;
-#X text 271 216 start;
-#X obj 95 112 frameclock 400;
-#X obj 76 322 output~;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 95 243 fsreadsf~ examples/sdf.wav 40;
-#X text 177 328 arguments: soundfile startframe#;
-#X text 96 216 file;
-#X obj 266 264 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 283 264 bang when done;
-#X connect 7 0 5 0;
-#X connect 8 0 5 0;
-#X connect 10 0 6 0;
-#X connect 10 0 6 1;
-#X connect 10 1 13 0;
diff --git a/externals/framesync/fsreadsf~.pd b/externals/framesync/fsreadsf~.pd
deleted file mode 100644
index 529dcafa7c5c347f75146c27d09806e49f35755b..0000000000000000000000000000000000000000
--- a/externals/framesync/fsreadsf~.pd
+++ /dev/null
@@ -1,105 +0,0 @@
-#N canvas 549 363 605 420 10;
-#X obj 280 21 inlet;
-#X obj 145 42 loadbang;
-#X obj 144 383 outlet~;
-#N canvas 998 355 601 426 play 0;
-#X obj 34 13 inlet;
-#X obj 90 375 outlet~;
-#X obj 90 336 readsf~;
-#X msg 79 301 1;
-#X msg 50 301 0;
-#X obj 34 70 select 0;
-#X obj 143 207 pack symbol symbol;
-#X obj 143 230 zexy/makesymbol %s/%s;
-#X obj 143 184 ggee/getdir 2;
-#X obj 143 160 trigger bang anything;
-#X obj 176 13 inlet;
-#X obj 143 138 symbol;
-#X obj 79 116 trigger bang bang bang;
-#X obj 143 282 pack symbol float;
-#X msg 143 303 open \$1 \$2;
-#N canvas 196 102 450 300 calc 0;
-#X obj 69 8 inlet;
-#X obj 73 266 outlet;
-#X obj 215 13 inlet;
-#X obj 356 13 inlet;
-#X text 254 13 start frame;
-#X text 405 9 end frame;
-#X text 101 12 filename;
-#X restore 242 260 pd calc position in soundfile;
-#X obj 325 13 inlet;
-#X obj 466 13 inlet;
-#X text 364 13 start frame;
-#X text 515 9 end frame;
-#X text 211 12 filename;
-#X obj 154 374 outlet;
-#X connect 0 0 5 0;
-#X connect 2 0 1 0;
-#X connect 2 1 21 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 4 0;
-#X connect 5 1 12 0;
-#X connect 6 0 7 0;
-#X connect 7 0 13 0;
-#X connect 8 0 6 0;
-#X connect 9 0 8 0;
-#X connect 9 1 6 1;
-#X connect 10 0 11 1;
-#X connect 11 0 9 0;
-#X connect 12 0 3 0;
-#X connect 12 1 11 0;
-#X connect 12 2 15 0;
-#X connect 13 0 14 0;
-#X connect 14 0 2 0;
-#X connect 15 0 13 1;
-#X connect 16 0 15 1;
-#X connect 17 0 15 2;
-#X restore 144 341 pd play sample;
-#X obj 144 318 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 177 198 select;
-#X msg 177 221 1;
-#X text 334 23 start frame;
-#X obj 253 383 outlet;
-#X msg 32 281 0;
-#X obj 280 96 purepd/float_argument \$2;
-#X text 141 22 first arg is filename;
-#X obj 431 223 bang;
-#X msg 431 245 0;
-#X obj 32 176 bang;
-#X obj 32 139 receive framesync/frameclock;
-#X text 32 122 current frame #;
-#X obj 80 21 inlet;
-#X obj 80 96 purepd/symbol_argument \$1;
-#X obj 431 203 receive framesync/reset;
-#X obj 59 219 fps_ms;
-#X obj 32 260 delay;
-#X obj 59 198 loadbang;
-#X obj 59 240 * 2;
-#X obj 145 65 trigger bang bang;
-#X connect 0 0 10 0;
-#X connect 1 0 24 0;
-#X connect 3 0 2 0;
-#X connect 3 1 8 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 6 0 4 0;
-#X connect 9 0 4 0;
-#X connect 9 0 3 0;
-#X connect 10 0 5 1;
-#X connect 10 0 3 2;
-#X connect 12 0 13 0;
-#X connect 13 0 3 0;
-#X connect 14 0 21 0;
-#X connect 15 0 5 0;
-#X connect 15 0 14 0;
-#X connect 17 0 18 0;
-#X connect 18 0 3 1;
-#X connect 19 0 12 0;
-#X connect 20 0 23 0;
-#X connect 21 0 9 0;
-#X connect 22 0 20 0;
-#X connect 23 0 21 1;
-#X connect 24 0 18 0;
-#X connect 24 1 10 0;
diff --git a/externals/framesync/fsrecordctrl.pd b/externals/framesync/fsrecordctrl.pd
deleted file mode 100644
index f8b864e72483ca6027e6e16b22d6739651bb6be5..0000000000000000000000000000000000000000
--- a/externals/framesync/fsrecordctrl.pd
+++ /dev/null
@@ -1,46 +0,0 @@
-#N canvas 383 444 566 403 10;
-#X obj 69 212 select 0;
-#X obj 126 212 bang;
-#X obj 69 170 spigot;
-#X obj 102 102 tgl 15 0 empty empty rec -1 7 0 9 -233017 -33289 -33289
-0 1;
-#X text 137 169 record control;
-#X msg 126 257 0;
-#X msg 69 257 1;
-#X obj 89 281 change;
-#X obj 69 190 moses \$1;
-#X text 125 189 total frames;
-#N canvas 524 22 450 300 color 0;
-#X obj 149 22 inlet;
-#X obj 153 269 outlet;
-#X msg 146 220 color \$1 12 12;
-#X obj 147 168 select 0 1;
-#X msg 145 190 10;
-#X msg 180 190 13;
-#X obj 76 154 loadbang;
-#X connect 0 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 4 0;
-#X restore 49 102 pd color;
-#X obj 6 72 inlet;
-#X obj 89 301 outlet;
-#X obj 322 140 select 0 1;
-#X connect 0 0 6 0;
-#X connect 1 0 5 0;
-#X connect 2 0 8 0;
-#X connect 3 0 2 1;
-#X connect 3 0 10 0;
-#X connect 3 0 13 0;
-#X connect 5 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 12 0;
-#X connect 8 0 0 0;
-#X connect 8 1 1 0;
-#X connect 10 0 3 0;
-#X connect 11 0 2 0;
-#X connect 13 0 5 0;
-#X coords 0 -1 1 1 80 18 1 100 100;
diff --git a/externals/framesync/fstabplay~-help.pd b/externals/framesync/fstabplay~-help.pd
deleted file mode 100644
index e9f12b5c1cb06d1026505419f9c82033fcde69c7..0000000000000000000000000000000000000000
--- a/externals/framesync/fstabplay~-help.pd
+++ /dev/null
@@ -1,35 +0,0 @@
-#N canvas 238 126 606 403 10;
-#X text 212 227 frame;
-#X text 241 263 bang when done;
-#X text 71 265 audio out;
-#X text 25 20 Plays a sound file til it ends \, synced up to the frame
-clock. Should stay in sync when randomly accessing different frame
-numbers.;
-#X text 96 216 array;
-#X text 96 227 name;
-#X text 211 216 start;
-#X text 177 308 arguments: arrayname startframe#;
-#X obj 377 279 soundfiler;
-#X obj 377 232 symbol \$0-array;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 126079 float 2;
-#X coords 0 1 126079 -1 200 140 1;
-#X restore 376 50 graph;
-#X msg 377 254 read examples/sdf.wav \$1;
-#X obj 95 112 frameclock 400;
-#X obj 76 322 output~;
-#X obj 95 243 fstabplay~ \$0-array 40;
-#X obj 224 264 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 377 211 loadbang;
-#X connect 9 0 11 0;
-#X connect 11 0 8 0;
-#X connect 14 0 13 0;
-#X connect 14 0 13 1;
-#X connect 14 1 15 0;
-#X connect 16 0 12 0;
-#X connect 17 0 12 0;
-#X connect 19 0 9 0;
diff --git a/externals/framesync/fstabplay~.pd b/externals/framesync/fstabplay~.pd
deleted file mode 100644
index a5d5005840cdc5f6cd635765a371266642fa37da..0000000000000000000000000000000000000000
--- a/externals/framesync/fstabplay~.pd
+++ /dev/null
@@ -1,83 +0,0 @@
-#N canvas 35 253 684 636 10;
-#X obj 301 4 inlet;
-#X obj 325 164 / 1000;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 202 30 loadbang;
-#X obj 504 11 inlet;
-#X text 544 8 frame # when to play;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 89 300 moses;
-#X obj 116 336 moses;
-#X obj 143 241 int;
-#X obj 143 261 + 1;
-#X obj 143 299 +;
-#X obj 318 143 fps_ms;
-#X obj 22 38 receive framesync/frameclock;
-#X text 19 21 current frame #;
-#X text 342 3 array to play;
-#X obj 133 109 arraysize;
-#X obj 116 598 outlet~;
-#X obj 116 401 -;
-#X obj 273 598 outlet;
-#X msg 301 526 set \$1;
-#X obj 255 119 samplerate~;
-#X obj 255 187 *;
-#X obj 116 437 *;
-#X obj 116 460 %;
-#X text 319 598 TODO bang when complated playing sample;
-#X obj 202 50 trigger bang bang bang bang;
-#X msg 260 32 bang;
-#X obj 143 221 /;
-#X text 168 223 samples/frame;
-#X obj 22 65 trigger anything bang;
-#X obj 116 571 tabread~ \$1;
-#X obj 196 470 purepd/once;
-#X obj 196 450 bang;
-#X obj 116 549 line~;
-#X obj 116 526 pack float float;
-#X obj 116 490 select 0;
-#X msg 82 526 0;
-#X connect 0 0 2 0;
-#X connect 1 0 22 1;
-#X connect 2 0 16 1;
-#X connect 2 0 20 0;
-#X connect 3 0 26 0;
-#X connect 4 0 6 0;
-#X connect 6 0 7 1;
-#X connect 6 0 11 1;
-#X connect 6 0 18 1;
-#X connect 7 1 8 0;
-#X connect 8 0 18 0;
-#X connect 8 0 32 1;
-#X connect 8 1 33 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 8 1;
-#X connect 12 0 1 0;
-#X connect 12 0 35 1;
-#X connect 13 0 30 0;
-#X connect 16 0 24 1;
-#X connect 16 0 28 0;
-#X connect 18 0 23 0;
-#X connect 20 0 31 0;
-#X connect 21 0 22 0;
-#X connect 22 0 23 1;
-#X connect 22 0 28 1;
-#X connect 23 0 24 0;
-#X connect 24 0 36 0;
-#X connect 26 1 21 0;
-#X connect 26 2 2 0;
-#X connect 26 2 12 0;
-#X connect 26 3 6 0;
-#X connect 27 0 26 0;
-#X connect 28 0 9 0;
-#X connect 30 0 7 0;
-#X connect 30 1 16 0;
-#X connect 31 0 17 0;
-#X connect 32 0 19 0;
-#X connect 33 0 32 0;
-#X connect 34 0 31 0;
-#X connect 35 0 34 0;
-#X connect 36 0 37 0;
-#X connect 36 1 35 0;
-#X connect 37 0 34 0;
diff --git a/externals/framesync/rangemod.pd b/externals/framesync/rangemod.pd
deleted file mode 100644
index 792894bba3fc62ccb0d3c612fbebf9bb3d789f03..0000000000000000000000000000000000000000
--- a/externals/framesync/rangemod.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 0 22 450 300 10;
-#X obj 79 13 inlet;
-#X obj 124 268 outlet;
-#X obj 79 63 moses \$1;
-#X obj 124 118 - \$1;
-#X obj 124 87 moses \$2;
-#X obj 124 151 % \$3;
-#X connect 0 0 2 0;
-#X connect 2 1 4 0;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
diff --git a/externals/framesync/tablooper~-help.pd b/externals/framesync/tablooper~-help.pd
deleted file mode 100644
index eccd752686edfc85c6cc040a492546939a1b2fa0..0000000000000000000000000000000000000000
--- a/externals/framesync/tablooper~-help.pd
+++ /dev/null
@@ -1,58 +0,0 @@
-#N canvas 159 79 594 533 10;
-#X text 30 7 loops a sound file between a startframe and endframe;
-#X text 133 227 start;
-#X text 134 239 frame;
-#X text 216 239 frame;
-#X text 215 229 end;
-#X text 29 278 audio out;
-#X obj 90 69 frameclock 400;
-#X obj 56 455 output~;
-#X text 31 187 This will loop the voice.wav sound file starting at
-frame 50 and ending at frame 200:;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 126079 float 2;
-#X coords 0 1 126079 -1 100 70 1;
-#X restore 420 19 graph;
-#X obj 402 121 symbol \$0-array;
-#X obj 402 165 soundfiler;
-#X obj 402 100 loadbang;
-#X msg 460 101 bang;
-#X text 238 255 args: array startframe# endframe#;
-#X text 49 236 array;
-#X obj 259 330 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X floatatom 256 349 5 0 0 0 - - -;
-#X obj 256 309 line;
-#X text 149 276 right outlet outputs a message to send to a line which
-will generate a line with 0 at the start and 1 at the end;
-#X obj 85 431 *~;
-#X obj 100 411 line~;
-#X obj 85 355 osc~ 333;
-#X msg 177 382 0;
-#X obj 85 376 *~ 0.3;
-#X obj 177 361 select 1;
-#X msg 90 42 33;
-#X msg 123 42 53;
-#X msg 402 142 read examples/sdf.wav \$1;
-#X msg 152 42 111;
-#X obj 62 256 tablooper~ \$0-array 40 186;
-#X text 180 41 <-- try jumping to a frame;
-#X connect 10 0 28 0;
-#X connect 12 0 10 0;
-#X connect 13 0 10 0;
-#X connect 16 0 17 0;
-#X connect 18 0 16 0;
-#X connect 18 0 25 0;
-#X connect 20 0 7 1;
-#X connect 21 0 20 1;
-#X connect 22 0 24 0;
-#X connect 23 0 21 0;
-#X connect 24 0 20 0;
-#X connect 25 0 23 0;
-#X connect 26 0 6 0;
-#X connect 27 0 6 0;
-#X connect 28 0 11 0;
-#X connect 29 0 6 0;
-#X connect 30 0 7 0;
-#X connect 30 1 18 0;
-#X connect 30 1 21 0;
diff --git a/externals/framesync/tablooper~.pd b/externals/framesync/tablooper~.pd
deleted file mode 100644
index c3b2b30a004058819eeecef126665e51c6ade117..0000000000000000000000000000000000000000
--- a/externals/framesync/tablooper~.pd
+++ /dev/null
@@ -1,104 +0,0 @@
-#N canvas 535 426 858 542 10;
-#X obj 301 4 inlet;
-#X obj 131 508 outlet~;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 224 26 loadbang;
-#X obj 504 11 inlet;
-#X text 544 8 frame # when to play;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 104 190 moses;
-#X obj 131 210 moses;
-#X obj 131 361 -;
-#X obj 273 508 outlet;
-#X obj 131 481 tabplay~ \$1;
-#X msg 301 436 set \$1;
-#X obj 32 101 receive framesync/frameclock;
-#X text 29 84 current frame #;
-#X text 342 3 array to play;
-#X obj 674 11 inlet;
-#X obj 674 82 purepd/float_argument \$3;
-#X text 714 8 frame # when to stop;
-#X obj 224 46 trigger bang bang bang bang bang;
-#X msg 285 26 bang;
-#X obj 208 481 bang;
-#X obj 252 238 fps_ms;
-#X obj 237 317 samplerate~;
-#X obj 237 359 *;
-#X obj 252 338 / 1000;
-#X obj 131 397 *;
-#X obj 131 420 %;
-#X obj 224 396 arraysize;
-#X msg 212 430 stop;
-#N canvas 738 24 450 300 reset 0;
-#X obj 191 140 delay;
-#X obj 191 119 bang;
-#X obj 128 210 purepd/once;
-#X obj 221 119 + 1;
-#X obj 205 164 receive framesync/reset;
-#X obj 13 11 inlet;
-#X obj 221 11 inlet;
-#X obj 128 250 outlet;
-#X obj 242 250 outlet;
-#X obj 191 186 bang;
-#X obj 91 86 float;
-#X obj 91 116 -;
-#X text 130 85 if we skipped a frame \, reset;
-#X obj 91 137 select -1;
-#X text 230 134 if the frameclock stops \, reset;
-#X obj 13 50 trigger float float bang float;
-#X connect 0 0 9 0;
-#X connect 1 0 0 0;
-#X connect 2 0 7 0;
-#X connect 3 0 0 1;
-#X connect 4 0 9 0;
-#X connect 5 0 15 0;
-#X connect 6 0 3 0;
-#X connect 9 0 2 1;
-#X connect 9 0 8 0;
-#X connect 10 0 11 0;
-#X connect 11 0 13 0;
-#X connect 13 1 9 0;
-#X connect 15 0 2 0;
-#X connect 15 1 10 1;
-#X connect 15 2 10 0;
-#X connect 15 2 1 0;
-#X connect 15 3 11 1;
-#X restore 131 262 pd reset delay;
-#X text 319 508 TODO output messages to send to line \, line~ \, vline~
-;
-#X connect 0 0 2 0;
-#X connect 2 0 12 0;
-#X connect 2 0 28 1;
-#X connect 3 0 19 0;
-#X connect 4 0 6 0;
-#X connect 6 0 9 1;
-#X connect 6 0 7 1;
-#X connect 7 1 8 0;
-#X connect 8 0 30 0;
-#X connect 9 0 26 0;
-#X connect 11 0 1 0;
-#X connect 11 1 21 0;
-#X connect 12 0 11 0;
-#X connect 13 0 7 0;
-#X connect 16 0 17 0;
-#X connect 17 0 8 1;
-#X connect 19 0 23 0;
-#X connect 19 0 28 0;
-#X connect 19 1 22 0;
-#X connect 19 2 2 0;
-#X connect 19 3 6 0;
-#X connect 19 4 17 0;
-#X connect 20 0 19 0;
-#X connect 21 0 11 0;
-#X connect 22 0 25 0;
-#X connect 22 0 30 1;
-#X connect 23 0 24 0;
-#X connect 24 0 26 1;
-#X connect 25 0 24 1;
-#X connect 26 0 27 0;
-#X connect 27 0 11 0;
-#X connect 28 0 27 1;
-#X connect 29 0 11 0;
-#X connect 29 0 10 0;
-#X connect 30 0 9 0;
-#X connect 30 1 29 0;
diff --git a/externals/framesync/tabpitcher~-help.pd b/externals/framesync/tabpitcher~-help.pd
deleted file mode 100644
index d4f4dae3e6536538ed4c84dafa447464d1d6843b..0000000000000000000000000000000000000000
--- a/externals/framesync/tabpitcher~-help.pd
+++ /dev/null
@@ -1,37 +0,0 @@
-#N canvas 279 99 618 384 10;
-#X text 140 227 frame;
-#X text 71 265 audio out;
-#X text 96 216 array;
-#X text 96 227 name;
-#X text 141 216 start;
-#X obj 377 279 soundfiler;
-#X obj 377 232 symbol \$0-array;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 20756 float 2;
-#X coords 0 1 20756 -1 200 140 1;
-#X restore 376 50 graph;
-#X obj 94 113 frameclock 400;
-#X obj 76 322 output~;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 377 211 loadbang;
-#X obj 95 244 tabpitcher~ \$0-array 10 60;
-#X text 13 17 Plays a sound til it ends \, synced up to the frame clock
-\, with a set pitch \, based on a root pitch. The root pitch defaults
-to 69 (A above middle C \, 440Hz). It stays in sync when randomly accessing
-different frame numbers.;
-#X text 231 216 root;
-#X text 230 227 pitch;
-#X text 186 227 pitch;
-#X text 184 216 play;
-#X text 177 308 arguments: arrayname startframe# play_pitch root_pitch
-;
-#X msg 377 254 read -resize examples/sdf.wav \$1;
-#X connect 6 0 21 0;
-#X connect 10 0 8 0;
-#X connect 11 0 8 0;
-#X connect 13 0 6 0;
-#X connect 14 0 9 0;
-#X connect 14 0 9 1;
-#X connect 21 0 5 0;
diff --git a/externals/framesync/tabpitcher~.pd b/externals/framesync/tabpitcher~.pd
deleted file mode 100644
index 4d935d37613069ef8180a099d4cca784431ef2ee..0000000000000000000000000000000000000000
--- a/externals/framesync/tabpitcher~.pd
+++ /dev/null
@@ -1,96 +0,0 @@
-#N canvas 311 314 1069 636 10;
-#X obj 301 4 inlet;
-#X obj 325 164 / 1000;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 202 30 loadbang;
-#X obj 504 11 inlet;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 89 319 moses;
-#X obj 116 355 moses;
-#X obj 143 292 int;
-#X obj 143 312 + 1;
-#X obj 143 334 +;
-#X obj 318 143 fps_ms;
-#X obj 12 38 receive framesync/frameclock;
-#X text 9 21 current frame #;
-#X text 342 3 array to play;
-#X obj 123 109 arraysize;
-#X obj 116 598 outlet~;
-#X obj 116 397 -;
-#X msg 301 526 set \$1;
-#X obj 255 119 samplerate~;
-#X obj 255 187 *;
-#X obj 116 428 *;
-#X msg 260 32 bang;
-#X obj 143 272 /;
-#X text 282 206 samples/frame;
-#X obj 12 65 trigger anything bang;
-#X obj 116 541 line~;
-#X obj 116 516 pack float float;
-#X obj 116 480 select 0;
-#X msg 82 516 0;
-#X obj 684 11 inlet;
-#X text 544 8 frame # when to start;
-#X obj 864 11 inlet;
-#X obj 202 50 trigger bang bang bang bang bang bang;
-#X text 724 8 pitch to play;
-#X text 904 8 root pitch of sample;
-#X obj 864 82 purepd/float_argument \$4 69;
-#X obj 684 82 purepd/float_argument \$3 69;
-#X obj 704 109 mtof;
-#X obj 752 110 mtof;
-#X text 729 140 speed change;
-#X obj 255 208 *;
-#X obj 704 140 /;
-#X obj 116 571 tabread4~ \$1;
-#X obj 116 450 moses;
-#X connect 0 0 2 0;
-#X connect 1 0 20 1;
-#X connect 2 0 15 1;
-#X connect 2 0 18 0;
-#X connect 3 0 33 0;
-#X connect 4 0 5 0;
-#X connect 5 0 6 1;
-#X connect 5 0 10 1;
-#X connect 5 0 17 1;
-#X connect 6 1 7 0;
-#X connect 7 0 17 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 7 1;
-#X connect 11 0 1 0;
-#X connect 11 0 27 1;
-#X connect 12 0 25 0;
-#X connect 15 0 23 0;
-#X connect 15 0 44 1;
-#X connect 17 0 21 0;
-#X connect 18 0 43 0;
-#X connect 19 0 20 0;
-#X connect 20 0 41 0;
-#X connect 21 0 44 0;
-#X connect 22 0 33 0;
-#X connect 23 0 8 0;
-#X connect 25 0 6 0;
-#X connect 25 1 15 0;
-#X connect 26 0 43 0;
-#X connect 27 0 26 0;
-#X connect 28 0 29 0;
-#X connect 28 1 27 0;
-#X connect 29 0 26 0;
-#X connect 30 0 37 0;
-#X connect 32 0 36 0;
-#X connect 33 1 19 0;
-#X connect 33 2 2 0;
-#X connect 33 2 11 0;
-#X connect 33 3 5 0;
-#X connect 33 4 37 0;
-#X connect 33 5 36 0;
-#X connect 36 0 39 0;
-#X connect 37 0 38 0;
-#X connect 38 0 42 0;
-#X connect 39 0 42 1;
-#X connect 41 0 21 1;
-#X connect 41 0 23 1;
-#X connect 42 0 41 1;
-#X connect 43 0 16 0;
-#X connect 44 0 28 0;
diff --git a/externals/framesync/tabstretcher~-help.pd b/externals/framesync/tabstretcher~-help.pd
deleted file mode 100644
index 7107a33bf39168fee48e8c4cc28247cce39fc45e..0000000000000000000000000000000000000000
--- a/externals/framesync/tabstretcher~-help.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 232 120 595 379 10;
-#X text 165 227 frame;
-#X text 71 265 audio out;
-#X text 96 216 array;
-#X text 96 227 name;
-#X text 164 216 start;
-#X obj 357 279 soundfiler;
-#X obj 357 232 symbol \$0-array;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 20756 float 2;
-#X coords 0 1 20756 -1 200 140 1;
-#X restore 376 38 graph;
-#X obj 94 113 frameclock 400;
-#X obj 76 322 output~;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 357 211 loadbang;
-#X obj 95 243 tabstretcher~ \$0-array 10 44;
-#X text 176 316 arguments: arrayname startframe# endframe#;
-#X msg 357 254 read -resize examples/sdf.wav \$1;
-#X text 246 227 frame;
-#X text 252 216 end;
-#X text 5 20 Plays a complete sound file til it ends \, synced up to
-the frame clock. The sound is stretched or shrunk based on the end
-frame number. It stays in sync when randomly accessing different frame
-numbers.;
-#X connect 6 0 16 0;
-#X connect 10 0 8 0;
-#X connect 11 0 8 0;
-#X connect 13 0 6 0;
-#X connect 14 0 9 0;
-#X connect 14 0 9 1;
-#X connect 16 0 5 0;
diff --git a/externals/framesync/tabstretcher~.pd b/externals/framesync/tabstretcher~.pd
deleted file mode 100644
index f754e9cb5eaa0181fc3d1ccf2b128399077a543b..0000000000000000000000000000000000000000
--- a/externals/framesync/tabstretcher~.pd
+++ /dev/null
@@ -1,71 +0,0 @@
-#N canvas 685 275 872 599 10;
-#X obj 301 4 inlet;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 213 30 loadbang;
-#X obj 504 11 inlet;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 89 300 moses;
-#X obj 116 336 moses;
-#X obj 260 119 fps_ms;
-#X obj 22 38 receive framesync/frameclock;
-#X text 19 21 current frame #;
-#X text 342 3 array to play;
-#X obj 133 119 arraysize;
-#X obj 116 568 outlet~;
-#X obj 116 371 -;
-#X msg 301 496 set \$1;
-#X obj 116 407 *;
-#X obj 116 430 %;
-#X msg 271 32 bang;
-#X obj 22 65 trigger anything bang;
-#X obj 116 511 line~;
-#X obj 116 486 pack float float;
-#X obj 116 450 select 0;
-#X msg 82 486 0;
-#X obj 684 11 inlet;
-#X text 724 8 frame # when to stop;
-#X text 544 8 frame # when to start;
-#X obj 684 82 purepd/float_argument \$3;
-#X obj 213 50 trigger bang bang bang bang bang;
-#X obj 504 171 -;
-#X text 529 171 total frames to play;
-#X obj 425 342 /;
-#X obj 504 192 * -1;
-#X obj 116 541 tabread4~ \$1;
-#X connect 0 0 1 0;
-#X connect 1 0 11 1;
-#X connect 1 0 14 0;
-#X connect 2 0 27 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 1;
-#X connect 4 0 13 1;
-#X connect 4 0 28 0;
-#X connect 5 1 6 0;
-#X connect 6 0 13 0;
-#X connect 7 0 20 1;
-#X connect 8 0 18 0;
-#X connect 11 0 16 1;
-#X connect 11 0 30 0;
-#X connect 13 0 15 0;
-#X connect 14 0 32 0;
-#X connect 15 0 16 0;
-#X connect 16 0 21 0;
-#X connect 17 0 27 0;
-#X connect 18 0 5 0;
-#X connect 18 1 11 0;
-#X connect 19 0 32 0;
-#X connect 20 0 19 0;
-#X connect 21 0 22 0;
-#X connect 21 1 20 0;
-#X connect 22 0 19 0;
-#X connect 23 0 26 0;
-#X connect 26 0 28 1;
-#X connect 26 0 6 1;
-#X connect 27 1 7 0;
-#X connect 27 2 1 0;
-#X connect 27 3 4 0;
-#X connect 27 4 26 0;
-#X connect 28 0 31 0;
-#X connect 30 0 15 1;
-#X connect 31 0 30 1;
-#X connect 32 0 12 0;
diff --git a/externals/frankenstein/GArhythm.c b/externals/frankenstein/GArhythm.c
deleted file mode 100644
index a0550264827dc301e965f88114daadb2d1fb4a53..0000000000000000000000000000000000000000
--- a/externals/frankenstein/GArhythm.c
+++ /dev/null
@@ -1,707 +0,0 @@
-/* 
-
-*/
-#include <stdlib.h>
-#include <time.h>
-#include "m_pd.h"
-
-#define BUFFER_LENGHT 16 // lunghezza dei buffers (quanti elementi nel pattern)
-#define MAX_POPULATION 100
-#define CHOIR 20
-#define NUM_STRUM 4 // quanti strumenti uso , max 8
-
-#define DEF_PROB_CROSSOVER 0.9f
-#define DEF_PROB_MUTATION 0.025f
-#define REINSERT_SRC 1 // quanti reinserisco ad ogni ciclo usando il ritmo src
-#define REINSERT_LAST 0 // quanti reinserisco ad ogni ciclo usando il ritmo src
-
-#define DEBUG 0 // messaggi di debug
-
-static t_class *GArhythm_class;
-
-
-typedef struct _GArhythm
-{
-    t_object x_obj; // myself
-    t_symbol *x_arrayname_src_strum1; // where i read the current pattern
-    t_symbol *x_arrayname_src_strum2; // where i read the current pattern
-    t_symbol *x_arrayname_src_strum3; // where i read the current pattern
-    t_symbol *x_arrayname_src_strum4; // where i read the current pattern
-	t_symbol *x_arrayname_dest_strum1; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_strum2; // where i put the computed pattern
-    t_symbol *x_arrayname_dest_strum3; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_strum4; // where i put the computed pattern
-	//t_float *buf_strum1; // buffer strum1o
-	//t_float *buf_strum2; //  buffer alto
-	// tutti gli indici vanno da 0 a 1;
-	float indice_variazione; // quanto cambio dalla battuta precedente
-	float indice_riempimento; // quanto voglio fitto il pattern risultante
-	float indice_aderenza; // quanto simile al ritmo sorgente devo essere
-	// la popolazione array di cromosomi
-	char population[MAX_POPULATION][BUFFER_LENGHT];
-	float prob_crossover;
-	float prob_mutation;
-	char last[BUFFER_LENGHT];
-	int reinsert_src;
-	int reinsert_last;
-} t_GArhythm;
-
-void GArhythm_init_pop(t_GArhythm *x)
-{
-	int i, j, tmp, k;
-	double rnd;
-
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		for (j=0; j<BUFFER_LENGHT; j++)
-		{
-			tmp = 0;
-			for (k=0; k<NUM_STRUM; k++)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd > 0.5)
-				{
-					tmp =  tmp + (1<<k); // da 0 a MAX_POPULATION
-				} 
-			}
-			x->population[i][j]=tmp;
-		}
-		if (DEBUG)
-			post("inizializzo population[%i] = %i%i%i%i", 
-				i, 
-				x->population[i][0],
-				x->population[i][1],
-				x->population[i][2],
-				x->population[i][3]
-				); 
-	}
-	
-}
-
-void GArhythm_reinit_pop(t_GArhythm *x)
-{
-	int i, j, vecsize, ntot, tmp, me;
-	float prob, variatore;
-	t_garray *arysrc_strum1;
-	t_garray *arysrc_strum2;
-	t_garray *arysrc_strum3;
-	t_garray *arysrc_strum4;
-	t_float *vecsrc_strum1;
-	t_float *vecsrc_strum2;
-	t_float *vecsrc_strum3;
-	t_float *vecsrc_strum4;
-
-	// load tables
-
-	if (!(arysrc_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum1, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum1->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum1, &vecsize, &vecsrc_strum1))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum1->s_name);
-	} 
-	else if (!(arysrc_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum2, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum2->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum2, &vecsize, &vecsrc_strum2))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum2->s_name);
-	}
-	else if (!(arysrc_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum3, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum3->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum3, &vecsize, &vecsrc_strum3))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum3->s_name);
-	}
-	else if (!(arysrc_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum4, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum4->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum4, &vecsize, &vecsrc_strum4))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum4->s_name);
-	}
-	
-	for (i=0; i<MAX_POPULATION; i++)
-		{
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				char c = 0x00;
-				if (vecsrc_strum1[j])
-					c = c | 0x01;
-				if (vecsrc_strum2[j])
-					c = c | (0x01 << 1);
-				if (vecsrc_strum3[j])
-					c = c | (0x01 << 2);
-				if (vecsrc_strum4[j])
-					c = c | (0x01 << 3);
-				x->population[i][j]=c;
-			}
-		}
-}
-
-void GArhythm_init_buf(t_float *buf)
-{
-	int i;
-	for (i=0; i<sizeof(buf); i++)
-	{
-		buf[i] = 0;
-	}
-}
-
-void GArhythm_allocate_buffers(t_GArhythm *x)
-{
-//	x->buf_strum1 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf_strum2 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	GArhythm_init_buf(x->buf_strum1);
-//	GArhythm_init_buf(x->buf_strum2);
-	
-}
-
-void GArhythm_free(t_GArhythm *x)
-{
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-}
-
-// returns fitness: how similar are man and woman
-static double GArhythm_evaluate_fitness1(char *woman, char *man)
-{
-	int res=0;
-	int max = BUFFER_LENGHT*2;
-	int i;
-	/*
-	// commenting here I allow beat swapped rhythms to be considered as identical
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		if (woman[i] == man[i])
-			res++;
-	}
-	*/
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		if ((woman[i]!= 0) && (man[i] != 0))
-			res++;
-		if ((woman[i]== 0) && (man[i] == 0))
-			res++;
-	}
-	return (float) ((float) res) / ((float) max);
-}
-
-// riempimento
-static double GArhythm_evaluate_fitness2(char *woman, char *man)
-{
-	int i, j, max;
-	double ris=0;
-	max = BUFFER_LENGHT * NUM_STRUM;
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		for (j=0; j<NUM_STRUM; j++)
-		{
-			if (man[i] & (0x01<<j))
-				ris++;
-		}
-	}
-	return (float) ((float) ris) / ((float) max);
-
-}
-
-// similarities TODO
-static double GArhythm_evaluate_fitness3(char *woman, char *man)
-{
-	// TODO: DUMMY, not working!
-	int i;
-	short int global1[BUFFER_LENGHT];
-	short int global2[BUFFER_LENGHT];
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		if (woman[i] != 0x00)
-			global1[i]=1;
-		else
-			global1[i]=0;
-		if (man[i] != 0x00)
-			global2[i]=1;
-		else
-			global2[i]=0;
-
-	}
-	// TODO
-	return 0;
-}
-
-// penalyze too many consecutive beats
-static double GArhythm_evaluate_fitness4(char *woman, char *man)
-{
-	int i, j, max, curr_consecutivi, max_consecutivi, tot_consecutivi;
-	double ris=0;
-	curr_consecutivi = max_consecutivi = tot_consecutivi = 0;
-	max = (BUFFER_LENGHT-1) * NUM_STRUM;
-	for (j=0; j<NUM_STRUM; j++)
-	{
-		i=1; 
-		curr_consecutivi = 0;
-		while(i<BUFFER_LENGHT)
-		{
-			if ((man[i] & (0x01<<j)) && (man[i-1] & (0x01<<j)))
-			{
-				// here is an event
-				//is it the first?
-				curr_consecutivi++;
-				if (curr_consecutivi>max_consecutivi)
-					max_consecutivi = curr_consecutivi;
-			} else
-			{
-				tot_consecutivi += curr_consecutivi;
-				curr_consecutivi = 0;
-			}
-			i++;
-		}
-	}
-	ris = (float) (((float) ris) / ((float) max));
-	return 1 - ris;
-
-}
-
-static void GArhythm_create_child(t_GArhythm *x, char *woman, char *man, char *child)
-{
-		double rnd;
-		int split, i, j, tmp;
-		// crossover
-		rnd = rand()/((double)RAND_MAX + 1);
-		if (rnd < x->prob_crossover)
-		{
-			split =(int) ( rnd * BUFFER_LENGHT); // da 0 a MAX_POPULATION
-			for (i=0; i< split; i++)
-			{
-				child[i] = woman[i];
-			}
-			for (i=split; i<BUFFER_LENGHT; i++)
-			{
-				child[i] = man[i];
-			}
-			// TODO: vertical split (some instr from mammy, some from daddy)
-		}else
-		{
-			for (i=0; i< BUFFER_LENGHT; i++)
-			{
-				child[i] = woman[i];
-			}
-		}
-		// mutation
-		for (i=0; i< BUFFER_LENGHT; i++)
-		{
-			// per ogni battito
-			for (j=0; j<NUM_STRUM; j++)
-			{
-				// per ogni strumento
-				tmp = child[i] & (0x01<<j); // tmp > 0 se è presente il battito là
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < x->prob_mutation)
-				{
-					if (DEBUG)
-						post("mutazione al battito %i allo strumento %i", i, j);
-					if (tmp)
-					{
-						child[i] = child[i] & (~(0x01<<j)); // tolgo il bit
-					} else
-					{	
-						child[i] = child[i] | (0x01<<j); // aggiungo il bit						
-					}
-				}
-			}
-		}
-		if (DEBUG)
-			post("generato figlio %i %i %i %i tra %i %i %i %i e %i %i %i %i, split=%i", 
-				child[0], child[1], child[2], child[3],
-				woman[0], woman[1], woman[2], woman[3], 
-				man[0], man[1], man[2], man[3],
-				split);
-
-}
-
-static void GArhythm_bang(t_GArhythm *x) {
-
-	int i, j, vecsize, ntot, tmp, me;
-	float prob, variatore;
-	t_garray *arysrc_strum1;
-	t_garray *arysrc_strum2;
-	t_garray *arysrc_strum3;
-	t_garray *arysrc_strum4;
-	t_garray *arydest_strum1;
-	t_garray *arydest_strum2;
-	t_garray *arydest_strum3;
-	t_garray *arydest_strum4;
-	t_float *vecsrc_strum1;
-	t_float *vecsrc_strum2;
-	t_float *vecsrc_strum3;
-	t_float *vecsrc_strum4;
-	t_float *vecdest_strum1;
-	t_float *vecdest_strum2;
-	t_float *vecdest_strum3;
-	t_float *vecdest_strum4;
-	double rnd;
-	int winner;
-	double winner_fitness;
-
-	char figli[MAX_POPULATION][BUFFER_LENGHT];
-
-	// load tables
-
-	if (!(arysrc_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum1, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum1->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum1, &vecsize, &vecsrc_strum1))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum1->s_name);
-	} 
-	else if (!(arysrc_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum2, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum2->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum2, &vecsize, &vecsrc_strum2))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum2->s_name);
-	}
-	else if (!(arysrc_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum3, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum3->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum3, &vecsize, &vecsrc_strum3))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum3->s_name);
-	}
-	else if (!(arysrc_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum4, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum4->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum4, &vecsize, &vecsrc_strum4))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum4->s_name);
-	}
-	  else 	if (!(arydest_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum1, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum1->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum1, &vecsize, &vecdest_strum1))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum1->s_name);
-	}
-	 else 	if (!(arydest_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum2, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum2->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum2, &vecsize, &vecdest_strum2))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum2->s_name);
-	}
-	 else 	if (!(arydest_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum3, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum3->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum3, &vecsize, &vecdest_strum3))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum3->s_name);
-	}
-	 else 	if (!(arydest_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum4, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum4->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum4, &vecsize, &vecdest_strum4))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum4->s_name);
-	}
-	else // I got arrays and data
-	{
-		// vecdest_strum2 e _strum1 contengono i valori in float degli array
-		if (DEBUG)
-			post("--------- starting process");
-	
-		// uccido a caso REINSERT_SRC elementi e inserisco il ritmo src al loro posto
-		for (i=0; i<x->reinsert_src; i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			me = (int) (rnd * MAX_POPULATION);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				char c = 0x00;
-				if (vecsrc_strum1[j])
-					c = c | 0x01;
-				if (vecsrc_strum2[j])
-					c = c | (0x01 << 1);
-				if (vecsrc_strum3[j])
-					c = c | (0x01 << 2);
-				if (vecsrc_strum4[j])
-					c = c | (0x01 << 3);
-				x->population[me][j]=c;
-			}
-		}
-		// uccido a caso REINSERT_LAST elementi e inserisco il last al loro posto
-		for (i=0; i<x->reinsert_last; i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			me = (int) (rnd * MAX_POPULATION);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j]=x->last[j];
-			}
-		}
-
-		// metà sono donne, prese a caso
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			int winner=CHOIR;
-			int winner_value=0;
-			int men[CHOIR];
-			char figlio[BUFFER_LENGHT];
-			double fitness1[CHOIR];
-			double fitness2[CHOIR];
-			double fitness3[CHOIR];
-			double fitnessTOT[CHOIR];
-			rnd = rand()/((double)RAND_MAX + 1);
-			me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			// me è la donna che valuta gli uomini
-
-			if (DEBUG)
-				post("woman %i = %i %i %i %i", me, x->population[me][0], x->population[me][1], x->population[me][2], x->population[me][3]);
-
-			for (j=0; j<CHOIR; j++)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				tmp =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-				// tmp è questo uomo
-				men[j] = tmp;
-				fitness1[j]=GArhythm_evaluate_fitness1(x->population[me], x->population[tmp]);
-				fitness2[j]=GArhythm_evaluate_fitness2(x->population[me], x->population[tmp]);
-				fitness3[j]=GArhythm_evaluate_fitness3(x->population[me], x->population[tmp]);
-				fitnessTOT[j]=fitness1[j] * (x->indice_aderenza) 
-					+ fitness2[j] * (x->indice_riempimento) 
-					+ (1 - fitness2[j]) * (1-(x->indice_riempimento)) 
-					+ fitness3[j] * (x->indice_variazione)
-					+ GArhythm_evaluate_fitness4(x->population[me], x->population[tmp]);
-				if (winner_value <= fitnessTOT[j])
-				{
-					winner = tmp;
-					winner_value = fitnessTOT[j];
-				}
-			}
-			// winner è il maschio migliore nel coro
-			if (DEBUG)
-				post("ho scelto il maschio %i", winner);
-			// genero un figlio
-			GArhythm_create_child(x, x->population[me], x->population[winner], figlio);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				figli[i][j] = figlio[j];
-			}
-		}
-
-		// uccido a caso metà popolazione e ci metto i nuovi nati
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			// me è chi deve morire
-
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j] = figli[i][j];
-			}
-		}
-
-		// prendo il più adatto rispetto all'ultimo ritmo suonato
-		winner = 0;
-		winner_fitness = 0;
-		for(i=0; i<BUFFER_LENGHT; i++)
-		{
-			double tmp1, tmp2, tmp3, tmpTOT;
-			tmp1 = GArhythm_evaluate_fitness1(x->last, x->population[i]);
-			tmp2 = GArhythm_evaluate_fitness2(x->last, x->population[i]);
-			tmp3 = GArhythm_evaluate_fitness3(x->last, x->population[i]);
-			tmpTOT = tmp1 * (x->indice_aderenza) 
-					+ tmp2 * (x->indice_riempimento) 
-					+ (1-tmp2) * (1-(x->indice_riempimento)) 
-					+ tmp3 * (x->indice_variazione)
-					+ GArhythm_evaluate_fitness4(x->last, x->population[i]);
-			if (tmpTOT >= winner_fitness)
-			{
-				winner_fitness = tmpTOT;
-				winner = i;
-			}
-		}
-			
-		for (i=0; i<BUFFER_LENGHT; i++)
-		{
-			// copio il vincitor ein x->last
-			x->last[i] = x->population[winner][i];
-			// scrivo i buffer in uscita
-			vecdest_strum1[i]=((x->population[winner][i] & (0x01<<0)) ? 1 : 0);				
-			vecdest_strum2[i]=((x->population[winner][i] & (0x01<<1)) ? 1 : 0);				
-			vecdest_strum3[i]=((x->population[winner][i] & (0x01<<2)) ? 1 : 0);				
-			vecdest_strum4[i]=((x->population[winner][i] & (0x01<<3)) ? 1 : 0);				
-		}
-
-		// redraw the arrays
-		//garray_redraw(arysrc);
-		garray_redraw(arydest_strum1);
-		garray_redraw(arydest_strum2);
-		garray_redraw(arydest_strum3);
-		garray_redraw(arydest_strum4);
-
-
-	}
-}
-/*
-static void GArhythm_src(t_GArhythm *x, t_symbol *s) {
-    x->x_arrayname_src = s;
-}
-*/
-
-static void GArhythm_variazione_set(t_GArhythm *x, t_floatarg f)
-{
-  x->indice_variazione = f;
- }
-
-static void GArhythm_aderenza_set(t_GArhythm *x, t_floatarg f)
-{
-  x->indice_aderenza = f;
-}
-
-static void GArhythm_riempimento_set(t_GArhythm *x, t_floatarg f)
-{
-  x->indice_riempimento = f;
-}
-
-static void GArhythm_crossover_set(t_GArhythm *x, t_floatarg f)
-{
-  x->prob_crossover = f;
-}
-
-static void GArhythm_mutation_set(t_GArhythm *x, t_floatarg f)
-{
-  x->prob_mutation = f;
-}
-
-static void GArhythm_reinsert_src_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f>=0)
-		x->reinsert_src = (int) f;
-}
-
-static void GArhythm_reinsert_last_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f>=0)
-		x->reinsert_last = (int) f;
-}
-
-static void GArhythm_prob_crossover_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f<=1 && f>=0)
-		x->prob_crossover = f;
-}
-
-static void GArhythm_prob_mutation_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f<=1 && f>=0) 
-		x->prob_mutation = f;
-}
-
-static void GArhythm_help(t_GArhythm *x)
-{
-	post("");
-	post("");
-	post("GArhythm");
-	post("");
-	post("a rhythm generator/variatior that uses co-evolving Genetic Algorithms");
-	post("at the moment it only works with 16 step measure, 1 measure rhythms, it needs 4 arrays as input rhythms and outputs its rhythms on 4 arrays");
-	post("");
-
-	post("global usage hints");
-	post("you must provide 8 arguments: the first 4 are the names of arrays with src rhythms, the second 4 are names of arrays where GArhythm will put its output");
-	post("send a bang each time you want a new population (and a new rhythm) to be evaluated");
-	post("");
-	post("available commands");
-	post("reinit: initialize the population with the content of the src arrays");
-	post("variazione float: sets the index of wanted variation between the last proposed rhythm and the next one (from 0 to 1)");
-	post("aderenza float: sets the index of wanted closeness between the current src rhythm and proposed one (from 0 to 1)");
-	post("riempimento float: set 0 if you want sparse rhythms, 1 if you want a rhythm full of events");
-	post("reinsert_src int: how many times the src rhythms will be randomly copied in the population before breeding");
-	post("reinsert_last int: how many times the last rhythms will be randomly copied in the population before breeding");
-	post("prob_crossover float: sets the crossover probability. default is %f", DEF_PROB_CROSSOVER);
-	post("prob_mutation float: sets the mutation probability, default is %f", DEF_PROB_MUTATION);
-
-}
-
-
-static void *GArhythm_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_GArhythm *x = (t_GArhythm *)pd_new(GArhythm_class);
-	GArhythm_allocate_buffers(x);
-	GArhythm_init_pop(x);
-	// inizializzo gli indici
-	x->indice_variazione=0;
-	x->indice_riempimento=0;
-	x->indice_aderenza=0;
-	x->prob_crossover = DEF_PROB_CROSSOVER;
-	x->prob_mutation = DEF_PROB_MUTATION;
-	x->reinsert_src=REINSERT_SRC;
-	x->reinsert_last=REINSERT_LAST;
-
-	srand( (unsigned)time( NULL ) );
-	
-	if (argc>0) 
-	{
-		x->x_arrayname_src_strum1 = atom_getsymbolarg(0, argc, argv);
-	} 
-	if (argc>1) 
-	{
-		x->x_arrayname_src_strum2 = atom_getsymbolarg(1, argc, argv);
-	} 
-	if (argc>2) 
-	{
-		x->x_arrayname_src_strum3 = atom_getsymbolarg(2, argc, argv);
-	} 
-	if (argc>3) 
-	{
-		x->x_arrayname_src_strum4 = atom_getsymbolarg(3, argc, argv);
-	} 
-	if (argc>4) 
-	{
-		x->x_arrayname_dest_strum1 = atom_getsymbolarg(4, argc, argv);
-	}
-	if (argc>5) 
-	{
-		x->x_arrayname_dest_strum2 = atom_getsymbolarg(5, argc, argv);
-	}
-	if (argc>6) 
-	{
-		x->x_arrayname_dest_strum3 = atom_getsymbolarg(6, argc, argv);
-	}
-	if (argc>7) 
-	{
-		x->x_arrayname_dest_strum4 = atom_getsymbolarg(7, argc, argv);
-	}
-
-    return (x);
-}
-
-void GArhythm_setup(void)
-{
-    GArhythm_class = class_new(gensym("GArhythm"), (t_newmethod)GArhythm_new,
-        (t_method)GArhythm_free, sizeof(t_GArhythm), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(GArhythm_class, (t_method)GArhythm_bang);
-//    class_addmethod(GArhythm_class, (t_method)GArhythm_src, gensym("src"),A_SYMBOL, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_variazione_set, gensym("variazione"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_riempimento_set, gensym("riempimento"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_aderenza_set, gensym("aderenza"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_reinit_pop, gensym("reinit"), 0, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_reinsert_src_set, gensym("reinsert_src"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_reinsert_last_set, gensym("reinsert_last"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_prob_crossover_set, gensym("prob_crossover"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_prob_mutation_set, gensym("prob_mutation"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_help, gensym("help"), 0, 0);
-}
diff --git a/externals/frankenstein/GArhythm.vcproj b/externals/frankenstein/GArhythm.vcproj
deleted file mode 100755
index fafd049d0df005ab57e9b331f6f28ef6509f3e60..0000000000000000000000000000000000000000
--- a/externals/frankenstein/GArhythm.vcproj
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="GArhythm"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:GArhythm_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/GArhythm.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="GArhythm.c">
-			</File>
-			<File
-				RelativePath="common.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/Makefile b/externals/frankenstein/Makefile
deleted file mode 100755
index cf2fecad113e2c5d625d0c1acf737285d9f330f8..0000000000000000000000000000000000000000
--- a/externals/frankenstein/Makefile
+++ /dev/null
@@ -1,42 +0,0 @@
-# customize here !
-#VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
-#VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
-VC="C:\Programmi\Microsoft Platform SDK"
-VC="C:\Programmi\Microsoft Visual C++ Toolkit 2003"
-#PDPATH="H:\PureData\pd-0.38-3.msw\pd"
-#PDPATH="C:\Documents and Settings\Davide\Documenti\personali\pd-0.38-3.msw\pd"
-PDPATH="C:\Programmi\pd\pd"
-
-current: pd_nt distclean
-
-pd_nt: chord_melo.dll chords_memory.dll harmonizer.dll voicing_analyzer.dll GArhythm.dll ritmo1.dll rhythms_memory.dll themes_memory.dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-
-PDNTINCLUDE = /I. /I$(PDPATH)\tcl\include /I$(PDPATH)\src /I$(VC)\include /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDPATH)\bin\pd.lib 
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c common.c $*.c
-	link /dll /export:$*_setup $*.obj common.obj $(PDNTLIB) 
-
-
-
-clean:
-	-del link.stamp
-	-del *.obj
-	-del *.lib
-	-del *.exp
-	-del *.dll
-
-distclean:
-	-del *.obj
-	-del *.lib
-	-del *.exp
diff --git a/externals/frankenstein/README.txt b/externals/frankenstein/README.txt
deleted file mode 100644
index 09d3cefd158523dbfbdd94218d06361f866bc987..0000000000000000000000000000000000000000
--- a/externals/frankenstein/README.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-frankenstein set of externals
-
-authors:
-dmorelli: www.davidemorelli.it
-pland: www.davidcasal.com
-with the help of vatic and using soundspotter code (copyright 2006 Michael Casey)
-
-copyright (c) 2006 Davide Morelli and David Plans Casal
-
-last update: 
-14-10-2005
-
-------------------- what is this?
-
-this is an attempt to build an intelligent system for realtime 
-improvisation, a system that follows a human player and proposes
-rhythm, melody, chords sequences, formal structure.
-it learns the style in realtime.
-it uses various AI techniques: GA, searchs, ANN (maybe)
-
-description of files:
-
-chord_melo.c
-a GA melody generator. it takes a melody as input and evolves it over time.
-uses co-evolutionary techniques (Todd)
-
-chords_memory.c
-it is a directional graph which implements a memory of the played 
-chords sequences, you can train it...
-and once trained you can ask questions like:
-in C major, from a D minor 7h where did I go most if the times?
-or
-in C major, from a D minor 7h build a chord sequence to bring me
-in D major in 4 steps using the chords sequences I used most
-
-harmonizer.c
-a GA external that build choir voicing for 5 voices: 
-you pass it the midi value of each voice, starting chord, next chord
-and it outputs a list with the midi values of each voice.
-avoids hidden 8ves and 5ths.
-
-
-folders:
-
-doc/
-implementation documents, notes, logs, ideas, etc..
-patches/
-example patches, help patches, some used in performances, etc..
-aima/
-python patches not yes used but interesting for agents
-ruby/
-gridflow patches not yet used
-old/
-old not used code
-test/
-testing code, not to be used
-backup/
-previous versions
-
-
-TODO:
-
-gluer/solderer
-an external that takes the input of two or more chord_melody,
-a chord sequence and glues the melody statemets together
-to build a long complete melody.
-
-form_manager
-an external that manages the form and structure of the piece:
-decide which melody statement to use, the chord sequence to ask for, etc..
-
-various objects to detect played notes
-
-diatonic_melody.c
-same as chord_melody but without chord reference, only scale used
-(for post-tonal music non based on chords)
-
-chromatic_melo.c
-same as diatonic_melo but without any reference (for atonal music)
diff --git a/externals/frankenstein/SHOWME.pd b/externals/frankenstein/SHOWME.pd
deleted file mode 100644
index f870d2846c7ec2fe1e176cc1185140589beebd53..0000000000000000000000000000000000000000
--- a/externals/frankenstein/SHOWME.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 63 95 785 518 12;
-#X obj 513 100 tabwrite src;
-#X obj 644 87 tabwrite dest;
-#N canvas 0 0 450 300 graph25 0;
-#X array src 16 float 1;
-#A 0 53 52 55 53 52 50 48 47 48 55 57 59 60 55 52 48;
-#X array dest 16 float 1;
-#A 0 53 50 52 38 64 46 43 41 48 64 67 67 36 55 53 57;
-#X coords 0 127 15 0 400 250 1;
-#X restore 75 32 graph;
-#X obj 572 38 tgl 15 0 empty empty START 0 -6 0 8 -258699 -1 -1 1 1
-;
-#X floatatom 550 138 5 0 0 0 - - -;
-#X floatatom 596 138 5 0 0 0 - - -;
-#X floatatom 648 137 5 0 0 0 - - -;
-#X obj 591 279 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1
-0 1;
-#X obj 627 279 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1
-1 1;
-#X obj 572 56 chord_melo_test3;
-#X floatatom 613 213 5 0 0 0 current_melo - -;
-#X connect 3 0 9 0;
-#X connect 9 0 4 0;
-#X connect 9 0 0 0;
-#X connect 9 1 1 0;
-#X connect 9 1 5 0;
-#X connect 9 2 10 0;
-#X connect 9 3 0 1;
-#X connect 9 3 1 1;
-#X connect 9 3 6 0;
diff --git a/externals/frankenstein/bay.orc b/externals/frankenstein/bay.orc
deleted file mode 100755
index 78edb681b03b638afce66488210ea7e560cfc0e3..0000000000000000000000000000000000000000
--- a/externals/frankenstein/bay.orc
+++ /dev/null
@@ -1,463 +0,0 @@
-; ================================================================
-; Header
-; ================================================================
-sr=44100
-kr=882
-ksmps=50
-nchnls=2
-
-; ================================================================
-; Globals
-; ================================================================
-zakinit 10,10
-
-; Global variable for the reverb unit
-ga1 init 0
-
-; ================================================================
-; Tables
-; ================================================================
-; Waveform for the string-pad
-iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25,  .0, .1,  .1, .1
-
-; Senoid required by chorus
-isine ftgen 2, 0, 4096, 10, 1
-
-
-; ================================================================
-; Instruments
-; ================================================================
-
-
-instr 1	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz1"
-kpos invalue "pos1"
-kamp  invalue "amp1"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 2	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz2"
-kpos invalue "pos2"
-kamp  invalue "amp2"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 3	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
- ; ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz3"
-kpos invalue "pos3"
-kamp  invalue "amp3"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 4	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz4"
-kpos invalue "pos4"
-kamp  invalue "amp4"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 5	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz5"
-kpos invalue "pos5"
-kamp  invalue "amp5"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; live input per reverbero
-
-instr 8	;live input
-  asig1,asig2	ins
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-; strumento senza invalue
-
-instr 9	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-  ihz  = p4
-  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-  ipos = p6
-  iamp = ampdb(idb)
-
-; modified by dmorelli
-
-;kpos invalue "pos1"
-;kamp  invalue "amp1"
-;kctrl = kamp*70
-;kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, ihz, 1            ; audio oscillator
-  acel1   oscil   kctrl, ihz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, ihz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  ippan =       ipos*1.570796325  ; half of PI (radians of 90o angle)
-  ipleft        =       cos(ippan)        ; half sign "down"
-  ipright       =       sin(ippan)        ; half sign "up"
-  asig1 = asig*ipleft;
-  asig2 = asig*ipright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; ================================================================
-; EFFECTS
-; ================================================================
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
-; I made some of its parameters accesible trhough score
-instr 10	;Chorus
-  ; Read input from zak
-  a1     zar     1
-  a2     zar     2
-  idlyml=p4      ;delay in milliseconds
-  k1             oscili          idlyml/p5, 1, 2
-  ar1l           vdelay3 a1, idlyml/5+k1, 900    ;delayed sound 1
-  ar1r           vdelay3 a2, idlyml/5+k1, 900    ;delayed sound 1
-  k2             oscili          idlyml/p5, .995, 2
-  ar2l           vdelay3 a1, idlyml/5+k2, 700    ;delayed sound 2
-  ar2r           vdelay3 a2, idlyml/5+k2, 700    ;delayed sound 2
-  k3             oscili          idlyml/p5, 1.05, 2
-  ar3l           vdelay3 a1, idlyml/5+k3, 700    ;delayed sound 3
-  ar3r           vdelay3 a2, idlyml/5+k3, 700    ;delayed sound 3
-  k4             oscili          idlyml/p5, 1, 2
-  ar4l           vdelay3 a1, idlyml/5+k4, 900    ;delayed sound 4
-  ar4r           vdelay3 a2, idlyml/5+k4, 900    ;delayed sound 4
-  aoutl          =               (a1+ar1l+ar2l+ar3l+ar4l)*.5
-  aoutr          =               (a2+ar1r+ar2r+ar3r+ar4r)*.5
-
-  ; To the output mixer
-  zawm            aoutl, 5
-  zawm            aoutr, 6
-  ; and also to the reverb unit
-  ga1 = ga1 + (aoutl+aoutr)*.5
-endin
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Reverb
-; 8 delay line FDN reverb, with feedback matrix based upon 
-; physical modeling scattering junction of 8 lossless waveguides
-; of equal characteristic impedance. Based on Julius O. Smith III, 
-; "A New Approach to Digital Reverberation using Closed Waveguide
-; Networks," Proceedings of the International Computer Music 
-; Conference 1985, p. 47-53 (also available as a seperate
-; publication from CCRMA), as well as some more recent papers by
-; Smith and others.
-;
-; Coded by Sean Costello, October 1999
-instr 25	;Reverb
-  ; Note: ga1 is the global input to the reverb.
-  afilt1 init 0
-  afilt2 init 0
-  afilt3 init 0
-  afilt4 init 0
-  afilt5 init 0
-  afilt6 init 0
-  afilt7 init 0
-  afilt8 init 0
-  idel1 = (2473.000/sr)
-  idel2 = (2767.000/sr)
-  idel3 = (3217.000/sr)
-  idel4 = (3557.000/sr)
-  idel5 = (3907.000/sr)
-  idel6 = (4127.000/sr)
-  idel7 = (2143.000/sr)
-  idel8 = (1933.000/sr)
-  
-  
-  igain = p4      ; gain of reverb. Adjust empirically
-                  ; for desired reverb time. .6 gives
-                  ; a good small "live" room sound, .8
-                  ; a small hall, .9 a large hall,
-                  ; .99 an enormous stone cavern.
-  
-  ipitchmod = p5  ; amount of random pitch modulation
-                  ; for the delay lines. 1 is the "normal"
-                  ; amount, but this may be too high for
-                  ; held pitches such as piano tones.
-                  ; Adjust to taste.
-  
-  itone = p6      ; Cutoff frequency of lowpass filters
-                  ; in feedback loops of delay lines,
-                  ; in Hz. Lower cutoff frequencies results
-                  ; in a sound with more high-frequency
-                  ; damping.
-  
-  ; k1-k8 are used to add random pitch modulation to the
-  ; delay lines. Helps eliminate metallic overtones
-  ; in the reverb sound.
-  k1      randi   .001, 3.1, .06
-  k2      randi   .0011, 3.5, .9
-  k3      randi   .0017, 1.11, .7
-  k4      randi   .0006, 3.973, .3
-  k5      randi   .001, 2.341, .63
-  k6      randi   .0011, 1.897, .7
-  k7      randi   .0017, 0.891, .9
-  k8      randi   .0006, 3.221, .44
-  ; apj is used to calculate "resultant junction pressure" for 
-  ; the scattering junction of 8 lossless waveguides
-  ; of equal characteristic impedance. If you wish to
-  ; add more delay lines, simply add them to the following 
-  ; equation, and replace the .25 by 2/N, where N is the 
-  ; number of delay lines.
-  apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
-  
-  
-  adum1   delayr  1
-  adel1   deltapi idel1 + k1 * ipitchmod
-          delayw  ga1 + apj - afilt1
-  
-  adum2   delayr  1
-  adel2   deltapi idel2 + k2 * ipitchmod
-          delayw  ga1 + apj - afilt2
-  
-  adum3   delayr  1
-  adel3   deltapi idel3 + k3 * ipitchmod
-          delayw  ga1 + apj - afilt3
-  
-  adum4   delayr  1
-  adel4   deltapi idel4 + k4 * ipitchmod
-          delayw  ga1 + apj - afilt4
-  
-  adum5   delayr  1
-  adel5   deltapi idel5 + k5 * ipitchmod
-          delayw  ga1 + apj - afilt5
-  
-  adum6   delayr  1
-  adel6   deltapi idel6 + k6 * ipitchmod
-          delayw  ga1 + apj - afilt6
-  
-  adum7   delayr  1
-  adel7   deltapi idel7 + k7 * ipitchmod
-          delayw  ga1 + apj - afilt7
-  
-  adum8   delayr  1
-  adel8   deltapi idel8 + k8 * ipitchmod
-          delayw  ga1 + apj - afilt8
-  
-  ; 1st order lowpass filters in feedback
-  ; loops of delay lines.
-  afilt1  tone    adel1 * igain, itone
-  afilt2  tone    adel2 * igain, itone
-  afilt3  tone    adel3 * igain, itone
-  afilt4  tone    adel4 * igain, itone
-  afilt5  tone    adel5 * igain, itone
-  afilt6  tone    adel6 * igain, itone
-  afilt7  tone    adel7 * igain, itone
-  afilt8  tone    adel8 * igain, itone
-  
-  ; The outputs of the delay lines are summed
-  ; and sent to the stereo outputs. This could
-  ; easily be modified for a 4 or 8-channel 
-  ; sound system.
-  aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
-  aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
-  ;outs    aout1, aout2
-  ; To the output mixer
-  zawm aout1, 5
-  zawm aout2, 6
-  ga1 = 0
-endin
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Output mixer
-; It applies a bass enhancement, compression and fadeout
-; to the whole piece,
-instr 30	;Mixer
-  ; Read input from zak
-  a1  zar 5
-  a2  zar 6
-  ; Bass enhancement
-  al1 butterlp a1, 100
-  al2 butterlp a2, 100
-  a1 = al1*1.5 +a1
-  a2 = al2*1.5 +a2 
-
-  ; Global amplitude shape
-  ; It applies a gain of p4 to the whole piece, and creates a
-  ; fadeout the last p5 seconds
-  kenv   linseg  p4, p3-p5, p4, p5, 0 
-  a1=a1*kenv
-  a2=a2*kenv 
-  
-  ; Compression
-  a1 dam a1, 5000, 0.5, 1, 0.2, 0.1  
-  a2 dam a2, 5000, 0.5, 1, 0.2, 0.1  
-  
-  outs a1, a2
-  zacl 0, 10
-endin
-
diff --git a/externals/frankenstein/chord_melo.c b/externals/frankenstein/chord_melo.c
deleted file mode 100644
index 975b6534afe71e70593dbd9f7351b8efc9023e8c..0000000000000000000000000000000000000000
--- a/externals/frankenstein/chord_melo.c
+++ /dev/null
@@ -1,1137 +0,0 @@
-/* 
-BUGS:
-- I had to comment out arrays re-display because it crashed my pd
-- sometimes dest_played gets filled with junk
-
-TODO:
-- now rests can't be used! change chord_melo_seq_max_min
-*/
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include "m_pd.h"
-
-#define BUFFER_LENGHT 16 // lunghezza dei buffers (quanti elementi nel pattern)
-#define MAX_POPULATION 500
-#define CHOIR 20
-#define NOTES 128 // how many notes can I use ? MIDI !
#define MAX_OCTAVES 3
-
-#define DEF_PROB_CROSSOVER 0.9f
-#define DEF_PROB_MUTATION 0.03f
-#define REINSERT_SRC 2 // quanti reinserisco ad ogni ciclo usando il ritmo src
-#define REINSERT_LAST 0 // quanti reinserisco ad ogni ciclo usando l'ultimo ritmo scelto
-
-#define DEBUG 1 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-static t_class *chord_melo_class;
-
-// 1 gene of the genome
-typedef struct _chord_melo_gene
-{
-	int chord_note; // 0-12
-	int passing_note; // from -4 to +4
-	int played; // 0 / 1
-} chord_melo_gene;
-
-// an interval between 2 genes
-typedef struct _chord_melo_interval
-{
-	int direction; // -1/0/1 
-	int chord_note; // 0-12
-	int passing_note; // from -4 to +4
-} chord_melo_interval;
-
-typedef struct _chord_melo_critic
-{
-	double interval[12][9];
-} chord_melo_critic;
-
-// return the interval between 2 genes
-chord_melo_interval chord_melo_Getchord_melo_interval(chord_melo_gene *g1, chord_melo_gene *g2)
-{
-	int note1, note2;
-	chord_melo_interval res;
-	if (g1->chord_note < g2->chord_note)
-	{
-		// ascending
-		res.direction = 1;
-	} else if (g1->chord_note > g2->chord_note)
-	{
-		// descending
-		res.direction = -1;
-	} else if (g1->passing_note == g2->passing_note)
-	{
-		// unison
-		res.direction = 0;		
-	} else
-	{
-		// passing note
-		if (g1->passing_note < g2->passing_note)
-		{
-			// ascending
-			res.direction = 1;
-		} else
-		{
-			// descending
-			res.direction = -1;
-		}
-	}
-	res.chord_note = g1->chord_note - g2->chord_note;
-	res.passing_note = g2->passing_note - g1->passing_note;
-	return res;
-}
-
-// fills an array of intervals with the transition in a genome
-void chord_melo_transitions(chord_melo_interval *res, chord_melo_gene *src)
-{
-	int i;
-	//chord_melo_gene *last;
-	//last = &src[0];
-	for (i=1;i<BUFFER_LENGHT;i++)
-	{
-		res[i-1] = chord_melo_Getchord_melo_interval(&src[i-1], &src[i]);
-		//last = &src[i];		
-	}
-}
-
-// fills an array of integers to design the shape of a genome
-// -1 = descending, 0=unisone, 1=ascending
-void chord_melo_shape(int *res, chord_melo_gene *src)
-{
-	int i, tmp;
-	chord_melo_gene *last;
-	last = &src[0];
-	for (i=1;i<BUFFER_LENGHT;i++)
-	{
-		tmp = chord_melo_Getchord_melo_interval(last, &src[i]).chord_note;
-		if (tmp == 0)
-		{
-			tmp = chord_melo_Getchord_melo_interval(last, &src[i]).passing_note;
-			if (abs(tmp) > 1)
-				tmp = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		}
-		//res[i-1] = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		res[i-1] = tmp;
-		last = &src[i];
-	}
-	if (DEBUG_VERBOSE)
-		post("shape: %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
-		res[0], res[1],res[2],res[3],res[4],res[5],res[6],res[7],res[8],res[9],
-		res[10],res[11],res[12],res[13],res[14]);
-
-}
-
-// fills a 4 gene long array with a sequence
-// starting - max/min - max/min - ending
-void chord_melo_seq_max_min(chord_melo_gene *seq,  chord_melo_gene *src)
-{
-	// return a 4 gene seq: 
-	// seq[0] = starting
-	// seq[1] = min/max
-	// seq[2] = min/max
-	// seq[3] = end
-	int i;
-	int min_pos=0;
-	int max_pos=0;
-	int first_pos=0;
-	int last_pos=0;
-	chord_melo_interval interv;
-	chord_melo_gene curr_min = src[0];
-	chord_melo_gene curr_max = src[0];
-	for (i=1;i<BUFFER_LENGHT;i++)
-	{
-		// look for first
-		//TODO
-		// look for last
-		//TODO
-		// look for min
-		interv = chord_melo_Getchord_melo_interval(&curr_min, &src[i]);
-		if (interv.direction < 0)
-		{
-			min_pos = i;
-			curr_min = src[i];
-		}
-		// look for max
-		interv = chord_melo_Getchord_melo_interval(&curr_max, &src[i]);
-		if (interv.direction > 0)
-		{
-			max_pos = i;
-			curr_max = src[i];
-		}
-	}
-	seq[0] = src[0];
-	seq[3] = src[BUFFER_LENGHT-1];
-	if (min_pos<max_pos)
-	{
-		seq[1] = src[min_pos];
-		seq[2] = src[max_pos];
-	} else
-	{
-		seq[2] = src[min_pos];
-		seq[1] = src[max_pos];
-	}
-
-
-}
-
-// return the shape of the min/max sequence
-void chord_melo_higher_shape(int *res, chord_melo_gene *src)
-{
-	int i, tmp;
-	chord_melo_gene *last;
-	chord_melo_gene seq[4];
-	// i get the max min sequence
-	chord_melo_seq_max_min(seq, src);
-	last = &seq[0];
-	for (i=1;i<4;i++)
-	{
-		tmp = chord_melo_Getchord_melo_interval(last, &src[i]).chord_note;
-		if (tmp == 0)
-		{
-			tmp = chord_melo_Getchord_melo_interval(last, &src[i]).passing_note;
-			if (abs(tmp) > 1)
-				tmp = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		}
-		//res[i-1] = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		res[i-1] = tmp;
-
-		//res[i-1] = chord_melo_Getchord_melo_interval(last, &seq[i]).direction;
-		last = &seq[i];
-	}
-
-	if (DEBUG_VERBOSE)
-		post("higher shape: %i %i %i %i",
-		res[0], res[1],res[2],res[3]);
-}
-
-typedef struct _chord_melo
-{
-    t_object x_obj; // myself
-    t_symbol *x_arrayname_src_note; // where i read the current pattern
-    t_symbol *x_arrayname_src_octave; // where i read the current pattern
-    t_symbol *x_arrayname_src_passing; // where i read the current pattern
-	t_symbol *x_arrayname_src_played; // where i read the current pattern
-    t_symbol *x_arrayname_dest_note; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_octave; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_passing; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_played;
-	// tutti gli indici vanno da 0 a 1;
-	float indice_fitness1;
-	float indice_fitness2;
-	float indice_fitness3;
-	// la popolazione array di cromosomi
-	chord_melo_gene population[MAX_POPULATION][BUFFER_LENGHT];
-	float prob_crossover;
-	float prob_mutation;
-	chord_melo_gene last[BUFFER_LENGHT];
-	chord_melo_gene last_src[BUFFER_LENGHT];
-	int init;
-	t_float *vecsrc_note;
-	t_float *vecsrc_octave;
-	t_float *vecsrc_passing;
-	t_float *vecsrc_played;
-	t_float *vecdest_note;
-	t_float *vecdest_octave;
-	t_float *vecdest_passing;
-	t_float *vecdest_played;
-	int tables_loaded;
-
-} t_chord_melo;
-
-
-// i use pointers to return more than 1 object at a time
-void chord_melo_gene2note(chord_melo_gene thisgene, 
-									 unsigned int *octave, 
-									 unsigned int *note, 
-									 int *alteration, 
-									 unsigned int *played)
-{
-	*octave = thisgene.chord_note / 3;
-	*note = thisgene.chord_note % 3;
-	*alteration = thisgene.passing_note;
-	*played = thisgene.played;
-}
-
-// passing note as a value between 0 and 2 (with octave)
-chord_melo_gene chord_melo_note2gene(unsigned int octave,
-											  unsigned int note,
-											  int alteration,
-											  unsigned int played)
-{
-	chord_melo_gene ris;
-	ris.chord_note = note + 3*octave;
-	ris.passing_note = alteration;
-	ris.played = played;
-	return ris;
-}
-
-// passing note as a value 0-12 (without octave)
-chord_melo_gene chord_melo_note2geneB(unsigned int note,
-											  int alteration,
-											  unsigned int played)
-{
-	chord_melo_gene ris;
-	ris.chord_note = note;
-	ris.passing_note = alteration;
-	ris.played = played;
-	return ris;
-}
-
-// returns next passing note from src in the wanted direction, both chromatic or diatonic
-chord_melo_gene chord_melo_get_next_passing(chord_melo_gene *src, int direction, int chromatic)
-{
-	int new_note;
-	int new_octave;
-	int new_passing;
-	int origine_nota;
-	int origine_ottava;
-	int origine_passaggio;
-	chord_melo_gene res;
-	origine_nota = src->chord_note % 3;
-	origine_ottava = src->chord_note / 3;
-	origine_passaggio = src->passing_note;
-	if (chromatic)
-	{
-		if (direction < 0)
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio - 1;
-		} else
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio + 1;
-		}
-	} else
-	{
-		// diatonic
-		if (direction < 0)
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio - 2;
-		} else
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio + 2;
-		}
-	}
-	// check notes
-	if ((new_passing < -4 )&&(new_note==0))
-	{
-		new_passing += 5;
-		new_note = 2;
-		new_octave -= 1;
-	}
-	if ((new_passing < -3 )&&(new_note>0))
-	{
-		new_passing += 4;
-		new_note -= 1;
-	}
-	if ((new_passing > 4 )&&(new_note==2))
-	{
-		new_passing -= 5;
-		new_note = 0;
-		new_octave += 1;
-	}
-	if ((new_passing > 3 )&&(new_note<2))
-	{
-		new_passing -= 4;
-		new_note += 1;
-	}
-	if (new_octave < 0)
-		new_octave=0;
-
-	if (new_octave > 2)
-		new_octave=2;
-
-//	if (new_octave > MAX_OCTAVES)
-//		new_octave=MAX_OCTAVES;
-
-	res = chord_melo_note2gene(new_octave, new_note, new_passing, 1);
-	return res;
-}
-
-void chord_melo_fill_critic(chord_melo_critic *critic, chord_melo_gene *src)
-{
-	int i, j;
-	chord_melo_interval intervalli[BUFFER_LENGHT-1];
-	for (i=0; i<12; i++)
-	{
-		for (j=0; j<9; j++)
-		{
-			critic->interval[i][j]=0;
-		}
-	}
-	chord_melo_transitions(intervalli, src);
-	for (i=0; i<(BUFFER_LENGHT-1); i++)
-	{
-		if (critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] < 0)
-					critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] = 0;
-		critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] = 
-			critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] +1;
-	}
-}
-
-double chord_melo_Todd_fitness1(chord_melo_critic *woman, chord_melo_gene *man)
-{
-	
-	int i, j, res;
-	chord_melo_interval intervalli[BUFFER_LENGHT-1];
-	chord_melo_transitions(intervalli, man);
-	res = 0;
-	for (i=0; i<(BUFFER_LENGHT-1); i++)
-	{
-		res += woman->interval[intervalli[i].chord_note][intervalli[i].passing_note];
-	}
-	
-	return res;
-}
-
-// fitness functions over higher shape
-double chord_melo_fitness1(chord_melo_gene *woman, chord_melo_gene *man)
-{
-	int i, res;
-	int hi_shape1[4];
-	int hi_shape2[4];
-	chord_melo_higher_shape(hi_shape1, woman);
-	chord_melo_higher_shape(hi_shape2, man);
-	res = 0;
-	for (i=0; i<4; i++)
-	{
-		if (hi_shape1[i] * hi_shape2[i]>=0)
-		{
-			// same direction
-			res += 12 - abs(hi_shape2[i] - hi_shape1[i]);
-		} else if (hi_shape1[i] * hi_shape2[i]==0)
-		{
-			// one voice moving, the other no
-		} else
-		{
-			// opposite direction
-			res -= 5;
-		}
-	}
-
-	return res;
-}
-
-// fitness functions over punctual shape
-double chord_melo_fitness2(chord_melo_gene *woman, chord_melo_gene *man)
-{
-	int i, res;
-	int shape1[BUFFER_LENGHT-1];
-	int shape2[BUFFER_LENGHT-1];
-	chord_melo_shape(shape1, woman);
-	chord_melo_shape(shape2, man);
-	res = 0;
-	for (i=0; i<4; i++)
-	{
-		if (shape1[i] * shape2[i]>=0)
-		{
-			// same direction
-			res += 12 - abs(shape2[i] - shape1[i]);
-		} else if (shape1[i] * shape2[i]==0)
-		{
-			// one voice moving, the other no
-		} else
-		{
-			// opposite direction
-			res -= 5;
-		}
-	}
-	return res;
-}
-
-
-void chord_melo_create_child(t_chord_melo *x, chord_melo_gene *woman, chord_melo_gene *man, chord_melo_gene *child)
-{
-		double rnd, rnd2;
-		int split, i, j, tmp, direction;
-		// crossover
-		rnd = rand()/((double)RAND_MAX + 1);
-		if (rnd < x->prob_crossover)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-
-				// vertical split
-				//split =(int) ( rnd * BUFFER_LENGHT); // da 0 a MAX_POPULATION
-				split = rand() % BUFFER_LENGHT;
-				for (i=0; i< split; i++)
-				{
-					child[i] = woman[i];
-				}
-				for (i=split; i<BUFFER_LENGHT; i++)
-				{
-					child[i] = man[i];
-				}
-		}else
-		{
-			for (i=0; i< BUFFER_LENGHT; i++)
-			{
-				child[i] = woman[i];
-			}
-		}
-		// mutation
-		
-		for (i=0; i< BUFFER_LENGHT; i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			if (rnd < x->prob_mutation)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < 0.4)
-				{
-					int prec=6;
-					int tmp_oct;
-					int tmp_note;
-					int tmp_alt;
-					int tmp_played;
-					int interval;
-					// new chord note
-					int nuovanota = 0;
-					int nuovaplayed=0;
-					if (i>0)
-					{
-						chord_melo_gene2note(child[i-1], &tmp_oct, &tmp_note, &tmp_alt, &tmp_played);
-						prec = 3*tmp_oct + tmp_note;
-						rnd2 = rand()/((double)RAND_MAX + 1);
-						if (rnd2 < 0.3)
-							interval = 1;
-						else if (rnd2 < 0.6)
-							interval = 2;
-						else if (rnd2 < 0.8)
-							interval = 3;
-						else if (rnd2 < 0.9)
-							interval = 4;
-//						else if (rnd2 < 0.95)
-//							interval = 5;
-//						else if (rnd2 < 0.99)
-//							interval = 6;
-//						else 
-//							interval = 7;
-						rnd2 = rand()/((double)RAND_MAX + 1);
-						if (rnd2 < 0.5)
-							interval *= -1;
-
-						nuovanota = prec + interval;
-
-					} else
-					{
-						rnd2 = rand()/((double)RAND_MAX + 1);
-						nuovanota = rnd2 * 12;
-					}
-					child[i] = chord_melo_note2gene(nuovanota / 3, nuovanota % 3, 0, 1);
-				} else if (rnd < 0.8)
-				{
-					// diatonic passing note
-					if (i>0)
-					{
-						if (child[i-1].passing_note == 0)
-						{
-							// only diatonic passing note if i come from a chord note!
-							rnd2 = rand()/((double)RAND_MAX + 1);
-							if (rnd2 < 0.5)
-								direction = -1;
-							else
-								direction = 1;
-							child[i] = chord_melo_get_next_passing(&child[i-1], direction, 0);
-							// resolve passing note
-							if (i<(BUFFER_LENGHT-1))
-								child[i+1] = chord_melo_get_next_passing(&child[i], direction, 0);
-							// shall I go on?
-							if ((i<(BUFFER_LENGHT-2)) && 
-								((child[i-1].chord_note==2 && direction==1)||
-								(child[i-1].chord_note==0 && direction==-1)))
-							{
-								child[i+2] = chord_melo_get_next_passing(&child[i+1], direction, 0);
-							}
-								
-						}
-					}
-				} else
-				{
-					// chromatic passing note
-						if (child[i-1].passing_note == 0)
-						{
-							// only diatonic passing note if i come from a chord note!
-							rnd2 = rand()/((double)RAND_MAX + 1);
-							if (rnd2 < 0.5)
-								direction = -1;
-							else
-								direction = 1;
-							child[i] = chord_melo_get_next_passing(&child[i-1], direction, 1);
-							// resolve passing note
-							if (i<(BUFFER_LENGHT-1))
-								child[i+1] = chord_melo_get_next_passing(&child[i], direction, 1);
-							// shall I go on?
-							if ((i<(BUFFER_LENGHT-2)) && 
-								((child[i-1].chord_note==2 && direction==1)||
-								(child[i-1].chord_note==0 && direction==-1)))
-							{
-								child[i+2] = chord_melo_get_next_passing(&child[i+1], direction, 1);
-							}
-								
-						}
-				}
-				
-			}
-		}
-		
-
-		
-
-
-}
-
-
-
-// -----------------  normal external code ...
-
-
-void chord_melo_init_pop(t_chord_melo *x)
-{
-	int i, j, tmp, tmp2, k;
-	double rnd;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		for (j=0; j<BUFFER_LENGHT; j++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//tmp = rnd * NOTES;
-			tmp = rand() % NOTES;
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//tmp2 = rnd * 12;
-			tmp2 = rand() % 12;
-			x->population[i][j] = chord_melo_note2gene(tmp2 / 3, tmp2 % 3, 0, 1);
-
-		}
-
-	}
-}
-
-
-void chord_melo_init_pop2(t_chord_melo *x)
-{
-	int i, j, tmp, tmp2, k;
-	double rnd;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		rnd = rand()/((double)RAND_MAX + 1);
-		//if (rnd > 0.5)
-		if (rnd > 1)
-		{
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				//rnd = rand()/((double)RAND_MAX + 1);
-				//tmp = rnd * NOTES;
-				tmp = rand() % NOTES;
-				//rnd = rand()/((double)RAND_MAX + 1);
-				//tmp2 = rnd * 12;
-				tmp2 = rand() % 12;
-				x->population[i][j] = chord_melo_note2gene(tmp2 / 3, tmp2 % 3, 0, 1);
-
-			}
-		} else
-		{
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[i][j] = x->last_src[j];
-			}
-
-		}
-
-	}
-
-	for (j=0; j<BUFFER_LENGHT; j++)
-	{
-		x->last[j] = x->last_src[j];
-		if (DEBUG)
-			post("init last[%] chord_note=%i passing_note=%i played=%i", j,
-			x->last[j].chord_note, x->last[j].passing_note, x->last[j].played);
-	//	x->last[j] = x->population[0][j];
-	//	x->last[i] = chord_melo_note2gene(1,1,0,1);
-	}
-
-	x->init=1;
-
-}
-
-
-void chord_melo_init_buf(t_float *buf)
-{
-	int i;
-	for (i=0; i<sizeof(buf); i++)
-	{
-		buf[i] = 0;
-	}
-}
-
-void chord_melo_allocate_buffers(t_chord_melo *x)
-{
-//	x->buf_strum1 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf_strum2 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	chord_melo_init_buf(x->buf_strum1);
-//	chord_melo_init_buf(x->buf_strum2);
-	
-}
-
-void chord_melo_free(t_chord_melo *x)
-{
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-}
-
-
-void chord_melo_get_tables(t_chord_melo *x) {
-
-	t_garray *arysrc_note;
-	t_garray *arysrc_octave;
-	t_garray *arysrc_passing;
-	t_garray *arysrc_played;
-	t_garray *arydest_note;
-	t_garray *arydest_octave;
-	t_garray *arydest_passing;
-	t_garray *arydest_played;
-
-	int vecsize;
-	
-		// load tables
-
-	if (!(arysrc_note = (t_garray *)pd_findbyclass(x->x_arrayname_src_note, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_note->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_note, &vecsize, &(x->vecsrc_note)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_note->s_name);
-	}
-		else if (!(arysrc_octave = (t_garray *)pd_findbyclass(x->x_arrayname_src_octave, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_octave->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_octave, &vecsize, &(x->vecsrc_octave)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_octave->s_name);
-	}
-		else if (!(arysrc_passing = (t_garray *)pd_findbyclass(x->x_arrayname_src_passing, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_passing->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_passing, &vecsize, &(x->vecsrc_passing)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_passing->s_name);
-	}
-	else if (!(arysrc_played = (t_garray *)pd_findbyclass(x->x_arrayname_src_played, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_played->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_played, &vecsize, &(x->vecsrc_played)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_played->s_name);
-	}
-	  else 	if (!(arydest_note = (t_garray *)pd_findbyclass(x->x_arrayname_dest_note, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_note->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_note, &vecsize, &(x->vecdest_note)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_note->s_name);
-	} 
-	else 	if (!(arydest_octave = (t_garray *)pd_findbyclass(x->x_arrayname_dest_octave, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_octave->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_octave, &vecsize, &(x->vecdest_octave)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_octave->s_name);
-	} 
-	else 	if (!(arydest_passing = (t_garray *)pd_findbyclass(x->x_arrayname_dest_passing, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_passing->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_passing, &vecsize, &(x->vecdest_passing)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_note->s_name);
-	}
-	 else 	if (!(arydest_played = (t_garray *)pd_findbyclass(x->x_arrayname_dest_played, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_played->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_played, &vecsize, &(x->vecdest_played)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_played->s_name);
-	}
-	else // I got arrays and data
-	{
-		// tutto ok
-		x->tables_loaded=1;
-	}
-}
-
-static void chord_melo_bang(t_chord_melo *x) {
-
-	int i, j, vecsize, ntot, tmp, me;
-	float prob, variatore;
-	
-	double rnd;
-	int winner;
-	double winner_fitness;
-	double average_fitness;
-	chord_melo_gene src_genome[BUFFER_LENGHT];
-	chord_melo_gene figli[MAX_POPULATION][BUFFER_LENGHT];
-
-	//chord_melo_critic src_critic;
-	chord_melo_critic last_critic;
-
-	if (x->tables_loaded == 0)
-	{
-		chord_melo_get_tables(x);
-	}
-	else // I got arrays and data
-	{
-		if (DEBUG)
-			post("--------- starting process");
-
-		if (DEBUG)
-			post("building genome for the src melody:");
-
-		srand((unsigned int)time((time_t *)NULL));
-
-		// get src's genome
-		for (i=0; i<BUFFER_LENGHT; i++)
-		{
-			src_genome[i] = chord_melo_note2gene(x->vecsrc_octave[i],
-				x->vecsrc_note[i], x->vecsrc_passing[i], x->vecsrc_played[i]);
-			x->last_src[i] = src_genome[i];
-			//post("src melody: vecsrc_octave[i]=%f,vecsrc_note[i]=%f,vecsrc_passing[i]=%f", 
-			//	vecsrc_octave[i], vecsrc_note[i], vecsrc_passing[i]);
-
-		}
-	//return;
-
-		if (x->init==0)
-			return;
-
-		// uccido a caso REINSERT_SRC elementi e inserisco il ritmo src al loro posto
-		for (i=0; i<REINSERT_SRC; i++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me = (int) (rnd * MAX_POPULATION);
-			me = rand() % MAX_POPULATION;
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j]=src_genome[j];
-			}
-		}
-		
-		//return;
-
-		// uccido a caso REINSERT_LAST elementi e inserisco il last al loro posto
-		for (i=0; i<REINSERT_LAST; i++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me = (int) (rnd * MAX_POPULATION);
-			me = rand() % MAX_POPULATION;
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j]=x->last[j];
-			}
-		}
-
-		// metà sono donne, prese a caso
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			//chord_melo_critic this_chord_melo_critic;
-			int winner=0;
-			double winner_value=0;
-			int men[CHOIR];
-			chord_melo_gene figlio[BUFFER_LENGHT];
-			double fitness1[CHOIR];
-			double fitness2[CHOIR];
-			double fitness3[CHOIR];
-			double fitnessTOT[CHOIR];
-			double fitnessTodd1[CHOIR];
-			chord_melo_critic woman_critic;
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			me = rand() % MAX_POPULATION;
-			// me è la donna che valuta gli uomini
-			
-			if (DEBUG_VERBOSE)
-				post("woman %i = %i %i %i %i", me, x->population[me][0], x->population[me][1], x->population[me][2], x->population[me][3]);
-
-			chord_melo_fill_critic(&woman_critic, x->population[me]);
-			
-			for (j=0; j<CHOIR; j++)
-			{
-				//rnd = rand()/((double)RAND_MAX + 1);
-				//tmp =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-				tmp = rand() % MAX_POPULATION;
-				// tmp è questo uomo
-				men[j] = tmp;
-				if (DEBUG_VERBOSE)
-					post("i will evaluate man %i", tmp);
-				fitness1[j]=chord_melo_fitness1(x->population[me], x->population[tmp]);
-				fitness2[j]=chord_melo_fitness2(x->population[me], x->population[tmp]);
-				fitnessTodd1[j]=chord_melo_Todd_fitness1(&woman_critic, x->population[tmp]);
-				fitnessTOT[j]=fitness1[j] * (x->indice_fitness1)
-					+ fitness2[j] * (x->indice_fitness2)
-					+ fitnessTodd1[j] * (x->indice_fitness3);
-				if (DEBUG_VERBOSE)
-					post("man %i has fitness %i", tmp, fitnessTOT[j]);
-				if (winner_value <= fitnessTOT[j])
-				{
-					winner = tmp;
-					winner_value = fitnessTOT[j];
-				}
-			}
-			// winner è il maschio migliore nel coro
-			if (DEBUG_VERBOSE)
-				post("ho scelto il maschio %i con fitness %i", winner, winner_value);
-			// chord_melo_genero un figlio
-			chord_melo_create_child(x, x->population[me], x->population[winner], figlio);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				figli[i][j] = figlio[j];
-			}
-		}
-
-		// uccido a caso metà popolazione e ci metto i nuovi nati
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			me = rand() % MAX_POPULATION;
-			// me è chi deve morire
-
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j] = figli[i][j];
-			}
-		}
-
-		// prendo il più adatto rispetto all'ultimo ritmo suonato
-		winner = 0;
-		winner_fitness = 0;
-		average_fitness = 0;
-		
-		//chord_melo_fill_critic(&src_critic, src_genome);
-		chord_melo_fill_critic(&last_critic, x->last);
-
-		for(i=0; i<MAX_POPULATION; i++)
-		{
-			double tmp1, tmp2, tmp3, tmpTOT, fitnessTodd1;
-			//tmp1 = chord_melo_fitness1(src_genome, x->population[i]);
-			//tmp2 = chord_melo_fitness2(src_genome, x->population[i]);
-			//fitnessTodd1=chord_melo_Todd_fitness1(&src_critic, x->population[i]);
-			tmp1 = chord_melo_fitness1(x->last, x->population[i]);
-			tmp2 = chord_melo_fitness2(x->last, x->population[i]);
-			fitnessTodd1=chord_melo_Todd_fitness1(&last_critic, x->population[i]);
-			tmpTOT = tmp1 * (x->indice_fitness1) + 
-				tmp2 * (x->indice_fitness2) + 
-				fitnessTodd1 * (x->indice_fitness3);
-
-			//post("%i fitness = %i", i, tmpTOT);
-			
-			if (tmpTOT >= winner_fitness)
-			{
-				winner_fitness = tmpTOT;
-				winner = i;
-			}
-			average_fitness += tmpTOT;
-		}
-		average_fitness = average_fitness / MAX_POPULATION;
-
-		if (DEBUG)
-			post("winner is number %i with fitness=%d, average fitness = %d", winner, winner_fitness, average_fitness); 
-			
-		for (i=0; i<BUFFER_LENGHT; i++)
-		{
-			int note, played, octave, passing;
-			// copio il vincitore in x->last
-			x->last[i] = x->population[winner][i];
-			// scrivo i buffer in uscita
-			chord_melo_gene2note(x->population[winner][i],
-				&octave, &note, &passing, &played);
-			x->vecdest_note[i]=note;				
-			x->vecdest_octave[i]=octave;				
-			x->vecdest_passing[i]=passing;				
-			x->vecdest_played[i]=(played > 0 ? 1 : 0);
-			if (DEBUG)
-				post("winner[%i] chord_note=%i, octave=%i, passing=%i, played=%i",
-				i, note, octave, passing, played);
-		}
-
-		//return;
-
-		// redraw the arrays
-/*		garray_redraw(arydest_note);
-		garray_redraw(arydest_octave);
-		garray_redraw(arydest_passing);
-		garray_redraw(arydest_played);
-*/
-
-	}
-}
-
-void chord_melo_src_note(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_note = s;
-}
-
-void chord_melo_src_octave(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_octave = s;
-}
-
-void chord_melo_src_passing(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_passing = s;
-}
-
-void chord_melo_src_played(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_played = s;
-}
-
-void chord_melo_dest_note(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_note = s;
-}
-
-void chord_melo_dest_octave(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_octave = s;
-}
-
-void chord_melo_dest_passing(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_passing = s;
-}
-
-void chord_melo_dest_played(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_played = s;
-}
-
-
-void chord_melo_fitness1_set(t_chord_melo *x, t_floatarg f)
-{
-  x->indice_fitness1 = f;
- }
-
-void chord_melo_fitness2_set(t_chord_melo *x, t_floatarg f)
-{
-  x->indice_fitness2 = f;
-}
-
-void chord_melo_fitness3_set(t_chord_melo *x, t_floatarg f)
-{
-  x->indice_fitness3 = f;
-}
-
-void chord_melo_crossover_set(t_chord_melo *x, t_floatarg f)
-{
-  x->prob_crossover = f;
-}
-
-void chord_melo_mutation_set(t_chord_melo *x, t_floatarg f)
-{
-  x->prob_mutation = f;
-}
-
-/*
-void chord_melo_init(t_chord_melo *x, t_symbol *s) {
-	chord_melo_init_pop2(x);
-}
-*/
-
-void *chord_melo_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_chord_melo *x = (t_chord_melo *)pd_new(chord_melo_class);
-	chord_melo_allocate_buffers(x);
-	chord_melo_init_pop(x);
-	// inizializzo gli indici
-	x->indice_fitness1=0;
-	x->indice_fitness2=0;
-	x->indice_fitness3=0;
-	x->prob_crossover = DEF_PROB_CROSSOVER;
-	x->prob_mutation = DEF_PROB_MUTATION;
-	x->init=0;
-	x->tables_loaded=0;
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		x->last[i] = chord_melo_note2gene(1,0,0,1);
-	}
-	srand(time(&a));
-
-	if (argc>0) 
-	{
-		x->x_arrayname_src_note = atom_getsymbolarg(0, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_note=%s",x->x_arrayname_src_note->s_name); 
-	} 
-	if (argc>1) 
-	{
-		x->x_arrayname_src_octave = atom_getsymbolarg(1, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_octave=%s",x->x_arrayname_src_octave->s_name); 
-	} 
-	if (argc>2) 
-	{
-		x->x_arrayname_src_passing = atom_getsymbolarg(2, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_passing=%s",x->x_arrayname_src_passing->s_name); 
-	}
-	if (argc>3) 
-	{
-		x->x_arrayname_src_played = atom_getsymbolarg(3, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_played=%s",x->x_arrayname_src_played->s_name); 
-	} 
-	if (argc>4) 
-	{
-		x->x_arrayname_dest_note = atom_getsymbolarg(4, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_note=%s",x->x_arrayname_dest_note->s_name); 
-	}
-	if (argc>5) 
-	{
-		x->x_arrayname_dest_octave = atom_getsymbolarg(5, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_octave=%s",x->x_arrayname_dest_octave->s_name); 
-	}
-	if (argc>6) 
-	{
-		x->x_arrayname_dest_passing = atom_getsymbolarg(6, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_passing=%s",x->x_arrayname_dest_passing->s_name); 
-	}
-	if (argc>7) 
-	{
-		x->x_arrayname_dest_played = atom_getsymbolarg(7, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_played=%s",x->x_arrayname_dest_played->s_name); 
-	}
-    return (x);
-}
-
-void chord_melo_setup(void)
-{
-    chord_melo_class = class_new(gensym("chord_melo"), (t_newmethod)chord_melo_new,
-        (t_method)chord_melo_free, sizeof(t_chord_melo), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(chord_melo_class, (t_method)chord_melo_bang);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_src_note, gensym("src_note"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_src_octave, gensym("src_octave"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_src_passing, gensym("src_passing"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_src_played, gensym("src_played"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_dest_note, gensym("dest_note"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_dest_octave, gensym("dest_octave"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_dest_passing, gensym("dest_passing"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_dest_played, gensym("dest_played"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_fitness1_set, gensym("fitness1"), A_DEFFLOAT, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_fitness2_set, gensym("fitness2"), A_DEFFLOAT, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_fitness3_set, gensym("fitness3"), A_DEFFLOAT, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_init_pop2, gensym("init"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_mutation_set, gensym("mutation"), A_DEFFLOAT, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_crossover_set, gensym("crossover"), A_DEFFLOAT, 0);
-
-}
diff --git a/externals/frankenstein/chord_melo_test3.pd b/externals/frankenstein/chord_melo_test3.pd
deleted file mode 100644
index 4b5185a06670d9af86fe69818a009af22fa2f8b2..0000000000000000000000000000000000000000
--- a/externals/frankenstein/chord_melo_test3.pd
+++ /dev/null
@@ -1,630 +0,0 @@
-#N canvas 204 24 1015 713 12;
-#X obj 620 131 metro;
-#N canvas 1 23 466 316 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 684 102 pd msecs;
-#X obj 683 28 loadbang;
-#X obj 620 108 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#N canvas 0 22 498 348 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 0;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 empty empty 1/4 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 0;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 379 92 graph;
-#X floatatom 706 127 5 0 0 0 - - -;
-#X obj 632 169 delay;
-#X obj 667 148 / 2;
-#X text 296 172 this delay is to center the quantization;
-#X obj 685 78 nbx 5 14 30 1000 0 0 empty empty empty 0 -6 0 10 -258699
--1 -1 120 256;
-#X text 29 30 test1: detect rhythmic pattern and proposes a counterpoint
-;
-#N canvas 0 22 458 308 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 fitness1 \$1;
-#X msg 136 74 fitness2 \$1;
-#X msg 231 133 fitness3 \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 713 532 pd valori;
-#X obj 713 378 vsl 15 128 0 1 0 0 empty empty 1st 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 760 380 vsl 15 128 0 1 0 0 empty empty 2nd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 800 383 vsl 15 128 0 1 0 0 empty empty 3rd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X floatatom 700 515 5 0 0 0 - - -;
-#X floatatom 750 513 5 0 0 0 - - -;
-#X floatatom 800 522 5 0 0 0 - - -;
-#X obj 719 49 s sampleinit;
-#X obj 726 294 loadbang;
-#N canvas 105 213 716 372 initMelody 0;
-#X obj 79 28 loadbang;
-#X msg 18 132 \; src_played const 1 \;;
-#X msg 29 261 \; src_passing const 0 \;;
-#X msg 260 69 \; src_note 0 0 1 2 2 1 1 0 0 0 2 2 2 0 2 1 0 \;;
-#X msg 235 143 \; src_passing 0 0 0 0 -2 0 -2 0 -1 0 0 2 4 0 0 0 0
-\;;
-#X msg 247 107 \; src_octave 0 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 \;;
-#X connect 0 0 3 0;
-#X connect 0 0 1 0;
-#X connect 0 0 5 0;
-#X connect 0 0 4 0;
-#X restore 57 108 pd initMelody;
-#X obj 153 586 noteout;
-#X obj 153 562 makenote;
-#X msg 238 539 60;
-#X msg 270 539 100;
-#X obj 244 517 loadbang;
-#X msg 684 49 120;
-#X msg 712 328 1;
-#X obj 770 119 table src_octave;
-#X obj 769 96 table src_note;
-#X obj 770 141 table src_passing;
-#X obj 770 165 table src_played;
-#N canvas 14 41 980 629 play_melody 0;
-#X obj 58 50 t f f f f;
-#X obj 58 116 tabread dest_note;
-#X obj 225 79 tabread dest_octave;
-#X obj 186 153 tabread dest_passing;
-#X obj 2 290 tabread dest_played;
-#X obj 1 315 select 1;
-#X obj 259 -4 inlet;
-#X obj 659 8 inlet;
-#X floatatom 710 68 5 0 0 0 - - -;
-#X text 729 52 base midi note;
-#X obj 225 103 * 12;
-#X obj 57 144 select 0 1 2;
-#X msg 57 186 0;
-#X msg 103 184 4;
-#X msg 150 185 7;
-#X obj 159 266 +;
-#X obj 170 303 +;
-#X obj 180 344 + 36;
-#X text 245 344 default C;
-#X obj 275 535 outlet;
-#X floatatom 204 390 5 0 0 0 - - -;
-#X obj 95 451 int 0;
-#X obj 2 339 bang;
-#X obj 435 50 t f f f f;
-#X obj 372 332 select 1;
-#X obj 596 120 * 12;
-#X obj 428 161 select 0 1 2;
-#X msg 428 203 0;
-#X msg 474 201 4;
-#X msg 521 202 7;
-#X obj 530 283 +;
-#X obj 541 320 +;
-#X obj 551 361 + 36;
-#X text 616 361 default C;
-#X floatatom 575 407 5 0 0 0 - - -;
-#X obj 466 468 int 0;
-#X obj 373 356 bang;
-#X obj 373 307 tabread dest_played2;
-#X obj 429 133 tabread dest_note2;
-#X obj 596 96 tabread dest_octave2;
-#X obj 557 170 tabread dest_passing2;
-#X obj 883 242 inlet;
-#X obj 235 491 spigot;
-#X msg 221 455 1;
-#X msg 256 456 0;
-#X obj 318 492 spigot;
-#X msg 297 455 1;
-#X msg 332 456 0;
-#X obj 258 19 t f f;
-#X obj 247 430 select 0 1;
-#X floatatom 373 533 5 0 0 0 - - -;
-#X floatatom 195 539 5 0 0 0 - - -;
-#X connect 0 0 4 0;
-#X connect 0 1 1 0;
-#X connect 0 2 3 0;
-#X connect 0 3 2 0;
-#X connect 1 0 11 0;
-#X connect 2 0 10 0;
-#X connect 3 0 15 1;
-#X connect 4 0 5 0;
-#X connect 5 0 22 0;
-#X connect 6 0 48 0;
-#X connect 7 0 8 0;
-#X connect 7 0 17 1;
-#X connect 7 0 32 1;
-#X connect 10 0 16 1;
-#X connect 11 0 12 0;
-#X connect 11 1 13 0;
-#X connect 11 2 14 0;
-#X connect 12 0 15 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 0;
-#X connect 15 0 16 0;
-#X connect 16 0 17 0;
-#X connect 17 0 20 0;
-#X connect 17 0 21 1;
-#X connect 21 0 42 0;
-#X connect 22 0 21 0;
-#X connect 23 0 37 0;
-#X connect 23 1 38 0;
-#X connect 23 2 40 0;
-#X connect 23 3 39 0;
-#X connect 24 0 36 0;
-#X connect 25 0 31 1;
-#X connect 26 0 27 0;
-#X connect 26 1 28 0;
-#X connect 26 2 29 0;
-#X connect 27 0 30 0;
-#X connect 28 0 30 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 0;
-#X connect 31 0 32 0;
-#X connect 32 0 34 0;
-#X connect 32 0 35 1;
-#X connect 35 0 45 0;
-#X connect 36 0 35 0;
-#X connect 37 0 24 0;
-#X connect 38 0 26 0;
-#X connect 39 0 25 0;
-#X connect 40 0 30 1;
-#X connect 41 0 49 0;
-#X connect 42 0 19 0;
-#X connect 42 0 51 0;
-#X connect 43 0 42 1;
-#X connect 44 0 45 1;
-#X connect 45 0 19 0;
-#X connect 45 0 50 0;
-#X connect 46 0 45 1;
-#X connect 47 0 42 1;
-#X connect 48 0 0 0;
-#X connect 48 1 23 0;
-#X connect 49 0 43 0;
-#X connect 49 0 44 0;
-#X connect 49 1 46 0;
-#X connect 49 1 47 0;
-#X restore 153 432 pd play_melody;
-#X floatatom 264 313 5 0 0 0 base_midi_note - -;
-#N canvas 80 41 790 533 test_src_melody 0;
-#X obj 64 33 t f f f f;
-#X obj -17 299 select 1;
-#X obj 67 3 inlet;
-#X obj 418 160 inlet;
-#X floatatom 442 209 5 0 0 0 - - -;
-#X text 461 193 base midi note;
-#X obj 268 125 * 12;
-#X obj 57 144 select 0 1 2;
-#X msg 57 186 0;
-#X msg 103 184 4;
-#X msg 150 185 7;
-#X obj 159 266 +;
-#X obj 170 303 +;
-#X obj 180 344 + 36;
-#X text 245 344 default C;
-#X obj 120 482 outlet;
-#X floatatom 204 390 5 0 0 0 - - -;
-#X obj 116 450 int 0;
-#X obj -16 323 bang;
-#X obj -16 274 tabread src_played;
-#X obj 58 116 tabread src_note;
-#X obj 267 102 tabread src_octave;
-#X obj 186 153 tabread src_passing;
-#X connect 0 0 19 0;
-#X connect 0 1 20 0;
-#X connect 0 2 22 0;
-#X connect 0 3 21 0;
-#X connect 1 0 18 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 0 13 1;
-#X connect 6 0 12 1;
-#X connect 7 0 8 0;
-#X connect 7 1 9 0;
-#X connect 7 2 10 0;
-#X connect 8 0 11 0;
-#X connect 9 0 11 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 13 0 16 0;
-#X connect 13 0 17 1;
-#X connect 17 0 15 0;
-#X connect 18 0 17 0;
-#X connect 19 0 1 0;
-#X connect 20 0 7 0;
-#X connect 21 0 6 0;
-#X connect 22 0 11 1;
-#X restore 26 383 pd test_src_melody;
-#N canvas 0 22 462 312 chords 0;
-#X obj 146 45 select 0;
-#X obj 147 17 inlet;
-#X obj 150 255 outlet;
-#X msg 123 193 36;
-#X msg 177 193 41;
-#X msg 232 191 36;
-#X msg 286 191 43;
-#X obj 142 96 int 0;
-#X obj 144 69 bang;
-#X obj 202 99 + 1;
-#X obj 141 122 % 4;
-#X obj 137 147 select 0 1 2 3;
-#X connect 0 0 8 0;
-#X connect 1 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 7 0 9 0;
-#X connect 7 0 10 0;
-#X connect 8 0 7 0;
-#X connect 9 0 7 1;
-#X connect 10 0 11 0;
-#X connect 11 0 3 0;
-#X connect 11 1 4 0;
-#X connect 11 2 5 0;
-#X connect 11 3 6 0;
-#X restore 265 290 pd chords;
-#X obj 102 619 outlet;
-#X obj 14 619 outlet;
-#X obj 569 246 outlet;
-#X obj 379 233 t a a a a;
-#X obj 607 56 inlet;
-#X obj 80 181 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 78 215 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1 0
-1;
-#N canvas 0 22 650 510 toggle 0;
-#X obj 170 119 r toggleSRC;
-#X obj 136 144 int 0;
-#X obj 136 168 select 1;
-#X obj 137 192 bang;
-#X obj 154 20 inlet;
-#X obj 197 270 outlet;
-#X obj 203 231 int 0;
-#X obj 86 104 bang;
-#X obj 201 60 t a a;
-#X connect 0 0 1 1;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 6 0;
-#X connect 4 0 8 0;
-#X connect 6 0 5 0;
-#X connect 7 0 1 0;
-#X connect 8 0 7 0;
-#X connect 8 1 6 1;
-#X restore 33 414 pd toggle;
-#N canvas 0 22 662 522 toggle 0;
-#X obj 136 144 int 0;
-#X obj 136 168 select 1;
-#X obj 137 192 bang;
-#X obj 154 20 inlet;
-#X obj 197 270 outlet;
-#X obj 203 231 int 0;
-#X obj 86 104 bang;
-#X obj 201 60 t a a;
-#X obj 170 119 r toggleOUT;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 2 0 5 0;
-#X connect 3 0 7 0;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 7 0 6 0;
-#X connect 7 1 5 1;
-#X connect 8 0 0 1;
-#X restore 155 495 pd toggle;
-#N canvas 0 22 778 359 read-tables 0;
-#X obj 93 110 tabread dest_note;
-#X floatatom 96 147 5 0 0 0 - - -;
-#X floatatom 341 44 5 0 0 0 - - -;
-#X floatatom 244 147 5 0 0 0 - - -;
-#X floatatom 388 146 5 0 0 0 - - -;
-#X floatatom 532 143 5 0 0 0 - - -;
-#X obj 243 91 tabread dest_octave;
-#X obj 386 109 tabread dest_passing;
-#X obj 529 89 tabread dest_played;
-#X obj 514 175 print;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
-#X connect 2 0 6 0;
-#X connect 2 0 7 0;
-#X connect 2 0 8 0;
-#X connect 6 0 3 0;
-#X connect 7 0 4 0;
-#X connect 8 0 5 0;
-#X connect 8 0 9 0;
-#X restore 847 310 pd read-tables;
-#X msg 866 529 mutation \$1;
-#X msg 883 549 crossover \$1;
-#X obj 865 373 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 899 371 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 845 507 5 0 0 0 - - -;
-#X floatatom 900 505 5 0 0 0 - - -;
-#X msg 791 327 1;
-#N canvas 0 22 923 490 chord_melo1 0;
-#X obj 94 49 inlet;
-#X obj 349 58 inlet;
-#X obj 123 264 bang;
-#X obj 140 116 select 0;
-#X obj 185 256 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 191 187 int 0;
-#X obj 240 188 + 1;
-#X floatatom 191 211 5 0 0 0 generation - -;
-#X obj 191 164 bang;
-#X msg 23 270 init a;
-#X obj 22 227 select 1;
-#X obj 23 248 bang;
-#X obj 222 344 chord_melo src_note src_octave src_passing src_played
-dest_note dest_octave dest_passing dest_played;
-#X obj 415 139 table dest_note;
-#X obj 416 162 table dest_octave;
-#X obj 415 184 table dest_passing;
-#X obj 415 208 table dest_played;
-#X connect 0 0 3 0;
-#X connect 1 0 12 0;
-#X connect 2 0 12 0;
-#X connect 3 0 2 0;
-#X connect 3 0 8 0;
-#X connect 4 0 12 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 1;
-#X connect 8 0 5 0;
-#X connect 9 0 12 0;
-#X connect 10 0 11 0;
-#X connect 11 0 9 0;
-#X restore 667 589 pd chord_melo1;
-#N canvas 0 22 923 490 chord_melo2 0;
-#X obj 94 49 inlet;
-#X obj 349 58 inlet;
-#X obj 123 264 bang;
-#X obj 140 116 select 0;
-#X obj 185 256 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 191 187 int 0;
-#X obj 240 188 + 1;
-#X floatatom 191 211 5 0 0 0 generation - -;
-#X obj 191 164 bang;
-#X msg 23 270 init a;
-#X obj 22 227 select 1;
-#X obj 23 248 bang;
-#X obj 415 139 table dest_note2;
-#X obj 416 162 table dest_octave2;
-#X obj 415 184 table dest_passing2;
-#X obj 415 208 table dest_played2;
-#X obj 222 344 chord_melo src_note src_octave src_passing src_played
-dest_note2 dest_octave2 dest_passing2 dest_played2;
-#X connect 0 0 3 0;
-#X connect 1 0 16 0;
-#X connect 2 0 16 0;
-#X connect 3 0 2 0;
-#X connect 3 0 8 0;
-#X connect 4 0 16 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 1;
-#X connect 8 0 5 0;
-#X connect 9 0 16 0;
-#X connect 10 0 11 0;
-#X connect 11 0 9 0;
-#X restore 473 628 pd chord_melo2;
-#X obj 339 336 manager;
-#N canvas 0 22 698 589 sum 0;
-#X obj 116 64 inlet;
-#X obj 150 338 outlet;
-#X obj 278 36 inlet;
-#X obj 265 72 select 0;
-#X obj 264 124 int 0;
-#X obj 312 123 + 1;
-#X obj 266 96 bang;
-#X obj 86 202 spigot;
-#X obj 147 203 int;
-#X obj 104 236 + 0;
-#X obj 124 99 t f f;
-#X obj 211 126 bang;
-#X text 383 222 not working yet;
-#X text 337 254 it should join the two statements;
-#X text 326 277 join means make the first interval small;
-#X text 400 192 TODO;
-#X obj 204 295 spigot;
-#X obj 251 201 bang;
-#X msg 246 223 1;
-#X obj 257 247 -;
-#X obj 253 177 t a a;
-#X obj 254 147 % 2;
-#X connect 0 0 10 0;
-#X connect 2 0 3 0;
-#X connect 3 0 6 0;
-#X connect 3 0 11 0;
-#X connect 4 0 5 0;
-#X connect 4 0 21 0;
-#X connect 5 0 4 1;
-#X connect 6 0 4 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 1;
-#X connect 9 0 1 0;
-#X connect 10 0 8 1;
-#X connect 10 0 7 0;
-#X connect 10 1 16 0;
-#X connect 11 0 8 0;
-#X connect 16 0 1 0;
-#X connect 17 0 18 0;
-#X connect 18 0 19 0;
-#X connect 19 0 16 1;
-#X connect 20 0 17 0;
-#X connect 20 1 19 1;
-#X connect 21 0 20 0;
-#X connect 21 0 7 1;
-#X restore 224 468 pd sum;
-#N canvas 0 22 458 308 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 fitness1 \$1;
-#X msg 136 74 fitness2 \$1;
-#X msg 231 133 fitness3 \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 511 539 pd valori;
-#X obj 511 385 vsl 15 128 0 1 0 0 empty empty 1st 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 558 387 vsl 15 128 0 1 0 0 empty empty 2nd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 598 390 vsl 15 128 0 1 0 0 empty empty 3rd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X floatatom 498 522 5 0 0 0 - - -;
-#X floatatom 548 520 5 0 0 0 - - -;
-#X floatatom 598 529 5 0 0 0 - - -;
-#X obj 524 301 loadbang;
-#X msg 510 335 1;
-#X msg 589 334 1;
-#X msg 423 568 mutation \$1;
-#X msg 440 588 crossover \$1;
-#X obj 422 412 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 456 410 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 402 546 5 0 0 0 - - -;
-#X floatatom 457 544 5 0 0 0 - - -;
-#X floatatom 344 439 5 0 0 0 - - -;
-#X obj 304 614 outlet;
-#X connect 0 0 6 0;
-#X connect 1 0 0 1;
-#X connect 1 0 5 0;
-#X connect 1 0 7 0;
-#X connect 2 0 26 0;
-#X connect 2 0 18 0;
-#X connect 3 0 0 0;
-#X connect 4 0 39 0;
-#X connect 6 0 4 0;
-#X connect 7 0 6 1;
-#X connect 9 0 1 0;
-#X connect 11 0 53 1;
-#X connect 12 0 11 0;
-#X connect 12 0 15 0;
-#X connect 13 0 11 1;
-#X connect 13 0 16 0;
-#X connect 14 0 11 2;
-#X connect 14 0 17 0;
-#X connect 19 0 27 0;
-#X connect 19 0 52 0;
-#X connect 22 0 21 0;
-#X connect 22 1 21 1;
-#X connect 23 0 22 1;
-#X connect 24 0 22 2;
-#X connect 25 0 24 0;
-#X connect 25 0 23 0;
-#X connect 26 0 9 0;
-#X connect 27 0 12 0;
-#X connect 27 0 13 0;
-#X connect 32 0 36 0;
-#X connect 32 0 44 0;
-#X connect 33 0 34 1;
-#X connect 33 0 32 1;
-#X connect 34 0 37 0;
-#X connect 34 0 43 0;
-#X connect 35 0 33 0;
-#X connect 39 1 32 0;
-#X connect 39 1 34 0;
-#X connect 39 2 35 0;
-#X connect 39 2 53 0;
-#X connect 39 2 54 0;
-#X connect 39 3 38 0;
-#X connect 39 3 55 0;
-#X connect 39 3 56 1;
-#X connect 40 0 3 0;
-#X connect 43 0 22 0;
-#X connect 44 0 22 0;
-#X connect 46 0 53 1;
-#X connect 47 0 53 1;
-#X connect 48 0 46 0;
-#X connect 48 0 50 0;
-#X connect 49 0 47 0;
-#X connect 49 0 51 0;
-#X connect 52 0 14 0;
-#X connect 55 0 32 2;
-#X connect 55 0 73 0;
-#X connect 55 0 74 0;
-#X connect 57 0 54 1;
-#X connect 58 0 57 0;
-#X connect 58 0 61 0;
-#X connect 59 0 57 1;
-#X connect 59 0 62 0;
-#X connect 60 0 57 2;
-#X connect 60 0 63 0;
-#X connect 64 0 65 0;
-#X connect 64 0 66 0;
-#X connect 65 0 58 0;
-#X connect 65 0 59 0;
-#X connect 66 0 60 0;
-#X connect 67 0 54 1;
-#X connect 68 0 54 1;
-#X connect 69 0 67 0;
-#X connect 69 0 71 0;
-#X connect 70 0 68 0;
-#X connect 70 0 72 0;
diff --git a/externals/frankenstein/chords_memory.c b/externals/frankenstein/chords_memory.c
deleted file mode 100644
index 01a5bf5a22ce6bc85ba2ba9561386b9c9b1cfc7f..0000000000000000000000000000000000000000
--- a/externals/frankenstein/chords_memory.c
+++ /dev/null
@@ -1,1044 +0,0 @@
-/* 
-chords_memory:
-an external that using graph
-learns the played style 
-and reproduces chords sequences 
-see
-http://en.wikipedia.org/wiki/Graph_%28mathematics%29
-for an idea of what graphs are (but we'll use weights also)
-
-idea:
-
-------- NODES
-
-each node of the graph is a chord
-each node has a name like "Imin Imaj ... IImin IImaj .... etc"
-We'll cover each possible grade and form, each grade can be
-maj
-min
-dim
-aug
-maj7maj
-maj7min
-min7maj
-min7min
-dim7dim
-dim7min
-dim7maj
-aug7min
-aug7maj
-(tot 13 forms)
-
-pland adding more chord types here:
-
-
-
-we have 12 grades:
-I
-I# 
-II 
-II# 
-III 
-IV 
-IV# 
-V 
-V# 
-VI 
-VI# 
-VII
-
-for a total of 12x13=156 nodes
-
-------- ARCS
-
-each node is connected to any other node
-each node has a weight
-the weight is augmented each time the human plays this chord sequence
-so probably I V will have high weight
-and I VI#7 will be very light
-
-this will be a table of 156x156 int (24336 elements)
-
-what can i do with the graph?
-
-i can do questions like:
-
-simple questions like: 
-starting from IIImin tell me a chord so i have a high weight (no novelty)
-starting from IIImin tell me a chord so I have hight novelty (low weight)
-(the graph simply must select the arc starting from IIImin with the desired weight)
-
-i can build walks giving starting chord:
-as before but more than 1 passage
-
-i can build walks giving target chord:
-- "build a walk from current chord to target chord with high novelty"
-- "build the shortest walk from current chord to target chord with novelty less than ..."
-- "build a 4 chords long walk from here to there with ... average novelty"
-all these questions are usefull if there is a "form manager" that decides
-the piece structure,for example it wants the 2nd theme to start in 4 measures 
-and asks for a chord sequence with medium novelty ending on the dominant (V),
-when the piece is ending it can ask for a coming back to the first tone..
-
-once we have all the arcs building walks is simply a matter of apply search methods
-like http://en.wikipedia.org/wiki/A%2A_search_algorithm
-there are plenty of such algos, we must just copy them down.
-
-
-*/
-#include <stdlib.h>
-#include <math.h>
-// for random, we may want to use it when building walks
-#include <time.h> 
-// for file io
-#include <stdio.h>
-// for string manipulation
-#include <string.h>
-#include <ctype.h>
-
-#include "m_pd.h"
-#include "common.h"
-
-
-#define DEBUG 1 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-// is this system Little Endian? (thanks to Mathieu Bouchard)
-// TODO: use this code in file writing/reading
-// instead of forcing little endian!
-//static inline int is_le() {int x=1; return ((char *)&x)[0];}
-
-// ------------------------------- declaration of used types 
-
-static t_class *chords_memory_class;
-
-
-// data type for the steps of a walk
-typedef struct _step
-{
-	// 1 if i must modulate to tonality before computing chord
-	int modulate;
-	// this chord
-	chord_t chord;
-	// new tonality to be applied before chord
-	int tonality_note;
-	int tonality_mode;
-} step_t;
-
-// struct defining this external's memory space
-typedef struct _chords_memory
-{
-    t_object x_obj; // myself
-	t_outlet *x_outchordname;         /* chord name, e.g. "Cmajor7" */
-	t_outlet *x_outtonalityname;      /* chord name, e.g. "Cmajor7" */
-	t_outlet *x_outchordssequence;    /* sequence of chords,a walk */
-	t_outlet *x_outnovelty; /* the degree of novelty of last added chord */
-	// the matrix : arcs of the graph
-	// each tonality mode has his matrix
-	// each matrix is in this form:
-	// from which chord to which chord
-	short int arcs[MODES_NUM][NODES_NUM][NODES_NUM];
-	// modulations matrix
-	// same as above
-	// but for modulations
-	short int modulations[MODES_NUM][NODES_NUM][MODULATIONS_NUM];
-	// I use this to normalize weights 0-1
-	short int maxweight[MODES_NUM];
-	// to convert from absolute tones (C, D, E, ..) to relative ones (I, II, III) and back
-	abs_note_t fundamental_note; // describes current tonality
-	modes_t fundamental_mode; // describes current tonality
-	// to save and load my status
-	t_symbol *filename;
-	// to normalize weights to 0-1
-	chord_t last_chord;
-	int last_chord_set;
-	// to use for walks
-	step_t *walk;
-	int steps;
-	int using_walk;
-	int current_step;
-
-} t_chords_memory;
-
-//static inline int mod(int a, int b) {int c=a%b; c+=b&-(c&&(a<0)^(b<0)); return c;}
-
-// bring this number in 0 12 range
-int clean_note(int src)
-{
-	while (src>12)
-		src-=12;
-	while (src<0)
-		src+=12;
-	return src;
-}
-// or use this one:
-#define MOD(x,y) (((x%y)+y)%y)
-
-
-// ------------------------------- init functions
-
-// initializes the graphs to 0 (everything is new)
-void chords_memory_init_graph(t_chords_memory *x)
-{
-	int i, j, m;
-	for (m=0; m<MODES_NUM; m++)
-	{
-		x->maxweight[m]=1;
-		for (i=0; i<NODES_NUM; i++)
-		{
-			for (j=0; j<NODES_NUM; j++)
-			{
-				// initially every chord sequence is a novelty
-				x->arcs[m][i][j]=0;
-			}
-		}
-	}
-	x->last_chord_set=0;
-}
-
-void chords_memory_init(t_chords_memory *x, t_floatarg f)
-{
-	chords_memory_init_graph(x);
-}
-
-
-// ------------- function for string manipulation (from string to chords)
-
-// builds a string for this chord
-// the string is in maxlib's chord format
-void chords_memory_chord2string(t_chords_memory *x, char *string, chord_t chord)
-{
-	abs_note_t newnote;
-	memset( string, '\0', sizeof(string) );
-	newnote = clean_note(chord.note + x->fundamental_note);
-	switch (newnote)
-	{
-		case C:	strcat(string, "C "); 			  break;
-		case Db:	strcat(string, "Db "); 			  break;
-		case D:	strcat(string, "D "); 			  break;
-		case Eb:	strcat(string, "Eb "); 			  break;
-		case E:	strcat(string, "E "); 			  break;
-		case F:	strcat(string, "F "); 			  break;
-		case Gb:	strcat(string, "Gb "); 			  break;
-		case G:	strcat(string, "G "); 			  break;
-		case Ab:	strcat(string, "Ab "); 			  break;
-		case A:	strcat(string, "A "); 			  break;
-		case Bb:	strcat(string, "Bb "); 			  break;
-		case B:	strcat(string, "B "); 			  break;
-	}
-	switch (chord.mode)
-	{
-		case kUnison:	strcat(string, "unison"); 			  break;
-		case kMaj:		strcat(string, "major"); 			  break;
-		case kMin:		strcat(string, "minor"); 			  break;
-		case kDim:		strcat(string, "diminished"); 		  break;
-		case kAug:		strcat(string, "augmented"); 		  break;
-
-		case kMaj7:		strcat(string, "major 7th"); 		  break;
-		case kDom7:		strcat(string, "dominant 7th"); 		  break;
-		case kMin7: 	strcat(string, "minor 7th"); 		  break;
-		case kHalfDim7:	strcat(string, "half diminished 7th"); break;
-		case kDim7:		strcat(string, "diminished 7th");	  break;
-		case kMinMaj7:	strcat(string, "minor/major 7th");	  break;
-
-		case kMaj7s5:	strcat(string, "major 7th #5");		  break;
-		case kMaj7b5:	strcat(string, "major 7th b5");		  break;
-		case kDom7s5:	strcat(string, "dominant 7th #5"); 	  break;
-		case kDom7b5:	strcat(string, "dominant 7th b5"); 	  break;
-		case kDomb9:	strcat(string, "dominant b9");		  break;
-
-		case kMaj9:		strcat(string, "major 9th");			  break;
-		case kDom9:		strcat(string, "dominant 9th");		  break;
-		case kMin9:		strcat(string, "minor 9th");			  break;
-		case kHalfDim9:	strcat(string, "half diminished 9th"); break;
-		case kMinMaj9:	strcat(string, "minor major 9th");	  break;
-		case kDimMaj9:	strcat(string, "diminished major 9th");break;
-		case kMaj9b5:	strcat(string, "major 9th b5");		  break;
-		case kDom9b5:	strcat(string, "dominant 9th b5");	  break;
-		case kDom9b13:	strcat(string, "dominant 9th b13");	  break;
-		case kMin9s11:	strcat(string, "minor 9th #11");		  break;
-		case kmM9b11:	strcat(string, "minor/maj 9th b11");	  break;
-
-		case kMaj7b9:	strcat(string, "major 7th b9");		  break;
-		case kMaj7s5b9:	strcat(string, "major 7th #5 b9");	  break;
-		case kDom7b9:	strcat(string, "dominant 7th b9");	  break;
-		case kMin7b9:	strcat(string, "minor 7th b9");		  break;
-		case kMinb9s11:	strcat(string, "minor b9 #11");		  break;
-		case kHalfDimb9:strcat(string, "half diminished b9");  break;
-		case kDim7b9:	strcat(string, "diminished b9");		  break;
-		case kMinMajb9: strcat(string, "minor/major b9");	  break;
-		case kDimMajb9:	strcat(string, "diminished M7 b9");	  break;
-
-		case kMaj7s9:	strcat(string, "major 7th #9");		  break;
-		case kDom7s9:	strcat(string, "dominant #9");		  break;
-		case kMaj7s11:	strcat(string, "major 7th #11");		  break;
-		case kMaj9s13:	strcat(string, "major 9th #13");		  break;
-		case kMs9s11:	strcat(string, "major #9 #11");		  break;
-		case kHDimb11:	strcat(string, "half diminished b11"); break;
-
-		case kMaj11:	strcat(string, "major 11th");		  break;
-		case kDom11:	strcat(string, "dominant 11th");		  break;
-		case kMin11:	strcat(string, "minor 11th");		  break;
-		case kHalfDim11:strcat(string, "half diminished 11th");break;
-		case kDim11:	strcat(string, "diminished 11th");	  break;
-		case kMinMaj11:	strcat(string, "minor/major 11th");	  break;
-		case kDimMaj11: strcat(string, "diminished maj 11th"); break;
-
-		case kMaj11b5:	strcat(string, "major 11th b5");		  break;
-		case kMaj11s5:	strcat(string, "major 11th #5");		  break;
-		case kMaj11b9:	strcat(string, "major 11th b9");		  break;
-		case kMaj11s9:	strcat(string, "major 11th #9");		  break;
-		case kMaj11b13:	strcat(string, "major 11th b13");	  break;
-		case kMaj11s13:	strcat(string, "major 11th #13");	  break;
-		case kM11b5b9:	strcat(string, "major 11th b5 b9");	  break;
-		case kDom11b5:	strcat(string, "dominant 11th b5");	  break;
-		case kDom11b9:	strcat(string, "dominant 11th b9");	  break;
-		case kDom11s9:	strcat(string, "dominant 11th #9");	  break;
-		case kHalfDim11b9:strcat(string, "half dim 11th b9");  break;
-		case kDom7s11:	strcat(string, "dominant #11");		  break;
-		case kMin7s11:	strcat(string, "minor 7th #11");		  break;
-
-		case kDom13s11:	strcat(string, "dominant 13th #11");	  break;
-		case kM7b913:	strcat(string, "major 7 b9 13");		  break;
-		case kMaj7s13:	strcat(string, "major 7th #13");		  break;
-		case kM7b9s13:	strcat(string, "major 7 b9 #13");	  break;
-		case kDom7b13:	strcat(string, "dominant 7th b13");	  break;
-		case kChrom:	strcat(string, "chromatic");			  break;
-
-	}
-}
-
-// helper function that returns a substring of str
-// starting from start and ending in end
-char* substring_r(char* buffer, char* str, int start, int end)
-{
-      int i, x = 0;
-      for(i = start ; i <= end; i++)
-            buffer[x++] = str[i];
-      buffer[x] = '\0';
-      return buffer;
-}
-
-// TODO: function to translate a string to chord
-// used both from inlet and from textfile
-chord_t chords_memory_string2chord(t_chords_memory *x, char *string)
-{
-	chord_t chord;
-	int index1;
-	int interval;
-	abs_note_t absnote;
-	char substr[32]; // is 32 ok?
-	if (DEBUG)
-		post("chords_memory_string2chord: string='%s'",string);
-	// c strings ends with \0
-	// so I set the substring to \0
-	memset( substr, '\0', sizeof(substr) );
-	// I assume the input is from maxlib's [chord]
-	// i don't need the notes before ":"
-	index1 = strcspn( string, ":");
-	if (index1 == strlen(string))
-	{
-		// : not found
-		// then the input was not from maxlib's [chord]
-		// i hope they passed me the right string...
-		strncpy( substr, string, strlen(string));
-	} else
-	{
-		// I will work on the right substring split by ":"
-		substring_r(substr, string, index1+1, strlen(string)-1);
-		if (isspace(substr[0]))
-		{
-			// substring inizia con uno spazio, lo tolgo
-			index1 = strlen(substr)-1;
-			memmove(substr, substr+1, index1); 
-			substr[index1] = '\0';
-		}
-	}
-	// now in substr i *should* have a string like this
-	// "C dominant 7th"
-	if (DEBUG)
-		post("chords_memory_string2chord: substr='%s'",substr);
-	// now I need to understand how many semitones there are
-	// between x->current_fundamental and this chord
-	absnote = from_string_to_abs_tone(substr);
-	interval = clean_note(absnote - x->fundamental_note);
-	chord.note = interval;
-	chord.mode=string2mode(substr); 
-	if (DEBUG)
-		post("chords_memory_string2chord: chord.note=%i chord.mode=%i",chord.note, chord.mode);
-	return chord;
-}
-
-// ------------------------------- search functions
-
-// internal function
-// find the better chord starting from chord1
-// using the desired weight which is a value between 0 and 1
-// so i have to normalize weights to 0-1 interval
-// i use maxweight to do that
-// TODO: add random, don't simply select the best but make a list with candidates
-//  and select randomly
-chord_t chords_memory_find_better(t_chords_memory *x, chord_t chord1, float desired_weight)
-{
-	// chords are integers
-	// to know what this integer means do that:
-	// int tone = chord1 / TONES_NUM
-	// int type = chord1 % TYPES_NUM
-	// the use a switch(tone) and a switch(type) 
-	// to know what kind of chord is this
-	int chord1int, chord2int, i, best_index;
-	float best_value;
-	float tmp;
-	double rnd;
-	chord_t chord2;
-	chord1int = chord1.note*TYPES_NUM + chord1.mode;
-
-	//rnd = rand()/((double)RAND_MAX + 1);
-	//best_index = rnd * NODES_NUM;
-	tmp = 0;
-	//best_value = fabs(((float) x->arcs[chord1int][best_index]) / ((float) x->maxweight) - desired_weight);
-	//if (DEBUG_VERBOSE)
-	//	post("chords_memory_find_better: initial %i best value = %f",best_index, best_value);
-	best_index = x->fundamental_mode; // fallback is I
-	best_value = 2; // higher than everyone
-	for (i=0; i<NODES_NUM; i++)
-	{
-		// i don't want it if has never been used
-		// i wouldn't know where to go then
-		// and i'd end up wondering blind
-		if (x->arcs[x->fundamental_mode][chord1int][i]>0)
-		{
-			tmp = fabs(((float)x->arcs[x->fundamental_mode][chord1int][i]) / ((float)x->maxweight[x->fundamental_mode]) - desired_weight);
-				if (DEBUG_VERBOSE)
-					post("chords_memory_find_better: x->arcs[%i][%i][%i]=%i x->maxweight[%i]=%i desired_weight=%f tmp=%f",x->fundamental_mode,chord1int,i, x->arcs[x->fundamental_mode][chord1int][i], x->fundamental_mode, x->maxweight[x->fundamental_mode], desired_weight, tmp);
-
-			if (tmp < best_value)
-			{
-				if (DEBUG_VERBOSE)
-				{
-					post("chords_memory_find_better: new best with value = %f", tmp);
-					post("chords_memory_find_better: x->arcs[%i][chord1int][%i]=%i x->maxweight[%i]=%i desired_weight=%f",x->fundamental_mode,i, x->arcs[x->fundamental_mode][chord1int][i], x->fundamental_mode, x->maxweight[x->fundamental_mode], desired_weight);
-				}
-
-				best_value = tmp;
-				best_index = i;
-			}
-			if (tmp == best_value)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < 0.5)
-				{
-					best_value = tmp;
-					best_index = i;
-					if (DEBUG_VERBOSE)
-					{
-						post("chords_memory_find_better: new best with value = %f", tmp);
-						post("chords_memory_find_better: x->arcs[%i][chord1int][%i]=%i x->maxweight[%i]=%i desired_weight=%f",x->fundamental_mode,i, x->arcs[x->fundamental_mode][chord1int][i],x->fundamental_mode,x->maxweight[x->fundamental_mode], desired_weight);
-					}
-				}
-			}
-		}
-	}
-	// now in best_index I have the best chord
-	// i build the chord back from the integer
-	chord2.mode = best_index % TYPES_NUM;
-	chord2.note = best_index / TYPES_NUM;
-	if (DEBUG)
-		post("chords_memory_find_better: chord.note=%i chord.mode=%i",chord2.note, chord2.mode);
-	return chord2;
-}
-
-// data structures to be used by build_walk
-
-// to sort arrays
-#include "sglib.h"
-
-// the data set we will work on it a matrix of candidates steps
-// this define each possibile chord and/or modulation
-// that can be chosen at each step
-typedef struct _possible_step
-{
-	int chordInt;
-	int cost; // NB integers!
-	int modulation; // 1 if needs modulations before new chord
-	int tonalityInt;
-} possible_step_t;
-
-typedef struct _possible_step2
-{
-	int index;
-	int cost; // NB integers!
-} possible_step2_t;
-
-// a row of our data set
-// each row is a step in the walk
-typedef struct _step_row
-{
-	possible_step_t cell[NODES_NUM+MODULATIONS_NUM];
-	int curr_cell;
-} step_row_t;
-
-// this is the real searching function
-// implementing a modified version of the 
-// depth limited search
-// the difference is that we don't accept solutions
-// in less than the wanted number of steps
-
-// sglib comparator for an array of possible_step_t
-#define POSSIBLE_STEP_COMPARATOR(e1, e2) (e1.cost - e2.cost)
-#define MY_ARRAY_ELEMENTS_EXCHANGER(type, a, i, j) {type tmp;tmp=a[i];a[i]=a[j];a[j]=tmp;}
-
-// recursive function
-// returns 0 if solutions was not found
-// 1 if a solution was found
-// the way i implement this changes the search function
-// actually is a greedy one:
-// i always select the lower cost
-// and take the first solution
-// this algo is:
-// COMPLETE: YES
-// OPTIMAL: NO
-// complexity (where s=steps, n=nodes:
-// best case: n*s
-// worst case: n^s
-// this will surely need threads!
-int chords_memory_build_walk_recursive(t_chords_memory *x,
-							 int chord_from_int, 
-							 int tonality_from_int, 
-							 int chord_to_int, 
-							 int tonality_to_int, 
-							 int this_step, 
-							 int wanted_steps, 
-							 float desired_weight,
-							 step_row_t *step_matrix)
-{
-
-	int i, cost_tmp, ret;
-	int this_tonality_note;
-	int this_tonality_mode;
-	float cost_float;
-	//test
-	possible_step2_t *ordered_list;
-	ordered_list = malloc(sizeof(possible_step2_t)*(NODES_NUM+MODULATIONS_NUM));
-
-	this_tonality_note = tonality_from_int / MODES_NUM;
-	this_tonality_mode = tonality_from_int % MODES_NUM;
-
-	if (DEBUG)
-		post("chords_memory_build_walk_recursive: recursive function called, this_step=%i,this_tonality_mode=%i", 
-		this_step,this_tonality_mode);
-
-	// first of all, I write all costs in step_matrix[this_step];
-	// chords first
-	for (i=0; i<NODES_NUM; i++)
-	{
-		step_matrix[this_step].cell[i].chordInt = i;
-		step_matrix[this_step].cell[i].modulation = 0;
-		// evaluate this cost
-		if (x->arcs[this_tonality_mode][chord_from_int][i]>0)
-		{
-			cost_float = fabs(((float)x->arcs[this_tonality_mode][chord_from_int][i]) / ((float)x->maxweight[this_tonality_mode]) - desired_weight);
-		} else
-		{
-			cost_float = 2; // never used this chord, so very costly
-		}
-		cost_tmp = cost_float * 1000;
-		step_matrix[this_step].cell[i].cost = cost_tmp;
-
-		//test
-		ordered_list[i].index=i;
-		ordered_list[i].cost=cost_tmp;
-
-		if (DEBUG_VERBOSE)
-			post("%i: cost_float=%f cost_tmp=%i chordInt=%i", 
-			i,cost_float,step_matrix[this_step].cell[i].cost, step_matrix[this_step].cell[i].chordInt); 
-	}
-	// then modulations
-	for (i=NODES_NUM; i<MODULATIONS_NUM; i++)
-	{
-		step_matrix[this_step].cell[i].tonalityInt = i-NODES_NUM;
-		step_matrix[this_step].cell[i].modulation = 1;
-		// step_matrix[this_step].cell[i].chordInt = ?? TODO
-		//step_matrix[this_step].cell[i].cost = ?? TODO
-		step_matrix[this_step].cell[i].cost = 2;
-		// HOW DO I MANAGE MODULATIONS ?!?!?!
-
-	}
-	step_matrix[this_step].curr_cell=0;
-
-	if (DEBUG_VERBOSE)
-		post("sorting...");
-	// now order the costs using sglib
-	// as i am greedy i follow the cheaper path first
-//	SGLIB_ARRAY_QUICK_SORT (possible_step_t, step_matrix[this_step].cell, NODES_NUM+MODULATIONS_NUM, POSSIBLE_STEP_COMPARATOR, MY_ARRAY_ELEMENTS_EXCHANGER)
-	SGLIB_ARRAY_QUICK_SORT (possible_step2_t, ordered_list, NODES_NUM+MODULATIONS_NUM, POSSIBLE_STEP_COMPARATOR, MY_ARRAY_ELEMENTS_EXCHANGER)
-
-	// this function is called recursively
-	//base case is then this_step==wanted_steps-1
-
-//	for (step_matrix[this_step].curr_cell=0; 
-//		step_matrix[this_step].curr_cell<(NODES_NUM+MODULATIONS_NUM); 
-//		step_matrix[this_step].curr_cell++)
-	for (i=0; i<(NODES_NUM+MODULATIONS_NUM); i++)
-	{
-		step_matrix[this_step].curr_cell = ordered_list[i].index;
-		// i don't want solutions that use never heard chords...
-		if (ordered_list[i].cost < 2000)
-		{
-			if (DEBUG_VERBOSE)
-			{
-				post("step_matrix[%i].curr_cell=%i chodInt=%i cost=%i", 
-					this_step,step_matrix[this_step].curr_cell,
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt,
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].cost
-					); 
-			}
-			if (this_step==wanted_steps-1)
-			{
-				// base case
-				// look for the solution
-				if ((step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt == chord_to_int) &&
-					(step_matrix[this_step].cell[step_matrix[this_step].curr_cell].tonalityInt == tonality_to_int))
-				{
-					// i just found a solution!
-					if (DEBUG)
-						post("chords_memory_build_walk_recursive: solution found! chord_note=%i chord_to_int=%i",
-						chord_to_int/TYPES_NUM,chord_to_int);
-					free(ordered_list);
-					return 1; // as i am greedy (and lazy) i return immediatly
-				}
-			} else
-			{
-				// recurive case
-				ret = chords_memory_build_walk_recursive(x, 
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt, 
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].tonalityInt, 
-					chord_to_int,  
-					tonality_to_int, 
-					this_step+1, 
-					wanted_steps, 
-					desired_weight, 
-					step_matrix);
-				if 	(ret == 1)
-				{
-					// solution found below me!
-					if (DEBUG)
-						post("chords_memory_build_walk_recursive: solution found! chordInt=%i cost=%i",
-						step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt,
-						step_matrix[this_step].cell[step_matrix[this_step].curr_cell].cost);
-					free(ordered_list);
-					return 1;
-				}
-
-			}
-		}
-	}
-	free(ordered_list);
-	return 0;
-}
-
-// TODO: add ending tonality !!!!
-void chords_memory_build_walk(t_chords_memory *x, chord_t starting_chord, chord_t ending_chord, float desired_weight, int steps)
-{
-	int i,j,s,n, ret;
-	int chord_from_int, chord_to_int, tonality_from_int, tonality_to_int;
-	step_row_t *step_matrix;
-	// for output
-	t_atom *chords_sequence;
-	char stringTMP[25];
-	// alloc arrays
-	if (x->using_walk)
-		free(x->walk);
-	x->walk = malloc(sizeof(step_t)*steps);
-	step_matrix = malloc(sizeof(step_row_t)*steps);
-	chords_sequence = malloc(sizeof(t_atom)*steps);
-
-	// for each step:
-	// fill this step with costs
-	// order the list
-	// take the first
-	// use it to fill the next level until you get to the desired step
-	// if you don't find a solution then step back
-	// select the second alternative and again
-	chord_from_int = starting_chord.note * TYPES_NUM + starting_chord.mode ;
-	tonality_from_int = x->fundamental_note * MODES_NUM + x->fundamental_mode;
-	chord_to_int = ending_chord.note * TYPES_NUM + ending_chord.mode ;
-	tonality_to_int = tonality_from_int; // TODO !!!!!
-
-	if (DEBUG)
-		post("chords_memory_build_walk: calling recursive function");
-
-	ret = chords_memory_build_walk_recursive(x, chord_from_int, tonality_from_int, chord_to_int,  tonality_to_int, 
-		0, steps, desired_weight, step_matrix);
-	if (ret==0)
-	{
-		// no solution found
-		// what do i do now?!?!
-		if (DEBUG)
-			post("no solution found");
-		return;
-	}
-	//  copy the solution to the x->walk
-	//  and set all needed vars
-	for (i=0; i<steps; i++)
-	{
-		int chordIntTMP = step_matrix[i].cell[step_matrix[i].curr_cell].chordInt;
-		int tonalityIntTMP = step_matrix[i].cell[step_matrix[i].curr_cell].tonalityInt;
-		int modulationTMP = step_matrix[i].cell[step_matrix[i].curr_cell].modulation;
-		// i copy this chord/modulation to the walk
-		x->walk[i].modulate = modulationTMP;
-		x->walk[i].chord.note = chordIntTMP / TYPES_NUM;
-		x->walk[i].chord.mode = chordIntTMP % TYPES_NUM;
-		x->walk[i].tonality_note = tonalityIntTMP / MODULATIONS_NUM;
-		x->walk[i].tonality_mode = tonalityIntTMP % MODULATIONS_NUM;
-		// build a list to send out to the 
-		// right outlet
-		chords_memory_chord2string(x,stringTMP,x->walk[i].chord);
-		if (DEBUG)
-			post("chord: %s", stringTMP);
-
-		//outlet_symbol(x->x_outtonalityname, gensym(stringTMP));
-
-		SETSYMBOL(chords_sequence+1, gensym(stringTMP));
-		//SETSYMBOL(chords_sequence+1, stringTMP);
-	}
-
-	// send the solution list to outlet x_outchordssequence
-	outlet_list(x->x_outchordssequence,
-                     gensym("list") ,
-					 steps, 
-					 chords_sequence);
-
-	// TODO: set other vars for walk
-	
-	// free arrays
-	free(step_matrix);
-	free(chords_sequence);
-	// don't free walk, will be freed by someone else
-}
-
-
-// ------------------------------- from now on there are functions directly called by pd
-
-// when you send a |next x( message...
-// function actually invoked when sending a "next x" message to the external
-void chords_memory_next(t_chords_memory *x, t_floatarg f)
-{
-	float desired_weight;
-	chord_t best;
-	char string[32];
-	desired_weight = f;
-	best = chords_memory_find_better(x, x->last_chord, desired_weight);
-	chords_memory_chord2string(x, string, best);
-	outlet_symbol(x->x_outchordname, gensym(string));
-}
-
-// when you send a search message
-void chords_memory_search(t_chords_memory *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int steps;
-	chord_t chord2;
-	float desired_weight;
-	// parse the list
-	// you need chord_dest, steps and desired_weight
-	// (later desired tonality also)
-
-	if (argc<4)
-	{
-		error("usage: search chord-note chord-type steps weight");
-		return;
-	}
-	
-	chord2.note = atom_getint(argv);
-	chord2.mode= atom_getint(argv+1);
-	steps = atom_getint(argv+2);
-	desired_weight = atom_getfloat(argv+3);
-
-	chords_memory_build_walk(x, x->last_chord, chord2, desired_weight, steps);
-
-}
-
-
-// ------------------------------- functions to set and add chords/tonality
-
-// sets the current chord
-void chords_memory_set_chord(t_chords_memory *x, t_symbol *s) {
-	if (! x->last_chord_set)
-	{
-		x->last_chord_set=1;
-	}
-	x->last_chord = chords_memory_string2chord(x, s->s_name);
-	if (DEBUG)
-		post("chords_memory_set_chord: chord.note=%i chord.mode=%i",x->last_chord.note, x->last_chord.mode);
-}
-
-// add a chord sequence to the graph
-float chords_memory_add(t_chords_memory *x, chord_t chord1, chord_t chord2)
-{
-	// chords are integers
-	// to know what this integer means do that:
-	// int tone = chord1 / TONES_NUM
-	// int type = chord1 % TYPES_NUM
-	// the use a switch(tone) and a switch(type) 
-	// to know what kind of chord is this
-
-	int chord1int, chord2int;
-	chord1int = chord1.note*TYPES_NUM + chord1.mode;
-	chord2int = chord2.note*TYPES_NUM + chord2.mode;
-	// now that i've translated chords in integers i can add
-	// 1 to its wheight (a bit less new)
-	x->arcs[x->fundamental_mode][chord1int][chord2int] = x->arcs[x->fundamental_mode][chord1int][chord2int] + 1;
-	// is this the new maxweight?
-	if (x->arcs[x->fundamental_mode][chord1int][chord2int] > x->maxweight[x->fundamental_mode])
-	{
-		x->maxweight[x->fundamental_mode] = x->arcs[x->fundamental_mode][chord1int][chord2int];
-		if (DEBUG)
-			post("x->maxweight[%i] = %i",x->fundamental_mode, x->maxweight[x->fundamental_mode]);
-	}
-	return (float) (((float) x->arcs[x->fundamental_mode][chord1int][chord2int]) / ((float) x->maxweight[x->fundamental_mode]) );
-
-}
-
-// function invoked when a new chord is added at the graph
-// the external remembers the previous played chord
-void chords_memory_add_chord(t_chords_memory *x, t_symbol *s) {
-    chord_t chord1;
-	float ret = 0;
-	chord1 = chords_memory_string2chord(x, s->s_name);
-	if (x->last_chord_set)
-	{
-		ret = chords_memory_add(x, x->last_chord, chord1);
-	} 
-	else
-	{
-		x->last_chord_set=1;
-	}
-	x->last_chord = chord1;
-	if (DEBUG)
-		post("chord added: %s", s->s_name); 
-	outlet_float(x->x_outnovelty, ret);
-}
-
-// sets the current tonality
-void chords_memory_set_tonality(t_chords_memory *x, t_symbol *s) {
-	chord_t c;
-	int old_tonality;
-	int interval;
-	old_tonality = x->fundamental_note;
-	//x->fundamental_note = (x->fundamental_note + from_string_to_abs_tone(s->s_name)) % 12;
-	x->fundamental_note = from_string_to_abs_tone(s->s_name);
-	x->fundamental_mode = from_string_to_mode(s->s_name);
-	// when i set the tonality i always
-	// go on the I grade
-	if (! x->last_chord_set)
-	{
-		x->last_chord_set=1;
-	}
-	interval = x->fundamental_note - old_tonality;
-	x->last_chord.note = clean_note(x->last_chord.note - interval);
-	outlet_symbol(x->x_outtonalityname, gensym(s->s_name));
-	if (DEBUG)
-	{
-		post("chords_memory_set_tonality: new tonality note=%i mode=%i",x->fundamental_note,x->fundamental_mode);
-		post("chords_memory_set_tonality: chord.note=%i chord.mode=%i",x->last_chord.note, x->last_chord.mode);
-	}
-}
-
-// adds this modulation to memory
-// code similar to chords_memory_add
-// but adds a modulation instead of a chord
-void chords_memory_add_modulation(t_chords_memory *x, t_symbol *s) {
-	chord_t c;
-	int old_tonality;
-	int newnote,newmode,newabsnote,chord1int;
-	short int modulationInt;
-	old_tonality = x->fundamental_note;
-	//x->fundamental_note = (x->fundamental_note + from_string_to_abs_tone(s->s_name)) % 12;
-	newabsnote = from_string_to_abs_tone(s->s_name);
-	newmode = from_string_to_mode(s->s_name);
-	// when i set the tonality i always
-	// go on the I grade
-	if (! x->last_chord_set)
-	{
-		x->last_chord_set=1;
-	}
-	newnote = clean_note(newabsnote - old_tonality);
-	modulationInt = newnote*MODES_NUM + newmode;
-	chord1int = x->last_chord.note*TYPES_NUM + x->last_chord.mode;
-	x->modulations[x->fundamental_mode][chord1int][modulationInt] = x->modulations[x->fundamental_mode][chord1int][modulationInt] + 1;
-	// is this the new maxweight?
-	if (x->modulations[x->fundamental_mode][chord1int][modulationInt] > x->maxweight[x->fundamental_mode])
-	{
-		x->maxweight[x->fundamental_mode] = x->modulations[x->fundamental_mode][chord1int][modulationInt];
-	}
-	if (DEBUG)
-	{
-		post("chords_memory_add_modulation: new tonality note=%i mode=%i",newnote,newmode);
-	}
-	chords_memory_set_tonality(x, gensym(s->s_name));
-}
-
-// ---------------------- file I/O
-
-// function to read graph from a file
-void chords_memory_read_from_file(t_chords_memory *x, t_symbol *s)
-{
-	FILE *fp;
-	int i, j, m;
-	unsigned char tmp[2];
-	if ((fp=fopen(s->s_name, "r+b"))==NULL)
-	{
-		post("error: can't open file %s", s->s_name);
-		return;
-	}
-	
-	for (m=0; m<MODES_NUM; m++)
-	{
-		// i read maxweight
-		x->maxweight[m] = (fgetc(fp)<<16)|(fgetc(fp));
-		// i read the matrix
-		for (i=0; i<NODES_NUM; i++)
-		{
-			for (j=0; j<NODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				tmp[0] = fgetc(fp);
-				tmp[1] = fgetc(fp);
-				x->arcs[m][i][j] = (tmp[0]<<8)|(tmp[1]);
-				if (DEBUG_VERBOSE)
-				{
-					if (x->arcs[m][i][j]>0)
-					{
-						post("x->arcs[%i][%i][%i] = %i",m,i,j,x->arcs[m][i][j]);
-					}
-				}
-			}
-			for (j=0; j<MODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				tmp[0] = fgetc(fp);
-				tmp[1] = fgetc(fp);
-				x->modulations[m][i][j] = (tmp[0]<<8)|(tmp[1]);
-				if (DEBUG_VERBOSE)
-				{
-					if (x->modulations[m][i][j]>0)
-					{
-						post("x->modulations[%i][%i][%i] = %i",m,i,j,x->modulations[m][i][j]);
-					}
-				}
-			}
-		}
-		if (DEBUG)
-			post("x->maxweight[%i] = %i",m, x->maxweight[m]);
-	}
-	if (DEBUG)
-		post("graph read from file %s",s->s_name);
-	fclose(fp);
-
-}
-
-// function to write graph to a file (for later loading)
-void chords_memory_write_to_file(t_chords_memory *x, t_symbol *s)
-{
-	FILE *fp;
-	int i, j, m, tmp;
-	fp=fopen(s->s_name, "w+b");
-
-	for (m=0; m<MODES_NUM; m++)
-	{
-		// i write down maxweight
-		fputc(x->maxweight[m]>>8, fp);
-		tmp = x->maxweight[m]<<8;
-		tmp = tmp >> 8;
-		fputc(tmp, fp);
-		// i write down the matrix
-		for (i=0; i<NODES_NUM; i++)
-		{
-			for (j=0; j<NODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				fputc(x->arcs[m][i][j]>>8, fp);
-				tmp = x->arcs[m][i][j]<<8;
-				tmp = tmp >> 8;
-				fputc(tmp, fp);
-			}
-			for (j=0; j<MODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				fputc(x->modulations[m][i][j]>>8, fp);
-				tmp = x->modulations[m][i][j]<<8;
-				tmp = tmp >> 8;
-				fputc(tmp, fp);
-			}
-		}
-	}
-	if (DEBUG)
-		post("graph wrote to file %s",s->s_name);
-	fclose(fp);
-}
-
-// TODO: function that reads chords from a textfile and trains the graph
-
-// TODO: recursive function that builds a walk from chord1 to chord2 using desired novelty
-
-// set filename
-void chords_memory_set_filename(t_chords_memory *x, t_symbol *s) {
-    x->filename = s;
-}
-
-
-
-void *chords_memory_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_chords_memory *x = (t_chords_memory *)pd_new(chords_memory_class);
-	x->x_outchordname = outlet_new(&x->x_obj, gensym("symbol"));
-	x->x_outtonalityname = outlet_new(&x->x_obj, gensym("symbol"));
-	x->x_outchordssequence = outlet_new(&x->x_obj, gensym("list"));
-	x->x_outnovelty = outlet_new(&x->x_obj, gensym("float"));
-	srand(time(&a));
-	chords_memory_init_graph(x);
-	x->fundamental_note = C;
-	x->fundamental_mode = MAJOR;
-	 // example parameter
-	if (argc>0) 
-	{
-		x->filename = atom_getsymbolarg(0, argc, argv);
-		chords_memory_read_from_file(x, x->filename); 
-	} 
-
-    return (x);
-}
-
-// here I free allocated memory if any
-void chords_memory_free(t_chords_memory *x)
-{
-//	free(x->current_fundamental);
-}
-
-void chords_memory_setup(void)
-{
-    chords_memory_class = class_new(gensym("chords_memory"), (t_newmethod)chords_memory_new,
-        (t_method)chords_memory_free, sizeof(t_chords_memory), CLASS_DEFAULT, A_GIMME, 0);
-    // file I/O
-	class_addmethod(chords_memory_class, (t_method)chords_memory_write_to_file, gensym("write"),A_SYMBOL, 0);
-    class_addmethod(chords_memory_class, (t_method)chords_memory_read_from_file, gensym("read"),A_SYMBOL, 0);
- 	// ask for the best choice form here
-	class_addmethod(chords_memory_class, (t_method)chords_memory_next, gensym("next"), A_DEFFLOAT, 0);
-    // ask for a path from here to desired destination
-	class_addmethod(chords_memory_class, (t_method)chords_memory_search, gensym("search"), A_GIMME, 0);
-    // add or set chord
-	class_addmethod(chords_memory_class, (t_method)chords_memory_add_chord, gensym("add"),A_SYMBOL, 0);
-    class_addmethod(chords_memory_class, (t_method)chords_memory_set_chord, gensym("set"),A_SYMBOL, 0);
-	// change current tonality
-	class_addmethod(chords_memory_class, (t_method)chords_memory_set_tonality, gensym("tonality"),A_SYMBOL, 0);
-	class_addmethod(chords_memory_class, (t_method)chords_memory_add_modulation, gensym("modulation"),A_SYMBOL, 0);
- 	// reinit memory
-	class_addmethod(chords_memory_class, (t_method)chords_memory_init, gensym("init"), A_DEFFLOAT, 0);
-
-}
diff --git a/externals/frankenstein/chords_memory.vcproj b/externals/frankenstein/chords_memory.vcproj
deleted file mode 100755
index cd37ad70078cfc8292a73625bd578ea3fafa7d69..0000000000000000000000000000000000000000
--- a/externals/frankenstein/chords_memory.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="chords_memory"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:chords_memory_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/chords_memory.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="chords_memory.c">
-			</File>
-			<File
-				RelativePath="common.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/common.c b/externals/frankenstein/common.c
deleted file mode 100644
index 5abfd38984493fd9bb8a94714c2d05197f7a16c0..0000000000000000000000000000000000000000
--- a/externals/frankenstein/common.c
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*
-
-implementation of common functions used by the externals of the frank framework
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-*/
-#include "common.h"
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "m_pd.h" // to post errors and debug messages
-
-t_duration int2duration(int n)
-{
-	t_duration dur;
-	int curr, i, j, ok, currden;
-	curr=0;
-	ok=0;
-	for (i=0; i<num_possible_denominators; i++)
-	{
-		currden = possible_denominators[i];
-		for (j=0; j<currden; j++)
-		{
-			if (curr==n)
-			{
-				dur.numerator=j;
-				dur.denominator=currden;
-				j=currden;
-				i=num_possible_denominators;
-				ok=1;
-			} else
-				curr++;
-		}
-	}
-	if (ok)
-		return dur;
-	else
-	{
-		dur.numerator=1;
-		dur.denominator=1;
-		return dur;
-	}
-}
-
-unsigned short int duration2int(t_duration dur)
-{
-	unsigned short int curr, i, j;
-	curr=0;
-	for (i=0; i<num_possible_denominators; i++)
-	{
-		for (j=0; j<i; j++)
-		{
-			if ((dur.numerator==j) && (dur.denominator==possible_denominators[i]))
-			{
-				return curr;
-			} else
-				curr++;
-		}
-	}
-	return curr;	
-}
-
-int possible_durations()
-{
-	int ris, i;
-	ris = 0;
-	for (i=0; i<num_possible_denominators; i++)
-	{
-		ris += possible_denominators[i]-1;
-	}
-	ris += 1;
-	return ris;
-}
-
-t_duration float2duration(float fduration)
-{
-	float minDiff, currfduration, currDiff;
-	int i, maxi;
-	t_duration currDur, bestDur;
-
-	bestDur.numerator=1;
-	bestDur.denominator=1;
-	minDiff = 1;
-	maxi = possible_durations();
-	for (i=0; i<maxi; i++)
-	{
-	//	post("i=%i", i);
-		currDur = int2duration(i);
-	//	post("currDur=%i/%i", currDur.numerator, currDur.denominator);
-		currfduration = duration2float(currDur);
-	//	post("currfduration=%f", currfduration);
-		currDiff = (float) fabs(fduration - currfduration);
-		if (currDiff<=minDiff)
-		{
-			minDiff = currDiff;
-			bestDur = currDur;
-		}
-	}
-	return bestDur;
-}
-
-float duration2float(t_duration duration)
-{
-	return (float) (((float)duration.numerator) / ((float)duration.denominator));
-}
-
-void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float fstart, float fduration)
-{
-	t_duration res;
-	t_rhythm_event *newElement;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = malloc(sizeof(t_rhythm_event));
-	// set the pointers
-	newElement->previous = 0;
-	newElement->next = 0;
-	newElement->voice=voice;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-	*firstEvent = newElement;
-	//post("DEBUG setFirstBeat: %i %i", res.numerator, res.denominator);
-}
-
-void concatenateBeat(t_rhythm_event *currentEvent, unsigned short int voice, float fstart, float fduration)
-{
-	t_duration res;
-	t_rhythm_event *newElement, *lastElement;
-	lastElement = currentEvent;
-	while(lastElement->next)
-		lastElement = lastElement->next;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = (t_rhythm_event *) malloc(sizeof(t_rhythm_event));
-	// set the pointers
-	newElement->previous = lastElement;
-	newElement->next = 0;
-	lastElement->next = newElement;
-	newElement->voice=voice;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-	//post("DEBUG concatenateBeat: %i %i", res.numerator, res.denominator);
-}
-
-void freeBeats(t_rhythm_event *currentEvent)
-{
-	t_rhythm_event *prev;
-	t_rhythm_event *next;
-
-	if (currentEvent==0)
-		return;
-
-	// go to the first element of the list
-	while(currentEvent->previous)
-		currentEvent = currentEvent->previous;
-
-	// now free each element
-	next=currentEvent->next;
-	while(currentEvent)
-	{
-		prev = currentEvent;
-		currentEvent = currentEvent->next;
-		free(prev);
-	} 
-	currentEvent = 0;
-
-}
-
-void add_t_rhythm_memory_arc(t_rhythm_memory_node *srcNode, unsigned short int dstNode)
-{
-	t_rhythm_memory_arc *newArc;
-	t_rhythm_memory_arc *lastArc;
-
-	// create a new arc
-	newArc = (t_rhythm_memory_arc *) malloc(sizeof(t_rhythm_memory_arc));
-	newArc->to_node_index = dstNode;
-	// go to the last arc in the list
-	// and add this arc as the last
-	lastArc = srcNode->arcs;
-	if (lastArc)
-	{
-		// this is not the first arc
-		while(lastArc->next_arc)
-			lastArc = lastArc->next_arc;
-		lastArc->next_arc = newArc;
-	} else
-	{
-		// this is the first arc
-		srcNode->arcs = newArc;
-	}
-}
-
-// initialize this representation, allocates memory for the pointers
-void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep, unsigned short int id)
-{
-	int i;
-	// allocate space for the data structure
-	*this_rep = (t_rhythm_memory_representation *)malloc(sizeof(t_rhythm_memory_representation));
-	// space for transitions
-	(*this_rep)->transitions = (t_rhythm_memory_node *) malloc(sizeof(t_rhythm_memory_node) * possible_durations());
-	// initialize transitions
-	for (i=0; i<possible_durations(); i++)
-	{
-		(*this_rep)->transitions[i].first=0;
-		(*this_rep)->transitions[i].weight=0;
-		(*this_rep)->transitions[i].arcs=0;
-	}
-	(*this_rep)->rhythms = 0;
-	// the naming variables
-	(*this_rep)->id = id; // the main id
-	(*this_rep)->last_sub_id = 0; // the sub id
-	(*this_rep)->next = 0;
-	(*this_rep)->max_weight = 0;
-}
-
-// add a new rhythm in the list of similar thythms related to one main rhythm
-unsigned short int add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm)
-{
-	t_rhythm_memory_element *curr;
-	t_rhythm_memory_element *newElement;
-	t_rhythm_event *currEvent;
-	t_rhythm_memory_arc *currArc, *newArc, *prevArc;
-	unsigned short int last, sub_id;
-	int i, arcFound;
-	if (new_rhythm==0)
-		return INVALID_RHYTHM;
-	// creates a new element of the list of similar rhythms
-	newElement = (t_rhythm_memory_element *) malloc(sizeof(t_rhythm_memory_element));
-	newElement->rhythm = new_rhythm;
-	newElement->next = 0;
-	sub_id = this_rep->last_sub_id;
-	newElement->id = sub_id;
-	this_rep->last_sub_id++;
-	// finds the last element and adds itself
-	curr = this_rep->rhythms;
-	if (curr)
-	{
-		while (curr->next)
-			curr=curr->next;
-		curr->next = newElement;
-
-	} else
-	{
-		this_rep->rhythms = newElement;
-	}
-	// now update the transition table..
-	currEvent = new_rhythm;
-	// set the first event..
-	i = duration2int(new_rhythm->start);
-	this_rep->transitions[i].first++;
-	last = 0;
-	while (currEvent)
-	{
-		// get the duration and translate into an int
-		i = duration2int(currEvent->start);
-		if (last) // NB if last==0 then last is not set
-		{
-			// add an arc between last and i
-			currArc = this_rep->transitions[last].arcs;
-			arcFound=0;
-			// is this arc rpesent?
-			// also i need to get to the last element of the lsit
-			while (currArc)
-			{
-				// for each arc in the list
-				if (currArc->to_node_index == i)
-				{
-					// this arc is already present
-					arcFound=1;
-				}
-				prevArc = currArc; // last valid arc
-				currArc = currArc->next_arc;
-			} 
-			if (!arcFound)
-			{
-				// this arc was not present, add it!
-				newArc = (t_rhythm_memory_arc *) malloc(sizeof(t_rhythm_memory_arc));
-				newArc->next_arc = 0; 
-				newArc->to_node_index = i; // set my destination
-				if (this_rep->transitions[last].arcs)
-				{
-					// this is not the first arc
-					// then prevArc is set and valid
-					prevArc->next_arc = newArc;
-				} else
-				{
-					// this is the first arc
-					this_rep->transitions[last].arcs = newArc;
-				}
-			}
-		}
-		// increment the weight
-		this_rep->transitions[i].weight++;
-		if (this_rep->transitions[i].weight > this_rep->max_weight)
-		{
-			// a new champion!
-			this_rep->max_weight = this_rep->transitions[i].weight;
-			//post("DEBUG: max_weight=%i", this_rep->max_weight);
-		}
-		last = i;
-		currEvent = currEvent->next;
-	}
-	return sub_id;
-}
-
-// free the list of representations
-void free_memory_representations(t_rhythm_memory_representation *this_rep)
-{
-	int i, maxi;
-	t_rhythm_memory_representation *currRep, *oldRep;
-	t_rhythm_memory_element *currElement, *tmpElement;
-	t_rhythm_memory_arc *currArc, *tmpArc;
-	currRep = this_rep;
-	while(currRep)
-	{
-		// free the table
-		maxi = possible_durations();
-		for (i=0; i<maxi; i++)
-		{
-			currArc = currRep->transitions[i].arcs;
-			while (currArc)
-			{
-				tmpArc = currArc;
-				currArc = currArc->next_arc;
-				free(tmpArc);
-			}
-		}
-		free(currRep->transitions);
-
-		// free the list of similar rhythms
-		currElement = currRep->rhythms;
-		while (currElement)
-		{
-			freeBeats(currElement->rhythm);
-			tmpElement = currElement;
-			currElement = currElement->next;
-			free(tmpElement);
-		}
-		oldRep = currRep;
-		currRep = currRep->next;
-		free(oldRep);
-	}
-
-}
-
-void create_array_beats(unsigned short int **this_array, t_rhythm_event *currentEvent)
-{
-	unsigned short int *new_array;
-	//t_rhythm_event *curr_event;
-	int i, maxi, startint;
-	maxi = possible_durations();
-	// allocate space for the nodes
-	new_array = (unsigned short int *) malloc(sizeof(unsigned short int) * maxi);
-	// set default values
-	for (i=0; i<maxi; i++)
-	{
-			new_array[i] = 0;
-	}
-	// set the actual data
-	//curr_event = currentEvent;
-	while(currentEvent)
-	{
-		startint = duration2int(currentEvent->start);
-		new_array[startint]=1;
-		currentEvent = currentEvent->next;
-	}
-	*this_array = new_array;
-
-}
-
-// compares this rhythm to this representation
-// and tells you how close it is to it
-void compare_rhythm_vs_representation(t_rhythm_memory_representation *this_rep, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 )
-{
-	t_duration tmp_dur, this_dur;
-	t_rhythm_event *curr_event;
-	float this_weight_float, average_weight, strong_ratio;
-	int i, max_i, int_from_dur, this_weight_int, beats, strong_ok, strong_no;
-	unsigned short int *src_rhythm_array, *tmp_rhythm_array;
-	unsigned short int best_subid, curr_subid;
-	float best_closeness, curr_closeness;
-	int sub_ok, sub_no, sub_count;
-	int count_strong;
-	t_rhythm_memory_element *possible_rhythms;
-
-	// check that the return values have been allocated
-	if ((sub_id==0)||(root_closeness==0)||(sub_closeness==0))
-	{
-		post("error in find_similar_rhythm(): return values not allocated");
-		return;
-	}
-
-	max_i = possible_durations();
-	// create an array of bools
-	create_array_beats(&src_rhythm_array, src_rhythm);
-
-	// look the main table for closeness to the main rhythm
-	curr_event = src_rhythm;
-	beats=0;
-	strong_ok=0;
-	strong_no=0;
-	strong_ratio=0;
-	/*
-	average_weight = 0;
-	while(curr_event)
-	{
-		int_from_dur = duration2int(curr_event->start);
-		// get the weight of this beat
-		this_weight_int = this_rep->transitions[int_from_dur].weight;
-		this_weight_float = (float) ( ((float) this_weight_int) / ((float) this_rep->max_weight));
-		average_weight += this_weight_float;
-		beats++;
-		curr_event = curr_event->next;
-	}
-	// this is the average weight of this rhythm in this representation
-	if (beats==0)
-	{
-		average_weight = 0;
-	} else
-	{
-		average_weight = (float) (average_weight / ((float) beats));
-	}
-	*/
-	// look all the representation's rhythm 
-	// looking for strong beats corrispondance
-	count_strong = 0;
-	for (i=0; i<max_i; i++)
-	{
-			this_weight_int = this_rep->transitions[i].weight;
-			this_weight_float = (float) (((float) this_weight_int) / ((float) this_rep->max_weight));
-			//post("DEBUG: transition %i this_weight_int=%i max_weight=%i this_weight_float=%f", i, this_weight_int, this_rep->max_weight, this_weight_float);
-			if (this_weight_float > min_to_be_main_rhythm_beat)
-			{
-				// this is a main rhythm beat
-				if (src_rhythm_array[i]>0)
-				{
-					// both playing
-					strong_ok++;
-					//post("DEBUG: beat %i, both playing", i);
-				} else
-				{
-					// strong beat miss
-					strong_no++;
-					//post("DEBUG: beat %i, src not playing", i);
-				}
-				count_strong++;
-			}	
-	}
-
-	// ratio of corresponding strong beats.. 
-	// close to 0 = no corrispondance
-	// close to 1 = corrispondance
-	if (count_strong==0)
-	{
-		strong_ratio = 0;
-	} else
-	{
-		strong_ratio = (float) ( ( ((float) strong_ok) / ((float)count_strong) ) -
-			( ((float) strong_no) / ((float)count_strong) )) ;
-		//post("DEBUG: strong_ratio=%f", strong_ratio);
-	}
-	// for each rhythm in the list
-	// count the number of identical nodes
-	// cound thenumber of different nodes
-	best_subid = curr_subid = INVALID_RHYTHM;
-	best_closeness = curr_closeness = 0;
-	possible_rhythms = this_rep->rhythms;
-	while(possible_rhythms)
-	{
-		// create the table of this rhythm
-		create_array_beats(&tmp_rhythm_array, possible_rhythms->rhythm);
-		sub_ok = sub_no = sub_count = 0;
-		for (i=0; i<max_i; i++)
-		{
-			if (tmp_rhythm_array[i]>0  && src_rhythm_array[i]>0)
-			{
-				sub_ok++;
-			} else if (tmp_rhythm_array[i]==0  && src_rhythm_array[i]==0)
-			{
-				// nothing important
-			} else
-			{
-				sub_no++;
-			}
-			sub_count++;
-		}
-		if (sub_no == 0)
-		{
-			curr_closeness = 1;
-		} else
-		{
-			curr_closeness = (float) (( ((float) sub_ok) - ((float) sub_no) ) / ((float) sub_count));
-		}
-		if (curr_closeness > best_closeness)
-		{
-			best_closeness = curr_closeness;
-			best_subid = possible_rhythms->id;
-		}
-		possible_rhythms = possible_rhythms->next;
-		free(tmp_rhythm_array);
-	}
-
-	// return the better matching rhythm id
-	// and the closeness floats
-
-	*sub_id = best_subid;
-	*sub_closeness = best_closeness;
-	*root_closeness = strong_ratio;
-
-	// free allocated memory
-	free(src_rhythm_array);
-}
-
-void find_rhythm_in_memory(t_rhythm_memory_representation *rep_list, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *id, // the id of the closest rhythm
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 )
-{
-	unsigned short int best_id, curr_id, best_subid, curr_subid;
-	float best_closeness, curr_closeness, best_sub_closeness, curr_sub_closeness;
-	t_rhythm_memory_representation *this_rep;
-	best_closeness = curr_closeness = best_sub_closeness = curr_sub_closeness = 0;
-	best_id = curr_id = best_subid = curr_subid = INVALID_RHYTHM;
-	// for each element of the rep_list
-	this_rep = rep_list;
-	while(this_rep)
-	{
-		// if max_weight maxweight == 0 then there are no rhythms and no table
-		if (this_rep->max_weight)
-		{
-			compare_rhythm_vs_representation(this_rep, 
-				src_rhythm, 
-				&curr_subid, 
-				&curr_closeness, 
-				&curr_sub_closeness);
-			if (curr_closeness > best_closeness)
-			{
-				best_closeness = curr_closeness;
-				best_id = this_rep->id;
-				best_sub_closeness = curr_sub_closeness;
-				best_subid = curr_subid;
-			}
-		}
-		this_rep = this_rep->next;
-	}
-
-	*id = best_id;
-	*sub_id = best_subid;
-	*root_closeness = best_closeness;
-	*sub_closeness = best_sub_closeness;
-	
-
-}
-
-
-// create a new memory for rhythms
-void rhythm_memory_create(t_rhythm_memory_representation **this_rep)
-{
-	create_rhythm_memory_representation(this_rep, 0);
-}
-
-// free the space 
-void rhythm_memory_free(t_rhythm_memory_representation *rep_list)
-{
-	t_rhythm_memory_representation *curr, *nextRep;
-	nextRep = rep_list;
-	while (nextRep)
-	{
-		curr = nextRep;
-		nextRep = curr->next;
-		free_memory_representations(curr);
-	}
-
-}
-// evaluate this rhythm and add it to the memory if is new
-void rhythm_memory_evaluate(t_rhythm_memory_representation *rep_list, // the memory
-							t_rhythm_event *src_rhythm, // the rhythm to evaluate
-							// is it a new rhythm? (0 if no, 1 if new main rhythm, 2 if new subrhythm)
-							unsigned short int *new_rhythm,
-							// the id of the closest rhythm or the new id assigned
-							unsigned short int *id, 
-							// the sub-id of the closest sub-rhythm or the new sub-id assigned
-							unsigned short int *sub_id,
-							// how much this rhythm is close to the root (1=identical, 0=nothing common)
-							float *root_closeness,
-							// how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-							float *sub_closeness 
-							)
-{
-	float root_closeness_found, sub_closeness_found;
-	unsigned short int id_found, sub_id_found, new_id;
-	t_rhythm_memory_representation *curr, *newRep, *lastRep;
-	int found;
-
-	// look for the closest main rhythm and subrhythm
-	find_rhythm_in_memory(rep_list, 
-						 src_rhythm, // the src rhythm 
-						 &id_found, // the id of the closest rhythm
-						 &sub_id_found, // the sub-id of the closest sub-rhythm 
-						 &root_closeness_found, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 &sub_closeness_found // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 );
-
-	// decide if add to the memory or if return the closest
-
-	if (root_closeness_found >= (float)min_to_be_same_rhythm)
-	{
-		// is close enough to be considered a rhythm
-		post("DEBUG: rhythm found");
-		*new_rhythm = 0;
-		*id = id_found;
-		*root_closeness = root_closeness_found;
-		if (sub_closeness_found >= (float)min_to_be_same_subrhythm)
-		{
-			// this is a known subrhythm
-			post("DEBUG: sub-rhythm found");
-			*sub_id = sub_id_found;
-			*sub_closeness = sub_closeness_found;
-			//only in this case free the memory allocated for the rhythm
-			freeBeats(src_rhythm);
-		} else
-		{
-			// add this rhythm as a new subrhythm
-			curr = rep_list;
-			found = 0;
-			while (curr && !found)
-			{
-				if (curr->id == id_found)
-				{
-					// i've found the rhythm
-					found = 1;
-				} else
-				{
-					curr = curr->next;
-				}
-			}
-
-			sub_id_found = add_t_rhythm_memory_element(curr, src_rhythm);
-			sub_closeness_found = 1;
-			*sub_id = sub_id_found;
-			*sub_closeness = sub_closeness_found;
-			*new_rhythm = 2;
-			//post("DEBUG: new subrhythm");
-		}
-	} else
-	{
-		// this is a completely new rhythm!
-		// find the last id and representation
-		curr = rep_list;
-		new_id = 0;
-		lastRep = 0;
-		while (curr)
-		{
-			new_id = curr->id;
-			lastRep = curr;
-			curr = curr->next;
-		}	
-		// create a new representation with a new id
-		new_id++;
-		create_rhythm_memory_representation(&newRep, new_id);
-		// link the representations
-		lastRep->next = newRep;
-		// add the rhythm as subrhythm
-		sub_id_found = add_t_rhythm_memory_element(newRep, src_rhythm);
-		sub_closeness_found = 1;
-		*sub_id = sub_id_found;
-		*sub_closeness = sub_closeness_found;
-		*id = new_id;
-		*root_closeness = 1;
-		*new_rhythm = 1;
-		//post("DEBUG: new rhythm");
-	}
-
-}
-// return 0 if failed finding the rhythm, 1 if the rhythm was found
-int rhythm_memory_get_rhythm(t_rhythm_memory_representation *rep_list, // the memory
-							  t_rhythm_event **out_rhythm, // a pointer to the returned rhythm
-							  // the id of the main rhythm wanted
-							  unsigned short int id, 
-							  // the sub-id of the sub-rhythm wanted
-							  unsigned short int sub_id)
-{
-	// look for this id and subid in memory and return that subrhythm
-	t_rhythm_memory_representation *curr;
-	t_rhythm_memory_element *curr2;
-	curr = rep_list;
-	while (curr)
-	{
-		if (curr->id == id)
-		{
-			// this is the right main rhythm
-			// now look for the correct subid
-			curr2 = curr->rhythms;
-			while (curr2)
-			{
-				if (curr2->id == sub_id)
-				{
-					// i've found the rhythm!
-					*out_rhythm=curr2->rhythm;
-					return 1;
-				}
-				curr2 = curr2->next;
-			}
-
-		}
-
-		curr = curr->next;
-	}
-	// if i am here then i didn't find the rhythm
-	return 0;
-}
-
-
-// ------------------- themes manipulation functions
-
-// set the first note of a sequence
-void setFirstNote(t_note_event **firstEvent, unsigned short int voice, float fstart, float fduration, t_note note)
-{
-	t_duration res;
-	t_note_event *newElement;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = malloc(sizeof(t_note_event));
-	// set the pointers
-	newElement->previous = 0;
-	newElement->next = 0;
-	newElement->voice=voice;
-	newElement->note.chord = note.chord;
-	newElement->note.diatonic = note.diatonic;
-	newElement->note.interval = note.interval;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-	*firstEvent = newElement;
-}
-
-//adds a note at the end of this list
-void concatenateNote(t_note_event *currentEvent, unsigned short int voice, float fstart, float fduration, t_note note)
-{
-	t_duration res;
-	t_note_event *newElement, *lastElement;
-	lastElement = currentEvent;
-	while(lastElement->next)
-		lastElement = lastElement->next;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = (t_note_event *) malloc(sizeof(t_note_event));
-	// set the pointers
-	newElement->previous = lastElement;
-	newElement->next = 0;
-	lastElement->next = newElement;
-	newElement->voice=voice;
-	newElement->note.chord = note.chord;
-	newElement->note.diatonic = note.diatonic;
-	newElement->note.interval = note.interval;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-}
-
-// used to free the memory allocated by this list
-void freeNotes(t_note_event *currentEvent)
-{
-	t_note_event *prev;
-	t_note_event *next;
-
-	// go to the first element of the list
-	while(currentEvent->previous)
-		currentEvent = currentEvent->previous;
-
-	// now free each element
-	next=currentEvent->next;
-	do
-	{
-		prev = currentEvent;
-		next = currentEvent->next;
-		free(currentEvent);
-	} while(next);
-
-}
-
-
-// ------------- function for string manipulation (from string to chords)
-
-// tries to find out absolute tones names in this string
-abs_note_t from_string_to_abs_tone(const char *substr)
-{
-	if (strstr(substr, "C"))
-		return C;
-	if (strstr(substr, "Db"))
-		return Db;
-	if (strstr(substr, "D"))
-		return D;
-	if (strstr(substr, "Eb"))
-		return Eb;
-	if (strstr(substr, "E"))
-		return E;
-	if (strstr(substr, "F"))
-		return F;
-	if (strstr(substr, "Gb"))
-		return Gb;
-	if (strstr(substr, "G"))
-		return G;
-	if (strstr(substr, "Ab"))
-		return Ab;
-	if (strstr(substr, "A"))
-		return A;
-	if (strstr(substr, "Bb"))
-		return Bb;
-	if (strstr(substr, "B"))
-		return B;
-	return C;
-}
-/*
-chord_type_t from_string_to_type(const char *substr)
-{
-	if (strstr(substr, "minor/major 7th"))
-		return kMinMaj7;
-	if (strstr(substr, "major 7th"))
-		return kMaj7;
-	if (strstr(substr, "major"))
-		return kMaj;
-	if (strstr(substr, "minor 7th"))
-		return kMin7;
-	if (strstr(substr, "minor"))
-		return kMin;
-	if (strstr(substr, "half diminished 7th"))
-		return kHalfDim7;
-	if (strstr(substr, "diminished 7th"))
-		return kDim7;
-	if (strstr(substr, "diminished"))
-		return kDim;
-	if (strstr(substr, "augmented"))
-		return kAug;
-	if (strstr(substr, "dominant 7th"))
-		return kDom7;
-	// pland adding chords 30.11.05
-	if (strstr(substr, "dominant b9"))
-		return kDomb9;
-	if (strstr(substr, "major 9th"))
-		return kMaj9;
-	if (strstr(substr, "dominant 9th"))
-		return kDom9;
-	if (strstr(substr, "minor 9th"))
-		return kMin9;
-	if (strstr(substr, "half diminished 9th"))
-		return kHalfDim9;
-	if (strstr(substr, "minor major 9th"))
-		return kMinMaj9;
-	if (strstr(substr, "diminished major 9th"))
-		return kDimMaj9;
-	// TODO: other chords
-	// beware when adding new chords
-	// put shorter names at end of this function!
-	return C;
-}
-*/
-// find the tonality mode in this string
-modes_t from_string_to_mode(const char *substr)
-{
-	if (strstr(substr, "major"))
-		return MAJOR;
-	if (strstr(substr, "minor"))
-		return MINOR;
-
-	// TODO: other modes (doric, misolidian , custom, etc..
-	return C;
-}
-
-// tries to find out absolute tones names in this string
-abs_note_t string2note(const char *substr)
-{
-	if (strstr(substr, "C"))
-		return C;
-	if (strstr(substr, "Db"))
-		return Db;
-	if (strstr(substr, "D"))
-		return D;
-	if (strstr(substr, "Eb"))
-		return Eb;
-	if (strstr(substr, "E"))
-		return E;
-	if (strstr(substr, "F"))
-		return F;
-	if (strstr(substr, "Gb"))
-		return Gb;
-	if (strstr(substr, "G"))
-		return G;
-	if (strstr(substr, "Ab"))
-		return Ab;
-	if (strstr(substr, "A"))
-		return A;
-	if (strstr(substr, "Bb"))
-		return Bb;
-	if (strstr(substr, "B"))
-		return B;
-	return C;
-}
-
-chord_type_t string2mode(const char *substr)
-{
-	// beware when adding new chords
-	// put shorter names at end of this function!
-	if (strstr(substr, "unison"))
-		return kUnison;
-	if (strstr(substr, "major 7 b9 13"))
-		return kM7b913;
-	if (strstr(substr, "major 7th #13"))
-		return kMaj7s13;
-	if (strstr(substr, "major 7 b9 #13"))
-		return kM7b9s13;
-	if (strstr(substr, "dominant 7th b13"))
-		return kDom7b13;
-	if (strstr(substr, "major 7th #5"))
-		return kMaj7s5;
-	if (strstr(substr, "major 7th b5"))
-		return kMaj7b5;
-	if (strstr(substr, "dominant 7th #5"))
-		return kDom7s5;
-	if (strstr(substr, "dominant 7th b5"))
-		return kDom7b5;
-	if (strstr(substr, "half diminished 9th"))
-		return kHalfDim9;
-	if (strstr(substr, "minor major 9th"))
-		return kMinMaj9;
-	if (strstr(substr, "diminished major 9th"))
-		return kDimMaj9;
-	if (strstr(substr, "major 9th b5"))
-		return kMaj9b5;
-	if (strstr(substr, "dominant 9th b5"))
-		return kDom9b5;
-	if (strstr(substr, "dominant 9th b13"))
-		return kDom9b13;
-	if (strstr(substr, "minor 9th #11"))
-		return kMin9s11;
-	if (strstr(substr, "minor/maj 9th b11"))
-		return kmM9b11;
-	if (strstr(substr, "major 7th b9"))
-		return kMaj7b9;
-	if (strstr(substr, "major 7th #5 b9"))
-		return kMaj7s5b9;
-	if (strstr(substr, "dominant 7th b9"))
-		return kDom7b9;
-	if (strstr(substr, "minor 7th b9"))
-		return kMin7b9;
-	if (strstr(substr, "minor b9 #11"))
-		return kMinb9s11;
-	if (strstr(substr, "half diminished b9"))
-		return kHalfDimb9;
-	if (strstr(substr, "diminished b9"))
-		return kDim7b9;
-	if (strstr(substr, "minor/major b9"))
-		return kMinMajb9;
-	if (strstr(substr, "diminished M7 b9"))
-		return kDimMajb9;
-	if (strstr(substr, "major 7th #9"))
-		return kMaj7s9;
-	if (strstr(substr, "dominant #9"))
-		return kDom7s9;
-	if (strstr(substr, "major 7th #11"))
-		return kMaj7s11;
-	if (strstr(substr, "major 9th #13"))
-		return kMaj9s13;
-	if (strstr(substr, "major #9 #11"))
-		return kMs9s11;
-	if (strstr(substr, "half diminished b11"))
-		return kHDimb11;
-	if (strstr(substr, "major 11th"))
-		return kMaj11;
-	if (strstr(substr, "dominant 11th"))
-		return kDom11;
-	if (strstr(substr, "minor 11th"))
-		return kMin11;
-	if (strstr(substr, "half diminished 11th"))
-		return kHalfDim11;
-	if (strstr(substr, "diminished 11th"))
-		return kDim11;
-	if (strstr(substr, "minor/major 11th"))
-		return kMinMaj11;
-	if (strstr(substr, "diminished maj 11th"))
-		return kDimMaj11;
-	if (strstr(substr, "major 11th b5"))
-		return kMaj11b5;
-	if (strstr(substr, "major 11th #5"))
-		return kMaj11s5;
-	if (strstr(substr, "major 11th b9"))
-		return kMaj11b9;
-	if (strstr(substr, "major 11th #9"))
-		return kMaj11s9;
-	if (strstr(substr, "major 11th b13"))
-		return kMaj11b13;
-	if (strstr(substr, "major 11th #13"))
-		return kMaj11s13;
-	if (strstr(substr, "major 11th b5 b9"))
-		return kM11b5b9;
-	if (strstr(substr, "dominant 11th b5"))
-		return kDom11b5;
-	if (strstr(substr, "dominant 11th b9"))
-		return kDom11b9;
-	if (strstr(substr, "dominant 11th #9"))
-		return kDom11s9;
-	if (strstr(substr, "half dim 11th b9"))
-		return kHalfDim11b9;
-	if (strstr(substr, "dominant #11"))
-		return kDom7s11;
-	if (strstr(substr, "minor 7th #11"))
-		return kMin7s11;
-	if (strstr(substr, "dominant 13th #11"))
-		return kDom13s11;
-	if (strstr(substr, "chromatic"))
-		return kChrom;
-	if (strstr(substr, "dominant b9"))
-		return kDomb9;
-	if (strstr(substr, "major 9th"))
-		return kMaj9;
-	if (strstr(substr, "dominant 9th"))
-		return kDom9;
-	if (strstr(substr, "minor 9th"))
-		return kMin9;
-	if (strstr(substr, "minor/major 7th"))
-		return kMinMaj7;
-	if (strstr(substr, "major 7th"))
-		return kMaj7;
-	if (strstr(substr, "half diminished 7th"))
-		return kHalfDim7;
-	if (strstr(substr, "diminished 7th"))
-		return kDim7;
-	if (strstr(substr, "major"))
-		return kMaj;
-	if (strstr(substr, "minor 7th"))
-		return kMin7;
-	if (strstr(substr, "minor"))
-		return kMin;
-	if (strstr(substr, "diminished"))
-		return kDim;
-	if (strstr(substr, "augmented"))
-		return kAug;
-	if (strstr(substr, "dominant 7th"))
-		return kDom7;
-
-	return kUnison;
-}
-
diff --git a/externals/frankenstein/common.h b/externals/frankenstein/common.h
deleted file mode 100644
index 53baa34197bbc544ba7f7f2c979af9ee91615ac2..0000000000000000000000000000000000000000
--- a/externals/frankenstein/common.h
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
-
-header file for common functions used by the externals of the "frank framework".
-
-the frank framework is a set of pd externals implementing AI agents for improvisation.
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-*/
-
-// here i put common data structures and functions
-
-// ------------------------------------------------ data structures
-
-
-// --------- theme notation
-
-
-typedef struct t_note t_note;
-typedef struct t_duration t_duration;
-typedef struct t_note_event t_note_event;
-
-typedef struct t_note
-{
-	unsigned short int chord; // 0 if is not a chord (strong) note, 1 if it is
-	unsigned short int diatonic; // 0 if is a note not belonging to this tonality
-	int interval; // semitones from prefious note
-};
-typedef struct t_duration
-{
-	unsigned short int numerator; // like in music notation: in a 1/4 note the numerator is 1
-	unsigned short int denominator; // like in music notation: in a 1/4 note the denominator is 4
-};
-struct t_note_event
-{
-	unsigned short int voice;
-	t_note note;
-	t_duration start; // moment of the noteon event
-	t_duration duration; // duration of this event
-	t_note_event *previous; // this is a list, link to the previous element
-	t_note_event *next;  // this is a list, link to the next element
-};
-
-
-// --------- rhythm notation
-
-// data structures
-
-// this describes a rhythm
-typedef struct t_rhythm_event t_rhythm_event;
-struct t_rhythm_event
-{
-	unsigned short int voice;
-	t_duration start; // moment of the noteon event
-	t_duration duration; // duration of this event
-	t_rhythm_event *previous; // this is a list, link to the previous element
-	t_rhythm_event *next;  // this is a list, link to the next element
-};
-
-// rhythms memory graph
-
-// list implementation
-// this implements a graph that stores the memory of the current rhythm sub-elements
-// list of links
-// the actual implementation will be an array of nodes, each node 
-
-// this describes a probability transition table
-typedef struct t_rhythm_memory_arc t_rhythm_memory_arc;
-typedef struct t_rhythm_memory_node t_rhythm_memory_node;
-// graph node
-struct t_rhythm_memory_node
-{
-	// start is implicit:
-	// this is in an array
-	// use int2duration and duration2int 
-	// against the index in the array to get its value
-	unsigned short int first; // how many times this has been the first event
-	unsigned short int weight; // how many times this has been an event
-	t_rhythm_memory_arc *arcs; // the list of arcs to other nodes
-} ;
-// graph arc: related to t_rhythm_memory_node
-struct t_rhythm_memory_arc
-{
-	unsigned short int to_node_index; // the target of this link (arc)
-	t_rhythm_memory_arc *next_arc; // next link in the list
-} ;
-// it will be arranged in a heap list.. ?
-
-//#define num_possible_denominators 11
-//static unsigned short int possible_denominators[] = {1,2,3,4,6,8,12,16,18,24,32};
-#define num_possible_denominators 7
-static unsigned short int possible_denominators[] = {1,2,3,4,6,8,12};
-
-// the minimum percentage for a beat to be considered part of the main rhythm
-#define min_to_be_main_rhythm_beat 0.7
-// minimum value to be considered a subrhythm of this rhythm
-#define min_to_be_same_rhythm 0.7
-// minimum percentage to be considered this exact rhythm
-#define min_to_be_same_subrhythm 0.9
-
-// this defines a space for rhythms, variations, transitions and representations
-typedef struct t_rhythm_memory_representation t_rhythm_memory_representation;
-typedef struct t_rhythm_memory_element t_rhythm_memory_element;
-typedef struct t_rhythm_memory_first_node t_rhythm_memory_first_node;
-// element of a list of rhythms
-struct t_rhythm_memory_element
-{
-	t_rhythm_event *rhythm; // this rhythm
-	t_rhythm_memory_element *next; // next element of the list
-	unsigned short int id; // its sub id
-} ;
-// a rhythm in memory, each rhythm is :
-// - its probability transition table
-// - similar rhythms played
-// - each one has its main id and each different played rhythm its sub-id
-struct t_rhythm_memory_representation
-{
-	t_rhythm_memory_node *transitions;
-	unsigned short int max_weight;
-	t_rhythm_memory_element *rhythms;
-	unsigned short int id; // its main id
-	unsigned short int last_sub_id; // last sub assigned
-	// I can express a list of representations with this data structure
-	t_rhythm_memory_representation *next;
-} ;
-
-// define a return value to express "rhythm not found in this representation"
-#define INVALID_RHYTHM 65535
-
-// chords data structure
-// tells you how many durations there // how can a chord be?
-#define TYPES_NUM 69 // keep me updated
-typedef enum {
-	// this enumerator is from maxlib chord 
- kUnison = 0,
-kMaj = 1, 
-kMin = 2, 
-kDim = 3, 
-kAug = 4, 
-kMaj7 = 5, 
-kDom7 = 6, 
-kMin7 = 7, 
-kHalfDim7 = 8, 
-kDim7 = 9, 
-kMinMaj7 = 10, 
-kMaj7s5 = 11,
-kMaj7b5 = 12,
-kDom7s5 = 13,
-kDom7b5 = 14,
-kDomb9 = 15, 
-kMaj9 = 16,
-kDom9 = 17,
-kMin9 = 18,
-kHalfDim9 = 19,
-kMinMaj9 = 20,
-kDimMaj9 = 21,
-kMaj9b5 = 22,
-kDom9b5 = 23,
-kDom9b13 = 24,
-kMin9s11 = 25,
-kmM9b11 = 26,
-kMaj7b9 = 27,
-kMaj7s5b9 = 28,
-kDom7b9 = 29,
-kMin7b9 = 30,
-kMinb9s11 = 31,
-kHalfDimb9 = 32,
-kDim7b9 = 33,
-kMinMajb9 = 34, 
-kDimMajb9 =35,
-kMaj7s9 = 36,
-kDom7s9 = 37,
-kMaj7s11 = 38,
-kMs9s11 = 39,
-kHDimb11 = 40,
-kMaj11 = 41,
-kDom11 = 42,
-kMin11 = 43,
-kHalfDim11 = 44,  
-kDim11 = 45,
-kMinMaj11 =46, 
-kDimMaj11 =47,
-kMaj11b5 = 48,
-kMaj11s5 = 49,
-kMaj11b9 = 50,
-kMaj11s9 = 51,
-kMaj11b13 = 52,
-kMaj11s13 = 53,
-kM11b5b9 = 54,
-kDom11b5 = 55,
-kDom11b9 = 56,
-kDom11s9 = 57,
-kHalfDim11b9 = 58,
-kDom7s11 = 59,
-kMin7s11 = 60,
-kDom13s11 = 61,
-kM7b913 = 62,
-kMaj7s13 = 63,
-kMaj9s13 = 64,
-kM7b9s13 = 65,
-kDom7b13 = 66,
-kChrom = 67,
-kNone = 68
-			} chord_type_t;
-
-// how many tones do we have in our octave?
-#define TONES_NUM 12 // keep me updated
-typedef enum {
-			I=0,
-			Id=1,
-			II=2,
-			IId=3,
-			III=4,
-			IV=5,
-			IVd=6,
-			V=7,
-			Vd=8,
-			VI=9,
-			VId=10,
-			VII=11			
-			} chord_tone_t;
-
-// how many nodes does this graph have?
-// for now TYPES_NUM*TONES_NUM
-// when we introduce modulation
-// we'll have more
-#define NODES_NUM TYPES_NUM*TONES_NUM
-
-// this defines a chord in a tonality
-typedef struct _chord
-{
-	chord_type_t mode;
-	chord_tone_t note;
-} chord_t;
-
-// enumeration of absolute notes 
-// i'll need this when parsing strings like "C major"
-typedef enum {
-			C=0,
-			Db=1,
-			D=2,
-			Eb=3,
-			E=4,
-			F=5,
-			Gb=6,
-			G=7,
-			Ab=8,
-			A=9,
-			Bb=10,
-			B=11			
-			} abs_note_t;
-
-// enumeration of modes
-// i'll start with minor and major only
-// but we could add phrigian, doric, misolidian ,e tc...
-#define MODES_NUM 2
-typedef enum {
-		MAJOR=0,
-		MINOR=1	} modes_t;
-
-#define MODULATIONS_NUM MODES_NUM*TONES_NUM
-
-
-
-// ------------------------------------------------ functions
-
-// ----------- rhythm manipolation functions
-
-// converts from integer to duration: used to know this table index
-// what corresponds in terms of duration
-t_duration int2duration(int n);
-// converts from duration to integer: used to know this duration
-// what corresponds in terms table index
-unsigned short int duration2int(t_duration dur);
-
-int possible_durations();
-
-// converts from float (0-1) to duration. it performs quantization
-t_duration float2duration(float fduration);
-
-// converts from numerator/denominator to a float (0-1)
-float duration2float(t_duration duration);
-
-// --- rhythms creation and manupulation functions
-
-// set the first beat of a sequence
-// this also creates a new rhythm
-void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float fstart, float fduration);
-
-//adds a beat at the end of this list
-void concatenateBeat(t_rhythm_event *currentEvent, unsigned short int voice, float fstart, float fduration);
-
-// used to free the memory allocated by this list
-void freeBeats(t_rhythm_event *currentEvent);
-
-
-// --- memory representation of rhythms
-
-// create an array of nodes (without arcs?) to express the beats in this rhythm (the noteon moments)
-void create_array_beats(unsigned short int **this_array, t_rhythm_event *currentEvent);
-
-// add an arc to this node
-void add_t_rhythm_memory_arc(t_rhythm_memory_node *srcNode, unsigned short int dstNode);
-
-// create and initialize this representation, allocate memory for the pointers
-// I must pass its id also
-void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep, unsigned short int id);
-
-// add a new rhythm in the list of similar rhythms related to one main rhythm
-// the sub id is auto-generated and returned
-unsigned short int add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm);
-
-// free the list of representations
-void free_memory_representations(t_rhythm_memory_representation *this_rep);
-
-// compares this rhythm to this representation
-// and tells you how close it is to it
-// I return values using pointers
-// the unsigned short and the 2 floats should be already allocated
-void compare_rhythm_vs_representation(t_rhythm_memory_representation *this_rep, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 );
-
-// same as before but search all available representations
-void find_rhythm_in_memory(t_rhythm_memory_representation *rep_list, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *id, // the id of the closest rhythm
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 );
-
-// the following are the functions that externals should use
-/* usage:
-
-	// first of all declare a pointer for the memory
-	t_rhythm_memory_representation *rhythms_memory;
-	// initialize it
-	rhythm_memory_create(&this_rep);
-	// then each time you get a rhythm let the memory evaluate it and
-	// tell you if is a new rhythm or a old one
-	float root_closeness, sub_closeness;
-	unsigned short int id, subid, is_it_a_new_rhythm;
-	rhythm_memory_evaluate(rhythms_memory, rhythm, &is_it_a_new_rhythm,
-							&id, &subid, &root_closeness, &sub_closeness);
-	if (is_it_a_new_rhythm==1)
-	{
-		// it was a completely new rhythm
-		// id tells us new id assigned
-		// and subid tells us the new sub id assigned
-	}
-	if (is_it_a_new_rhythm==2)
-	{
-		// it was a new sub-rhythm of a known rhythm
-		// id tells us rht root rhythm id
-		// and subid tells us the new sub id assigned
-	}
-	if (is_it_a_new_rhythm==0)
-	{
-		// it was a known rhythm and subrhythm
-		// id and subid tell us the identificator
-	}
-	// i can also use root_closeness and sub_closeness and is_it_a_new_rhythm
-	// to know how much novelty there was in this rhythm
-
-	// i can ask the memory to give me back a specific rhythm
-	t_rhythm_event *wanted_rhythm
-	int rhythm_found = rhythm_memory_get_rhythm(rhythms_memory,
-							  wanted_rhythm,
-							  id, // the id of the main rhythm wanted
-							  sub_id // the sub-id of the sub-rhythm wanted
-							  );
-	if (rhythm_found == 0)
-	{
-		// that rhythm was not present!
-	}
-
-	// when i am ready I should free the memory
-	rhythm_memory_free(rhythms_memory);
-*/
-
-
-// create a new memory for rhythms
-void rhythm_memory_create(t_rhythm_memory_representation **this_rep);
-// free the space 
-void rhythm_memory_free(t_rhythm_memory_representation *rep_list);
-// evaluate this rhythm and add it to the memory if is new
-void rhythm_memory_evaluate(t_rhythm_memory_representation *rep_list, // the memory
-							t_rhythm_event *src_rhythm, // the rhythm to evaluate
-							// is it a new rhythm? (0 if no, 1 if new main rhythm, 2 if new subrhythm)
-							unsigned short int *new_rhythm,
-							// the id of the closest rhythm or the new id assigned
-							unsigned short int *id, 
-							// the sub-id of the closest sub-rhythm or the new sub-id assigned
-							unsigned short int *sub_id,
-							// how much this rhythm is close to the root (1=identical, 0=nothing common)
-							float *root_closeness,
-							// how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-							float *sub_closeness 
-							);
-// return 0 if failed finding the rhythm, 1 if the rhythm was found
-int rhythm_memory_get_rhythm(t_rhythm_memory_representation *rep_list, // the memory
-							  t_rhythm_event **out_rhythm, // a pointer to the returned rhythm
-							  // the id of the main rhythm wanted
-							  unsigned short int id, 
-							  // the sub-id of the sub-rhythm wanted
-							  unsigned short int sub_id);
-
-// -------- notes manipulation functions
-
-// set the first beat of a sequence
-void setFirstNote(t_note_event **firstEvent, unsigned short int voice, float fstart, float fduration, t_note note);
-
-//adds a beat at the end of this list
-void concatenateNote(t_note_event *currentEvent, unsigned short int voice, float fstart, float fduration, t_note note);
-
-// used to free the memory allocated by this list
-void freeNotes(t_note_event *currentEvent);
-
-
-
-
-// ------------- function for string manipulation (from string to chords)
-
-// tries to find out absolute tones names in this string
-abs_note_t from_string_to_abs_tone(const char *substr);
-chord_type_t from_string_to_type(const char *substr);
-modes_t from_string_to_mode(const char *substr);
-chord_type_t string2mode(const char *substr);
-abs_note_t string2note(const char *substr);
diff --git a/externals/frankenstein/doc/LINKS.txt b/externals/frankenstein/doc/LINKS.txt
deleted file mode 100644
index d8685c5317b718a5342d12ee99ed8d909c719b4b..0000000000000000000000000000000000000000
--- a/externals/frankenstein/doc/LINKS.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-open source libs ready to be used...
-
-AthenaCL:
-is a python software for algorithmic composition
-we could use some code through pyext
-http://www.flexatone.net/athena.html
-this is specific for post tonal theory
-http://www.flexatone.net/athenaDocs/www/ch-analysis.htm
-
-AIMA Python code, working agents, etc.
-http://aima.cs.berkeley.edu/python/readme.html
-
-BEAGLE, implements co-evolution, open source, C++
-beagle.gel.ulaval.ca
-
-open source c++ genetic algorithm: 
-http://lancet.mit.edu/ga/
-
-plain ansi C (multi platform?):
-http://sourceforge.net/projects/ga-lib
-
-another in c++:
-http://sourceforge.net/projects/ga2
-
-
diff --git a/externals/frankenstein/doc/README.txt b/externals/frankenstein/doc/README.txt
deleted file mode 100644
index 524dfc19177bc15da9464706bec9e38479818b7e..0000000000000000000000000000000000000000
--- a/externals/frankenstein/doc/README.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-***README***
-
-Vatic, davide, please add notes and thoughts here for now...
-
-****Ruby/Gridflow instructions***
-
-In order to use some of the objects in the test patches, for now just [random_choice] within [manager] in the chord_melo_test patches, you will need GridFlow and Ruby installed.
-
-Please find instructions here:
-
-http://gridflow.ca/latest/doc/install.html
-
-Once you have Ruby 1.8.0 or above installed, and GridFlow is happily starting in Puredata, you should see the following at PD startup:
-
-setting up Ruby-for-PureData...
-we are using Ruby version 1.8.1
-[gf] This is GridFlow 0.8.1 within Ruby version 1.8.1
-
-Or, something similar.
-
-Now, you will need to copy ruby/.gridflow_startup to your home directory. If it is somewhere else than /home/you/ or /Users/you, you can always load it from pd by using the Ruby console input (see pd's console window, and under IN - OUT), by doing:
-
-load "/path/to/.gridflow_startup
-
-You're now able to write puredata objects in Ruby!
-
-
diff --git a/externals/frankenstein/doc/chords_graph.doc b/externals/frankenstein/doc/chords_graph.doc
deleted file mode 100755
index e8390c2803851ad7d11fef9c262a87072c6dd055..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/doc/chords_graph.doc and /dev/null differ
diff --git a/externals/frankenstein/doc/chords_graph.sxw b/externals/frankenstein/doc/chords_graph.sxw
deleted file mode 100755
index 9f901ec9193e401c1f5dfe9bb0a9c16c2dc7332f..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/doc/chords_graph.sxw and /dev/null differ
diff --git a/externals/frankenstein/doc/genomes-notes.txt b/externals/frankenstein/doc/genomes-notes.txt
deleted file mode 100644
index e39e524344528ac51100efca9d6753b043a097fb..0000000000000000000000000000000000000000
--- a/externals/frankenstein/doc/genomes-notes.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-
-***read README.txt before this file***
-
-this ideas are related to shostakovich prelude n.2 in a minor
-
-
-how do we map notes <--> genome ?
-
-
-
---------------- 1st idea: whole MIDI, absolute values
-
-keep all the chromatic values, all midi notes
-
-the fitness functions and crossover functions will manage the thing
-(no notes outside current chord, etc..)
-
-each gene is a byte, 
-- first 7 bits for midi note (unsigned char, 0-127)
-- last bit for rest (1=play, 0=rest)
-
-why yes: 
--not restricted to prelude n.2 musical space
--not restricted to tonal music space
-
-why not:
--huge transition table, intervals table
--we don't want values we don't need
--difficult to write fitness functions that check for tonality, chords, etc..
-
----------------- 2nd idea: chromatic scale, chord relative
-
-notes are relative to current chord but still in a chromatic space.
-the critics must choose the diatonic ones and discard atonal ones
-
-each gene is a byte, 
-- first 7 bits for midi note (unsigned char, 0-127)
-- last bit for rest (1=play, 0=rest)
-
-
-why yes:
--we can use the same melody to different chords
--not restricted to prelude n.2 musical space
--not restricted to tonal music space
-
-why not:
--still huge tables
--difficult to write fitness functions that check for tonality, chords, etc..
-
----------------- 3rd idea: diatonic scale, chord relative
-
-the musical space is diatonic, no more chromatic. critics need to work much less, 
-they only have to know if a note is in the chord or not.
-
-problem: how to use chromatic passing notes this way?
-
-possibile notes are 7*4=28 (7 notes per octave) + passing notes
-we could use : 1 byte for each gene
-- 5 bits for note (0-32)
-- 2 bit for cromatic passing note (0=no, 1=descending, 2=ascending, 4=not used)
-- 1 bit for rests
-
-
-why yes:
--we can use the same melody to different chords
--quick fitness functions
--we don't have notes we don't want
-
-why not:
--restricted to tonal music space
-
----------------- 4th idea: chord notes
-
-
-the musical space are the chord notes, not even the diatonic scale. 
-critics don't have to check anything! 
-
-problem: how to use (chromatic or diatonic) passing notes?
-
-possibile notes are 3*4=12 (3 notes per octave) + passing notes
-we should use a struct for the gene:
-{
-	- note (from 0 to 16)
-	- rest (0/1)
-	- passing_note (from -4 to +4)
-}
-
-possible passing notes are 9: 
-no passing, from -4 semitones to +4 semitones
-
-the fitness functions and crossover functions will have to care sbout rules for passing notes:
-+3 and +4 are allowed only for the 3rd note of the chord
--4 and -3 are allowed only for the 1st note of the chord
-every passing note can exist only if the note before was next to it and proceeding in the same direction
-each passing note must resolve on the nearer chord note in the right direction
-
-why yes:
--we can use the same melody to different chords
--quickest fitness functions
--we don't have notes we don't want
-
-why not:
--restricted to tonal music space
--restricted to 3-notes-chords-based harmonies (jazz is 4 notes based)
-
-
-
-
-
-common problems:
-
-i can think a way to rule passing notes (a passing note must come from a consonant note and go to a consonant note)
-but what can we do if a passing not is at the very end of the melody? (i don't know what will the next note be)
-...we should have to know what will be the next chord...
-
-
-
-
-
-
-
-
-
-Davide Morelli
-17.09.05
diff --git a/externals/frankenstein/doc/maxlibnotes.txt b/externals/frankenstein/doc/maxlibnotes.txt
deleted file mode 100644
index 532ddf9740af7a3eda62017bae67b6dbb6af6af9..0000000000000000000000000000000000000000
--- a/externals/frankenstein/doc/maxlibnotes.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-081005
-
--the most universally useful maxlib object has to be [borax], since it not only gives us velocity, pitch, duration, but also can detect the number of voices currently playing, various delta values, can count note-ons (incrementally), amongst other things. It's like a swiss army knife of music analysis, and I suspect this is where our live input (in davide's diagram) needs to make use of maxlib in order to derive what we will feed the chord extractor, then graph. 
-
--[gestalt] is for monophonic melodies only, but with [tilt], will detect the onset of melodies
-
--[chord] is based on Robert Rowe's Machine Musicianship algorithms for chord detection, and will successfully detect most chords, but most importantly will give us the MIDI note number of the bass note, and its -class-.
-
--[history] is interesting, because while it calculates the average value fed into its first inlet over N millisecond periods, it can also tell us the general tendency (up = 1, down = -1), which may be useful somewhere in the agent, to build more musical output. Also, [edge] is interesting because it detects falling and rising 'edges' in a sequence.
-
--[iso] is interesting, because it can store and play sequences of MIDI notes -and- onsets in milliseconds, but of course we're once again talking about monophonic melodies, unless we run several in parallel somehow, but they'd have to 'know' about each other.
-
--interestingly, [subst] performs what I see as the bit-shifting part of our current GA construction, and may actually help in understanding how we'd build a solderer agent.
-
--[match] could be useful, because it matches incoming data against up to 16 creation arguments, and outputs a list; this might help in determining how closely the live player is playing against generated output or suggestions? just a thought.
-
diff --git a/externals/frankenstein/doc/model.doc b/externals/frankenstein/doc/model.doc
deleted file mode 100755
index af2fcc23911065b48d77d7216d6449d9c7516336..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/doc/model.doc and /dev/null differ
diff --git a/externals/frankenstein/doc/model.sxw b/externals/frankenstein/doc/model.sxw
deleted file mode 100755
index b3b446feee935688e1bb0f32a5060ddf8e9d35de..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/doc/model.sxw and /dev/null differ
diff --git a/externals/frankenstein/frankenstein.sln b/externals/frankenstein/frankenstein.sln
deleted file mode 100755
index 0542fd83b4e065aad8558024120f6b9efe1246bf..0000000000000000000000000000000000000000
--- a/externals/frankenstein/frankenstein.sln
+++ /dev/null
@@ -1,45 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chords_memory", "chords_memory.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rhythms_memory", "rhythms_memory.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "themes_memory", "themes_memory.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "harmonizer", "harmonizer.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "voicing_analyzer", "voicing_analyzer.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Global
-	GlobalSection(SolutionConfiguration) = preSolution
-		ConfigName.0 = Debug
-		ConfigName.1 = Release
-	EndGlobalSection
-	GlobalSection(ProjectDependencies) = postSolution
-	EndGlobalSection
-	GlobalSection(ProjectConfiguration) = postSolution
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-	EndGlobalSection
-	GlobalSection(ExtensibilityAddIns) = postSolution
-	EndGlobalSection
-EndGlobal
diff --git a/externals/frankenstein/harmonizer.c b/externals/frankenstein/harmonizer.c
deleted file mode 100644
index 56180f92b14264bc49d89c31faf6d460aec00dc4..0000000000000000000000000000000000000000
--- a/externals/frankenstein/harmonizer.c
+++ /dev/null
@@ -1,823 +0,0 @@
-/* 
-harmonizer:
-this external build voicing from a chord to another.
-takes n voices (midi) as input
-you can set the current chord
-you can ask for next note of each voice to get to a target chord
-
-usefull to create chorals
-
-voicing is built using traditional GA (not co-evolving GA)
-
-voicing rules are hardcoded and are:
-- no parallel 8ths nor 5ths
-- better no hidden 8ths nor 5ths
-- better if uniform voice spacing (except for the bass)
-- better if little intervals
-- no all voices same direction
-- no voices outside limits
-- better complete chords
-
-TODO:
-would be nice to be able so set some rule at runtime 
-or at least set the importance of rules in realtime..
-
-
-*/
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-// for string manipulation
-#include <string.h>
-#include <ctype.h>
-#include "m_pd.h"
-#include "common.h"
-
-// to sort arrays
-#include "sglib.h"
-
-#define MAX_POPULATION 500
-
-#define DEF_PROB_MUTATION 0.03f
-
-#define VOICES 5
-
-#define NOTES_RANGE 80 // this should be multiple of 16
-#define LOWER_POSSIBLE_NOTE 24 // lower note possible, it should be a C
-#define POSSIBLE_NOTES (NOTES_RANGE/12*5) // 5 is the max number of notes in a chord
-
-// default values 
-#define DEF_WIDENESS 3 // 3 octaves
-#define DEF_CENTER_NOTE 72 // central C
-// testing i noticed that we don't need more than 1 generation..
-// this is because we create an initial population that is really good
-// we may not need to crossover at all!
-#define GENERATIONS 1
-
-#define DEBUG 0 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-static t_class *harmonizer_class;
-
-
-
-// this defines a chord in a tonality
-typedef struct _chord_abs
-{
-	chord_type_t mode;
-	abs_note_t note;
-} chord_abs_t;
-
-
-typedef struct _harmonizer
-{
-    t_object x_obj; // myself
-	// genotypes
-	//int population[MAX_POPULATION][VOICES];
-	//int current_voices[VOICES];
-	int *population[MAX_POPULATION];
-	int *current_voices;
-	chord_abs_t current_chord;
-	chord_abs_t target_chord;
-	int target_notes[POSSIBLE_NOTES];
-	t_outlet *l_out;
-	int voices;
-	float wideness;
-	int center_note;
-	float i_like_parallelism;
-	float small_intervals;
-	//TODO
-//	int lower_octave;
-//	int notes_range;
-	
-} t_harmonizer;
-
-// I build a table of possible notes
-// are the notes (midi)that form target_chord
-void build_possible_notes_table(t_harmonizer *x)
-{
-	int i, octave, basenote;
-	int n1, n2, n3, n4, n5;
-	n1=n2=n3=n4=0; // there always is the fundamental
-	if (DEBUG_VERBOSE)
-		post("build_possible_notes_table target_chord.mode=%i target_chord.note=%i", x->target_chord.mode, x->target_chord.note);
-	switch (x->target_chord.mode)
-	{
-		case kMaj:		n2=4; n3=7; n4=0;n5=0;break;
-		case kMin:		n2=3; n3=7; n4=0;n5=0;break;
-		case kDim:		n2=3; n3=6; n4=0;n5=0;break;
-		case kAug:		n2=4; n3=8; n4=0;n5=0;break;
-		case kMaj7:		n2=4; n3=7; n4=11;n5=0;break;
-		case kDom7:		n2=4; n3=7; n4=10;n5=0;break;
-		case kMin7: 	n2=3; n3=7; n4=10;n5=0;break;
-		case kHalfDim7:	n2=3; n3=6; n4=10;n5=0;break;
-		case kDim7:		n2=3; n3=6; n4=9;n5=0;break;
-		case kMinMaj7:	n2=4; n3=7; n4=11;n5=0;break;
-
-		case kMaj7b9:	n2=4; n3=7; n4=11;n5=1;break;
-		case kMaj9:		n2=4; n3=7; n4=11;n5=2;break;
-		//case kMinMaj7:	n2=4; n3=7; n4=11;n5=3;break;
-		//case kMaj7:		n2=4; n3=7; n4=11;n5=4;break;
-		case kDom7s11:	n2=4; n3=7; n4=10;n5=6;break;
-		case kDomb9:	n2=4; n3=7; n4=10;n5=1;break;
-		case kMaj7s5:	n2=4; n3=8; n4=11;n5=0;break;
-		case kMin9:		n2=3; n3=7; n4=2;n5=0;break;
-
-		case kDom9:		n2=4; n3=7; n4=10;n5=2;break;
-
-		case kM7b9s13:		n2=1; n3=10; n4=11;n5=4;break;
-		case kMinMajb9:		n2=1; n3=3; n4=11;n5=7;break;
-		case kDimMajb9:		n2=3; n3=6; n4=11;n5=1;break;
-
-		case kMinMaj9:		n2=3; n3=7; n4=11;n5=2;break;
-		case kHalfDimb9:	n2=3; n3=6; n4=1;n5=10;break;
-		case kDim7b9:		n2=3; n3=6; n4=1;n5=9;break;
-		case kMaj7s9:		n2=3; n3=4; n4=7;n5=11;break;
-		case kDom7s9:		n2=3; n3=4; n4=7;n5=10;break;
-		case kMaj11:		n2=4; n3=5; n4=7;n5=11;break;
-		case kMaj7b5:		n2=4; n3=6; n4=11;n5=0;break;
-		case kMaj7s13:		n2=4; n3=7; n4=11;n5=10;break;
-
-		case kUnison:		n2=0; n3=0; n4=0;n5=0;break;
-
-
-		case kDom7b5:		n2=4; n3=6; n4=10;n5=0;break;
-
-		case kHalfDim9:		n2=3; n3=6; n4=10;n5=2;break;
-
-		case kMaj9b5:		n2=4; n3=6; n4=11;n5=2;break;
-		case kDom9b5:		n2=4; n3=6; n4=10;n5=2;break;
-		case kDom9b13:		n2=4; n3=2; n4=8;n5=10;break;
-		case kMin9s11:		n2=2; n3=3; n4=6;n5=7;break;
-		case kmM9b11:		n2=3; n3=11; n4=2;n5=4;break;
-
-		case kMaj7s5b9:		n2=2; n3=4; n4=8;n5=11;break;
-		case kDom7b9:		n2=1; n3=4; n4=7;n5=10;break;
-		case kMin7b9:		n2=1; n3=3; n4=7;n5=10;break;
-		case kMinb9s11:		n2=1; n3=3; n4=7;n5=6;break;
-
-		case kMaj7s11:		n2=4; n3=6; n4=7;n5=11;break;
-		case kMs9s11 :		n2=3; n3=4; n4=6;n5=7;break;
-		case kHDimb11 :		n2=3; n3=6; n4=10;n5=4;break;
-
-		case kDom11 :		n2=4; n3=7; n4=10;n5=5;break;
-		case kMin11 :		n2=3; n3=7; n4=5;n5=0;break;
-		case kHalfDim11 :	n2=3; n3=6; n4=10;n5=5;break;
-		case kDim11 :		n2=3; n3=6; n4=9;n5=5;break;
-		case kMinMaj11 :	n2=3; n3=7; n4=11;n5=5;break;
-		case kDimMaj11 :	n2=3; n3=6; n4=11;n5=5;break;
-		case kMaj11b5 :		n2=4; n3=6; n4=5;n5=0;break;
-		case kMaj11s5 :		n2=4; n3=5; n4=8;n5=0;break;
-		case kMaj11b9 :		n2=4; n3=5; n4=7;n5=1;break;
-		case kMaj11s9 :		n2=4; n3=5; n4=7;n5=3;break;
-		case kMaj11b13 :	n2=4; n3=5; n4=7;n5=8;break;
-		case kMaj11s13 :	n2=4; n3=5; n4=10;n5=11;break;
-		case kM11b5b9 :		n2=4; n3=6; n4=1;n5=11;break;
-		case kDom11b5 :		n2=4; n3=6; n4=10;n5=5;break;
-		case kDom11b9 :		n2=4; n3=5; n4=10;n5=1;break;
-		case kDom11s9 :		n2=4; n3=5; n4=10;n5=3;break;
-		case kHalfDim11b9 :	n2=3; n3=6; n4=5;n5=1;break;
-		case kMin7s11 :		n2=3; n3=7; n4=10;n5=6;break; // is it correct?
-		case kDom13s11 :	n2=4; n3=10; n4=6;n5=9;break; // is it correct ?
-		case kM7b913 :		n2=4; n3=10; n4=1;n5=9;break;
-		case kMaj9s13 :		n2=2; n3=4; n4=11;n5=9;break;
-		case kDom7b13 :		n2=4; n3=10; n4=9;n5=7;break;
-		case kChrom :		n2=1; n3=2; n4=3;n5=4;break;
-
-	}
-	if (DEBUG_VERBOSE)
-		post("build_possible_notes_table n2=%i n3=%i n4=%i", n2, n3, n4);
-
-	basenote=0;
-	switch (x->target_chord.note)
-	{
-		case C:		basenote=0;break;
-		case Db:	basenote=1;break;
-		case D:		basenote=2;break;
-		case Eb:	basenote=3;break;
-		case E:		basenote=4;break;
-		case F:		basenote=5;break;
-		case Gb:	basenote=6;break;
-		case G:		basenote=7;break;
-		case Ab:	basenote=8;break;
-		case A:		basenote=9;break;
-		case Bb:	basenote=10;break;
-		case B:		basenote=11;break;
-	}
-	if (DEBUG_VERBOSE)
-		post("build_possible_notes_table basenote=%i", basenote);
-	i=0;
-	octave=0;
-	while (i<(POSSIBLE_NOTES-3))
-	{
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n1;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n2;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n3;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n4;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n5;
-		octave++;
-	}
-	if (DEBUG_VERBOSE)
-	{
-		i=0;
-		while (i<(POSSIBLE_NOTES))
-		{
-			post("x->target_notes[%i]=%i", i, x->target_notes[i++]);
-		}
-	}
-}
-
-
-
-// -----------------  normal external code ...
-
-void harmonizer_init_pop(t_harmonizer *x)
-{
-	int i, j, tmp, tmp2, k, steps, note, insertpoint;
-	double rnd;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		for (j=0; j<x->voices; j++)
-		{
-			/*
-			// totally randome version
-			rnd = rand()/((double)RAND_MAX + 1);
-			tmp = rnd * POSSIBLE_NOTES;
-			x->population[i][j] = x->target_notes[tmp];
-			*/
-
-			// not totally random: i start from currend chord's notes
-			// and randomly go up or down
-			insertpoint = 0;
-			while ((insertpoint < POSSIBLE_NOTES) && (x->target_notes[insertpoint] < x->current_voices[j]))
-				insertpoint++;
-			if (insertpoint >= POSSIBLE_NOTES)
-			{ 
-				// i didn't find my insert point, possible?
-				// i pick a random one
-				rnd = rand()/((double)RAND_MAX + 1);
-				tmp = rnd * POSSIBLE_NOTES;
-				x->population[i][j] = x->target_notes[tmp];
-			} else
-			{
-				// insert point found
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < 0.5)
-				{
-					// i go up
-					rnd = rand()/((double)RAND_MAX + 1);
-					steps = rnd * 10; // how many steps (good notes) will I ignore?
-					note = insertpoint + steps;
-					if (note >= POSSIBLE_NOTES)
-						note = POSSIBLE_NOTES-1;
-					
-				} else
-				{
-					// i go down
-					rnd = rand()/((double)RAND_MAX + 1);
-					steps = rnd * 10; // how many steps (good notes) will I ignore?
-					note = insertpoint - steps;
-					if (note < 0)
-						note = 0;
-				}
-				// finally assign the note
-				x->population[i][j] = x->target_notes[note];
-			}
-		}
-	}
-}
-
-void harmonizer_allocate(t_harmonizer *x)
-{
-	int i;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		x->population[i] = malloc(sizeof(int)*x->voices);
-	}
-	x->current_voices = malloc(sizeof(int)*x->voices);
-	
-}
-
-void harmonizer_free(t_harmonizer *x)
-{
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-	
-	int i;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		free(x->population[i]);
-	}
-	free(x->current_voices);
-}
-
-// here i evaluate this voicing
-int fitness(t_harmonizer *x, int *candidate)
-{
-	int i, j, tmp, res, last, avgHI, avgLOW, min, max, distance;
-	float wideness, ftmp;
-	short int chord_notes[4];
-	short int chord_notes_ok[4];
-	//short int transitions[VOICES];
-	short int *transitions;
-	//short int directions[VOICES];
-	short int *directions;
-	// intervals between voices
-	// for parallel and hidden 5ths
-	// voices spacing etc..
-	//short int intervals[VOICES][VOICES]; 
-	short int **intervals; 
-	//short int notes[VOICES];
-	short int *notes;
-	res=50; // starting fitness
-
-	if (DEBUG_VERBOSE)
-		post("evaluating fitness of %i %i %i %i", candidate[0], candidate[1], candidate[2], candidate[3]);
-
-	// allocate arrays
-	transitions = malloc(sizeof(short int)*x->voices);
-	directions = malloc(sizeof(short int)*x->voices);
-	notes = malloc(sizeof(short int)*x->voices);
-	intervals = malloc(sizeof(short int *) * x->voices);
-	for (i=0; i<x->voices; i++)
-	{
-		intervals[i] = malloc(sizeof(short int) * x->voices);
-	}
-
- 	// shared objects
-	for (i=0; i<x->voices; i++)
-	{
-		notes[i]=candidate[i];
-		transitions[i] = candidate[i] - x->current_voices[i];
-		if (transitions[i]!=0)
-			directions[i] = transitions[i]/abs(transitions[i]);
-		else
-			directions[i] = 0;
-		if (DEBUG_VERBOSE)
-			post("directions[%i]=%i", i, directions[i]);
-
-	}
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			intervals[i][j] = (candidate[i]-candidate[j])%12 ;
-			if (DEBUG_VERBOSE)
-				post("intervals[%i][%i]=%i", i, j, intervals[i][j]);
-		}
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(short int, notes, x->voices, SGLIB_NUMERIC_COMPARATOR)
-
-	// all same direction? 
-	if ( directions[0]==directions[1] &&
-	directions[1]==directions[2] &&
-	directions[2]==directions[3])
-	{
-		res += 10 * x->i_like_parallelism;
-		if (DEBUG_VERBOSE)
-			post("same direction!");
-	}
-	
-	// parallel 5ths or octaves? (if yes return 0)
-	// how?
-	// hidden 8ths nor 5ths ?
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			if (intervals[i][j]==7 || intervals[i][j]==0)
-			{
-				// hidden or parallel 5th,octave or unison
-				// bad!
-				if (directions[i]==directions[j])
-				{
-					res += 10 * x->i_like_parallelism;
-					if (DEBUG_VERBOSE)
-						post("hidden or parallel consonance!");
-				}
-			}
-		}
-	}
-
-	// is voice spacing uniform ?(except for the bass)
-	// TODO: use notes[]
-	// are voices average centered?
-	tmp=0;
-	for (i=1; i<x->voices; i++)
-	{
-		tmp+=notes[i];
-		if (DEBUG_VERBOSE)
-			post("average note is %i at passage %i", tmp, i);
-	}
-	// this is the average note
-	tmp = tmp/(x->voices-1);
-	if (DEBUG_VERBOSE)
-		post("average note is %i after division by (x->voices-1)", tmp);
-//	tmp = abs((LOWER_POSSIBLE_NOTE + NOTES_RANGE)*2/3 - tmp); // how much average is far from 72
-	tmp = abs(x->center_note - tmp); // how much average is far from desired center note
-	res += 30; 
-	res -= tmp;
-	
-	if (DEBUG_VERBOSE)
-		post("average note is %i far from 2/3 of notes range", tmp);
-
-	tmp=0;
-	/*
-	// are voices average centered?
-	for (i=0; i<VOICES; i++)
-	{
-		tmp+=notes[i];
-	}
-	// this is the average note
-	tmp = tmp/VOICES;
-	tmp = abs(72-tmp); // how much average is far from 72
-	res += 30; 
-	res -= tmp;
-	*/
-
-	// are intervals small?
-	//res+=50;
-	if (DEBUG_VERBOSE)
-		post("res before transitions %i", res);
-	for (i=0; i<x->voices; i++)
-	{
-		if (DEBUG_VERBOSE)
-			post("transitions[%i] = %i",i, transitions[i]);
-		res-=abs(transitions[i]) * x->small_intervals;
-		// give an incentive for semitones etc..
-		if (transitions[i]==0)
-			res += 5;
-		if (abs(transitions[i]==1))
-			res += 5 * x->small_intervals;
-		if (abs(transitions[i]==2))
-			res += 5 * x->small_intervals;
-		if (abs(transitions[i]==3))
-			res += 2 * x->small_intervals;
-		if (abs(transitions[i]==4))
-			res += 2 * x->small_intervals;
-		if (abs(transitions[i]==5))
-			res += 1 * x->small_intervals;
-		if (abs(transitions[i]==6))
-			res += 1 * x->small_intervals;
-		if (abs(transitions[i]>11))
-			res -= 2 * x->small_intervals;
-		if (abs(transitions[i]>15))
-			res -= 5 * x->small_intervals;
-
-	}
-	if (DEBUG_VERBOSE)
-		post("res after transitions %i", res);
-
-	// TODO: too many near limits?
-	
-	// is a complete chord?
-	// does this voicing have all 5 notes?
-	// first build a table for comparision
-	for (i=0; i<4; i++)
-	{
-		chord_notes[i] = (x->target_notes[i]) % 12;
-		chord_notes_ok[i] = 0;
-	}
-	for (i=0; i<x->voices; i++)
-	{
-		tmp = notes[i] % 12;
-		for (j=0; j<4; j++)
-		{
-			if (chord_notes[j] == tmp)
-				chord_notes_ok[j]++;
-		}
-	}
-	// now in chord_notes_ok i have the number of times each note is present
-	if (chord_notes_ok[0] == 0)
-	{
-		// no fundamental! this is bad!!
-		res -= 10;
-	}
-	if ((chord_notes_ok[0] != 0) &&
-		(chord_notes_ok[2] != 0) &&
-		(chord_notes_ok[3] != 0) && 
-		(chord_notes_ok[4] != 0))
-	{
-		// complete chord! this is good
-		res += 10;
-	}
-	for (j=0; j<4; j++)
-	{
-		res -= 2^chord_notes_ok[j];
-	}
-	res += 2*x->voices;
-
-	// penalize too many basses
-	tmp = 0;
-	for (i=0; i<x->voices; i++)
-	{
-		if (notes[i]<48)
-			tmp++;
-	}
-	switch (tmp)
-	{
-	case 0: res -= 5; break;
-	case 1: res += 10; break;
-	case 2: res -= 10; break;
-	case 3: res -= 20; break;
-	case 4: res -= 30; break;
-	}
-
-	// now wideness	
-	min = notes[0];
-	max = notes[x->voices-1];
-	distance = max - min;
-	wideness = (float) (((float)distance) / ((float)12));
-	ftmp = fabs(wideness - x->wideness);
-	res -= ftmp * 5;
-	
-	if (DEBUG_VERBOSE)
-		post("fitness is %i", res);
-
-		// free memory
-	free(transitions);
-	free(directions); 
-	free(notes);
-	for (i=0; i<x->voices; i++)
-	{
-		free(intervals[i]);
-	}
-	free(intervals);
-
-	return res;
-}
-
-void new_genotype(t_harmonizer *x, int *mammy, int *daddy, int *kid)
-{
-	int i, split;
-	double rnd;
-	// crossover
-	rnd = rand()/((double)RAND_MAX + 1);
-	split = rnd * x->voices;
-	for (i=0; i<split; i++)
-	{
-		kid[i]=mammy[i];
-	}
-	for (i=split; i<x->voices; i++)
-	{
-		kid[i]=daddy[i];
-	}
-
-	//  mutation
-	for (i=0; i<x->voices; i++)
-	{
-		rnd = rand()/((double)RAND_MAX + 1);
-		if (rnd < DEF_PROB_MUTATION)
-		{
-			rnd = rand()/((double)RAND_MAX + 1) * POSSIBLE_NOTES;
-			kid[i]=x->target_notes[(int)rnd];
-		}
-	}
-}
-
-typedef struct fitness_list_element_t 
-{
-	int index;
-	int fitness;
-} fitness_list_element;
-
-#define FITNESS_LIST_COMPARATOR(e1, e2) (e1.fitness - e2.fitness)
-
-void generate_voicing(t_harmonizer *x)
-{
-	fitness_list_element fitness_evaluations[MAX_POPULATION];
-	int i, generation, mum, dad, winner;
-	double rnd;
-	//t_atom lista[VOICES];
-	t_atom *lista;
-	int *winner_notes;
-
-	lista = malloc(sizeof(t_atom)*x->voices);
-	winner_notes = malloc(sizeof(int)*x->voices);
-
-	// inizialize tables of notes
-	build_possible_notes_table(x);
-	// inizialize population
-	harmonizer_init_pop(x);
-	// GA code
-	for (generation=0; generation<GENERATIONS; generation++)
-	{
-		// i compute all the fitness
-		for (i=0; i<MAX_POPULATION; i++)
-		{
-			fitness_evaluations[i].index=i;
-			fitness_evaluations[i].fitness = fitness(x, x->population[i]);
-		}
-		// i sort the array
-		SGLIB_ARRAY_SINGLE_QUICK_SORT(fitness_list_element, fitness_evaluations, MAX_POPULATION, FITNESS_LIST_COMPARATOR)
-
-		// i kill half population
-		// and use the survivors to create new genotypes
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			// create a new genotype
-			// parents chosen randomly
-			rnd = rand()/((double)RAND_MAX + 1);
-			mum = MAX_POPULATION/2 + rnd*MAX_POPULATION/2;
-			rnd = rand()/((double)RAND_MAX + 1);
-			dad = MAX_POPULATION/2 + rnd*MAX_POPULATION/2;
-			new_genotype(x, x->population[mum], x->population[dad], x->population[i]);
-		}
-		// repeat the process
-	}
-	// finally look for the winner
-	// i compute all the fitness
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		fitness_evaluations[i].index=i;
-		fitness_evaluations[i].fitness = fitness(x, x->population[i]);
-	}
-	// i sort the array
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(fitness_list_element, fitness_evaluations, MAX_POPULATION, FITNESS_LIST_COMPARATOR)
-	
-	winner = fitness_evaluations[MAX_POPULATION-1].index;
-
-	if (DEBUG)
-		post("winner fitness = %i", fitness_evaluations[MAX_POPULATION-1].fitness);
-
-	for (i=0;i<x->voices;i++)
-	{
-		winner_notes[i] = x->population[winner][i];
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(int, winner_notes, x->voices, SGLIB_NUMERIC_COMPARATOR)
-
-	for (i=0;i<x->voices;i++)
-	{
-		SETFLOAT(lista+i, winner_notes[i]);
-	}
-
-	// send output array to outlet
-	outlet_anything(x->l_out,
-                     gensym("list") ,
-					 x->voices, 
-					 lista);
-	free(lista);
-	free(winner_notes);
-}
-
-// if i want another voicing i can send a bang
-static void harmonizer_bang(t_harmonizer *x) {
-	generate_voicing(x);
-}
-
-// called when i send a list (with midi values)
-void set_current_voices(t_harmonizer *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-	int *input_voices;
-	
-	if (argc<x->voices)
-	{
-		error("insufficient notes sent!");
-		return;
-	}
-	input_voices = malloc(sizeof(int)*x->voices);
-	// fill input array with actual data sent to inlet
-	for (i=0;i<x->voices;i++)
-	{
-		input_voices[i] = atom_getint(argv++);
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(int, input_voices, x->voices, SGLIB_NUMERIC_COMPARATOR)
-	for (i=0;i<x->voices;i++)
-	{
-		x->current_voices[i] = input_voices[i];
-	}
-	
-	generate_voicing(x);
-	free(input_voices);
-
-
-}
-// set current chord
-void set_current(t_harmonizer *x, t_symbol *s) {
-	x->current_chord.mode = string2mode(s->s_name);
-	x->current_chord.note = string2note(s->s_name);
-	if (DEBUG)
-		post("harmonizer: set_current %s",s->s_name); 
-}
-
-// set target chord
-void set_target(t_harmonizer *x, t_symbol *s) {
-	x->target_chord.mode = string2mode(s->s_name);
-	x->target_chord.note = string2note(s->s_name);
-	if (DEBUG)
-		post("harmonizer: set_target %s",s->s_name); 
-}
-
-//how any octaves should this chord be?
-void set_wideness(t_harmonizer *x, t_floatarg f)
-{
-	if (f>=0)
-		x->wideness = f;
-}
-
-// which note should the center note have ?
-void set_center_note(t_harmonizer *x, t_floatarg f)
-{
-	if ((f>=LOWER_POSSIBLE_NOTE)&&(f<120))
-		x->center_note = (int) f;
-}
-
-// which note should the center note have ?
-void set_i_like_parallelism(t_harmonizer *x, t_floatarg f)
-{
-	float newval = f;
-	if (newval<-1)
-		newval = -1;
-	if (newval>1)
-		newval = 1;
-	x->i_like_parallelism = newval;
-}
-
-// which note should the center note have ?
-void set_small_intervals(t_harmonizer *x, t_floatarg f)
-{
-	float newval = f;
-	if (newval<-1)
-		newval = -1;
-	if (newval>1)
-		newval = 1;
-	x->small_intervals = newval;
-}
-
-void set_voices(t_harmonizer *x, t_floatarg f)
-{
-	int newval = (int)  f;
-	if (newval<1)
-	{
-		error("number of voices must be > 0 !");
-		return;
-	}
-	x->voices = newval;
-	harmonizer_free(x);
-	harmonizer_allocate(x);
-}
-
-void print_help(t_harmonizer *x)
-{
-	post("");
-	post("harmonizer is an external that builds voicing");
-	post("takes chords name and outputs a list of midi notes");
-	post("available commands:");
-	post("current symbol: sets the current chord name (which chordwe are in)");
-	post("target symbol: sets the target chord name (which chord we want to go to)");
-	post("voices: sets the number of voices");
-	post("wideness float: now many octaves wide should the next chord be? must be > than 0");
-	post("set_center_note int: sets the desired center chord note, min 24 max 100");
-	post("i_like_parallelism float: do I want parallelism? from -1 (I don't want them) to 1 (I like them), 0 means I don't care, default = -1");
-	post("small_intervals float: do I want small intervals? from -1 (I don't want them) to 1 (I like them), 0 means I don't care, default = 1");
-	post("this externalis part of the frank framework");
-	post("authors: davide morelli, david casals");
-
-}
-
-void *harmonizer_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_harmonizer *x = (t_harmonizer *)pd_new(harmonizer_class);
-	x->l_out = outlet_new(&x->x_obj, gensym("list"));
-/*
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		x->last[i] = harmonizer_note2gene(1,0,0,1);
-	}
-	*/
-	srand(time(&a));
-	x->center_note = DEF_CENTER_NOTE;
-	x->wideness = DEF_WIDENESS;
-	x->i_like_parallelism = -1; // by default we don't like them!
-	x->small_intervals = 1; //by default we want small intervals
-	x->voices = VOICES;
-	if (argc>0) 
-	{
-		x->voices = atom_getintarg(0, argc, argv);
-	}
-	harmonizer_allocate(x);
-    return (x);
-}
-
-void harmonizer_setup(void)
-{
-    harmonizer_class = class_new(gensym("harmonizer"), (t_newmethod)harmonizer_new,
-        (t_method)harmonizer_free, sizeof(t_harmonizer), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(harmonizer_class, (t_method)harmonizer_bang);
-	class_addmethod(harmonizer_class, (t_method)print_help, gensym("help"),0, 0);
-	class_addmethod(harmonizer_class, (t_method)set_current, gensym("current"),A_SYMBOL, 0);
-	class_addmethod(harmonizer_class, (t_method)set_target, gensym("target"),A_SYMBOL, 0);
-//	class_addmethod(harmonizer_class, (t_method)harmonizer_fitness1_set, gensym("fitness1"), A_DEFFLOAT, 0);
-	class_addlist(harmonizer_class, (t_method)set_current_voices);
-	class_addmethod(harmonizer_class, (t_method)set_wideness, gensym("wideness"), A_DEFFLOAT, 0);
-	class_addmethod(harmonizer_class, (t_method)set_center_note, gensym("center_note"), A_DEFFLOAT, 0);
-	class_addmethod(harmonizer_class, (t_method)set_i_like_parallelism, gensym("i_like_parallelism"), A_DEFFLOAT, 0);
-	class_addmethod(harmonizer_class, (t_method)set_small_intervals, gensym("small_intervals"), A_DEFFLOAT, 0);
-	// set number of voices
-	class_addmethod(harmonizer_class, (t_method)set_voices, gensym("voices"), A_DEFFLOAT, 0);
-	
-
-}
diff --git a/externals/frankenstein/harmonizer.vcproj b/externals/frankenstein/harmonizer.vcproj
deleted file mode 100755
index b6e7bb39214695034ecd4adbd8c21e4dbc53f3ae..0000000000000000000000000000000000000000
--- a/externals/frankenstein/harmonizer.vcproj
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="harmonizer"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:harmonizer_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/harmonizer.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="harmonizer.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-			<File
-				RelativePath="sglib.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/makefile.darwin b/externals/frankenstein/makefile.darwin
deleted file mode 100755
index 571f88de04d0fb1685a288048f798b07705d80cc..0000000000000000000000000000000000000000
--- a/externals/frankenstein/makefile.darwin
+++ /dev/null
@@ -1,39 +0,0 @@
-current: pd_darwin
-
-clean: ; rm -f *.pd_linux *.o *.pd_darwin
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: voicing_analyzer.pd_darwin chord_melo.pd_darwin harmonizer.pd_darwin chords_memory.pd_darwin rhythms_memory.pd_darwin GArhythm.pd_darwin test.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-
-# where are the PD header files?
-# leave it blank if it is a system directory (like /usr/local/include), 
-# 	since gcc 3.2 complains about it
-#PDPATH=/Applications/PdOLD.app/Contents/Resources/src/
-#PDPATH=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-
-# where is the PD executable?
-#PD=/Applications/PdOLD.app/Contents/Resources/bin/pd
-PDPATH=/Volumes/Student/Programmi/Pd-0.40-2.app/Contents/Resources/src/
-PD=/Volumes/Student/Programmi/Pd-0.40-2.app/Contents/Resources/bin/pd
-#PD=/usr/local/lib/pd/bin/pd
-#PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/bin/pd
-#PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-
-
-DARWININCLUDE =  -I../../src -I$(PDPATH)
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWININCLUDE) -c $*.c common.c
-	cc -bundle  -bundle_loader $(PD) -flat_namespace -o $*.pd_darwin $*.o common.o
-#	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin
-#	rm -f $*.o
-
-# $(FANNLIB)
diff --git a/externals/frankenstein/makefile.linux b/externals/frankenstein/makefile.linux
deleted file mode 100644
index 3f3ecf61e0bd2cf4dd3aaa6dfc5801eab9526dbc..0000000000000000000000000000000000000000
--- a/externals/frankenstein/makefile.linux
+++ /dev/null
@@ -1,103 +0,0 @@
-# the ANN-EXTERNAL-makefile
-# everything is GnuGPL that should come with the ann.tgz
-# NO WARRANTIES FOR ANYTHING
-# et cetera
-# (l) forum::für::umläute 2001
-
-# make sure that the "m_pd.h" is somehow available either by putting it into this
-# directory, by adding it's path to the INCLUDE-path or by putting it into an
-# already included path, e.g. "/usr/local/include/"
-# download fann libraries from http://fann.sourceforge.net
-# and install from source
-# make sure that fann.h is available
-
-#these are the user adjustables : adjust them to fit into your system
-# PD will install to $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR), which is /usr/local/lib/pd
-# by default
-DESTDIR =
-INSTALL_PREFIX = /usr/local
-PDLIBDIR = /lib/pd
-
-# the *.dll-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(LIBRARY_DIR)
-LIBRARY_DIR=/extra
-# the reference-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(REFERENCE_DIR)
-#REFERENCE_DIR=/doc/5.reference/ann
-REFERENCE_DIR=/extra/help-ann
-
-#these were the user adjustables
-#---------------------------------
-
-
-TARGETS = rhythms_memory.c \
-	chords_memory.c   \
-	harmonizer.c    \
-	GArhythm.c \
-	chord_melo.c \
-	ritmo1.c \
-	voicing_analyzer.c \
-	themes_memory.c
-
-# ----------------------- LINUX ----------------------------
-.SUFFIXES: .pd_linux
-
-
-LINUXOBJECTS = $(TARGETS:%=%.o)
-ARCH = $(shell uname --machine)
-
-PD_DIR = $(DESTDIR)$(INSTALL_PREFIX)$(PDLIBDIR)
-PD_INSTALLDIR_LIB = $(PD_DIR)$(LIBRARY_DIR)
-PD_INSTALLDIR_REF = $(PD_DIR)$(REFERENCE_DIR)
-
-ifeq (${ARCH},alpha)
-AFLAGS = -mieee	 -mcpu=ev56
-endif
-
-
-STRIP=strip
-STRIPFLAGS=--strip-unneeded
-
-
-LINCLUDE =
-
-OPTIMIZE_FLAGS = -O2 -O6 -funroll-loops -march=pentium3
-DEFS = -DPD
-
-#CFLAGS = -O2 -g -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS)
-CFLAGS = $(OPTIMIZE_FLAGS) -fomit-frame-pointer -fPIC -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS) $(DEFS)
-
-LDFLAGS = -Wl,--export-dynamic -shared
-LIBS = -lc -lm
-
-# here come the targets
-
-all: $(TARGETS:%.c=%.pd_linux)
-
-%.pd_linux: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -o "$*.pd_linux" "$*.c" common.c $(LIBS)
-	$(STRIP) $(STRIPFLAGS) "$*.pd_linux"
-
-
-frankenstein: $(TARGETS:%.c=%.o)
-	$(CC) $(CFLAGS) $(INCLUDE) -o frankenstein.o -c frankenstein.c
-	$(CC) $(LDFLAGS) -o frankenstein.pd_linux *.o $(LIBS)
-	$(STRIP) $(STRIPFLAGS) frankenstein.pd_linux
-
-%.o: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -o "$*.o" common.o -c "$*.c" common.c
-
-
-
-everything: clean all install distclean
-
-distclean:
-	-rm *.o *.pd_linux *~
-
-clean:
-	-rm *.o *.pd_linux
-
-install: installdocs
-	install -m 644 ann*.pd_linux $(PD_INSTALLDIR_LIB)
-
-installdocs:
-	install -d $(PD_INSTALLDIR_REF)
-	install -m644 ../examples/* $(PD_INSTALLDIR_REF)
diff --git a/externals/frankenstein/manager.pd b/externals/frankenstein/manager.pd
deleted file mode 100644
index f2a7ff63366680d5265473a8f55831348f0578e7..0000000000000000000000000000000000000000
--- a/externals/frankenstein/manager.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#N canvas 494 138 557 435 12;
-#X obj 136 186 select 0;
-#X obj 124 266 random 2;
-#X obj 137 211 t a a a;
-#X obj 137 235 bang;
-#X obj 140 130 inlet;
-#X obj 133 304 outlet;
-#X msg 250 143 0;
-#X connect 0 0 2 0;
-#X connect 1 0 5 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 6 0 0 0;
diff --git a/externals/frankenstein/patches/GA2005.pd b/externals/frankenstein/patches/GA2005.pd
deleted file mode 100644
index 3736be04f7654e0d39020da5c5ee534e9009b9ed..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/GA2005.pd
+++ /dev/null
@@ -1,1089 +0,0 @@
-#N canvas 73 243 788 379 12;
-#X obj 148 148 organist;
-#X obj 248 149 percussionist;
-#X obj 248 114 tgl 20 0 empty ONOFF toggle 0 -6 0 8 -258699 -1 -1 0
-1;
-#X obj 137 206 dac~;
-#X obj 135 181 +~;
-#X obj 165 180 +~;
-#X symbolatom 270 234 20 0 0 0 current - current_chord;
-#X symbolatom 271 253 20 0 0 0 next - next_chord;
-#N canvas 9 0 1011 707 sequencer 1;
-#X obj 27 7 cnv 15 600 450 empty empty tables 20 6 0 14 -262131 -66577
-0;
-#N canvas 0 0 450 300 graph7 0;
-#X array novelty-array 300 float 1;
-#A 0 0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.949997
-0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.949996
-0.937497 0.924999 0.924999 0.924999 0.924999 0.924999 0.924999 0.924999
-0.924999 0.924999 0.924999 0.924999 0.924999 0.924999 0.599996 0.249993
-0.924998 0.924998 0.924998 0.924998 0.924998 0.924998 0.924998 0.924998
-0.924998 0.924998 0.924998 0.924998 0.899998 0.899998 0.849998 0.774997
-0.649996 0.574995 0.399994 0.374994 0.349994 0.374994 0.399994 0.424994
-0.749997 0.924998 0.924998 0.924998 0.924998 0.924998 0.937498 0.949998
-0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998
-0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.924998 0.924998
-0.924998 0.874998 0.724997 0.524995 0.399994 0.324993 0.299993 0.324993
-0.499995 0.574995 0.824997 0.899998 0.899998 0.899998 0.899998 0.899998
-0.899998 0.899998 0.899998 0.899998 0.899998 0.899998 0.874998 0.699996
-0.599995 0.499995 0.424994 0.349994 0.274993 0.249993 0.224993 0.199992
-0.149992 0.124992 0.149992 0.174992 0.249993 0.349994 0.449994 0.549995
-0.699996 0.299993 0.174992 0.0499912 0.0749914 0.0749914 0.0999916
-0.0999916 0.0999916 0.0999916 0.0999916 0.174992 0.274993 0.549995
-0.749997 0.724997 0.574995 0.374994 0.274993 0.199993 0.174992 0.149992
-0.149992 0.149992 0.174992 0.249993 0.299993 0.399994 0.474995 0.574995
-0.599996 0.649996 0.699997 0.749997 0.824998 0.849998 0.749997 0.649996
-0.549995 0.549995 0.549995 0.549995 0.574996 0.649996 0.649996 0.724997
-0.724997 0.749997 0.774997 0.774997 0.649996 0.574996 0.524995 0.449995
-0.449995 0.474995 0.487495 0.524995 0.599996 0.624996 0.724997 0.774997
-0.774997 0.799998 0.799998 0.824998 0.824998 0.849998 0.849998 0.849998
-0.849998 0.849998 0.849998 0.849998 0.849998 0.849998 0.874998 0.874998
-0.899998 0.899998 0.924999 0.924999 0.899998 0.899998 0.899998 0.874998
-0.874998 0.874998 0.874998 0.849998 0.849998 0.849998 0.849997 0.837497
-0.824996 0.824996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.812496 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.874997 0.874997 0.874997 0.874997 0.874997 0.899997 0.874997;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 364 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array aderenza-array 300 float 1;
-#A 0 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998
-0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998
-0.937498 0.924998 0.912498 0.899998 0.899998 0.899998 0.899998 0.899998
-0.899998 0.899998 0.899998 0.899998 0.893748 0.887498 0.881248 0.874998
-0.849998 0.824998 0.795831 0.741664 0.716664 0.691664 0.666664 0.666664
-0.666664 0.666664 0.666664 0.666664 0.666664 0.641664 0.641664 0.641664
-0.616664 0.616664 0.616664 0.616664 0.616664 0.591664 0.591664 0.591664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.591664 0.591664 0.591664 0.616664
-0.616664 0.616664 0.666664 0.691664 0.691664 0.691664 0.716664 0.716664
-0.716664 0.716664 0.716664 0.716664 0.716664 0.716664 0.716664 0.716664
-0.716664 0.716664 0.716664 0.716664 0.716664 0.716664 0.616664 0.466664
-0.466664 0.466664 0.466664 0.466664 0.466664 0.466664 0.466664 0.466664
-0.466664 0.391664 0.391664 0.391664 0.391664 0.391664 0.441664 0.491664
-0.941664 0.941664 0.941664 0.941664 0.941664 0.941664 0.941664 0.941664
-0.941664 0.941664 0.0916629 0.0416629 0.0416629 0.0416629 0.0416629
-0.0416629 0.0416629 0.0416629 0.0416629 0.0416629 0.0416629 0.0416629
-0.0416629 0.0416629 0.0416629 0.0416629 0.0416629 0.0666629 0.0666629
-0.0666629 0.0666629 0.0666629 0.0666629 0.0666629 0.0916629 0.116663
-0.166663 0.191663 0.216663 0.266663 0.316663 0.341663 0.441664 0.516664
-0.541664 0.716664 0.716664 0.716664 0.716664 0.691664 0.691664 0.666664
-0.641664 0.616664 0.591664 0.591664 0.591664 0.591664 0.591664 0.591664
-0.591664 0.591664 0.591664 0.591664 0.591664 0.591664 0.591664 0.591664
-0.541664 0.541664 0.554164 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.572914 0.579164 0.585414 0.591664 0.591664 0.591664 0.591664
-0.591664 0.591664 0.599997 0.60833 0.616664 0.641664 0.641664 0.641664
-0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664
-0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664
-0.641664 0.641664 0.654164 0.666664 0.666664 0.691664 0.691664 0.691664
-0.691664 0.691664 0.691664 0.691664 0.691664 0.691664 0.691664 0.691664
-0.691664 0.691664 0.691664 0.683331 0.674997 0.666664 0.666664 0.666664
-0.666664 0.641664 0.641664 0.616664 0.616664 0.616664 0.616664 0.51107
-0.51107;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 93 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array variazione-array 300 float 1;
-#A 0 0.274999 0.349999 0.349999 0.324999 0.324999 0.312499 0.299999
-0.299999 0.299999 0.287499 0.274999 0.274999 0.274999 0.274999 0.271874
-0.268749 0.265624 0.262499 0.259374 0.256249 0.253124 0.249999 0.241666
-0.233333 0.225 0.225 0.225 0.225 0.225 0.225 0.225 0.225 0.225 0.225
-0.225 0.225 0.225 0.225 0.225 0.23125 0.237499 0.243749 0.249999 0.249999
-0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999
-0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999
-0.249999 0.249999 0.249999 0.249999 0.225 0.225 0.225 0.225 0.225 0.2
-0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2
-0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.225 0.2375 0.249999 0.249999
-0.274999 0.299999 0.299999 0.324999 0.349999 0.362499 0.374999 0.399999
-0.399999 0.399999 0.424999 0.449999 0.949997 0.949997 0.949997 0.949997
-0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.749998 0.724998
-0.724998 0.724998 0.724998 0.724998 0.724998 0.724998 0.724998 0.724998
-0.699998 0.674998 0.649998 0.624998 0.624998 0.599998 0.587498 0.574998
-0.549998 0.537498 0.499999 0.474999 0.449999 0.424999 0.424999 0.374999
-0.374999 0.366666 0.358332 0.349999 0.349999 0.324999 0.324999 0.299999
-0.274999 0.274999 0.274999 0.274999 0.249999 0.249999 0.249999 0.249999
-0.225 0.2 0.1875 0.175 0.1625 0.15 0.1375 0.125 0.125 0.125 0.125 0.125
-0.125 0.1125 0.1 0.1 0.1 0.1 0.1 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.116667 0.108333 0.1 0.1 0.1 0.1 0.1 0.0750001
-0.0750001 0.0750001 0.0750001 0.0750001 0.0750001 0.0750001 0.0750001
-0.0750001 0.0750001 0.0750001 0.0750001 0.0750001 0.0250001 0 0;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 147 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array riempimento-array 300 float 1;
-#A 0 -2.98023e-008 0.0499999 0.0499999 0.0499999 0.0749999 0.0749999
-0.0749999 0.0749999 0.0749999 0.0874999 0.0999999 0.10625 0.13125 0.15625
-0.20625 0.23125 0.25625 0.30625 0.33125 0.38125 0.38125 0.43125 0.45625
-0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625
-0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625
-0.45625 0.45625 0.45625 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125
-0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125
-0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.40625 0.40625 0.38125
-0.38125 0.35625 0.33125 0.30625 0.29375 0.28125 0.25625 0.25625 0.20625
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.956249 0.956249 0.956249
-0.906249 0.881249 0.881249 0.881249 0.881249 0.881249 0.89375 0.90625
-0.90625 0.90625 0.90625 0.90625 0.88125 0.88125 0.88125 0.88125 0.88125
-0.88125 0.88125 0.88125 0.85625 0.85625 0.85625 0.83125 0.83125 0.80625
-0.78125 0.75625 0.73125 0.70625 0.70625 0.68125 0.65625 0.65625 0.65625
-0.63125 0.63125 0.63125 0.63125 0.60625 0.60625 0.60625 0.58125 0.58125
-0.58125 0.56875 0.55625 0.53125 0.45625 0.45625 0.43125 0.41875 0.40625
-0.40625 0.40625 0.39375 0.38125 0.35625 0.35625 0.33125 0.33125 0.30625
-0.30625 0.28125 0.25625 0.23125 0.20625 0.18125 0.15625 0.13125 0.10625
-0.0812502 0.0812502 0.0812502 0.0812502 0.0812502 0.0812502 0.0812502
-0.0812502 -0.0187497 -0.0187497 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0562503 0.0562503 0.0562503
-0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503
-0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503
-0.0562503 0.0562503 0.0687503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0337096
-0.0337096 0.0337096 0.0337096;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 40 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array reinsert-src-array 300 float 1;
-#A 0 9 9 9 9 9 9 9 9 9 9 9 8.95 8.9 8.85 8.8 8.75 8.5 8.375 8.25 8.125
-8 7.7 7.4 7.1 6.8 6.5 6.16667 5.83333 5.5 5.375 5.25 5.16667 5.08333
-4.41667 4.41667 4.41667 4.41667 4.41667 4.41667 4.41667 4.41667 4.16667
-3.91667 3.66667 3.41667 3.41667 3.16667 3.16667 3.16667 3.16667 3.16667
-3.16667 3.16667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.79167
-2.91667 2.91667 2.91667 2.91667 2.91667 3.16667 3.16667 3.16667 3.16667
-3.41667 3.41667 3.41667 3.41667 3.66667 3.66667 3.66667 3.66667 3.66667
-3.66667 3.66667 3.91667 4.16667 4.16667 4.16667 4.16667 4.16667 4.16667
-4.16667 4.16667 4.04167 3.66667 3.41667 1.41667 0.91667 0.66667 0.66667
-0.66667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667
-0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667
-0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667
-0.41667 0.41667 0.41667 0.66667 1.16667 1.66667 2.16667 2.66667 2.91667
-3.16667 3.66667 3.91667 4.41667 4.66667 4.91667 4.91667 4.91667 4.91667
-4.16667 3.41667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.95238 2.9881 3.02381 3.05953 3.09524 3.13095 3.16667 3.20238 3.2381
-3.27381 3.30953 3.34524 3.38096 3.41667 3.41667 3.41667 3.41667 3.41667
-3.41667 3.41667 3.41667 3.51667 3.61667 3.71667 3.81667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.83334 3.75 3.66667 3.56667
-3.46667 3.36667 3.26667 3.16667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667;
-#X coords 0 10 299 0 600 40 1;
-#X restore 28 202 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array reinsert-last-array 300 float 1;
-#A 0 1 1 1 1 1 1 1 1.25 1.25 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
-1.5 1.5 2 2.25 2.25 2.5 2.75 2.75 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
-3.08333 3.16667 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25
-3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.375 3.5 3.58333
-3.66667 3.75 3.875 4 4.08333 4.16667 4.25 4.375 4.5 4.5 4.5 4.5 4.5
-4.5 4.5 4.5 4.5 4.5 4.5 4.625 4.75 4.83333 4.91667 5 5.25 5.5 5.5 5.5
-5.5 5.25 5 4.75 4.25 4 3.75 3.5 3.25 2.75 2 1.75 1.25 1 1 1 1 1 1 1
-1 1 1 1 0.5 0.5 0.75 1 1 1.5 1.75 2 2.25 2.5 2.75 3 3.25 3.5 3.5 3.75
-4.25 5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5
-5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5
-5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.375 5.25 5.08333 4.91667
-4.75 4.625 4.5 4.5 4.5 4.25 4 4 4 4 4 4 4 4 3.875 3.75 3.5 3.41667
-3.33333 3.25 3 2.75 2.5 2.25 2 2 2 2 2 1.95833 1.91667 1.875 1.83333
-1.79167 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75
-1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75
-1.75 1.6875 1.625 1.5625 1.5 1.42857 1.35714 1.28571 1.21429 1.14286
-1.07143 1 0.964286 0.928571 0.892857 0.857143 0.857143 0.857143 0.857143
-0.857143 0.857143 0.857143 0.857143 0.857143 0.857143 0.857143 0.857143
-0.857143 0.857143 0.857143 0.857143 0.857143 0.857143 0.834415 0.811688
-0.788961 0.766234 0.743506 0.720779 0.698052 0.675325 0.652597 0.62987
-0.607143 0.607143 0.607143 0.607143 0.607143 0.607143 0.607143 0.607143
-0.607143 0;
-#X coords 0 10 299 0 600 40 1;
-#X restore 26 258 graph;
-#N canvas 216 127 812 645 cursor 0;
-#X obj 250 31 r bar;
-#X obj 251 58 * 2;
-#X floatatom 314 45 5 0 0 0 - - -;
-#X msg 250 105 \; position pos \$1 5;
-#X floatatom 96 100 5 0 0 0 - - -;
-#X obj 61 67 inlet;
-#X obj 160 92 outlet;
-#X msg 160 69 set \$1;
-#X msg 177 180 \; position label \$1;
-#X obj 61 125 s bar-position;
-#X obj 252 81 + 27;
-#X obj 177 158 makefilename bar_%d;
-#X connect 0 0 1 0;
-#X connect 0 0 7 0;
-#X connect 0 0 11 0;
-#X connect 1 0 10 0;
-#X connect 2 0 10 1;
-#X connect 4 0 9 0;
-#X connect 5 0 9 0;
-#X connect 7 0 6 0;
-#X connect 10 0 3 0;
-#X connect 11 0 8 0;
-#X restore 22 499 pd cursor;
-#N canvas 121 55 858 625 reading-tables 0;
-#X obj 446 314 s novelty;
-#X obj 437 268 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 514 76 s reinit;
-#X obj 45 424 s reinsert_src;
-#X obj 44 345 s reinsert_last;
-#X obj 47 98 s aderenza;
-#X obj 469 162 s riempimento;
-#X obj 456 240 s variazione;
-#X obj 41 178 s prob_crossover;
-#X obj 43 257 s prob_mutation;
-#X obj 337 16 r bar;
-#X obj 469 139 tabread riempimento-array;
-#X obj 456 288 tabread novelty-array;
-#X obj 450 116 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 463 216 tabread variazione-array;
-#X obj 445 193 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 41 51 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X obj 61 75 tabread aderenza-array;
-#X obj 516 31 select 8;
-#X msg 515 53 1;
-#X obj 40 128 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 60 152 tabread crossover-array;
-#X obj 37 210 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 55 234 tabread mutation-array;
-#X obj 65 323 tabread reinsert-src-array;
-#X floatatom 18 323 5 0 0 0 - - -;
-#X floatatom 17 396 5 0 0 0 - - -;
-#X obj 64 396 tabread reinsert-last-array;
-#X obj 442 341 vsl 15 40 60 120 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 463 360 tabread tempo-array;
-#X obj 451 387 s tempo;
-#X msg 523 396 \; tempo-array const 80;
-#X msg 472 476 \; crossover-array const 0.9;
-#X msg 472 434 \; mutation-array const 0.025;
-#X obj 183 456 vsl 15 40 60 120 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 204 476 tabread velocity-array;
-#X obj 192 502 s velocity;
-#X msg 511 523 \; velocity-array const 80;
-#X msg 35 527 \; reinsert-src-array const 1;
-#X msg 264 533 \; reinsert-last-array const 1;
-#N canvas 0 0 450 300 graph7 0;
-#X array crossover-array 300 float 1;
-#A 0 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9;
-#X coords 0 1 299 0.8 600 40 1;
-#X restore 609 38 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array mutation-array 300 float 1;
-#A 0 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025;
-#X coords 0 0.1 299 0 600 40 1;
-#X restore 609 79 graph;
-#X obj 731 151 select 300;
-#X msg 730 173 0;
-#X obj 729 196 s ONOFF-set;
-#X connect 1 0 0 0;
-#X connect 10 0 18 0;
-#X connect 10 0 11 0;
-#X connect 10 0 14 0;
-#X connect 10 0 12 0;
-#X connect 10 0 17 0;
-#X connect 10 0 21 0;
-#X connect 10 0 23 0;
-#X connect 10 0 24 0;
-#X connect 10 0 27 0;
-#X connect 10 0 29 0;
-#X connect 10 0 35 0;
-#X connect 10 0 42 0;
-#X connect 11 0 6 0;
-#X connect 12 0 0 0;
-#X connect 13 0 6 0;
-#X connect 14 0 7 0;
-#X connect 15 0 7 0;
-#X connect 16 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 19 0;
-#X connect 19 0 2 0;
-#X connect 20 0 8 0;
-#X connect 21 0 8 0;
-#X connect 22 0 9 0;
-#X connect 23 0 9 0;
-#X connect 24 0 4 0;
-#X connect 25 0 4 0;
-#X connect 26 0 3 0;
-#X connect 27 0 3 0;
-#X connect 28 0 30 0;
-#X connect 29 0 30 0;
-#X connect 34 0 36 0;
-#X connect 35 0 36 0;
-#X connect 42 0 43 0;
-#X connect 43 0 44 0;
-#X restore 355 501 pd reading-tables;
-#X obj 29 467 hsl 600 30 0 300 0 0 empty empty position 0 -5 0 8 -261689
--1 -1 39534 1;
-#X obj 332 539 cnv 15 300 30 empty next_chord_canvas D minor/major 7th
-20 12 2 25 -225271 -66577 0;
-#X obj 26 539 cnv 15 300 30 empty current_chord_canvas G major 7th
-20 12 2 25 -225271 -66577 0;
-#N canvas 0 0 831 365 setting-chords 0;
-#X obj 72 60 r current_chord;
-#X msg 71 85 \; current_chord_canvas label \$1;
-#X obj 72 139 r next_chord;
-#X msg 71 164 \; next_chord_canvas label \$1;
-#X obj 385 26 loadbang;
-#X msg 370 222 \; current_chord_canvas color 6 2;
-#X msg 370 257 \; next_chord_canvas color 6 2;
-#X msg 390 69 \; current_chord_canvas vis_size 300 30;
-#X msg 390 104 \; next_chord_canvas vis_size 300 30;
-#X msg 378 145 \; current_chord_canvas label_font 2 25;
-#X msg 378 181 \; next_chord_canvas label_font 2 25;
-#X connect 0 0 1 0;
-#X connect 2 0 3 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 4 0 9 0;
-#X connect 4 0 10 0;
-#X connect 4 0 7 0;
-#X connect 4 0 8 0;
-#X restore 215 501 pd setting-chords;
-#N canvas 0 0 818 492 writing-tables 0;
-#X obj 437 268 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 599 77 s reinit;
-#X obj 337 16 r bar;
-#X obj 450 116 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 445 193 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 44 33 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X obj 601 32 select 8;
-#X msg 600 54 1;
-#X obj 42 110 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 34 187 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 37 306 5 0 0 0 - - -;
-#X floatatom 38 380 5 0 0 0 - - -;
-#X obj 61 75 tabwrite aderenza-array;
-#X obj 60 152 tabwrite crossover-array;
-#X obj 51 235 tabwrite mutation-array;
-#X obj 65 323 tabwrite reinsert-src-array;
-#X obj 64 396 tabwrite reinsert-last-array;
-#X obj 469 139 tabwrite riempimento-array;
-#X obj 464 216 tabwrite variazione-array;
-#X obj 455 289 tabwrite novelty-array;
-#X obj 442 324 vsl 15 40 60 120 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X msg 462 387 \; tempo-array const 80;
-#X obj 463 349 tabwrite tempo-array;
-#X connect 0 0 19 0;
-#X connect 2 0 12 1;
-#X connect 2 0 13 1;
-#X connect 2 0 14 1;
-#X connect 2 0 15 1;
-#X connect 2 0 16 1;
-#X connect 2 0 17 1;
-#X connect 2 0 18 1;
-#X connect 2 0 19 1;
-#X connect 2 0 22 1;
-#X connect 3 0 17 0;
-#X connect 4 0 18 0;
-#X connect 5 0 12 0;
-#X connect 6 0 7 0;
-#X connect 7 0 1 0;
-#X connect 8 0 13 0;
-#X connect 9 0 14 0;
-#X connect 10 0 15 0;
-#X connect 11 0 16 0;
-#X connect 20 0 22 0;
-#X restore 493 501 pd writing-tables;
-#N canvas 0 0 450 300 graph7 0;
-#X array tempo-array 300 float 1;
-#A 0 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
-65 65 65 65 65 65 65 65 65.2143 65.4286 65.6429 65.8571 66.0714 66.2857
-66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 68 68 68
-68 68 68 68 68.75 69.5 71 71 72.5 74 74 75.5 75.5 77 77 78.5 78.5 80
-80 81.5 81.5 83 84.5 86 87.5 87.5 89 89 89 90.5 90.5 92 92 93.5 93.5
-93.5 93.5 95 95 96.5 98 99.5 101 101 102.5 104 104 104 104 104 104
-104 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5
-105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5
-105.5 105.5 105.5 105.5 105.5 105.5 105.5 104 102.5 102.5 102.5 102.5
-102.5 101 99.5 98 97.25 95 93.5 92 90.5 89.75 87.5 87.5 87.5 85.5 85
-83 83 81.5 81.5 80 78.5 78.5 77 77 75.5 75.5 75.5 75.5 74 72.5 72.5
-72.5 72.5 71 71 69.5 69.5 69.5 69.5 69.5 69.5 69.5 69.5 69.5 68 68
-68 68 66.5 66.5 65.75 65 65 65 65 65 65 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 62.725
-62.425 62.125 62.7273;
-#X coords 0 120 299 60 600 40 1;
-#X restore 28 311 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array velocity-array 300 float 1;
-#A 0 62.1875 62.9375 64.0625 65.1875 65.9375 66.6875 67.4375 67.9829
-68.5284 69.0739 69.6193 70.1648 70.7102 71.2557 71.8011 72.3466 72.892
-73.4375 73.6421 73.8466 74.0511 74.2557 74.4602 74.6648 74.8693 75.0739
-75.2784 75.483 75.6875 75.7708 75.8541 75.9375 76.0208 76.1042 76.1875
-76.2708 76.3542 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 77 77 77 77 77 77 77 77 77 77 77.25
-77.5 77.75 78.3125 78.875 79.4375 80 80 80 80.75 80.75 80.75 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 80 80 79.25 79.25 78.5
-77.75 77.75 77 76.25 76.25 75.5 75.5 75.5 74.75 74.75 74.75 74 74 73.25
-72.5 72.5 72.5 71.75 71.75 71 71 71 71 71 70.25 70.25 69.5 69.5 68.75
-68.75 68 68 68 68 67.25 67 66.75 66.5 66.5 66.5 66.5 65.375 65.375
-64.625 64.25 63.875 63.875 63.625 63.375 63.125 63.125 63.125 63.125
-63.125 63.125 63.125 63.125 63.125 63.125 63.125 63.125 63.125 63.125
-63.125 63.125 63.125 62.75 62.75 62.75 62.75 62.75 62.75 62.75 62.5
-62.25 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 61.625 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 64.5 64.5;
-#X coords 0 90 299 60 600 40 1;
-#X restore 28 419 graph;
-#X text 356 563 next;
-#X text 257 563 current -->;
-#X text 635 104 <-- similarity;
-#X text 635 52 <-- density;
-#X obj 650 261 cnv 15 200 240 empty empty rhythm 20 12 0 14 -228992
--66577 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed1 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 650 298 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed2 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 332 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed3 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 368 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed4 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 404 graph;
-#X obj 636 537 vsl 15 30 0 1 0 0 empty novelty novelty 0 -8 0 8 -225280
--1 -1 2682 1;
-#X obj 649 449 hradio 50 1 0 4 empty beat-quarters empty 0 -6 0 8 -228992
--1 -1 0;
-#X obj 498 592 tgl 50 0 ONOFF ONOFF-set toggle 0 -6 0 8 -258699 -1
--1 0 1;
-#X obj 649 162 cnv 15 200 100 empty empty input_rhythm 20 12 0 14 -262131
--66577 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array played1 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 200 graph;
-#X obj 9 95 vsl 15 40 0 1 0 0 aderenza empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 10 42 vsl 15 40 0 1 0 0 riempimento empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 10 148 vsl 15 40 0 5 0 0 reinsert-src empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 9 203 vsl 15 40 0 10 0 0 reinsert-last empty empty 0 -8 0 8
--261681 -1 -1 0 1;
-#X obj 7 260 vsl 15 40 0 10 0 0 reinsert-last empty empty 0 -8 0 8
--261681 -1 -1 0 1;
-#X obj 8 312 vsl 15 40 60 120 0 0 tempo empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 650 145 cnv 15 1 300 empty beat-pos 0 0 -10 1 10 -1 -1 0;
-#N canvas 0 111 828 661 cursor2 0;
-#X floatatom 314 45 5 0 0 0 - - -;
-#X obj 177 158 makefilename %d;
-#X msg 177 180 \; beat-pos label \$1;
-#X obj 251 58 * 13;
-#X obj 241 16 r beat-position;
-#X msg 249 105 \; beat-pos pos \$1 145;
-#X obj 252 81 + 650;
-#X connect 0 0 6 1;
-#X connect 1 0 2 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 0 1 0;
-#X connect 6 0 5 0;
-#X restore 104 501 pd cursor2;
-#X obj 645 429 hradio 13 1 0 16 empty beat-position empty 0 -6 0 8
--228992 -1 -1 0;
-#X obj 752 21 tgl 20 0 v1 empty toggle_v1 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 821 21 tgl 20 0 v2 empty toggle_v2 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 751 59 tgl 20 0 v3 empty toggle_v3 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 820 59 tgl 20 0 v4 empty toggle_v4 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 781 91 tgl 20 0 v5 empty toggle_v5 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 423 5 cnv 15 3 450 empty position bar_198 5 20 0 8 -24198 -258699
-0;
-#N canvas 36 0 769 690 effects-automation 0;
-#X obj 15 20 cnv 15 600 600 empty empty effects 20 12 0 14 -225271
--66577 0;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-dry-vol-array 300 float 1;
-#A 0 0.4 0.433333 0.466667 0.5 0.51 0.52 0.53 0.54 0.55 0.5625 0.575
-0.583333 0.591667 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.575 0.55 0.575
-0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575
-0.584375 0.59375 0.603125 0.6125 0.621875 0.63125 0.640625 0.65 0.6575
-0.665 0.6725 0.68 0.6875 0.695 0.7025 0.71 0.725 0.725 0.725 0.74 0.755
-0.77 0.785 0.8 0.8125 0.825 0.8375 0.85 0.858334 0.866667 0.875 0.925
-0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925
-0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.9 0.875 0.85 0.825 0.8
-0.775 0.75 0.725 0.7 0.66 0.57 0.5575 0.545 0.52 0.495 0.495 0.495
-0.495 0.49 0.485 0.48 0.475 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47
-0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47
-0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.48875 0.5075 0.52625 0.571429
-0.600595 0.629762 0.658929 0.688095 0.717262 0.746429 0.777679 0.808929
-0.840179 0.871429 0.896429 0.921429 0.921429 0.939286 0.957143 0.975
-0.977778 0.980556 0.983333 0.986111 0.988889 0.991667 0.994444 0.997222
-1 0.984091 0.968182 0.952273 0.936364 0.920455 0.904546 0.888637 0.872728
-0.856818 0.840909 0.825 0.79375 0.7625 0.73125 0.7 0.65625 0.6125 0.56875
-0.56875 0.559375 0.55 0.540625 0.53125 0.521875 0.5125 0.503125 0.49375
-0.484375 0.475 0.465625 0.45625 0.446875 0.4375 0.428125 0.41875 0.41875
-0.41875 0.41875 0.41875 0.41875 0.41875 0.41875 0.5 0.5 0.5 0.5 0.521875
-0.54375 0.565625 0.5875 0.609375 0.63125 0.653125 0.675 0.704167 0.733333
-0.7625 0.791667 0.820834 0.85 0.866667 0.883333 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.875 0.841667 0.808333 0.775 0.755
-0.735 0.715 0.695 0.675 0.655 0.635 0.615 0.595 0.575 0.5625 0.55 0.5375
-0.5375 0.5225 0.5075 0.4925 0.4775 0.4625 0.4475 0.4325 0.4175 0.4025
-0.3875 0.382812 0.378125 0.373437 0.36875 0.364062 0.359375 0.354687
-0.35 0.35 0.3375 0.325 0.3125 0.3 0.288889 0.277778 0.266667 0.266667
-0.258333 0.25 0.241667 0.241667 0.241667 0.241667 0.241667 0.241667
-0.241667 0.241667 0.241667 0.241667 0.241667;
-#X coords 0 1 299 0 600 40 1;
-#X restore 15 56 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-wet-vol-array 300 float 1;
-#A 0 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.89 0.88 0.87 0.86
-0.85 0.85 0.85 0.85 0.85 0.85 0.85 0.85 0.855 0.86 0.825 0.825 0.825
-0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825
-0.81875 0.8125 0.80625 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8
-0.8 0.8 0.8 0.775 0.75 0.7 0.6625 0.625 0.6 0.5625 0.525 0.5 0.5 0.5
-0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
-0.5375 0.575 0.591667 0.608333 0.625 0.65 0.675 0.7 0.775 0.8 0.825
-0.85 0.9 0.925 0.95 0.975 0.9875 1 1.025 1.05 1.05 1.05 1.05625 1.0625
-1.06875 1.075 1.075 1.075 1.075 1.075 1.075 1.075 1.075 1.075 1.075
-1.075 1.075 1.075 1.07083 1.06667 1.0625 1.05833 1.05417 1.05 1.04167
-1.03333 1.025 1.01667 1.00833 1 0.9625 0.925 0.9125 0.9 0.8875 0.869643
-0.851786 0.833929 0.816072 0.798215 0.780357 0.7625 0.745834 0.729167
-0.7125 0.70625 0.7 0.675001 0.673751 0.672501 0.671251 0.670001 0.668751
-0.667501 0.666251 0.665001 0.663751 0.662501 0.661251 0.660001 0.658751
-0.657501 0.65625 0.655 0.65375 0.6525 0.65125 0.65 0.660715 0.671429
-0.683929 0.696429 0.713095 0.729762 0.746429 0.783929 0.821429 0.853572
-0.885714 0.917857 0.95 0.982143 1.01429 1.04643 1.05268 1.05893 1.06518
-1.07143 1.08393 1.09643 1.10893 1.12143 1.12143 1.12143 1.12143 1.06444
-1.06444 1.06444 1.05535 1.04626 1.03717 1.02808 1.01899 1.0099 1.00081
-0.991717 0.982626 0.973535 0.964445 0.943611 0.922778 0.901944 0.881111
-0.860278 0.839445 0.801944 0.764444 0.739444 0.714444 0.689444 0.664445
-0.639445 0.614444 0.589444 0.589444 0.589444 0.589444 0.589444 0.589444
-0.589444 0.589444 0.589445 0.592222 0.595 0.597778 0.600556 0.603333
-0.606111 0.608889 0.611667 0.614444 0.626944 0.639444 0.676944 0.689444
-0.701944 0.720694 0.739444 0.758194 0.776944 0.776944 0.776944 0.801944
-0.826945 0.843611 0.860278 0.876944 0.893611 0.910278 0.926944 0.943611
-0.960278 0.976944 0.993611 1.01028 1.02694 1.04194 1.05694 1.07194
-1.08694 1.10194 1.11623 1.13052 1.1448 1.15909 1.17337 1.18766 1.20194
-1.22194 1.24194 1.26194 1.28194 1.30194 1.30909 1.31623 1.32337 1.33052
-1.33766 1.3448 1.35194 1.36194 1.37194 1.38194 1.39194 1.40194;
-#X coords 0 1 299 0 600 40 1;
-#X restore 15 111 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-freq-l-array 300 float 1;
-#A 0 10846 10846 10846 10970.7 11095.3 11220 11968 12716 13090 13464
-13838 13838 13838 13090 12342 10846 9350 8041 6732 6732 6732 6732 6732
-6732 6732 7199.5 7667 8134.5 8602 10472 11220 7106 2992 2618 2867.33
-3116.67 3366 3864.67 4363.33 4862 5360.67 5859.33 6358 7355.33 8352.67
-9350 9948.4 10546.8 11145.2 11743.6 11968 9911 7854 5236 3553 1870
-1745.33 1620.67 1496 2108 2720 3332 3944 4556 5168 5780 6392 7004 7616
-8228 8789 9350 9911 10472 11033 11594 10621.6 9649.2 8676.8 7704.4
-6732 5610 4488 4039.2 3590.4 3141.6 2692.8 2244 2468.4 2692.8 2917.2
-3141.6 3366 4363.33 5360.67 6358 7355.33 8352.67 9350 10172.8 10995.6
-11818.4 12641.2 13464 11968 11113.1 10258.3 9403.43 8548.57 7693.71
-6838.86 5984 5440 4896 4352 3808 3264 2720 2176 1632 1088 544 0 374
-748 1122 1496 1870 2244 2618 2992 3366 3740 4755.14 5770.29 6785.43
-7800.57 8815.71 9830.86 10846 11126.5 11407 11687.5 11594 11407 11220
-10472 9724 8976 8228 7554.8 6881.6 6208.4 5535.2 4862 4737.33 4612.67
-4488 4363.33 4238.67 4114 3989.33 3864.67 3740 4274.29 4808.57 5342.86
-5877.14 6411.43 6945.71 7480 8041 8602 9163 9724 10285 10846 11407
-11968 11594 11220 10846 10472 9350 8228 7106 5984 5859.33 5734.67 5610
-6099.07 6588.15 7077.23 7566.31 8055.38 8544.46 9033.54 9522.61 10011.7
-10500.8 10989.8 11478.9 11968 12416.8 12865.6 13314.4 13763.2 14212
-12435.5 10659 8882.5 7106 5984 6329.23 6674.46 7019.69 7364.92 7710.16
-9350 9424.8 9499.6 9574.4 9649.2 9724 10098 10472 10846 11095.3 11344.7
-11594 11469.3 11344.7 11220 11070.4 10920.8 10771.2 10621.6 10472 10472
-10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472
-10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472
-10472 10472 10472 10472 10659 10846 11344.7 11843.3 12342 12342 12342
-12342 12342 12061.5 11781 11500.5 11220 10846 10472 10098 9350 8602
-8134.5 7667 7199.5 6732 5610 5049 4488 3740 2992 2244 1496 748 374
-0 0;
-#X coords 0 15000 299 40 600 40 1;
-#X restore 14 167 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-freq-r-array 300 float 1;
-#A 0 0 9350 9350 9350 9350 9649.2 9948.4 10247.6 10546.8 10846 11220
-12155 13090 11968 10659 9350 8415 7480 7199.5 6919 6638.5 6358 6919
-7480 8041 8602 9256.5 9911 10565.5 11220 10222.7 9225.33 8228 7106
-7106 7106 7854 8602 9350 10098 10846 11594 12342 13090 13838 12903
-11968 11095.3 10222.7 9350 9237.8 9125.6 9013.4 8901.2 8789 8676.8
-8564.6 8452.4 8340.2 8228 8377.6 8527.2 8676.8 8826.4 8976 9873.6 10771.2
-11668.8 12566.4 13464 14399 15334 13651 11968 9724 10098 10846 11594
-11968 12342 12716 13838 13838 14212 14586 14960 14212 13464 11968 11095.3
-10222.7 9350 8851.33 8352.67 7854 7480 7106 6732 6358 6171 5984 5797
-5610 5610 5610 5610 5610 5984 6358 6732 7106 7480 7854 8228 8882.5
-9537 10191.5 10846 11145.2 11444.4 11743.6 12042.8 12342 12716 13090
-13090 13090 13090 12529 11968 10846 9724 8602 8352.67 8103.33 7854
-7687.78 7521.56 7355.33 7189.11 7022.89 6856.67 6690.44 6524.22 6358
-7106 7854 7854 7854 7854 8078.4 8302.8 8527.2 8751.6 8976 9038.33 9100.67
-9163 9225.33 9287.67 9350 9256.5 9163 9069.5 8976 8882.5 8789 8695.5
-8602 8508.5 8415 8321.5 8228 8153.2 8078.4 8003.6 7928.8 7854 8352.67
-8851.33 9350 9848.67 10347.3 10846 11070.4 11294.8 11519.2 11743.6
-11968 9724 9350 10098 9350 8352.67 7355.33 6358 5984 5610 5610 5610
-5610 5610 5797 5984 6171 6358 6732 7106 7667 8228 8851.33 9474.67 10098
-10472 10846 11220 11594 12155 12716 12965.3 13214.7 13464 13464 13464
-13464 13464 13464 13464 13464 13464 13464 13214.7 12965.3 12716 10098
-9724 9350 8976 8976 8976 8976 8602 8415 8228 7480 7480 7480 7480 7480
-7480 7480 7480 7480 7480 7293 7106 6919 6732 6657.2 6582.4 6507.6 6432.8
-6358 6358 6358 6171 5984 5984 5797 5610 4862 4737.33 4612.67 4488 4114
-4114 4114 4114 4114 4114 3927 2244 2297.43 2350.86 2404.29 2457.71
-2511.14 2564.57 2618 2618 2618 2618 2618 2618 2431 2244 2119.33 1994.67
-1870 1496;
-#X coords 0 15000 299 40 600 40 1;
-#X restore 15 223 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-q-array 300 float 1;
-#A 0 86.6246 86.6246 86.6246 86.6246 82.4996 78.3746 74.2496 74.2496
-74.2496 71.7746 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997
-69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 70.5371
-71.7746 73.0121 74.2496 71.7747 69.2997 66.8247 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.0403 63.7309 63.4216 63.1122 62.8028
-62.4934 62.1841 61.8747 61.256 60.6372 60.0185 59.3997 59.3997 59.3997
-59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997
-59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997
-59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997
-59.6747 59.9497 60.2247 60.4997 60.7747 61.0497 61.3247 61.5997 61.8747
-61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747
-61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747
-61.8747 61.8747 61.8747 62.3697 62.8647 63.3597 63.8547 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 76.7246 81.6746 84.1496
-83.1596 82.1696 81.1796 80.1896 79.1996 78.2715 77.3434 76.4153 75.4871
-74.559 73.6309 72.7028 71.7746 69.9184 68.0622 66.2059 64.3497 62.4934
-60.6372 58.781 56.9248 55.6873 54.4498 53.2123 51.9748 50.7373 49.4998
-48.2623 47.0248 45.7873 44.5498 43.3123 42.0748 40.8373 39.5998 38.3623
-37.1248 37.3998 37.6748 37.9498 38.2248 38.4998 38.7748 71.7747 71.7747
-71.7747 71.7747 71.7747 71.7747 71.7747 71.7747 71.7747 71.7747 71.7747
-71.7747 71.7747 71.7747 71.7747 71.7747 72.1282 72.4818 72.8354 73.1889
-73.5425 73.8961 74.2496 74.6032 74.9568 75.3103 75.6639 76.0175 76.371
-76.7246 76.3711 76.0175 75.6639 75.3103 74.9568 74.6032 74.2496 73.2596
-72.2696 71.2796 70.2896 69.2996 68.3096 67.3196 66.3297 65.3397 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 65.1747 65.9997 66.8247 66.8247 66.8247 66.8247
-66.8247 66.8247 66.8247 66.8247 66.8247 66.2059 65.5872 64.9684 64.3497
-63.1122 61.8747 60.6372 59.3997 57.5435 55.6872 53.831 51.9747 48.2623
-44.5498 42.0748 42.0748 0;
-#X coords 0 100 299 1 600 40 1;
-#X restore 14 278 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array delay-dry-vol-array 300 float 1;
-#A 0 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.922486
-0.919986 0.917486 0.914986 0.912486 0.909986 0.907486 0.904986 0.902486
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986;
-#X coords 0 1 299 0 600 40 1;
-#X restore 14 335 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array delay-wet-vol-array 300 float 1;
-#A 0 0.0166666 0.0166666 0.0166666 0.0416666 0.0416666 0.0416666 0.0416666
-0.0416666 0.0416666 0.0499999 0.0583333 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0708333 0.0708333 0.0708333 0.0708333 0.0708333
-0.0833333 0.0958333 0.0916666 0.0916666 0.0916666 0.0916666 0.125 0.135417
-0.145833 0.15625 0.166667 0.177083 0.1875 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.18125 0.164584 0.147917 0.13125 0.114584
-0.097917 0.0895837 0.0812503 0.072917 0.0645837 0.0562503 0.0562503
-0.0562503 0.0562503 0.0562503 0.0673614 0.0673614 0.0673614 0.0673614
-0.0673614 0.0673614 0.0673614 0.0673614 0.0673614 0.0673614 0.0673614
-0.0673614 0.0673614 0.0673614 0.107467 0.113717 0.119967 0.126217 0.132467
-0.138717 0.144967 0.151217 0.157468 0.165801 0.174134 0.182468 0.190801
-0.199134 0.207467 0.215801 0.224134 0.232467 0.240801 0.249134 0.257468
-0.267467 0.267467 0.267467 0.267467 0.267467 0.267467 0.267467 0.267467
-0.292468 0.317468 0.342468 0.352468 0.362468 0.372468 0.382468 0.382468
-0.382468 0.382468 0.382468 0.382468 0.382468 0.382468 0.382468 0.382468
-0.382468 0.382468 0.384551 0.386635 0.388718 0.390801 0.392885 0.394968
-0.397051 0.399135 0.401218 0.403301 0.405385 0.432468 0.432468 0.457468
-0.464611 0.464611 0.464611 0.464611 0.464611 0.464611 0.464611 0.464611
-0.464611 0.464611 0.464611 0.464611 0.469611 0.474611 0.479611 0.484611
-0.489611 0.494611 0.499611 0.504611 0.509611 0.514611;
-#X coords 0 1 299 0 600 40 1;
-#X restore 15 391 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array delay-feedback-array 300 float 1;
-#A 0 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.137502 0.150002 0.150002 0.150002 0.150002 0.162503 0.175003 0.175003
-0.175003 0.175003 0.175003 0.175003 0.175003 0.200003 0.200003 0.225004
-0.225004 0.250004 0.258337 0.266671 0.275004 0.287505 0.300005 0.312505
-0.325005 0.333339 0.341672 0.350006 0.375006;
-#X coords 0 1 299 0 600 40 1;
-#X restore 14 447 graph;
-#N canvas 111 41 703 397 reading-tables 0;
-#X obj 302 16 r bar;
-#X obj 41 51 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X obj 47 98 s filter-dry-vol;
-#X obj 57 148 s filter-wet-vol;
-#X obj 72 177 tabread filter-freq-l-array;
-#X obj 71 124 tabread filter-wet-vol-array;
-#X obj 61 75 tabread filter-dry-vol-array;
-#X obj 58 201 s filter-freq-l;
-#X obj 81 226 tabread filter-freq-r-array;
-#X obj 67 250 s filter-freq-r;
-#X obj 351 81 tabread delay-dry-vol-array;
-#X obj 338 103 s delay-dry-vol;
-#X obj 359 123 tabread delay-wet-vol-array;
-#X obj 346 145 s delay-wet-vol;
-#X obj 364 166 tabread delay-feedback-array;
-#X obj 260 332 s delay-l-mul;
-#X obj 350 189 s delay-feedback;
-#X obj 389 332 s delay-r-mul;
-#X obj 339 268 loadbang;
-#X msg 294 298 2;
-#X msg 389 298 3;
-#X connect 0 0 6 0;
-#X connect 0 0 5 0;
-#X connect 0 0 4 0;
-#X connect 0 0 8 0;
-#X connect 0 0 10 0;
-#X connect 0 0 12 0;
-#X connect 0 0 14 0;
-#X connect 1 0 2 0;
-#X connect 4 0 7 0;
-#X connect 5 0 3 0;
-#X connect 6 0 2 0;
-#X connect 8 0 9 0;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 14 0 16 0;
-#X connect 18 0 19 0;
-#X connect 18 0 20 0;
-#X connect 19 0 15 0;
-#X connect 20 0 17 0;
-#X restore 20 620 pd reading-tables;
-#X restore 24 607 pd effects-automation;
-#N canvas 123 63 702 364 instruments-automation 0;
-#X obj 121 67 vsl 15 128 0.1 100 1 0 empty empty transport 0 -8 0 8
--262144 -1 -1 0 1;
-#X obj 202 69 vsl 15 128 0.1 100 1 0 empty empty duration 0 -8 0 8
--262144 -1 -1 0 1;
-#X obj 296 102 hsl 128 15 -50 50 0 0 empty empty pan -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 391 180 hradio 15 1 0 3 empty empty instrument 0 -6 0 8 -262144
--1 -1 0;
-#N canvas 57 58 804 573 enroute 0;
-#X obj 267 67 inlet;
-#X obj 24 410 s instr-2-transport;
-#X obj 75 433 s instr-2-duration;
-#X obj 125 454 s instr-2-pan;
-#X obj 225 410 s instr-3-transport;
-#X obj 276 433 s instr-3-duration;
-#X obj 326 454 s instr-3-pan;
-#X obj 426 405 s instr-4-transport;
-#X obj 477 428 s instr-4-duration;
-#X obj 527 449 s instr-4-pan;
-#X obj 454 64 inlet;
-#X obj 270 181 route 0 1 2;
-#X obj 274 129 int 0;
-#X obj 273 155 pack f f;
-#X obj 269 96 t b f;
-#X obj 160 67 inlet;
-#X obj 163 181 route 0 1 2;
-#X obj 167 129 int 0;
-#X obj 166 155 pack f f;
-#X obj 162 96 t b f;
-#X obj 52 65 inlet;
-#X obj 55 179 route 0 1 2;
-#X obj 59 127 int 0;
-#X obj 58 153 pack f f;
-#X obj 54 94 t b f;
-#X connect 0 0 14 0;
-#X connect 10 0 12 1;
-#X connect 10 0 17 1;
-#X connect 10 0 22 1;
-#X connect 11 0 3 0;
-#X connect 11 1 6 0;
-#X connect 11 2 9 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 12 0;
-#X connect 14 1 13 1;
-#X connect 15 0 19 0;
-#X connect 16 0 2 0;
-#X connect 16 1 5 0;
-#X connect 16 2 8 0;
-#X connect 17 0 18 0;
-#X connect 18 0 16 0;
-#X connect 19 0 17 0;
-#X connect 19 1 18 1;
-#X connect 20 0 24 0;
-#X connect 21 0 1 0;
-#X connect 21 1 4 0;
-#X connect 21 2 7 0;
-#X connect 22 0 23 0;
-#X connect 23 0 21 0;
-#X connect 24 0 22 0;
-#X connect 24 1 23 1;
-#X restore 164 236 pd enroute;
-#X floatatom 106 202 5 0 0 0 - - -;
-#X floatatom 167 203 5 0 0 0 - - -;
-#X connect 0 0 4 0;
-#X connect 0 0 5 0;
-#X connect 1 0 4 1;
-#X connect 1 0 6 0;
-#X connect 2 0 4 2;
-#X connect 3 0 4 3;
-#X restore 214 603 pd instruments-automation;
-#X obj 268 50 cnv 15 2 400 empty empty solo 20 12 0 14 -258699 -66577
-0;
-#N canvas 0 0 450 300 graph1 0;
-#X array played3 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 650 236 graph;
-#X connect 7 0 9 0;
-#X connect 9 0 7 0;
-#X restore 255 65 pd sequencer;
-#N canvas 296 372 546 320 count-bars 0;
-#X obj 55 230 int 0;
-#X obj 104 230 + 1;
-#X obj 43 45 bang;
-#X msg 177 90 0;
-#X obj 329 64 r bar-position;
-#X obj 55 254 s bar;
-#X obj 56 191 spigot;
-#X obj 41 21 inlet bang;
-#X obj 110 40 inlet toggle;
-#X obj 178 66 inlet reset;
-#X obj 320 27 inlet set-position;
-#X connect 0 0 1 0;
-#X connect 0 0 5 0;
-#X connect 1 0 0 1;
-#X connect 2 0 6 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 2 0;
-#X connect 8 0 6 1;
-#X connect 9 0 3 0;
-#X connect 10 0 0 0;
-#X restore 381 193 pd count-bars;
-#X obj 499 168 hsl 128 15 0 300 0 0 empty empty position -2 -6 0 8
--261681 -1 -1 0 1;
-#X obj 402 169 tgl 15 0 empty empty toggle 0 -6 0 8 -261681 -1 -1 1
-1;
-#X obj 450 168 bng 15 250 50 0 empty empty rewind 0 -6 0 8 -261681
--1 -1;
-#X text 364 65 <-- open ME !;
-#X obj 597 193 loadbang;
-#X msg 598 215 1;
-#X obj 53 105 vsl 15 128 0 1 0 0 sax-vol-in empty sax-vol-in 0 -8 0
-8 -262144 -1 -1 0 1;
-#X obj 156 91 adc~ 8;
-#X connect 0 0 4 0;
-#X connect 0 1 5 0;
-#X connect 0 2 6 0;
-#X connect 0 3 7 0;
-#X connect 1 0 4 1;
-#X connect 1 1 5 1;
-#X connect 1 2 0 0;
-#X connect 1 2 9 0;
-#X connect 2 0 1 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 1;
-#X connect 10 0 9 3;
-#X connect 11 0 9 1;
-#X connect 12 0 9 2;
-#X connect 14 0 15 0;
-#X connect 15 0 11 0;
-#X connect 15 0 12 0;
-#X connect 17 0 0 1;
diff --git a/externals/frankenstein/patches/SHOWME.pd b/externals/frankenstein/patches/SHOWME.pd
deleted file mode 100644
index 539fabb2e485dd02fef72b79658fa5b88467eb3d..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/SHOWME.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#N canvas 203 60 777 510 12;
-#X obj 572 56 chord_melo_test2;
-#X obj 531 85 tabwrite src;
-#X obj 644 87 tabwrite dest;
-#N canvas 0 0 450 300 graph25 0;
-#X array src 16 float 1;
-#A 0 55 59 62 60 52 50 48 47 48 55 57 59 60 55 52 48;
-#X array dest 16 float 1;
-#A 0 41 67 72 57 55 53 46 44 55 64 40 72 76 62 42 60;
-#X coords 0 127 15 0 400 250 1;
-#X restore 75 32 graph;
-#X obj 572 38 tgl 15 0 empty empty START 0 -6 0 8 -258699 -1 -1 1 1
-;
-#X floatatom 550 138 5 0 0 0 - - -;
-#X floatatom 596 138 5 0 0 0 - - -;
-#X floatatom 648 137 5 0 0 0 - - -;
-#X obj 591 279 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1
-1 1;
-#X obj 627 279 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1
-0 1;
-#X connect 0 0 1 0;
-#X connect 0 0 5 0;
-#X connect 0 1 2 0;
-#X connect 0 1 6 0;
-#X connect 0 2 1 1;
-#X connect 0 2 2 1;
-#X connect 0 2 7 0;
-#X connect 4 0 0 0;
diff --git a/externals/frankenstein/patches/bay.orc b/externals/frankenstein/patches/bay.orc
deleted file mode 100755
index e754d311811fb7eb15daab92218524562b44d5da..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/bay.orc
+++ /dev/null
@@ -1,418 +0,0 @@
-; ================================================================
-; Header
-; ================================================================
-sr=44100
-kr=882
-ksmps=50
-nchnls=2
-
-; ================================================================
-; Globals
-; ================================================================
-zakinit 10,10
-
-; Global variable for the reverb unit
-ga1 init 0
-
-; ================================================================
-; Tables
-; ================================================================
-; Waveform for the string-pad
-iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25,  .0, .1,  .1, .1
-
-; Senoid required by chorus
-isine ftgen 2, 0, 4096, 10, 1
-
-
-; ================================================================
-; Instruments
-; ================================================================
-
-
-instr 1	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz1"
-kpos invalue "pos1"
-kamp  invalue "amp1"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 2	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz2"
-kpos invalue "pos2"
-kamp  invalue "amp2"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 3	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
- ; ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz3"
-kpos invalue "pos3"
-kamp  invalue "amp3"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-instr 4	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz4"
-kpos invalue "pos4"
-kamp  invalue "amp4"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-
-
-
-; strumento senza invalue
-
-instr 9	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-  ihz  = p4
-  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-  ipos = p6
-  iamp = ampdb(idb)
-
-; modified by dmorelli
-
-;kpos invalue "pos1"
-;kamp  invalue "amp1"
-;kctrl = kamp*70
-;kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, ihz, 1            ; audio oscillator
-  acel1   oscil   kctrl, ihz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, ihz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  ippan =       ipos*1.570796325  ; half of PI (radians of 90o angle)
-  ipleft        =       cos(ippan)        ; half sign "down"
-  ipright       =       sin(ippan)        ; half sign "up"
-  asig1 = asig*ipleft;
-  asig2 = asig*ipright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; ================================================================
-; EFFECTS
-; ================================================================
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
-; I made some of its parameters accesible trhough score
-instr 10	;Chorus
-  ; Read input from zak
-  a1     zar     1
-  a2     zar     2
-  idlyml=p4      ;delay in milliseconds
-  k1             oscili          idlyml/p5, 1, 2
-  ar1l           vdelay3 a1, idlyml/5+k1, 900    ;delayed sound 1
-  ar1r           vdelay3 a2, idlyml/5+k1, 900    ;delayed sound 1
-  k2             oscili          idlyml/p5, .995, 2
-  ar2l           vdelay3 a1, idlyml/5+k2, 700    ;delayed sound 2
-  ar2r           vdelay3 a2, idlyml/5+k2, 700    ;delayed sound 2
-  k3             oscili          idlyml/p5, 1.05, 2
-  ar3l           vdelay3 a1, idlyml/5+k3, 700    ;delayed sound 3
-  ar3r           vdelay3 a2, idlyml/5+k3, 700    ;delayed sound 3
-  k4             oscili          idlyml/p5, 1, 2
-  ar4l           vdelay3 a1, idlyml/5+k4, 900    ;delayed sound 4
-  ar4r           vdelay3 a2, idlyml/5+k4, 900    ;delayed sound 4
-  aoutl          =               (a1+ar1l+ar2l+ar3l+ar4l)*.5
-  aoutr          =               (a2+ar1r+ar2r+ar3r+ar4r)*.5
-
-  ; To the output mixer
-  zawm            aoutl, 5
-  zawm            aoutr, 6
-  ; and also to the reverb unit
-  ga1 = ga1 + (aoutl+aoutr)*.5
-endin
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Reverb
-; 8 delay line FDN reverb, with feedback matrix based upon 
-; physical modeling scattering junction of 8 lossless waveguides
-; of equal characteristic impedance. Based on Julius O. Smith III, 
-; "A New Approach to Digital Reverberation using Closed Waveguide
-; Networks," Proceedings of the International Computer Music 
-; Conference 1985, p. 47-53 (also available as a seperate
-; publication from CCRMA), as well as some more recent papers by
-; Smith and others.
-;
-; Coded by Sean Costello, October 1999
-instr 25	;Reverb
-  ; Note: ga1 is the global input to the reverb.
-  afilt1 init 0
-  afilt2 init 0
-  afilt3 init 0
-  afilt4 init 0
-  afilt5 init 0
-  afilt6 init 0
-  afilt7 init 0
-  afilt8 init 0
-  idel1 = (2473.000/sr)
-  idel2 = (2767.000/sr)
-  idel3 = (3217.000/sr)
-  idel4 = (3557.000/sr)
-  idel5 = (3907.000/sr)
-  idel6 = (4127.000/sr)
-  idel7 = (2143.000/sr)
-  idel8 = (1933.000/sr)
-  
-  
-  igain = p4      ; gain of reverb. Adjust empirically
-                  ; for desired reverb time. .6 gives
-                  ; a good small "live" room sound, .8
-                  ; a small hall, .9 a large hall,
-                  ; .99 an enormous stone cavern.
-  
-  ipitchmod = p5  ; amount of random pitch modulation
-                  ; for the delay lines. 1 is the "normal"
-                  ; amount, but this may be too high for
-                  ; held pitches such as piano tones.
-                  ; Adjust to taste.
-  
-  itone = p6      ; Cutoff frequency of lowpass filters
-                  ; in feedback loops of delay lines,
-                  ; in Hz. Lower cutoff frequencies results
-                  ; in a sound with more high-frequency
-                  ; damping.
-  
-  ; k1-k8 are used to add random pitch modulation to the
-  ; delay lines. Helps eliminate metallic overtones
-  ; in the reverb sound.
-  k1      randi   .001, 3.1, .06
-  k2      randi   .0011, 3.5, .9
-  k3      randi   .0017, 1.11, .7
-  k4      randi   .0006, 3.973, .3
-  k5      randi   .001, 2.341, .63
-  k6      randi   .0011, 1.897, .7
-  k7      randi   .0017, 0.891, .9
-  k8      randi   .0006, 3.221, .44
-  ; apj is used to calculate "resultant junction pressure" for 
-  ; the scattering junction of 8 lossless waveguides
-  ; of equal characteristic impedance. If you wish to
-  ; add more delay lines, simply add them to the following 
-  ; equation, and replace the .25 by 2/N, where N is the 
-  ; number of delay lines.
-  apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
-  
-  
-  adum1   delayr  1
-  adel1   deltapi idel1 + k1 * ipitchmod
-          delayw  ga1 + apj - afilt1
-  
-  adum2   delayr  1
-  adel2   deltapi idel2 + k2 * ipitchmod
-          delayw  ga1 + apj - afilt2
-  
-  adum3   delayr  1
-  adel3   deltapi idel3 + k3 * ipitchmod
-          delayw  ga1 + apj - afilt3
-  
-  adum4   delayr  1
-  adel4   deltapi idel4 + k4 * ipitchmod
-          delayw  ga1 + apj - afilt4
-  
-  adum5   delayr  1
-  adel5   deltapi idel5 + k5 * ipitchmod
-          delayw  ga1 + apj - afilt5
-  
-  adum6   delayr  1
-  adel6   deltapi idel6 + k6 * ipitchmod
-          delayw  ga1 + apj - afilt6
-  
-  adum7   delayr  1
-  adel7   deltapi idel7 + k7 * ipitchmod
-          delayw  ga1 + apj - afilt7
-  
-  adum8   delayr  1
-  adel8   deltapi idel8 + k8 * ipitchmod
-          delayw  ga1 + apj - afilt8
-  
-  ; 1st order lowpass filters in feedback
-  ; loops of delay lines.
-  afilt1  tone    adel1 * igain, itone
-  afilt2  tone    adel2 * igain, itone
-  afilt3  tone    adel3 * igain, itone
-  afilt4  tone    adel4 * igain, itone
-  afilt5  tone    adel5 * igain, itone
-  afilt6  tone    adel6 * igain, itone
-  afilt7  tone    adel7 * igain, itone
-  afilt8  tone    adel8 * igain, itone
-  
-  ; The outputs of the delay lines are summed
-  ; and sent to the stereo outputs. This could
-  ; easily be modified for a 4 or 8-channel 
-  ; sound system.
-  aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
-  aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
-  ;outs    aout1, aout2
-  ; To the output mixer
-  zawm aout1, 5
-  zawm aout2, 6
-  ga1 = 0
-endin
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Output mixer
-; It applies a bass enhancement, compression and fadeout
-; to the whole piece,
-instr 30	;Mixer
-  ; Read input from zak
-  a1  zar 5
-  a2  zar 6
-  ; Bass enhancement
-  al1 butterlp a1, 100
-  al2 butterlp a2, 100
-  a1 = al1*1.5 +a1
-  a2 = al2*1.5 +a2 
-
-  ; Global amplitude shape
-  ; It applies a gain of p4 to the whole piece, and creates a
-  ; fadeout the last p5 seconds
-  kenv   linseg  p4, p3-p5, p4, p5, 0 
-  a1=a1*kenv
-  a2=a2*kenv 
-  
-  ; Compression
-  a1 dam a1, 5000, 0.5, 1, 0.2, 0.1  
-  a2 dam a2, 5000, 0.5, 1, 0.2, 0.1  
-  
-  outs a1, a2
-  zacl 0, 10
-endin
-
diff --git a/externals/frankenstein/patches/feb05/bay.orc b/externals/frankenstein/patches/feb05/bay.orc
deleted file mode 100755
index 78edb681b03b638afce66488210ea7e560cfc0e3..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/feb05/bay.orc
+++ /dev/null
@@ -1,463 +0,0 @@
-; ================================================================
-; Header
-; ================================================================
-sr=44100
-kr=882
-ksmps=50
-nchnls=2
-
-; ================================================================
-; Globals
-; ================================================================
-zakinit 10,10
-
-; Global variable for the reverb unit
-ga1 init 0
-
-; ================================================================
-; Tables
-; ================================================================
-; Waveform for the string-pad
-iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25,  .0, .1,  .1, .1
-
-; Senoid required by chorus
-isine ftgen 2, 0, 4096, 10, 1
-
-
-; ================================================================
-; Instruments
-; ================================================================
-
-
-instr 1	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz1"
-kpos invalue "pos1"
-kamp  invalue "amp1"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 2	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz2"
-kpos invalue "pos2"
-kamp  invalue "amp2"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 3	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
- ; ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz3"
-kpos invalue "pos3"
-kamp  invalue "amp3"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 4	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz4"
-kpos invalue "pos4"
-kamp  invalue "amp4"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 5	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz5"
-kpos invalue "pos5"
-kamp  invalue "amp5"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; live input per reverbero
-
-instr 8	;live input
-  asig1,asig2	ins
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-; strumento senza invalue
-
-instr 9	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-  ihz  = p4
-  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-  ipos = p6
-  iamp = ampdb(idb)
-
-; modified by dmorelli
-
-;kpos invalue "pos1"
-;kamp  invalue "amp1"
-;kctrl = kamp*70
-;kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, ihz, 1            ; audio oscillator
-  acel1   oscil   kctrl, ihz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, ihz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  ippan =       ipos*1.570796325  ; half of PI (radians of 90o angle)
-  ipleft        =       cos(ippan)        ; half sign "down"
-  ipright       =       sin(ippan)        ; half sign "up"
-  asig1 = asig*ipleft;
-  asig2 = asig*ipright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; ================================================================
-; EFFECTS
-; ================================================================
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
-; I made some of its parameters accesible trhough score
-instr 10	;Chorus
-  ; Read input from zak
-  a1     zar     1
-  a2     zar     2
-  idlyml=p4      ;delay in milliseconds
-  k1             oscili          idlyml/p5, 1, 2
-  ar1l           vdelay3 a1, idlyml/5+k1, 900    ;delayed sound 1
-  ar1r           vdelay3 a2, idlyml/5+k1, 900    ;delayed sound 1
-  k2             oscili          idlyml/p5, .995, 2
-  ar2l           vdelay3 a1, idlyml/5+k2, 700    ;delayed sound 2
-  ar2r           vdelay3 a2, idlyml/5+k2, 700    ;delayed sound 2
-  k3             oscili          idlyml/p5, 1.05, 2
-  ar3l           vdelay3 a1, idlyml/5+k3, 700    ;delayed sound 3
-  ar3r           vdelay3 a2, idlyml/5+k3, 700    ;delayed sound 3
-  k4             oscili          idlyml/p5, 1, 2
-  ar4l           vdelay3 a1, idlyml/5+k4, 900    ;delayed sound 4
-  ar4r           vdelay3 a2, idlyml/5+k4, 900    ;delayed sound 4
-  aoutl          =               (a1+ar1l+ar2l+ar3l+ar4l)*.5
-  aoutr          =               (a2+ar1r+ar2r+ar3r+ar4r)*.5
-
-  ; To the output mixer
-  zawm            aoutl, 5
-  zawm            aoutr, 6
-  ; and also to the reverb unit
-  ga1 = ga1 + (aoutl+aoutr)*.5
-endin
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Reverb
-; 8 delay line FDN reverb, with feedback matrix based upon 
-; physical modeling scattering junction of 8 lossless waveguides
-; of equal characteristic impedance. Based on Julius O. Smith III, 
-; "A New Approach to Digital Reverberation using Closed Waveguide
-; Networks," Proceedings of the International Computer Music 
-; Conference 1985, p. 47-53 (also available as a seperate
-; publication from CCRMA), as well as some more recent papers by
-; Smith and others.
-;
-; Coded by Sean Costello, October 1999
-instr 25	;Reverb
-  ; Note: ga1 is the global input to the reverb.
-  afilt1 init 0
-  afilt2 init 0
-  afilt3 init 0
-  afilt4 init 0
-  afilt5 init 0
-  afilt6 init 0
-  afilt7 init 0
-  afilt8 init 0
-  idel1 = (2473.000/sr)
-  idel2 = (2767.000/sr)
-  idel3 = (3217.000/sr)
-  idel4 = (3557.000/sr)
-  idel5 = (3907.000/sr)
-  idel6 = (4127.000/sr)
-  idel7 = (2143.000/sr)
-  idel8 = (1933.000/sr)
-  
-  
-  igain = p4      ; gain of reverb. Adjust empirically
-                  ; for desired reverb time. .6 gives
-                  ; a good small "live" room sound, .8
-                  ; a small hall, .9 a large hall,
-                  ; .99 an enormous stone cavern.
-  
-  ipitchmod = p5  ; amount of random pitch modulation
-                  ; for the delay lines. 1 is the "normal"
-                  ; amount, but this may be too high for
-                  ; held pitches such as piano tones.
-                  ; Adjust to taste.
-  
-  itone = p6      ; Cutoff frequency of lowpass filters
-                  ; in feedback loops of delay lines,
-                  ; in Hz. Lower cutoff frequencies results
-                  ; in a sound with more high-frequency
-                  ; damping.
-  
-  ; k1-k8 are used to add random pitch modulation to the
-  ; delay lines. Helps eliminate metallic overtones
-  ; in the reverb sound.
-  k1      randi   .001, 3.1, .06
-  k2      randi   .0011, 3.5, .9
-  k3      randi   .0017, 1.11, .7
-  k4      randi   .0006, 3.973, .3
-  k5      randi   .001, 2.341, .63
-  k6      randi   .0011, 1.897, .7
-  k7      randi   .0017, 0.891, .9
-  k8      randi   .0006, 3.221, .44
-  ; apj is used to calculate "resultant junction pressure" for 
-  ; the scattering junction of 8 lossless waveguides
-  ; of equal characteristic impedance. If you wish to
-  ; add more delay lines, simply add them to the following 
-  ; equation, and replace the .25 by 2/N, where N is the 
-  ; number of delay lines.
-  apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
-  
-  
-  adum1   delayr  1
-  adel1   deltapi idel1 + k1 * ipitchmod
-          delayw  ga1 + apj - afilt1
-  
-  adum2   delayr  1
-  adel2   deltapi idel2 + k2 * ipitchmod
-          delayw  ga1 + apj - afilt2
-  
-  adum3   delayr  1
-  adel3   deltapi idel3 + k3 * ipitchmod
-          delayw  ga1 + apj - afilt3
-  
-  adum4   delayr  1
-  adel4   deltapi idel4 + k4 * ipitchmod
-          delayw  ga1 + apj - afilt4
-  
-  adum5   delayr  1
-  adel5   deltapi idel5 + k5 * ipitchmod
-          delayw  ga1 + apj - afilt5
-  
-  adum6   delayr  1
-  adel6   deltapi idel6 + k6 * ipitchmod
-          delayw  ga1 + apj - afilt6
-  
-  adum7   delayr  1
-  adel7   deltapi idel7 + k7 * ipitchmod
-          delayw  ga1 + apj - afilt7
-  
-  adum8   delayr  1
-  adel8   deltapi idel8 + k8 * ipitchmod
-          delayw  ga1 + apj - afilt8
-  
-  ; 1st order lowpass filters in feedback
-  ; loops of delay lines.
-  afilt1  tone    adel1 * igain, itone
-  afilt2  tone    adel2 * igain, itone
-  afilt3  tone    adel3 * igain, itone
-  afilt4  tone    adel4 * igain, itone
-  afilt5  tone    adel5 * igain, itone
-  afilt6  tone    adel6 * igain, itone
-  afilt7  tone    adel7 * igain, itone
-  afilt8  tone    adel8 * igain, itone
-  
-  ; The outputs of the delay lines are summed
-  ; and sent to the stereo outputs. This could
-  ; easily be modified for a 4 or 8-channel 
-  ; sound system.
-  aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
-  aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
-  ;outs    aout1, aout2
-  ; To the output mixer
-  zawm aout1, 5
-  zawm aout2, 6
-  ga1 = 0
-endin
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Output mixer
-; It applies a bass enhancement, compression and fadeout
-; to the whole piece,
-instr 30	;Mixer
-  ; Read input from zak
-  a1  zar 5
-  a2  zar 6
-  ; Bass enhancement
-  al1 butterlp a1, 100
-  al2 butterlp a2, 100
-  a1 = al1*1.5 +a1
-  a2 = al2*1.5 +a2 
-
-  ; Global amplitude shape
-  ; It applies a gain of p4 to the whole piece, and creates a
-  ; fadeout the last p5 seconds
-  kenv   linseg  p4, p3-p5, p4, p5, 0 
-  a1=a1*kenv
-  a2=a2*kenv 
-  
-  ; Compression
-  a1 dam a1, 5000, 0.5, 1, 0.2, 0.1  
-  a2 dam a2, 5000, 0.5, 1, 0.2, 0.1  
-  
-  outs a1, a2
-  zacl 0, 10
-endin
-
diff --git a/externals/frankenstein/patches/feb05/bay.pd b/externals/frankenstein/patches/feb05/bay.pd
deleted file mode 100644
index 2927cd738f024ebf1fa0dfb29863565b9c4b495b..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/feb05/bay.pd
+++ /dev/null
@@ -1,250 +0,0 @@
-#N canvas 253 22 999 737 10;
-#X symbolatom 157 205 18 0 0 2 next_chord - -;
-#N canvas 39 349 535 332 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 762 65 pd readme;
-#X obj 121 329 harmonizer;
-#X msg 52 286 current \$1;
-#X msg 158 283 target \$1;
-#X obj 52 262 symbol;
-#X obj 52 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 246 369 unpack f f f f f;
-#X obj 127 108 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 127 132 set \$1;
-#N canvas 527 22 738 448 midi 1;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X obj 271 66 chord 120;
-#X connect 1 0 9 0;
-#X connect 1 1 9 1;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 7 0;
-#X connect 6 0 5 0;
-#X connect 7 0 0 0;
-#X connect 9 2 3 1;
-#X connect 9 2 5 1;
-#X connect 9 2 8 0;
-#X connect 9 2 4 0;
-#X restore 512 135 pd midi;
-#N canvas 547 120 674 372 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 145 105 read test.graph;
-#X msg 175 135 init 1;
-#X msg 115 77 write /Users/dc/Desktop/Orme.linux/TESTING/bel0205a.graph
-;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 429 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 28 404 bang;
-#X obj 439 580 mtof;
-#X obj 488 579 mtof;
-#X obj 573 583 mtof;
-#X obj 109 431 print;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X msg 718 588 event i 10 0 17000 10 30;
-#X msg 718 611 event i 30 0 17000 2 30;
-#X msg 719 564 event i 25 0 17000 0.98 0.8 20000;
-#X obj 648 539 loadbang;
-#X msg 443 610 event i 9 0 10 \$1 80 0.5;
-#X obj 531 582 mtof;
-#X obj 617 584 mtof;
-#X obj 580 54 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 22 486 r novelty;
-#X obj 599 121 int 0;
-#X obj 646 120 + 1;
-#X obj 600 171 tabread tab-novelty;
-#X obj 600 194 s novelty;
-#X obj 685 119 table tab-novelty;
-#X obj 600 147 % 10;
-#X obj 462 63 t b b;
-#X msg 645 504 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
-#X obj 203 97 symbol;
-#X msg 203 125 tonality \$1;
-#X obj 203 73 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X obj 307 94 symbol;
-#X obj 307 70 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X msg 307 122 modulation \$1;
-#X obj 445 189 print sequence;
-#X msg 235 15 search 9 1 5 0.9;
-#X obj 76 576 outlet;
-#X obj 145 576 outlet;
-#X obj 220 579 outlet;
-#X obj 283 579 outlet;
-#X obj 349 581 outlet;
-#X obj 606 15 loadbang;
-#X msg 613 41 1;
-#X obj 580 73 metro 10000;
-#N canvas 0 22 458 308 bar 0;
-#X obj 133 152 outlet;
-#X obj 114 25 r bar;
-#X obj 112 54 int 0;
-#X obj 172 52 + 1;
-#X obj 111 81 % 2;
-#X obj 115 122 select 0;
-#X obj 36 182 s nets;
-#X msg 36 155 realbar 1;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 0 4 0;
-#X connect 3 0 2 1;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
-#X connect 5 0 7 0;
-#X connect 7 0 6 0;
-#X restore 466 28 pd bar;
-#X obj 40 13 r novita;
-#X obj 94 157 chords_memory /Users/dc/Desktop/Orme.linux/TESTING/bel0205a.graph
-;
-#N canvas 0 22 450 300 graph2 0;
-#X array notes 6 float 3;
-#A 0 1 24 48 52 76 88;
-#X coords 0 127 5 1 200 127 1;
-#X restore 753 181 graph;
-#X msg 525 363 \; notes 1 2 \$1;
-#X msg 555 332 \; notes 2 3 \$1;
-#X msg 603 393 \; notes 3 4 \$1;
-#X floatatom 762 402 0 0 0 3 - - -;
-#X floatatom 717 323 0 0 99 1 index - -;
-#X msg 842 350 set another_table;
-#X text 714 402 value;
-#X obj 762 375 tabread notes;
-#X msg 804 325 set notes;
-#X msg 502 393 \; notes 0 1 \$1;
-#X msg 646 361 \; notes 4 5 \$1;
-#X connect 2 0 15 0;
-#X connect 2 0 27 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 24 0;
-#X connect 15 0 59 0;
-#X connect 15 0 80 0;
-#X connect 15 1 9 1;
-#X connect 15 1 25 0;
-#X connect 15 1 60 0;
-#X connect 15 1 71 0;
-#X connect 15 2 10 1;
-#X connect 15 2 37 0;
-#X connect 15 2 61 0;
-#X connect 15 2 72 0;
-#X connect 15 3 11 1;
-#X connect 15 3 26 0;
-#X connect 15 3 62 0;
-#X connect 15 3 73 0;
-#X connect 15 4 12 1;
-#X connect 15 4 38 0;
-#X connect 15 4 63 0;
-#X connect 15 4 81 0;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 69 0;
-#X connect 19 0 69 0;
-#X connect 20 0 69 0;
-#X connect 21 0 28 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 24 0 36 0;
-#X connect 25 0 36 0;
-#X connect 26 0 36 0;
-#X connect 28 0 29 0;
-#X connect 29 0 69 0;
-#X connect 30 0 28 1;
-#X connect 30 0 31 0;
-#X connect 35 0 34 0;
-#X connect 35 0 32 0;
-#X connect 35 0 33 0;
-#X connect 35 0 48 0;
-#X connect 37 0 36 0;
-#X connect 38 0 36 0;
-#X connect 39 0 66 0;
-#X connect 41 0 42 0;
-#X connect 41 0 46 0;
-#X connect 42 0 41 1;
-#X connect 43 0 44 0;
-#X connect 46 0 43 0;
-#X connect 47 0 21 0;
-#X connect 47 1 41 0;
-#X connect 49 0 50 0;
-#X connect 50 0 69 0;
-#X connect 51 0 49 0;
-#X connect 52 0 69 0;
-#X connect 54 0 56 0;
-#X connect 55 0 54 0;
-#X connect 56 0 69 0;
-#X connect 58 0 69 0;
-#X connect 64 0 65 0;
-#X connect 65 0 39 0;
-#X connect 67 0 47 0;
-#X connect 68 0 30 0;
-#X connect 69 0 0 0;
-#X connect 69 0 5 1;
-#X connect 69 0 22 0;
-#X connect 69 0 49 1;
-#X connect 69 0 16 0;
-#X connect 69 0 54 1;
-#X connect 69 1 53 0;
-#X connect 69 2 57 0;
-#X connect 75 0 78 0;
-#X connect 76 0 78 0;
-#X connect 78 0 74 0;
-#X connect 79 0 78 0;
diff --git a/externals/frankenstein/patches/feb05/bay.sco b/externals/frankenstein/patches/feb05/bay.sco
deleted file mode 100755
index 06d43e18a27d4628a348a863b85eaf91c846c181..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/feb05/bay.sco
+++ /dev/null
@@ -1,3 +0,0 @@
-f0 100000
-
-; EOF
\ No newline at end of file
diff --git a/externals/frankenstein/patches/feb05/bel0205a.graph b/externals/frankenstein/patches/feb05/bel0205a.graph
deleted file mode 100644
index d842b0b8312dc63632c11251ef4a84925ba251c9..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/patches/feb05/bel0205a.graph and /dev/null differ
diff --git a/externals/frankenstein/patches/feb05/belfast0205.graph b/externals/frankenstein/patches/feb05/belfast0205.graph
deleted file mode 100644
index cc5472fe961b06d59da2b19ed9c9e5f568005ece..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/patches/feb05/belfast0205.graph and /dev/null differ
diff --git a/externals/frankenstein/patches/feb05/davidcsoundtest2.pd b/externals/frankenstein/patches/feb05/davidcsoundtest2.pd
deleted file mode 100644
index eef236a53fdf0fdadcd2cc4f6181afdc7a0ac3fa..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/feb05/davidcsoundtest2.pd
+++ /dev/null
@@ -1,609 +0,0 @@
-#N canvas 439 190 404 363 10;
-#N canvas 0 25 815 569 bay 0;
-#X obj 12 83 loadbang;
-#N canvas 0 22 763 340 ascoltaHits 0;
-#X obj 161 223 outlet;
-#X obj 146 33 r 1-hit;
-#X obj 147 54 bang;
-#X msg 147 83 60;
-#X obj 198 57 bang;
-#X obj 197 36 r 2-hit;
-#X msg 198 86 72;
-#X obj 254 57 bang;
-#X msg 254 86 48;
-#X obj 253 36 r 3-hit;
-#X obj 303 60 bang;
-#X msg 303 89 67;
-#X obj 303 39 r 4-hit;
-#X obj 359 60 bang;
-#X obj 422 60 bang;
-#X obj 422 39 r 6-hit;
-#X obj 359 39 r 5-hit;
-#X msg 359 89 76;
-#X msg 422 89 36;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 0 0;
-#X connect 9 0 7 0;
-#X connect 10 0 11 0;
-#X connect 11 0 0 0;
-#X connect 12 0 10 0;
-#X connect 13 0 17 0;
-#X connect 14 0 18 0;
-#X connect 15 0 14 0;
-#X connect 16 0 13 0;
-#X connect 17 0 0 0;
-#X connect 18 0 0 0;
-#X restore 428 102 pd ascoltaHits;
-#X obj 430 164 mtof;
-#N canvas 0 22 466 316 chords 0;
-#X obj 132 43 inlet;
-#X obj 131 240 outlet;
-#X obj 262 31 loadbang;
-#X obj 260 74 metro 20000;
-#X obj 257 115 int 0;
-#X obj 303 117 + 1;
-#X obj 257 136 % 2;
-#X obj 246 162 select 0 1;
-#X obj 131 214 + 0;
-#X msg 243 182 0;
-#X msg 270 184 7;
-#X msg 260 54 1;
-#X connect 0 0 8 0;
-#X connect 2 0 11 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 1;
-#X connect 6 0 7 0;
-#X connect 7 0 9 0;
-#X connect 7 1 10 0;
-#X connect 8 0 1 0;
-#X connect 9 0 8 1;
-#X connect 10 0 8 1;
-#X connect 11 0 3 0;
-#X restore 430 131 pd chords;
-#N canvas 0 22 940 672 ascolta-valori 0;
-#X obj 135 554 outlet;
-#X obj 28 146 line;
-#X msg 27 123 \$1 100;
-#X msg 27 175 control amp1 \$1;
-#X obj 146 100 line;
-#X msg 145 77 \$1 100;
-#X obj 144 26 + 1;
-#X obj 143 51 / 2;
-#X obj 265 143 line;
-#X msg 264 119 \$1 100;
-#X obj 382 135 line;
-#X msg 381 112 \$1 100;
-#X obj 380 61 + 1;
-#X obj 379 86 / 2;
-#X msg 264 171 control amp2 \$1;
-#X obj 297 304 line;
-#X msg 296 281 \$1 100;
-#X obj 414 288 line;
-#X msg 413 265 \$1 100;
-#X obj 412 214 + 1;
-#X obj 411 239 / 2;
-#X obj 533 331 line;
-#X msg 532 307 \$1 100;
-#X obj 650 323 line;
-#X msg 649 300 \$1 100;
-#X obj 648 249 + 1;
-#X obj 647 274 / 2;
-#X msg 296 324 control amp3 \$1;
-#X msg 531 359 control amp4 \$1;
-#N canvas 0 22 678 338 graph16 0;
-#X array vol 100 float 3;
-#A 0 0.382146 0.444444 0.527258 0.5757 0.610071 0.636731 0.658514 0.676931
-0.692884 0.706956 0.719544 0.730931 0.741327 0.75089 0.759744 0.767987
-0.775698 0.782941 0.78977 0.796229 0.802357 0.808187 0.813745 0.819055
-0.82414 0.829017 0.833703 0.838212 0.842557 0.84675 0.8508 0.854718
-0.858511 0.862187 0.865754 0.869217 0.872583 0.875856 0.879043 0.882146
-0.885171 0.888121 0.891 0.893811 0.896558 0.899243 0.901869 0.904438
-0.906954 0.909417 0.911831 0.914197 0.916517 0.918792 0.921026 0.923218
-0.925371 0.927485 0.929563 0.931605 0.933613 0.935588 0.937531 0.939443
-0.941324 0.943177 0.945001 0.946797 0.948567 0.950311 0.952031 0.953725
-0.955396 0.957044 0.95867 0.960273 0.961856 0.963418 0.964959 0.966481
-0.967984 0.969468 0.970934 0.972382 0.973813 0.975227 0.976624 0.978006
-0.979371 0.980721 0.982056 0.983376 0.984682 0.985974 0.987252 0.988516
-0.989767 0.991005 0.99223 1.0615;
-#X coords 0 1 99 0 200 140 1;
-#X restore 532 24 graph;
-#X obj 26 101 tabread vol;
-#X obj 28 76 * 100;
-#X obj 265 97 tabread vol;
-#X obj 262 75 * 100;
-#X obj 28 48 clip 0 1;
-#X obj 262 40 clip 0 1;
-#X obj 307 264 tabread vol;
-#X obj 307 242 * 100;
-#X obj 308 222 clip 0 1;
-#X obj 534 284 tabread vol;
-#X obj 534 262 * 100;
-#X obj 535 242 clip 0 1;
-#X msg 149 129 control pos1 \$1;
-#X msg 385 164 control pos2 \$1;
-#X msg 417 317 control pos3 \$1;
-#X msg 653 352 control pos4 \$1;
-#X obj 434 493 line;
-#X msg 433 469 \$1 100;
-#X obj 551 485 line;
-#X msg 550 462 \$1 100;
-#X obj 549 411 + 1;
-#X obj 548 436 / 2;
-#X obj 435 446 tabread vol;
-#X obj 435 424 * 100;
-#X obj 436 404 clip 0 1;
-#X msg 432 521 control amp5 \$1;
-#X msg 553 514 control pos5 \$1;
-#X obj 28 13 r 1-velo;
-#X obj 145 6 r 1-x;
-#X obj 264 17 r 2-velo;
-#X obj 296 202 r 3-velo;
-#X obj 412 194 r 3-x;
-#X obj 528 216 r 4-velo;
-#X obj 649 229 r 4-x;
-#X obj 429 378 r 5-velo;
-#X obj 550 391 r 5-x;
-#X obj 382 40 r 2-x;
-#X obj 839 58 + 1;
-#X obj 761 97 log;
-#X obj 803 59 int 1;
-#X obj 759 119 / 4.65;
-#X obj 807 83 t f f;
-#X obj 785 33 metro 10;
-#X obj 785 14 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 763 183 tabwrite vol;
-#X msg 848 32 1;
-#X obj 758 141 + 0.8;
-#X obj 757 160 / 1.8;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X connect 4 0 42 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 5 0;
-#X connect 8 0 14 0;
-#X connect 9 0 8 0;
-#X connect 10 0 43 0;
-#X connect 11 0 10 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 0 0;
-#X connect 15 0 27 0;
-#X connect 16 0 15 0;
-#X connect 17 0 44 0;
-#X connect 18 0 17 0;
-#X connect 19 0 20 0;
-#X connect 20 0 18 0;
-#X connect 21 0 28 0;
-#X connect 22 0 21 0;
-#X connect 23 0 45 0;
-#X connect 24 0 23 0;
-#X connect 25 0 26 0;
-#X connect 26 0 24 0;
-#X connect 27 0 0 0;
-#X connect 28 0 0 0;
-#X connect 30 0 2 0;
-#X connect 31 0 30 0;
-#X connect 32 0 9 0;
-#X connect 33 0 32 0;
-#X connect 34 0 31 0;
-#X connect 35 0 33 0;
-#X connect 36 0 16 0;
-#X connect 37 0 36 0;
-#X connect 38 0 37 0;
-#X connect 39 0 22 0;
-#X connect 40 0 39 0;
-#X connect 41 0 40 0;
-#X connect 42 0 0 0;
-#X connect 43 0 0 0;
-#X connect 44 0 0 0;
-#X connect 45 0 0 0;
-#X connect 46 0 55 0;
-#X connect 47 0 46 0;
-#X connect 48 0 56 0;
-#X connect 49 0 48 0;
-#X connect 50 0 51 0;
-#X connect 51 0 49 0;
-#X connect 52 0 47 0;
-#X connect 53 0 52 0;
-#X connect 54 0 53 0;
-#X connect 55 0 0 0;
-#X connect 56 0 0 0;
-#X connect 57 0 34 0;
-#X connect 58 0 6 0;
-#X connect 59 0 35 0;
-#X connect 60 0 38 0;
-#X connect 61 0 19 0;
-#X connect 62 0 41 0;
-#X connect 63 0 25 0;
-#X connect 64 0 54 0;
-#X connect 65 0 50 0;
-#X connect 66 0 12 0;
-#X connect 67 0 69 1;
-#X connect 68 0 70 0;
-#X connect 69 0 67 0;
-#X connect 69 0 71 0;
-#X connect 70 0 76 0;
-#X connect 71 0 68 0;
-#X connect 71 1 74 1;
-#X connect 72 0 69 0;
-#X connect 73 0 72 0;
-#X connect 75 0 69 0;
-#X connect 76 0 77 0;
-#X connect 77 0 74 0;
-#X restore 592 84 pd ascolta-valori;
-#X obj 567 118 bay --------;
-#X obj 367 279 catch~ mainL;
-#X obj 491 281 catch~ mainR;
-#X obj 376 318 *~ 0.01;
-#X obj 467 319 *~ 0.01;
-#X obj 701 211 vsl 15 128 0 0.8 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 317 1;
-#X floatatom 700 346 5 0 0 0 - - -;
-#X obj 750 195 loadbang;
-#X msg 750 216 0.02;
-#X obj 265 365 csound~ 2 2;
-#X obj 332 137 r csound;
-#X msg 156 24 i9 0 8 400 90 0.3;
-#X msg 23 159 i30 0 17000 2 30;
-#X msg 23 136 i10 0 17000 10 30;
-#X msg 24 112 i25 0 17000 0.98 0.8 20000;
-#X msg 1 182 bang \; csound bin /usr/local/bin/csound \; csound orc
-bay.orc \; csound sco bay.sco \; csound csound -dm0 \; csound bang
-\; pd dsp 1;
-#X msg 267 58 i9 0 8 450 90 0.3;
-#X msg 293 20 i9 0 8 500 90 0.3;
-#X obj 255 392 /~ 32767;
-#X obj 324 391 /~ 32767;
-#N canvas 77 25 718 506 note---- 0;
-#X obj 95 284 outlet;
-#X obj 95 222 mtof;
-#X obj 202 211 mtof;
-#X obj 309 220 mtof;
-#X obj 412 221 mtof;
-#X obj 120 133 inlet;
-#X obj 195 140 inlet;
-#X obj 310 163 inlet;
-#X obj 414 170 inlet;
-#X obj 533 224 mtof;
-#X obj 535 173 inlet;
-#X obj 204 283 outlet;
-#X obj 303 284 outlet;
-#X obj 408 280 outlet;
-#X obj 539 274 outlet;
-#X connect 1 0 0 0;
-#X connect 2 0 11 0;
-#X connect 3 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 3 0;
-#X connect 8 0 4 0;
-#X connect 9 0 14 0;
-#X connect 10 0 9 0;
-#X restore 567 142 pd note----;
-#X obj 324 411 /~ 1.5;
-#X obj 255 412 /~ 1.5;
-#X obj 235 450 outlet~;
-#X obj 328 446 outlet~;
-#X msg 404 197 i9 0 14 \$1 90 0.3;
-#X obj 408 242 inlet~;
-#X obj 479 243 inlet~;
-#X connect 0 0 20 0;
-#X connect 0 0 17 0;
-#X connect 0 0 18 0;
-#X connect 0 0 19 0;
-#X connect 1 0 3 0;
-#X connect 2 0 30 0;
-#X connect 3 0 2 0;
-#X connect 5 0 25 0;
-#X connect 5 1 25 1;
-#X connect 5 2 25 2;
-#X connect 5 3 25 3;
-#X connect 5 4 25 4;
-#X connect 6 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 14 0;
-#X connect 9 0 14 1;
-#X connect 10 0 9 1;
-#X connect 10 0 8 1;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 13 0 10 0;
-#X connect 14 0 23 0;
-#X connect 14 1 24 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 17 0 14 0;
-#X connect 18 0 14 0;
-#X connect 19 0 14 0;
-#X connect 21 0 14 0;
-#X connect 22 0 14 0;
-#X connect 23 0 27 0;
-#X connect 24 0 26 0;
-#X connect 25 0 30 0;
-#X connect 25 1 30 0;
-#X connect 25 2 30 0;
-#X connect 25 3 30 0;
-#X connect 25 4 30 0;
-#X connect 26 0 29 0;
-#X connect 27 0 28 0;
-#X connect 30 0 14 0;
-#X connect 31 0 8 0;
-#X connect 32 0 9 0;
-#X restore 48 180 pd bay;
-#N canvas 0 22 892 581 beats 0;
-#X obj 361 183 metro;
-#N canvas 1 23 466 316 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 425 154 pd msecs;
-#X obj 424 80 loadbang;
-#X obj 361 160 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 1
-1;
-#N canvas 0 22 490 340 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 7;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-1;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 empty empty 1/4 0 -6 0 8 -262144 -1 -1
-1;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 3;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 373 244 graph;
-#X floatatom 447 179 5 0 0 0 - - -;
-#X obj 373 221 delay;
-#X obj 408 200 / 2;
-#X text 37 224 this delay is to center the quantization;
-#X obj 426 130 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--258699 -1 -1 50 256;
-#X obj 460 101 s sampleinit;
-#X obj 272 104 loadbang;
-#X obj 442 417 s beat;
-#X obj 446 201 s beatmsec;
-#X obj 392 478 s nets;
-#X obj 561 210 s nets;
-#X msg 425 101 50;
-#X msg 562 186 beatmsec \$1;
-#X msg 390 454 beat \$1;
-#X msg 295 135 1;
-#X obj 538 427 bang;
-#X obj 537 400 select 0;
-#X obj 558 457 s bar;
-#X obj 628 451 s nets;
-#X msg 626 427 bar 1;
-#X connect 0 0 6 0;
-#X connect 1 0 0 1;
-#X connect 1 0 5 0;
-#X connect 1 0 7 0;
-#X connect 1 0 13 0;
-#X connect 1 0 17 0;
-#X connect 2 0 16 0;
-#X connect 2 0 10 0;
-#X connect 3 0 0 0;
-#X connect 4 0 12 0;
-#X connect 4 0 18 0;
-#X connect 4 0 21 0;
-#X connect 6 0 4 0;
-#X connect 7 0 6 1;
-#X connect 9 0 1 0;
-#X connect 11 0 19 0;
-#X connect 16 0 9 0;
-#X connect 17 0 15 0;
-#X connect 18 0 14 0;
-#X connect 19 0 3 0;
-#X connect 20 0 22 0;
-#X connect 20 0 24 0;
-#X connect 21 0 20 0;
-#X connect 24 0 23 0;
-#X restore 7 6 pd beats;
-#X obj 39 312 dac~;
-#X obj 39 262 +~;
-#X obj 91 262 +~;
-#N canvas 0 94 786 462 normalizza-volumi 0;
-#N canvas 0 22 450 300 graph16 0;
-#X array \$0-norm-array 100 float 3;
-#A 0 0.154758 0.190473 0.211901 0.226187 0.247616 0.269044 0.297616
-0.319044 0.33333 0.347616 0.361902 0.369044 0.38333 0.390473 0.404759
-0.419045 0.43333 0.447616 0.45714 0.466664 0.476188 0.483331 0.497616
-0.504759 0.519045 0.519045 0.526188 0.533331 0.547617 0.547617 0.554759
-0.561902 0.566664 0.571426 0.576188 0.576188 0.576188 0.583331 0.583331
-0.583331 0.590474 0.590474 0.590474 0.597617 0.597617 0.60476 0.60476
-0.60476 0.60476 0.60476 0.611903 0.611903 0.611903 0.611903 0.611903
-0.619045 0.619045 0.623807 0.628569 0.633331 0.633331 0.633331 0.638093
-0.642855 0.647617 0.647617 0.647617 0.65476 0.658331 0.661903 0.665474
-0.669046 0.669046 0.669046 0.672617 0.676189 0.67976 0.683331 0.683331
-0.683331 0.683331 0.686903 0.690474 0.694046 0.697617 0.701189 0.70476
-0.708331 0.711903 0.711903 0.711903 0.711903 0.711903 0.719046 0.726189
-0.726189 0.726189 0.726189 0.733332 0.733332;
-#X coords 0 1 99 0 200 140 1;
-#X restore 531 154 graph;
-#X obj 37 133 tabread \$0-norm-array;
-#X obj 37 155 s 1-loop-vol;
-#X obj 135 218 tabread \$0-norm-array;
-#X obj 48 290 tabread \$0-norm-array;
-#X obj 104 392 tabread \$0-norm-array;
-#X obj 277 370 tabread \$0-norm-array;
-#X obj 133 238 s 2-loop-vol;
-#X obj 47 306 s 3-loop-vol;
-#X obj 104 413 s 4-loop-vol;
-#X obj 274 397 s 5-loop-vol;
-#X obj 379 88 i 0;
-#X obj 408 88 + 1;
-#X obj 378 67 metro 10;
-#X obj 377 46 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 380 113 expr 1+$f1;
-#X obj 340 146 tabwrite \$0-norm-array;
-#X msg 481 58 0;
-#X obj 279 309 r 5-velo;
-#X obj 104 335 r 4-velo;
-#X obj 51 235 r 3-velo;
-#X obj 138 162 r 2-velo;
-#X obj 38 78 r 1-velo;
-#X obj 281 332 clip 0 1;
-#X obj 279 350 * 100;
-#X obj 106 352 clip 0 1;
-#X obj 104 370 * 100;
-#X obj 51 253 clip 0 1;
-#X obj 49 271 * 100;
-#X obj 138 181 clip 0 1;
-#X obj 136 199 * 100;
-#X obj 40 96 clip 0 1;
-#X obj 38 114 * 100;
-#X connect 1 0 2 0;
-#X connect 3 0 7 0;
-#X connect 4 0 8 0;
-#X connect 5 0 9 0;
-#X connect 6 0 10 0;
-#X connect 11 0 12 0;
-#X connect 11 0 15 0;
-#X connect 12 0 11 1;
-#X connect 13 0 11 0;
-#X connect 14 0 13 0;
-#X connect 15 0 16 0;
-#X connect 17 0 11 1;
-#X connect 18 0 23 0;
-#X connect 19 0 25 0;
-#X connect 20 0 27 0;
-#X connect 21 0 29 0;
-#X connect 22 0 31 0;
-#X connect 23 0 24 0;
-#X connect 24 0 6 0;
-#X connect 25 0 26 0;
-#X connect 26 0 5 0;
-#X connect 27 0 28 0;
-#X connect 28 0 4 0;
-#X connect 29 0 30 0;
-#X connect 30 0 3 0;
-#X connect 31 0 32 0;
-#X connect 32 0 1 0;
-#X restore 7 26 pd normalizza-volumi;
-#N canvas 0 22 454 304 normalizza-pan 0;
-#X obj 56 26 r 1-x;
-#X obj 55 92 s 1-pan;
-#X obj 61 50 + 4;
-#X obj 58 72 / 8;
-#X obj 126 50 + 4;
-#X obj 123 72 / 8;
-#X obj 190 50 + 4;
-#X obj 187 72 / 8;
-#X obj 256 47 + 4;
-#X obj 253 69 / 8;
-#X obj 330 48 + 4;
-#X obj 327 70 / 8;
-#X obj 121 26 r 2-x;
-#X obj 120 92 s 2-pan;
-#X obj 185 26 r 3-x;
-#X obj 184 92 s 3-pan;
-#X obj 251 23 r 4-x;
-#X obj 249 89 s 4-pan;
-#X obj 325 24 r 5-x;
-#X obj 324 90 s 5-pan;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 5 0;
-#X connect 5 0 13 0;
-#X connect 6 0 7 0;
-#X connect 7 0 15 0;
-#X connect 8 0 9 0;
-#X connect 9 0 17 0;
-#X connect 10 0 11 0;
-#X connect 11 0 19 0;
-#X connect 12 0 4 0;
-#X connect 14 0 6 0;
-#X connect 16 0 8 0;
-#X connect 18 0 10 0;
-#X restore 7 46 pd normalizza-pan;
-#X obj 158 63 vsl 15 128 0.01 1 1 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8262 1;
-#X obj 39 235 *~ 0.5;
-#X obj 91 236 *~ 0.5;
-#X obj 90 88 loadbang;
-#X floatatom 156 196 5 0 0 0 - - -;
-#X obj 245 63 vsl 15 128 0.1 3 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8321 1;
-#X floatatom 243 196 5 0 0 0 - - -;
-#X obj 39 288 *~ 1;
-#X obj 91 287 *~ 1;
-#X obj 180 88 loadbang;
-#X text 265 159 volume generale;
-#X text 74 156 volume bay;
-#X msg 197 115 2;
-#X msg 108 112 0.2;
-#X connect 0 0 8 0;
-#X connect 0 1 9 0;
-#X connect 3 0 14 0;
-#X connect 4 0 15 0;
-#X connect 7 0 8 1;
-#X connect 7 0 9 1;
-#X connect 7 0 11 0;
-#X connect 8 0 3 0;
-#X connect 9 0 4 0;
-#X connect 10 0 20 0;
-#X connect 12 0 13 0;
-#X connect 12 0 14 1;
-#X connect 12 0 15 1;
-#X connect 14 0 2 0;
-#X connect 15 0 2 1;
-#X connect 16 0 19 0;
-#X connect 19 0 12 0;
-#X connect 20 0 7 0;
diff --git a/externals/frankenstein/patches/feb05/test2.graph b/externals/frankenstein/patches/feb05/test2.graph
deleted file mode 100755
index 87112ae1c20a07955dd6c5d541d2e78da7d7e193..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/patches/feb05/test2.graph and /dev/null differ
diff --git a/externals/frankenstein/patches/organist.pd b/externals/frankenstein/patches/organist.pd
deleted file mode 100644
index cbf0925f2cb06629f7c8e5531c4afbfdd4148e5b..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/organist.pd
+++ /dev/null
@@ -1,328 +0,0 @@
-#N canvas 14 34 955 709 12;
-#X symbolatom 731 341 18 0 0 2 next_chord - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 762 56 pd readme;
-#X obj 121 329 harmonizer;
-#X msg 44 298 current \$1;
-#X msg 158 283 target \$1;
-#X obj 44 274 symbol;
-#X obj 44 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 245 347 unpack f f f f f;
-#X obj 153 97 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 153 121 set \$1;
-#N canvas 0 0 718 428 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 423 135 pd midi;
-#N canvas 0 0 466 316 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 175 135 init 1;
-#X msg 115 77 write strani;
-#X msg 145 105 read strani;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 340 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 49 348 bang;
-#X obj 63 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 48 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 507 1;
-#X floatatom 13 112 5 0 0 0 - - -;
-#X obj 178 571 csoundapi~ bay.orc;
-#X msg 463 545 event i 10 0 17000 10 30;
-#X msg 463 568 event i 30 0 17000 2 30;
-#X msg 464 521 event i 25 0 17000 0.98 0.8 20000;
-#X obj 466 497 loadbang;
-#X obj 13 32 r novelty;
-#X obj 462 63 t b b;
-#X obj 220 96 symbol;
-#X msg 220 124 tonality \$1;
-#X obj 220 72 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X text 529 392 this transposes of a + minor 3rd;
-#X obj 458 361 loadbang;
-#X msg 459 386 3;
-#X symbolatom 575 339 18 0 0 2 curr_chord - -;
-#X obj 42 218 symbol;
-#X obj 42 194 t s b;
-#X obj 29 606 outlet~;
-#X obj 106 609 outlet~;
-#X obj 578 358 outlet;
-#X obj 733 360 outlet;
-#N canvas 0 0 812 538 prepare_voice 0;
-#X obj 48 57 inlet;
-#X obj 392 55 inlet;
-#X obj 46 422 outlet;
-#X obj 52 95 + 0;
-#X obj 49 184 mtof;
-#X obj 52 129 t f b;
-#X obj 50 154 int 60;
-#X text 399 138 this adds a 1 chord delay;
-#X obj 115 55 inlet;
-#X obj 113 420 outlet;
-#X obj 119 93 + 0;
-#X obj 116 179 mtof;
-#X obj 119 127 t f b;
-#X obj 117 152 int 60;
-#X obj 176 52 inlet;
-#X obj 174 417 outlet;
-#X obj 180 90 + 0;
-#X obj 177 179 mtof;
-#X obj 180 124 t f b;
-#X obj 178 149 int 60;
-#X obj 242 54 inlet;
-#X obj 240 419 outlet;
-#X obj 246 92 + 0;
-#X obj 243 181 mtof;
-#X obj 246 126 t f b;
-#X obj 244 151 int 60;
-#X obj 307 54 inlet;
-#X obj 305 419 outlet;
-#X obj 311 92 + 0;
-#X obj 308 181 mtof;
-#X obj 311 126 t f b;
-#X obj 309 151 int 60;
-#X text 383 38 semitones;
-#X obj 47 313 spigot;
-#X obj 505 268 loadbang;
-#X msg 506 291 1;
-#X obj 63 290 r v1;
-#X obj 119 313 spigot;
-#X obj 180 314 spigot;
-#X obj 247 313 spigot;
-#X obj 312 313 spigot;
-#X obj 135 290 r v2;
-#X obj 196 291 r v3;
-#X obj 263 291 r v4;
-#X obj 328 290 r v5;
-#X connect 0 0 3 0;
-#X connect 1 0 3 1;
-#X connect 1 0 28 1;
-#X connect 1 0 22 1;
-#X connect 1 0 10 1;
-#X connect 1 0 16 1;
-#X connect 3 0 5 0;
-#X connect 4 0 33 0;
-#X connect 5 0 6 1;
-#X connect 5 1 6 0;
-#X connect 6 0 4 0;
-#X connect 8 0 10 0;
-#X connect 10 0 12 0;
-#X connect 11 0 37 0;
-#X connect 12 0 13 1;
-#X connect 12 1 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 16 0;
-#X connect 16 0 18 0;
-#X connect 17 0 38 0;
-#X connect 18 0 19 1;
-#X connect 18 1 19 0;
-#X connect 19 0 17 0;
-#X connect 20 0 22 0;
-#X connect 22 0 24 0;
-#X connect 23 0 39 0;
-#X connect 24 0 25 1;
-#X connect 24 1 25 0;
-#X connect 25 0 23 0;
-#X connect 26 0 28 0;
-#X connect 28 0 30 0;
-#X connect 29 0 40 0;
-#X connect 30 0 31 1;
-#X connect 30 1 31 0;
-#X connect 31 0 29 0;
-#X connect 33 0 2 0;
-#X connect 34 0 35 0;
-#X connect 35 0 33 1;
-#X connect 35 0 37 1;
-#X connect 35 0 38 1;
-#X connect 35 0 39 1;
-#X connect 35 0 40 1;
-#X connect 36 0 33 1;
-#X connect 37 0 9 0;
-#X connect 38 0 15 0;
-#X connect 39 0 21 0;
-#X connect 40 0 27 0;
-#X connect 41 0 37 1;
-#X connect 42 0 38 1;
-#X connect 43 0 39 1;
-#X connect 44 0 40 1;
-#X restore 237 387 pd prepare_voice;
-#X obj 45 415 tgl 20 0 v1 empty toggle_v1 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 44 446 tgl 20 0 v2 empty toggle_v2 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 476 tgl 20 0 v3 empty toggle_v3 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 507 tgl 20 0 v4 empty toggle_v4 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 40 537 tgl 20 0 v5 empty toggle_v5 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 7 376 loadbang;
-#X msg 8 399 1;
-#X obj 83 169 chords_memory strani;
-#X obj 595 20 inlet;
-#X obj 595 43 bang;
-#X obj 596 64 int 0;
-#X obj 647 65 + 1;
-#X obj 598 86 % 2;
-#X obj 462 40 sel 0;
-#X obj 326 431 r msec-beat;
-#X obj 326 474 / 1000;
-#X obj 326 452 * 32;
-#X obj 327 495 + 2;
-#X obj 174 499 pack f f f;
-#X obj 429 456 r velocity;
-#X floatatom 417 491 5 0 0 0 - - -;
-#X msg 171 522 event i 9 0 \$2 \$1 \$3 0.5;
-#X obj 27 585 *~ 0.9;
-#X obj 105 587 *~ 0.9;
-#X msg 461 421 -2;
-#X obj 714 438 catch~ sax;
-#X obj 784 137 inlet~;
-#X connect 2 0 15 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 50 0;
-#X connect 15 1 9 1;
-#X connect 15 1 50 1;
-#X connect 15 2 10 1;
-#X connect 15 2 50 2;
-#X connect 15 3 11 1;
-#X connect 15 3 50 3;
-#X connect 15 4 12 1;
-#X connect 15 4 50 4;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 58 0;
-#X connect 19 0 58 0;
-#X connect 20 0 58 0;
-#X connect 21 0 24 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 24 0 25 0;
-#X connect 25 0 58 0;
-#X connect 26 0 24 1;
-#X connect 26 0 27 0;
-#X connect 28 0 73 0;
-#X connect 28 1 74 0;
-#X connect 29 0 28 0;
-#X connect 30 0 28 0;
-#X connect 31 0 28 0;
-#X connect 32 0 31 0;
-#X connect 32 0 29 0;
-#X connect 32 0 30 0;
-#X connect 33 0 26 0;
-#X connect 34 0 21 0;
-#X connect 35 0 36 0;
-#X connect 36 0 58 0;
-#X connect 37 0 35 0;
-#X connect 38 0 58 0;
-#X connect 42 0 50 5;
-#X connect 44 0 43 0;
-#X connect 44 0 48 0;
-#X connect 45 0 44 1;
-#X connect 45 1 44 0;
-#X connect 50 0 69 0;
-#X connect 50 1 69 0;
-#X connect 50 2 69 0;
-#X connect 50 3 69 0;
-#X connect 50 4 69 0;
-#X connect 56 0 57 0;
-#X connect 57 0 51 0;
-#X connect 57 0 52 0;
-#X connect 57 0 53 0;
-#X connect 57 0 54 0;
-#X connect 57 0 55 0;
-#X connect 58 0 0 0;
-#X connect 58 0 5 1;
-#X connect 58 0 22 0;
-#X connect 58 0 35 1;
-#X connect 58 0 16 0;
-#X connect 58 0 45 0;
-#X connect 58 0 49 0;
-#X connect 58 1 39 0;
-#X connect 59 0 60 0;
-#X connect 60 0 61 0;
-#X connect 61 0 62 0;
-#X connect 61 0 63 0;
-#X connect 62 0 61 1;
-#X connect 63 0 64 0;
-#X connect 64 0 34 0;
-#X connect 65 0 67 0;
-#X connect 66 0 68 0;
-#X connect 67 0 66 0;
-#X connect 68 0 69 1;
-#X connect 69 0 72 0;
-#X connect 70 0 69 2;
-#X connect 70 0 71 0;
-#X connect 72 0 28 0;
-#X connect 73 0 46 0;
-#X connect 74 0 47 0;
-#X connect 75 0 50 5;
-#X connect 76 0 28 0;
-#X connect 77 0 28 0;
diff --git a/externals/frankenstein/patches/percussionist.pd b/externals/frankenstein/patches/percussionist.pd
deleted file mode 100644
index e497fa3d047a03cd28b45588dc49d27945b5f9d3..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/percussionist.pd
+++ /dev/null
@@ -1,782 +0,0 @@
-#N canvas 0 2 1011 709 12;
-#N canvas 4 65 458 308 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X obj 156 112 *~ 0.5;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X connect 0 0 7 0;
-#X connect 0 0 8 0;
-#X connect 2 0 6 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 5 0;
-#X restore 53 459 pd perc;
-#X obj 54 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 361 183 metro;
-#N canvas 1 23 474 324 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 425 154 pd msecs;
-#X obj 424 80 loadbang;
-#X msg 425 101 60;
-#X obj 361 160 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#N canvas 0 0 494 344 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 8;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 beat-quarters empty 1/4 0 -6 0 8 -262144
--1 -1 2;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 0;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 381 242 graph;
-#X floatatom 447 179 5 0 0 0 - - -;
-#X obj 475 424 t a a;
-#X obj 470 450 bang;
-#X obj 373 221 delay;
-#X obj 408 200 / 2;
-#N canvas 65 11 823 709 instr_bass 0;
-#X obj 72 43 inlet;
-#X obj 249 569 throw~ mainL;
-#X obj 355 563 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 238 34 inlet;
-#X obj 223 299 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 253 322 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 223 276 r channel1;
-#X obj 136 382 sampleplayer 1;
-#X msg 250 356 samples/BD01.WAV;
-#X obj 401 522 outlet~;
-#X obj 96 214 r sampleinit;
-#X floatatom 62 338 5 0 0 0 - - -;
-#X text 57 320 length;
-#X floatatom 63 361 5 0 0 0 - - -;
-#X text 56 379 volume;
-#X floatatom 110 338 5 0 0 0 - - -;
-#X floatatom 159 338 5 0 0 0 - - -;
-#X text 159 318 pitch;
-#X text 111 319 start;
-#X obj 250 413 s lastload;
-#X msg 100 290 1;
-#X msg 62 290 440;
-#X msg 137 290 100;
-#X obj 337 509 *~ 0;
-#X obj 520 119 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 504 46 loadbang;
-#X obj 509 350 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 577 382 pd varia;
-#X obj 637 358 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 583 435 5 0 0 0 - - -;
-#X msg 509 373 0.005;
-#X obj 542 462 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 610 494 pd varia;
-#X obj 670 470 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 619 546 5 0 0 0 - - -;
-#X obj 609 521 * 20;
-#X msg 542 485 0.025;
-#X obj 300 460 bp~ 100 20;
-#X obj 576 409 * 100;
-#X obj 81 104 tabread proposed1;
-#X msg 506 70 1;
-#X connect 0 0 3 0;
-#X connect 3 0 42 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 10 4;
-#X connect 8 0 10 5;
-#X connect 9 0 7 0;
-#X connect 10 0 26 0;
-#X connect 10 1 22 0;
-#X connect 11 0 10 6;
-#X connect 13 0 11 0;
-#X connect 13 0 24 0;
-#X connect 13 0 23 0;
-#X connect 13 0 25 0;
-#X connect 14 0 10 1;
-#X connect 16 0 10 0;
-#X connect 18 0 10 2;
-#X connect 19 0 10 3;
-#X connect 23 0 18 0;
-#X connect 24 0 14 0;
-#X connect 25 0 19 0;
-#X connect 26 0 1 0;
-#X connect 26 0 2 0;
-#X connect 26 0 12 0;
-#X connect 27 0 26 1;
-#X connect 28 0 43 0;
-#X connect 29 0 33 0;
-#X connect 30 0 41 0;
-#X connect 31 0 30 1;
-#X connect 33 0 30 0;
-#X connect 34 0 39 0;
-#X connect 35 0 38 0;
-#X connect 36 0 35 1;
-#X connect 38 0 37 0;
-#X connect 38 0 40 2;
-#X connect 39 0 35 0;
-#X connect 41 0 32 0;
-#X connect 41 0 40 1;
-#X connect 42 0 4 0;
-#X connect 43 0 27 0;
-#X restore 325 431 pd instr_bass;
-#N canvas 24 76 835 489 instr_high 0;
-#X obj 72 43 inlet;
-#X obj 162 297 throw~ mainL;
-#X obj 286 294 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 81 104 tabread proposed2;
-#X obj 204 216 tom1;
-#X obj 288 122 r instr-2-transport;
-#X obj 337 145 r instr-2-duration;
-#X obj 387 166 r instr-2-pan;
-#X connect 0 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 1 0;
-#X connect 6 1 2 0;
-#X connect 7 0 6 1;
-#X connect 8 0 6 2;
-#X connect 9 0 6 3;
-#X restore 325 454 pd instr_high;
-#N canvas 73 67 623 593 metro 0;
-#X obj 163 263 throw~ mainL;
-#X obj 186 232 throw~ mainR;
-#X obj 83 33 inlet;
-#N canvas 4 65 466 316 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X obj 156 113 *~ 0.1;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X restore 83 149 pd perc;
-#X obj 116 317 outlet~;
-#X obj 326 104 bang;
-#N canvas 4 65 470 320 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X obj 156 113 *~ 0.1;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X restore 327 166 pd perc;
-#X obj 230 79 sel 0;
-#X obj 229 57 % 16;
-#X obj 83 84 sel 0;
-#X obj 83 61 % 2;
-#X obj 103 185 *~ 0.5;
-#X obj 348 202 *~ 0.9;
-#X connect 2 0 8 0;
-#X connect 2 0 10 0;
-#X connect 3 0 11 0;
-#X connect 5 0 6 0;
-#X connect 6 0 12 0;
-#X connect 7 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 3 0;
-#X connect 10 0 9 0;
-#X connect 11 0 4 0;
-#X connect 12 0 4 0;
-#X restore 700 453 pd metro;
-#N canvas 23 68 819 360 capture 0;
-#X obj 713 29 inlet;
-#X obj 148 224 int;
-#X msg 58 204 1;
-#X obj 68 179 t a a;
-#X obj 101 200 bang;
-#X obj 43 247 tabwrite played1;
-#X obj 59 145 inlet;
-#X obj 305 227 int;
-#X msg 215 207 1;
-#X obj 225 182 t a a;
-#X obj 258 203 bang;
-#X obj 216 148 inlet;
-#X obj 458 227 int;
-#X msg 368 207 1;
-#X obj 378 182 t a a;
-#X obj 411 203 bang;
-#X obj 369 148 inlet;
-#X obj 607 227 int;
-#X msg 517 207 1;
-#X obj 527 182 t a a;
-#X obj 560 203 bang;
-#X obj 518 148 inlet;
-#X obj 200 250 tabwrite played2;
-#X obj 354 250 tabwrite played3;
-#X obj 502 250 tabwrite played4;
-#X connect 0 0 1 1;
-#X connect 0 0 7 1;
-#X connect 0 0 12 1;
-#X connect 0 0 17 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 3 1 4 0;
-#X connect 4 0 1 0;
-#X connect 6 0 3 0;
-#X connect 7 0 22 1;
-#X connect 8 0 22 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 0;
-#X connect 10 0 7 0;
-#X connect 11 0 9 0;
-#X connect 12 0 23 1;
-#X connect 13 0 23 0;
-#X connect 14 0 13 0;
-#X connect 14 1 15 0;
-#X connect 15 0 12 0;
-#X connect 16 0 14 0;
-#X connect 17 0 24 1;
-#X connect 18 0 24 0;
-#X connect 19 0 18 0;
-#X connect 19 1 20 0;
-#X connect 20 0 17 0;
-#X connect 21 0 19 0;
-#X restore 135 484 pd capture;
-#X text 37 224 this delay is to center the quantization;
-#X obj 426 130 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -258699 -1 -1 65 256;
-#X text 29 30 test1: detect rhythmic pattern and proposes a counterpoint
-;
-#X obj 476 397 select 0;
-#N canvas 0 0 454 304 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 variazione \$1;
-#X msg 135 74 riempimento \$1;
-#X msg 231 133 aderenza \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 698 378 pd valori;
-#X obj 678 220 vsl 15 128 0 1 0 0 empty empty variazione 0 -8 0 8 -262144
--1 -1 3810 1;
-#X obj 730 226 vsl 15 128 0 1 0 0 empty empty riempimento 0 -8 0 8
--262144 -1 -1 952 1;
-#X obj 788 239 vsl 15 128 0 1 0 0 empty empty aderenza 0 -8 0 8 -262144
--1 -1 12065 1;
-#N canvas 0 4 458 308 ritmino 0;
-#X obj 216 31 inlet;
-#X obj 201 268 outlet;
-#X obj 48 131 select 0;
-#X obj 131 135 select 3;
-#X obj 211 136 select 6;
-#X obj 200 238 bang;
-#X obj 307 133 select 8;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 0 0 6 0;
-#X connect 2 0 5 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 0;
-#X restore 58 412 pd ritmino;
-#X floatatom 665 357 5 0 0 0 - - -;
-#X floatatom 719 359 5 0 0 0 - - -;
-#X floatatom 786 371 5 0 0 0 - - -;
-#X obj 460 101 s sampleinit;
-#X obj 59 507 *~ 1;
-#X obj 22 431 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 1270 1;
-#X obj 19 351 loadbang;
-#X obj 285 385 t a a a a a a a;
-#N canvas 25 156 815 345 instr3 0;
-#X obj 72 43 inlet;
-#X obj 219 312 throw~ mainL;
-#X obj 342 303 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 81 104 tabread proposed3;
-#X obj 221 210 chat;
-#X obj 387 166 r instr-3-pan;
-#X obj 337 145 r instr-3-duration;
-#X obj 288 122 r instr-3-transport;
-#X obj 340 276 *~ 0.5;
-#X obj 223 282 *~ 0.5;
-#X connect 0 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 11 0;
-#X connect 6 1 10 0;
-#X connect 7 0 6 3;
-#X connect 8 0 6 2;
-#X connect 9 0 6 1;
-#X connect 10 0 2 0;
-#X connect 11 0 1 0;
-#X restore 325 479 pd instr3;
-#N canvas 59 112 795 353 instr4 0;
-#X obj 72 43 inlet;
-#X obj 242 306 throw~ mainL;
-#X obj 365 304 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 81 104 tabread proposed4;
-#X obj 241 200 ohat;
-#X obj 384 165 r instr-4-pan;
-#X obj 336 145 r instr-4-duration;
-#X obj 287 122 r instr-4-transport;
-#X obj 360 270 *~ 0.7;
-#X obj 242 276 *~ 0.7;
-#X connect 0 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 11 0;
-#X connect 6 1 10 0;
-#X connect 7 0 6 3;
-#X connect 8 0 6 2;
-#X connect 9 0 6 1;
-#X connect 10 0 2 0;
-#X connect 11 0 1 0;
-#X restore 325 503 pd instr4;
-#X obj 72 590 *~;
-#X obj 265 608 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 2340 1;
-#X obj 104 588 *~;
-#X obj 297 608 loadbang;
-#X obj 840 155 loadbang;
-#X obj 850 243 loadbang;
-#X msg 851 263 0.8;
-#N canvas 186 160 510 360 varia2 0;
-#X obj 244 46 inlet;
-#X obj 94 275 outlet;
-#X obj 84 172 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 60 53 inlet;
-#X obj 226 230 table varia2;
-#X obj 47 236 tabread varia2;
-#X obj 45 201 * 100;
-#X obj 53 121 phasor~ 0.01;
-#X connect 0 0 3 0;
-#X connect 2 0 7 0;
-#X connect 3 0 2 0;
-#X connect 4 0 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 6 0;
-#X connect 8 0 2 0;
-#X restore 851 203 pd varia2;
-#X msg 839 178 0.01;
-#X obj 918 182 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X msg 21 375 0.1;
-#N canvas 0 69 643 318 tables 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array src1 16 float 1;
-#A 0 0.75 0 0 0.25 0 0 1 0 1 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 387 22 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 385 73 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 96 68 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 385 123 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 96 168 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 384 175 graph;
-#X text 145 242 the output has been put in the sequencer window;
-#X restore 148 157 pd tables;
-#X obj 380 599 GArhythm src1 src2 src3 src4 proposed1 proposed2 proposed3
-proposed4;
-#N canvas 0 0 454 304 avg_rhythms 0;
-#X obj 41 76 bang;
-#X obj 46 104 ritmo1 played1 src1;
-#X obj 45 125 ritmo1 played2 src2;
-#X obj 46 146 ritmo1 played3 src3;
-#X obj 45 165 ritmo1 played4 src4;
-#X obj 116 44 inlet;
-#X connect 0 0 1 0;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 5 0 0 0;
-#X restore 510 452 pd avg_rhythms;
-#N canvas 481 60 510 360 audio2bang 0;
-#X obj 54 38 inlet~;
-#X obj 75 273 outlet;
-#X obj 176 277 outlet;
-#X obj 261 276 outlet;
-#X obj 354 280 outlet;
-#X obj 43 277 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 294 100 learn 0;
-#X msg 216 101 learn 1;
-#X msg 156 75 debounce \$1;
-#X obj 157 29 r msec-beat;
-#X obj 115 39 / 2;
-#X msg 299 76 write percs.txt;
-#X msg 301 51 read percs.txt;
-#X obj 303 15 loadbang;
-#X text 90 239 a bass;
-#X text 205 240 unknown;
-#X obj 54 142 bonk~;
-#X obj 40 194 print;
-#X obj 158 179 route 0 1 2;
-#X connect 0 0 16 0;
-#X connect 6 0 16 0;
-#X connect 7 0 16 0;
-#X connect 9 0 10 0;
-#X connect 10 0 8 0;
-#X connect 11 0 16 0;
-#X connect 12 0 16 0;
-#X connect 16 1 5 0;
-#X connect 16 1 17 0;
-#X connect 16 1 1 0;
-#X connect 18 0 1 0;
-#X connect 18 1 3 0;
-#X connect 18 2 3 0;
-#X restore 128 328 pd audio2bang;
-#X obj 67 628 outlet~;
-#X obj 132 629 outlet~;
-#X obj 372 55 inlet;
-#X obj 577 408 outlet;
-#X obj 675 76 r variazione;
-#X obj 706 117 r riempimento;
-#X obj 830 75 r aderenza;
-#N canvas 0 0 648 568 messages 0;
-#X obj 117 252 outlet;
-#X msg 105 174 reinit;
-#X obj 106 131 r reinit;
-#X obj 106 153 bang;
-#X msg 205 177 reinsert_src \$1;
-#X msg 356 171 reinsert_last \$1;
-#X msg 41 159 help;
-#X msg 234 94 prob_crossover \$1;
-#X msg 384 95 prob_mutation \$1;
-#X obj 204 153 r reinsert_src;
-#X obj 357 147 r reinsert_last;
-#X obj 234 70 r prob_crossover;
-#X obj 385 70 r prob_mutation;
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 4 0;
-#X connect 10 0 5 0;
-#X connect 11 0 7 0;
-#X connect 12 0 8 0;
-#X restore 498 546 pd messages;
-#X obj 211 105 r tempo;
-#X obj 440 201 s msec-beat;
-#X obj 549 386 s beat-position;
-#X obj 705 493 dac~ 3;
-#X msg 299 632 0.6;
-#N canvas 201 53 711 575 effetti 0;
-#X obj 66 54 inlet~;
-#X obj 34 460 outlet~;
-#X obj 85 308 delay~;
-#X obj 101 97 filter~;
-#X obj 372 45 inlet~;
-#X obj 250 478 outlet~;
-#X obj 303 309 delay~;
-#X obj 367 101 filter~;
-#X obj 66 202 *~;
-#X obj 43 225 +~;
-#X obj 338 286 r msec-beat;
-#X obj 117 283 r msec-beat;
-#X obj 564 116 loadbang;
-#X msg 532 149 2;
-#X msg 568 156 3;
-#X obj 35 200 *~;
-#X obj 328 216 *~;
-#X obj 305 239 +~;
-#X obj 297 214 *~;
-#X obj 57 401 *~;
-#X obj 34 424 +~;
-#X obj 26 399 *~;
-#X obj 270 425 *~;
-#X obj 247 448 +~;
-#X obj 239 423 *~;
-#X obj 161 258 int;
-#X obj 161 234 r delay-l-mul;
-#X obj 405 235 r delay-r-mul;
-#X obj 406 260 int;
-#X obj 549 247 r delay-feedback;
-#X obj 549 269 clip 0 0.9;
-#X msg 611 156 0.12;
-#X obj 185 18 r filter-dry-vol;
-#X obj 336 14 r filter-wet-vol;
-#X obj 131 379 r delay-dry-vol;
-#X obj 341 379 r delay-wet-vol;
-#X obj 200 44 r filter-freq-l;
-#X obj 435 35 r filter-freq-r;
-#X obj 277 67 r filter-q;
-#X connect 0 0 3 0;
-#X connect 0 0 15 0;
-#X connect 2 0 19 0;
-#X connect 3 0 8 0;
-#X connect 4 0 7 0;
-#X connect 4 0 18 0;
-#X connect 6 0 22 0;
-#X connect 7 0 16 0;
-#X connect 8 0 9 1;
-#X connect 9 0 2 0;
-#X connect 9 0 21 0;
-#X connect 10 0 6 1;
-#X connect 11 0 2 1;
-#X connect 12 0 31 0;
-#X connect 12 0 14 0;
-#X connect 12 0 13 0;
-#X connect 13 0 2 2;
-#X connect 14 0 6 2;
-#X connect 15 0 9 0;
-#X connect 16 0 17 1;
-#X connect 17 0 6 0;
-#X connect 17 0 24 0;
-#X connect 18 0 17 0;
-#X connect 19 0 20 1;
-#X connect 20 0 1 0;
-#X connect 21 0 20 0;
-#X connect 22 0 23 1;
-#X connect 23 0 5 0;
-#X connect 24 0 23 0;
-#X connect 25 0 2 2;
-#X connect 26 0 25 0;
-#X connect 27 0 28 0;
-#X connect 28 0 6 2;
-#X connect 29 0 30 0;
-#X connect 30 0 6 3;
-#X connect 30 0 2 3;
-#X connect 31 0 6 3;
-#X connect 31 0 2 3;
-#X connect 32 0 15 1;
-#X connect 32 0 18 1;
-#X connect 33 0 16 1;
-#X connect 33 0 8 1;
-#X connect 34 0 21 1;
-#X connect 34 0 24 1;
-#X connect 35 0 19 1;
-#X connect 35 0 22 1;
-#X connect 36 0 3 1;
-#X connect 37 0 7 1;
-#X connect 38 0 7 2;
-#X connect 38 0 3 2;
-#X restore 110 542 pd effetti;
-#X obj 106 521 catch~ mainL;
-#X obj 205 520 catch~ mainR;
-#X obj 127 295 throw~ mainL;
-#X obj 226 295 throw~ mainR;
-#X obj 93 257 adc~ 7;
-#X connect 0 0 30 0;
-#X connect 0 0 50 0;
-#X connect 1 0 0 0;
-#X connect 2 0 11 0;
-#X connect 3 0 2 1;
-#X connect 3 0 8 0;
-#X connect 3 0 12 0;
-#X connect 3 0 60 0;
-#X connect 4 0 5 0;
-#X connect 4 0 29 0;
-#X connect 5 0 18 0;
-#X connect 6 0 2 0;
-#X connect 7 0 20 0;
-#X connect 7 0 33 0;
-#X connect 7 0 61 0;
-#X connect 9 0 10 0;
-#X connect 9 1 49 0;
-#X connect 10 0 48 0;
-#X connect 11 0 7 0;
-#X connect 12 0 11 1;
-#X connect 15 0 62 0;
-#X connect 18 0 3 0;
-#X connect 20 0 9 0;
-#X connect 20 0 54 0;
-#X connect 21 0 48 0;
-#X connect 22 0 21 0;
-#X connect 22 0 26 0;
-#X connect 23 0 21 1;
-#X connect 23 0 27 0;
-#X connect 24 0 21 2;
-#X connect 24 0 28 0;
-#X connect 25 0 1 0;
-#X connect 30 0 36 0;
-#X connect 31 0 30 1;
-#X connect 32 0 46 0;
-#X connect 33 0 15 0;
-#X connect 33 1 16 4;
-#X connect 33 3 13 0;
-#X connect 33 4 14 0;
-#X connect 33 5 34 0;
-#X connect 33 6 35 0;
-#X connect 36 0 51 0;
-#X connect 37 0 36 1;
-#X connect 37 0 38 1;
-#X connect 38 0 52 0;
-#X connect 39 0 63 0;
-#X connect 40 0 44 0;
-#X connect 41 0 42 0;
-#X connect 42 0 24 0;
-#X connect 43 0 23 0;
-#X connect 44 0 43 0;
-#X connect 45 0 43 1;
-#X connect 46 0 31 0;
-#X connect 50 0 16 0;
-#X connect 50 1 16 1;
-#X connect 50 2 16 2;
-#X connect 50 3 16 3;
-#X connect 53 0 6 0;
-#X connect 55 0 22 0;
-#X connect 56 0 23 0;
-#X connect 57 0 24 0;
-#X connect 58 0 48 0;
-#X connect 59 0 18 0;
-#X connect 63 0 37 0;
-#X connect 64 0 36 0;
-#X connect 64 1 38 0;
-#X connect 65 0 64 0;
-#X connect 66 0 64 1;
-#X connect 69 0 50 0;
-#X connect 69 0 67 0;
-#X connect 69 0 68 0;
diff --git a/externals/frankenstein/patches/sampleplayer.pd b/externals/frankenstein/patches/sampleplayer.pd
deleted file mode 100644
index adf6c9d848a5706a5320a201fa37882d66b99920..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/sampleplayer.pd
+++ /dev/null
@@ -1,80 +0,0 @@
-#N canvas -35 33 1009 703 12;
-#X obj 476 599 outlet~;
-#X obj 504 481 line~;
-#X obj 402 281 line~;
-#X obj 476 548 *~;
-#X msg 424 142 bang;
-#X obj 425 192 delay 5;
-#X text 477 142 <-- play the sample;
-#X text 349 223 sound off;
-#X msg 393 245 0 5;
-#X msg 612 32 1 \, 4.41e+008 1e+007 \;;
-#X msg 428 244 1 5;
-#X text 617 9 set line to play sample;
-#X obj 476 574 *~ 1;
-#X obj 394 42 table \$1-sampletable;
-#X obj 476 520 tabread4~ \$1-sampletable;
-#X obj 712 257 openpanel;
-#X obj 712 416 soundfiler;
-#X msg 712 230 bang;
-#X text 756 230 read file;
-#X obj 712 283 t s b;
-#X obj 751 318 symbol \$1-sampletable;
-#X msg 712 387 read -resize \$1 \$2;
-#X obj 712 356 pack s s;
-#X obj 713 196 inlet;
-#X obj 400 92 inlet;
-#X obj 103 139 inlet;
-#X obj 760 68 inlet;
-#X obj 658 196 symbol;
-#X obj 689 499 outlet;
-#X obj 172 141 inlet;
-#X obj 278 191 delay 10000;
-#X obj 492 418 pack 0 0;
-#X obj 551 388 * 4.41e+008;
-#X msg 492 283 bang;
-#X msg 501 449 \$1 \, \$2 1e+007 \;;
-#X obj 492 336 int 1;
-#X obj 250 142 inlet;
-#X obj 304 140 inlet;
-#X obj 551 336 float 1;
-#X obj 602 298 / 100;
-#X connect 1 0 14 0;
-#X connect 2 0 3 1;
-#X connect 3 0 12 0;
-#X connect 4 0 5 0;
-#X connect 4 0 8 0;
-#X connect 4 0 30 0;
-#X connect 5 0 9 0;
-#X connect 5 0 10 0;
-#X connect 5 0 33 0;
-#X connect 8 0 2 0;
-#X connect 10 0 2 0;
-#X connect 12 0 0 0;
-#X connect 14 0 3 0;
-#X connect 15 0 19 0;
-#X connect 15 0 28 0;
-#X connect 17 0 15 0;
-#X connect 19 0 22 0;
-#X connect 19 1 20 0;
-#X connect 20 0 22 1;
-#X connect 21 0 16 0;
-#X connect 22 0 21 0;
-#X connect 23 0 17 0;
-#X connect 24 0 4 0;
-#X connect 25 0 12 1;
-#X connect 26 0 27 0;
-#X connect 27 0 19 0;
-#X connect 27 0 28 0;
-#X connect 29 0 30 1;
-#X connect 30 0 8 0;
-#X connect 31 0 34 0;
-#X connect 32 0 31 1;
-#X connect 33 0 35 0;
-#X connect 33 0 38 0;
-#X connect 34 0 1 0;
-#X connect 35 0 31 0;
-#X connect 36 0 35 1;
-#X connect 37 0 39 0;
-#X connect 38 0 32 0;
-#X connect 39 0 38 0;
diff --git a/externals/frankenstein/patches/test-GArhythm.pd b/externals/frankenstein/patches/test-GArhythm.pd
deleted file mode 100644
index 200736e64ca3ca6ed468f7e7dcd63bcc76bc891a..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/test-GArhythm.pd
+++ /dev/null
@@ -1,999 +0,0 @@
-#N canvas 0 0 1011 709 12;
-#X obj 22 629 dac~;
-#N canvas 4 65 458 308 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X obj 156 112 *~ 0.5;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X connect 0 0 7 0;
-#X connect 0 0 8 0;
-#X connect 2 0 6 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 5 0;
-#X restore 53 459 pd perc;
-#X obj 54 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 361 183 metro;
-#N canvas 1 23 466 316 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 425 154 pd msecs;
-#X obj 424 80 loadbang;
-#X msg 425 101 60;
-#X obj 361 160 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#N canvas 0 0 490 340 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 0;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 empty empty 1/4 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 0;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 381 242 graph;
-#X floatatom 447 179 5 0 0 0 - - -;
-#X obj 475 424 t a a;
-#X obj 470 450 bang;
-#X obj 373 221 delay;
-#X obj 408 200 / 2;
-#N canvas 65 11 799 687 instr_bass 0;
-#X obj 72 43 inlet;
-#X obj 249 569 throw~ mainL;
-#X obj 355 563 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 238 34 inlet;
-#X obj 223 299 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 253 322 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 223 276 r channel1;
-#X obj 136 382 sampleplayer 1;
-#X msg 250 356 samples/BD01.WAV;
-#X obj 401 522 outlet~;
-#X obj 96 214 r sampleinit;
-#X floatatom 62 338 5 0 0 0 - - -;
-#X text 57 320 length;
-#X floatatom 63 361 5 0 0 0 - - -;
-#X text 56 379 volume;
-#X floatatom 110 338 5 0 0 0 - - -;
-#X floatatom 159 338 5 0 0 0 - - -;
-#X text 159 318 pitch;
-#X text 111 319 start;
-#X obj 250 413 s lastload;
-#X msg 100 290 1;
-#X msg 62 290 440;
-#X msg 137 290 100;
-#X obj 337 509 *~ 0;
-#X obj 520 119 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 7620 1;
-#X obj 504 46 loadbang;
-#X obj 509 350 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 577 382 pd varia;
-#X obj 637 358 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 583 435 5 0 0 0 - - -;
-#X msg 509 373 0.005;
-#X obj 542 462 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 610 494 pd varia;
-#X obj 670 470 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 619 546 5 0 0 0 - - -;
-#X obj 609 521 * 20;
-#X msg 542 485 0.025;
-#X obj 300 460 bp~ 100 20;
-#X obj 576 409 * 100;
-#X msg 506 70 0.6;
-#X obj 81 104 tabread proposed1;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 10 4;
-#X connect 8 0 10 5;
-#X connect 9 0 7 0;
-#X connect 10 0 26 0;
-#X connect 10 1 22 0;
-#X connect 11 0 10 6;
-#X connect 13 0 11 0;
-#X connect 13 0 24 0;
-#X connect 13 0 23 0;
-#X connect 13 0 25 0;
-#X connect 14 0 10 1;
-#X connect 16 0 10 0;
-#X connect 18 0 10 2;
-#X connect 19 0 10 3;
-#X connect 23 0 18 0;
-#X connect 24 0 14 0;
-#X connect 25 0 19 0;
-#X connect 26 0 1 0;
-#X connect 26 0 2 0;
-#X connect 26 0 12 0;
-#X connect 27 0 26 1;
-#X connect 28 0 42 0;
-#X connect 29 0 33 0;
-#X connect 30 0 41 0;
-#X connect 31 0 30 1;
-#X connect 33 0 30 0;
-#X connect 34 0 39 0;
-#X connect 35 0 38 0;
-#X connect 36 0 35 1;
-#X connect 38 0 37 0;
-#X connect 38 0 40 2;
-#X connect 39 0 35 0;
-#X connect 41 0 32 0;
-#X connect 41 0 40 1;
-#X connect 42 0 27 0;
-#X connect 43 0 4 0;
-#X restore 325 431 pd instr_bass;
-#N canvas 65 11 787 675 instr_high 0;
-#X obj 72 43 inlet;
-#X obj 150 594 throw~ mainL;
-#X obj 274 591 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 260 44 inlet;
-#X obj 229 309 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 259 332 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 378 570 outlet~;
-#X obj 106 227 r sampleinit;
-#X floatatom 68 348 5 0 0 0 - - -;
-#X text 63 330 length;
-#X floatatom 69 371 5 0 0 0 - - -;
-#X text 62 389 volume;
-#X floatatom 116 348 5 0 0 0 - - -;
-#X floatatom 165 348 5 0 0 0 - - -;
-#X text 165 328 pitch;
-#X text 117 329 start;
-#X obj 249 420 s lastload;
-#X msg 106 300 1;
-#X msg 68 300 440;
-#X obj 142 392 sampleplayer 2;
-#X obj 229 286 r channel2;
-#X msg 143 300 100;
-#X msg 256 366 samples/SD01.WAV;
-#X obj 250 525 *~ 0;
-#X obj 523 151 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 5080 1;
-#X obj 504 46 loadbang;
-#X obj 475 365 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 543 397 pd varia;
-#X obj 603 373 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X obj 266 477 bp~ 100 20;
-#X floatatom 549 450 5 0 0 0 - - -;
-#X obj 542 424 * 8000;
-#X msg 475 388 0.005;
-#X obj 508 477 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 576 509 pd varia;
-#X obj 636 485 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 585 561 5 0 0 0 - - -;
-#X obj 575 536 * 20;
-#X msg 508 500 0.025;
-#X msg 506 70 0.4;
-#X obj 81 104 tabread proposed2;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 22 4;
-#X connect 8 0 22 5;
-#X connect 10 0 25 0;
-#X connect 10 0 21 0;
-#X connect 10 0 20 0;
-#X connect 10 0 24 0;
-#X connect 11 0 22 1;
-#X connect 13 0 22 0;
-#X connect 15 0 22 2;
-#X connect 16 0 22 3;
-#X connect 20 0 15 0;
-#X connect 21 0 11 0;
-#X connect 22 0 26 0;
-#X connect 22 1 19 0;
-#X connect 23 0 7 0;
-#X connect 24 0 16 0;
-#X connect 25 0 22 6;
-#X connect 26 0 9 0;
-#X connect 26 0 1 0;
-#X connect 26 0 2 0;
-#X connect 27 0 26 1;
-#X connect 28 0 42 0;
-#X connect 29 0 35 0;
-#X connect 30 0 34 0;
-#X connect 31 0 30 1;
-#X connect 34 0 32 1;
-#X connect 34 0 33 0;
-#X connect 35 0 30 0;
-#X connect 36 0 41 0;
-#X connect 37 0 40 0;
-#X connect 38 0 37 1;
-#X connect 40 0 32 2;
-#X connect 40 0 39 0;
-#X connect 41 0 37 0;
-#X connect 42 0 27 0;
-#X connect 43 0 4 0;
-#X restore 325 454 pd instr_high;
-#N canvas 48 52 595 565 metro 0;
-#X obj 64 231 throw~ mainL;
-#X obj 186 232 throw~ mainR;
-#X obj 83 33 inlet;
-#X obj 82 87 bang;
-#N canvas 4 65 458 308 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X obj 156 113 *~ 0.1;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X restore 83 149 pd perc;
-#X obj 103 185 *~ 0.3;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
-#X restore 325 410 pd metro;
-#X obj 118 514 catch~ mainL;
-#X obj 118 536 catch~ mainR;
-#N canvas 23 68 811 352 capture 0;
-#X obj 713 29 inlet;
-#X obj 148 224 int;
-#X msg 58 204 1;
-#X obj 68 179 t a a;
-#X obj 101 200 bang;
-#X obj 43 247 tabwrite played1;
-#X obj 59 145 inlet;
-#X obj 305 227 int;
-#X msg 215 207 1;
-#X obj 225 182 t a a;
-#X obj 258 203 bang;
-#X obj 216 148 inlet;
-#X obj 458 227 int;
-#X msg 368 207 1;
-#X obj 378 182 t a a;
-#X obj 411 203 bang;
-#X obj 369 148 inlet;
-#X obj 607 227 int;
-#X msg 517 207 1;
-#X obj 527 182 t a a;
-#X obj 560 203 bang;
-#X obj 518 148 inlet;
-#X obj 200 250 tabwrite played2;
-#X obj 354 250 tabwrite played3;
-#X obj 502 250 tabwrite played4;
-#X connect 0 0 1 1;
-#X connect 0 0 7 1;
-#X connect 0 0 12 1;
-#X connect 0 0 17 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 3 1 4 0;
-#X connect 4 0 1 0;
-#X connect 6 0 3 0;
-#X connect 7 0 22 1;
-#X connect 8 0 22 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 0;
-#X connect 10 0 7 0;
-#X connect 11 0 9 0;
-#X connect 12 0 23 1;
-#X connect 13 0 23 0;
-#X connect 14 0 13 0;
-#X connect 14 1 15 0;
-#X connect 15 0 12 0;
-#X connect 16 0 14 0;
-#X connect 17 0 24 1;
-#X connect 18 0 24 0;
-#X connect 19 0 18 0;
-#X connect 19 1 20 0;
-#X connect 20 0 17 0;
-#X connect 21 0 19 0;
-#X restore 135 484 pd capture;
-#X text 37 224 this delay is to center the quantization;
-#X obj 426 130 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -258699 -1 -1 60 256;
-#X text 29 30 test1: detect rhythmic pattern and proposes a counterpoint
-;
-#X obj 476 397 select 0;
-#N canvas 0 0 454 304 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 variazione \$1;
-#X msg 135 74 riempimento \$1;
-#X msg 231 133 aderenza \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 698 378 pd valori;
-#X obj 678 220 vsl 15 128 0 1 0 0 empty empty variazione 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 730 226 vsl 15 128 0 1 0 0 empty empty riempimento 0 -8 0 8
--262144 -1 -1 0 1;
-#X obj 788 239 vsl 15 128 0 1 0 0 empty empty aderenza 0 -8 0 8 -262144
--1 -1 10160 1;
-#N canvas 0 4 458 308 ritmino 0;
-#X obj 216 31 inlet;
-#X obj 201 268 outlet;
-#X obj 48 131 select 0;
-#X obj 131 135 select 3;
-#X obj 211 136 select 6;
-#X obj 200 238 bang;
-#X obj 307 133 select 8;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 0 0 6 0;
-#X connect 2 0 5 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 0;
-#X restore 58 412 pd ritmino;
-#X floatatom 665 357 5 0 0 0 - - -;
-#X floatatom 719 359 5 0 0 0 - - -;
-#X floatatom 786 371 5 0 0 0 - - -;
-#X obj 460 101 s sampleinit;
-#X obj 59 507 *~ 1;
-#X obj 22 431 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 1270 1;
-#X obj 19 351 loadbang;
-#X obj 285 385 t a a a a a a a;
-#N canvas 65 11 783 671 instr3 0;
-#X obj 72 43 inlet;
-#X obj 242 561 throw~ mainL;
-#X obj 366 558 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 260 44 inlet;
-#X obj 229 309 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 259 332 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 470 537 outlet~;
-#X obj 106 227 r sampleinit;
-#X floatatom 68 348 5 0 0 0 - - -;
-#X text 63 330 length;
-#X floatatom 69 371 5 0 0 0 - - -;
-#X text 62 389 volume;
-#X floatatom 116 348 5 0 0 0 - - -;
-#X floatatom 165 348 5 0 0 0 - - -;
-#X text 165 328 pitch;
-#X text 117 329 start;
-#X obj 249 420 s lastload;
-#X msg 106 300 1;
-#X msg 68 300 440;
-#X obj 229 286 r channel2;
-#X msg 143 300 100;
-#X obj 287 502 *~ 0;
-#X obj 523 151 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 5080 1;
-#X obj 504 46 loadbang;
-#X msg 256 366 samples/claps.WAV;
-#X obj 142 392 sampleplayer 3;
-#X obj 288 461 bp~ 100 20;
-#X obj 513 339 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 581 371 pd varia;
-#X obj 641 347 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 587 424 5 0 0 0 - - -;
-#X obj 580 398 * 8000;
-#X msg 513 362 0.005;
-#X obj 546 451 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 614 483 pd varia;
-#X obj 674 459 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 623 535 5 0 0 0 - - -;
-#X obj 613 510 * 20;
-#X msg 546 474 0.025;
-#X msg 506 70 0.4;
-#X obj 81 104 tabread proposed3;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 28 4;
-#X connect 8 0 28 5;
-#X connect 10 0 27 0;
-#X connect 10 0 21 0;
-#X connect 10 0 20 0;
-#X connect 10 0 23 0;
-#X connect 11 0 28 1;
-#X connect 13 0 28 0;
-#X connect 15 0 28 2;
-#X connect 16 0 28 3;
-#X connect 20 0 15 0;
-#X connect 21 0 11 0;
-#X connect 22 0 7 0;
-#X connect 23 0 16 0;
-#X connect 24 0 9 0;
-#X connect 24 0 1 0;
-#X connect 24 0 2 0;
-#X connect 25 0 24 1;
-#X connect 26 0 42 0;
-#X connect 27 0 28 6;
-#X connect 28 0 24 0;
-#X connect 28 1 19 0;
-#X connect 30 0 35 0;
-#X connect 31 0 34 0;
-#X connect 32 0 31 1;
-#X connect 34 0 33 0;
-#X connect 34 0 29 1;
-#X connect 35 0 31 0;
-#X connect 36 0 41 0;
-#X connect 37 0 40 0;
-#X connect 38 0 37 1;
-#X connect 40 0 39 0;
-#X connect 40 0 29 2;
-#X connect 41 0 37 0;
-#X connect 42 0 25 0;
-#X connect 43 0 4 0;
-#X restore 325 479 pd instr3;
-#N canvas 65 11 775 663 instr4 0;
-#X obj 72 43 inlet;
-#X obj 242 561 throw~ mainL;
-#X obj 366 558 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 260 44 inlet;
-#X obj 229 309 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 259 332 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 470 537 outlet~;
-#X obj 106 227 r sampleinit;
-#X floatatom 68 348 5 0 0 0 - - -;
-#X text 63 330 length;
-#X floatatom 69 371 5 0 0 0 - - -;
-#X text 62 389 volume;
-#X floatatom 116 348 5 0 0 0 - - -;
-#X floatatom 165 348 5 0 0 0 - - -;
-#X text 165 328 pitch;
-#X text 117 329 start;
-#X obj 249 420 s lastload;
-#X msg 106 300 1;
-#X msg 68 300 440;
-#X obj 229 286 r channel2;
-#X msg 143 300 100;
-#X obj 294 505 *~ 0;
-#X obj 523 151 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 7620 1;
-#X obj 504 46 loadbang;
-#X obj 142 392 sampleplayer 4;
-#X msg 255 365 samples/SHAKE1.WAV;
-#X obj 529 338 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 597 370 pd varia;
-#X obj 657 346 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 603 423 5 0 0 0 - - -;
-#X obj 596 397 * 8000;
-#X msg 529 361 0.005;
-#X obj 562 450 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 630 482 pd varia;
-#X obj 690 458 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 639 534 5 0 0 0 - - -;
-#X obj 629 509 * 20;
-#X msg 562 473 0.025;
-#X obj 316 454 bp~ 100 20;
-#X msg 506 70 0.6;
-#X obj 81 104 tabread proposed4;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 27 4;
-#X connect 8 0 27 5;
-#X connect 10 0 28 0;
-#X connect 10 0 21 0;
-#X connect 10 0 20 0;
-#X connect 10 0 23 0;
-#X connect 11 0 27 1;
-#X connect 13 0 27 0;
-#X connect 15 0 27 2;
-#X connect 16 0 27 3;
-#X connect 20 0 15 0;
-#X connect 21 0 11 0;
-#X connect 22 0 7 0;
-#X connect 23 0 16 0;
-#X connect 24 0 9 0;
-#X connect 24 0 1 0;
-#X connect 24 0 2 0;
-#X connect 25 0 24 1;
-#X connect 26 0 42 0;
-#X connect 27 0 24 0;
-#X connect 27 1 19 0;
-#X connect 28 0 27 6;
-#X connect 29 0 34 0;
-#X connect 30 0 33 0;
-#X connect 31 0 30 1;
-#X connect 33 0 32 0;
-#X connect 33 0 41 1;
-#X connect 34 0 30 0;
-#X connect 35 0 40 0;
-#X connect 36 0 39 0;
-#X connect 37 0 36 1;
-#X connect 39 0 38 0;
-#X connect 39 0 41 2;
-#X connect 40 0 36 0;
-#X connect 42 0 25 0;
-#X connect 43 0 4 0;
-#X restore 325 503 pd instr4;
-#X obj 72 590 *~;
-#X obj 158 565 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 3120 1;
-#X obj 104 588 *~;
-#X obj 190 565 loadbang;
-#X obj 109 72 loadbang;
-#X msg 109 95 0.001;
-#X obj 178 130 + 1;
-#X obj 812 155 loadbang;
-#X obj 177 154 * 50;
-#X obj 891 341 loadbang;
-#X msg 848 244 0.8;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 177 104 pd varia;
-#N canvas 186 160 510 360 varia2 0;
-#X obj 244 46 inlet;
-#X obj 94 275 outlet;
-#X obj 84 172 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 60 53 inlet;
-#X obj 226 230 table varia2;
-#X obj 47 236 tabread varia2;
-#X obj 45 201 * 100;
-#X obj 53 121 phasor~ 0.01;
-#X connect 0 0 3 0;
-#X connect 2 0 7 0;
-#X connect 3 0 2 0;
-#X connect 4 0 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 6 0;
-#X connect 8 0 2 0;
-#X restore 823 203 pd varia2;
-#X msg 811 178 0.01;
-#X obj 237 80 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0 1
-;
-#X obj 890 182 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X msg 21 375 0.1;
-#X msg 192 588 0.8;
-#N canvas 26 13 993 549 tables 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array played1 16 float 1;
-#A 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 101 20 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src1 16 float 1;
-#A 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 494 25 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed1 16 float 1;
-#A 0 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 483 257 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 482 307 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 482 354 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed4 16 float 1;
-#A 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 482 401 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 100 68 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 492 76 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 97 117 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 492 126 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 96 168 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 491 178 graph;
-#X restore 303 104 pd tables;
-#X obj 380 599 GArhythm src1 src2 src3 src4 proposed1 proposed2 proposed3
-proposed4;
-#N canvas 0 0 454 304 avg_rhythms 0;
-#X obj 41 76 bang;
-#X obj 46 104 ritmo1 played1 src1;
-#X obj 45 125 ritmo1 played2 src2;
-#X obj 46 146 ritmo1 played3 src3;
-#X obj 45 165 ritmo1 played4 src4;
-#X obj 116 44 inlet;
-#X connect 0 0 1 0;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 5 0 0 0;
-#X restore 510 452 pd avg_rhythms;
-#N canvas 0 0 458 308 audio2bang 0;
-#X obj 54 38 inlet~;
-#X obj 53 61 bonk~ 64;
-#X obj 69 117 outlet;
-#X obj 155 42 inlet~;
-#X obj 154 65 bonk~ 64;
-#X obj 170 121 outlet;
-#X obj 240 41 inlet~;
-#X obj 239 64 bonk~ 64;
-#X obj 255 120 outlet;
-#X obj 333 45 inlet~;
-#X obj 332 68 bonk~ 64;
-#X obj 348 124 outlet;
-#X connect 0 0 1 0;
-#X connect 1 1 2 0;
-#X connect 3 0 4 0;
-#X connect 4 1 5 0;
-#X connect 6 0 7 0;
-#X connect 7 1 8 0;
-#X connect 9 0 10 0;
-#X connect 10 1 11 0;
-#X restore 128 328 pd audio2bang;
-#X obj 67 628 outlet~;
-#X obj 132 629 outlet~;
-#X obj 372 55 inlet;
-#X obj 90 295 adc~ 1;
-#X obj 141 296 adc~ 2;
-#X obj 194 296 adc~ 3;
-#X obj 247 295 adc~ 4;
-#X msg 450 512 reinit;
-#X msg 490 560 reinsert_src \$1;
-#X msg 642 562 reinsert_last \$1;
-#X floatatom 492 540 5 0 0 0 - - -;
-#X floatatom 645 539 5 0 0 0 - - -;
-#X msg 578 503 help;
-#X msg 658 511 prob_crossover \$1;
-#X msg 808 512 prob_mutation \$1;
-#X obj 659 475 vsl 10 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 809 474 vsl 10 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X msg 659 453 0.9;
-#X msg 810 451 0.025;
-#X floatatom 672 490 5 0 0 0 - - -;
-#X floatatom 824 491 5 0 0 0 - - -;
-#X connect 1 0 33 0;
-#X connect 1 0 60 0;
-#X connect 2 0 1 0;
-#X connect 3 0 12 0;
-#X connect 4 0 3 1;
-#X connect 4 0 9 0;
-#X connect 4 0 13 0;
-#X connect 5 0 6 0;
-#X connect 5 0 32 0;
-#X connect 6 0 21 0;
-#X connect 7 0 3 0;
-#X connect 8 0 23 0;
-#X connect 8 0 36 0;
-#X connect 10 0 11 0;
-#X connect 10 1 59 0;
-#X connect 11 0 58 0;
-#X connect 12 0 8 0;
-#X connect 13 0 12 1;
-#X connect 17 0 39 0;
-#X connect 18 0 41 0;
-#X connect 21 0 4 0;
-#X connect 23 0 10 0;
-#X connect 24 0 58 0;
-#X connect 25 0 24 0;
-#X connect 25 0 29 0;
-#X connect 26 0 24 1;
-#X connect 26 0 30 0;
-#X connect 27 0 24 2;
-#X connect 27 0 31 0;
-#X connect 28 0 2 0;
-#X connect 33 0 39 0;
-#X connect 34 0 33 1;
-#X connect 35 0 55 0;
-#X connect 36 0 28 0;
-#X connect 36 1 19 4;
-#X connect 36 2 16 0;
-#X connect 36 3 14 0;
-#X connect 36 4 15 0;
-#X connect 36 5 37 0;
-#X connect 36 6 38 0;
-#X connect 39 0 0 0;
-#X connect 39 0 61 0;
-#X connect 40 0 39 1;
-#X connect 40 0 41 1;
-#X connect 41 0 0 1;
-#X connect 41 0 62 0;
-#X connect 42 0 56 0;
-#X connect 43 0 44 0;
-#X connect 44 0 50 0;
-#X connect 45 0 47 0;
-#X connect 46 0 52 0;
-#X connect 47 0 21 0;
-#X connect 48 0 49 0;
-#X connect 48 0 79 0;
-#X connect 48 0 78 0;
-#X connect 49 0 27 0;
-#X connect 50 0 45 0;
-#X connect 51 0 26 0;
-#X connect 52 0 51 0;
-#X connect 53 0 50 1;
-#X connect 54 0 51 1;
-#X connect 55 0 34 0;
-#X connect 56 0 40 0;
-#X connect 60 0 19 0;
-#X connect 60 1 19 1;
-#X connect 60 2 19 2;
-#X connect 60 3 19 3;
-#X connect 63 0 7 0;
-#X connect 64 0 60 0;
-#X connect 65 0 60 1;
-#X connect 66 0 60 2;
-#X connect 67 0 60 3;
-#X connect 68 0 58 0;
-#X connect 69 0 58 0;
-#X connect 70 0 58 0;
-#X connect 71 0 69 0;
-#X connect 72 0 70 0;
-#X connect 73 0 58 0;
-#X connect 74 0 58 0;
-#X connect 75 0 58 0;
-#X connect 76 0 74 0;
-#X connect 76 0 80 0;
-#X connect 77 0 75 0;
-#X connect 77 0 81 0;
-#X connect 78 0 76 0;
-#X connect 79 0 77 0;
diff --git a/externals/frankenstein/patches/test-harmonizer2.pd b/externals/frankenstein/patches/test-harmonizer2.pd
deleted file mode 100644
index ced7281228042508c3dc705df2b2f889c71d7f88..0000000000000000000000000000000000000000
--- a/externals/frankenstein/patches/test-harmonizer2.pd
+++ /dev/null
@@ -1,313 +0,0 @@
-#N canvas 14 34 915 687 12;
-#X symbolatom 731 341 18 0 0 2 next_chord - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 607 47 pd readme;
-#X obj 121 329 harmonizer;
-#X msg 44 298 current \$1;
-#X msg 158 283 target \$1;
-#X obj 44 274 symbol;
-#X obj 44 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 245 347 unpack f f f f f;
-#X obj 153 97 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 153 121 set \$1;
-#N canvas 0 0 718 428 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 423 135 pd midi;
-#N canvas 0 0 466 316 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 175 135 init 1;
-#X msg 115 77 write strani;
-#X msg 145 105 read strani;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 340 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 49 348 bang;
-#X obj 190 607 dac~;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 2900 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X obj 178 571 csoundapi~ bay.orc;
-#X msg 463 545 event i 10 0 17000 10 30;
-#X msg 463 568 event i 30 0 17000 2 30;
-#X msg 464 521 event i 25 0 17000 0.98 0.8 20000;
-#X obj 466 497 loadbang;
-#X msg 171 522 event i 9 0 10 \$1 80 0.5;
-#X obj 462 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 462 41 metro 7000;
-#X obj 13 32 r novelty;
-#X obj 599 121 int 0;
-#X obj 646 120 + 1;
-#X obj 600 171 tabread tab-novelty;
-#X obj 600 194 s novelty;
-#X obj 685 119 table tab-novelty;
-#X obj 600 147 % 10;
-#X obj 462 63 t b b;
-#X msg 463 457 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
-#X obj 220 96 symbol;
-#X msg 220 124 tonality \$1;
-#X obj 220 72 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X text 529 392 this transposes of a + minor 3rd;
-#X obj 458 348 loadbang;
-#X msg 457 395 3;
-#X symbolatom 575 339 18 0 0 2 curr_chord - -;
-#X obj 42 218 symbol;
-#X obj 42 194 t s b;
-#X obj 64 604 outlet~;
-#X obj 124 605 outlet~;
-#X obj 578 358 outlet;
-#X obj 733 360 outlet;
-#N canvas 0 0 812 538 prepare_voice 0;
-#X obj 48 57 inlet;
-#X obj 392 55 inlet;
-#X obj 46 422 outlet;
-#X obj 52 95 + 0;
-#X obj 49 184 mtof;
-#X obj 52 129 t f b;
-#X obj 50 154 int 60;
-#X text 399 138 this adds a 1 chord delay;
-#X obj 115 55 inlet;
-#X obj 113 420 outlet;
-#X obj 119 93 + 0;
-#X obj 116 179 mtof;
-#X obj 119 127 t f b;
-#X obj 117 152 int 60;
-#X obj 176 52 inlet;
-#X obj 174 417 outlet;
-#X obj 180 90 + 0;
-#X obj 177 179 mtof;
-#X obj 180 124 t f b;
-#X obj 178 149 int 60;
-#X obj 242 54 inlet;
-#X obj 240 419 outlet;
-#X obj 246 92 + 0;
-#X obj 243 181 mtof;
-#X obj 246 126 t f b;
-#X obj 244 151 int 60;
-#X obj 307 54 inlet;
-#X obj 305 419 outlet;
-#X obj 311 92 + 0;
-#X obj 308 181 mtof;
-#X obj 311 126 t f b;
-#X obj 309 151 int 60;
-#X text 383 38 semitones;
-#X obj 47 313 spigot;
-#X obj 505 268 loadbang;
-#X msg 506 291 1;
-#X obj 63 290 r v1;
-#X obj 119 313 spigot;
-#X obj 180 314 spigot;
-#X obj 247 313 spigot;
-#X obj 312 313 spigot;
-#X obj 135 290 r v2;
-#X obj 196 291 r v3;
-#X obj 263 291 r v4;
-#X obj 328 290 r v5;
-#X connect 0 0 3 0;
-#X connect 1 0 3 1;
-#X connect 1 0 28 1;
-#X connect 1 0 22 1;
-#X connect 1 0 10 1;
-#X connect 1 0 16 1;
-#X connect 3 0 5 0;
-#X connect 4 0 33 0;
-#X connect 5 0 6 1;
-#X connect 5 1 6 0;
-#X connect 6 0 4 0;
-#X connect 8 0 10 0;
-#X connect 10 0 12 0;
-#X connect 11 0 37 0;
-#X connect 12 0 13 1;
-#X connect 12 1 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 16 0;
-#X connect 16 0 18 0;
-#X connect 17 0 38 0;
-#X connect 18 0 19 1;
-#X connect 18 1 19 0;
-#X connect 19 0 17 0;
-#X connect 20 0 22 0;
-#X connect 22 0 24 0;
-#X connect 23 0 39 0;
-#X connect 24 0 25 1;
-#X connect 24 1 25 0;
-#X connect 25 0 23 0;
-#X connect 26 0 28 0;
-#X connect 28 0 30 0;
-#X connect 29 0 40 0;
-#X connect 30 0 31 1;
-#X connect 30 1 31 0;
-#X connect 31 0 29 0;
-#X connect 33 0 2 0;
-#X connect 34 0 35 0;
-#X connect 35 0 33 1;
-#X connect 35 0 37 1;
-#X connect 35 0 38 1;
-#X connect 35 0 39 1;
-#X connect 35 0 40 1;
-#X connect 36 0 33 1;
-#X connect 37 0 9 0;
-#X connect 38 0 15 0;
-#X connect 39 0 21 0;
-#X connect 40 0 27 0;
-#X connect 41 0 37 1;
-#X connect 42 0 38 1;
-#X connect 43 0 39 1;
-#X connect 44 0 40 1;
-#X restore 237 387 pd prepare_voice;
-#X obj 45 415 tgl 20 0 v1 empty toggle_v1 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 44 446 tgl 20 0 v2 empty toggle_v2 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 476 tgl 20 0 v3 empty toggle_v3 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 507 tgl 20 0 v4 empty toggle_v4 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 40 537 tgl 20 0 v5 empty toggle_v5 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 7 376 loadbang;
-#X msg 8 399 1;
-#X obj 83 169 chords_memory strani;
-#X connect 2 0 15 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 61 0;
-#X connect 15 1 9 1;
-#X connect 15 1 61 1;
-#X connect 15 2 10 1;
-#X connect 15 2 61 2;
-#X connect 15 3 11 1;
-#X connect 15 3 61 3;
-#X connect 15 4 12 1;
-#X connect 15 4 61 4;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 69 0;
-#X connect 19 0 69 0;
-#X connect 20 0 69 0;
-#X connect 21 0 25 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 25 0 26 0;
-#X connect 26 0 69 0;
-#X connect 27 0 25 1;
-#X connect 27 0 28 0;
-#X connect 29 0 24 0;
-#X connect 29 0 57 0;
-#X connect 29 1 24 1;
-#X connect 29 1 58 0;
-#X connect 30 0 29 0;
-#X connect 31 0 29 0;
-#X connect 32 0 29 0;
-#X connect 33 0 32 0;
-#X connect 33 0 30 0;
-#X connect 33 0 31 0;
-#X connect 33 0 45 0;
-#X connect 34 0 29 0;
-#X connect 35 0 36 0;
-#X connect 36 0 44 0;
-#X connect 37 0 27 0;
-#X connect 38 0 39 0;
-#X connect 38 0 43 0;
-#X connect 39 0 38 1;
-#X connect 40 0 41 0;
-#X connect 43 0 40 0;
-#X connect 44 0 21 0;
-#X connect 44 1 38 0;
-#X connect 46 0 47 0;
-#X connect 47 0 69 0;
-#X connect 48 0 46 0;
-#X connect 49 0 69 0;
-#X connect 53 0 61 5;
-#X connect 55 0 54 0;
-#X connect 55 0 59 0;
-#X connect 56 0 55 1;
-#X connect 56 1 55 0;
-#X connect 61 0 34 0;
-#X connect 61 1 34 0;
-#X connect 61 2 34 0;
-#X connect 61 3 34 0;
-#X connect 61 4 34 0;
-#X connect 67 0 68 0;
-#X connect 68 0 62 0;
-#X connect 68 0 63 0;
-#X connect 68 0 64 0;
-#X connect 68 0 65 0;
-#X connect 68 0 66 0;
-#X connect 69 0 0 0;
-#X connect 69 0 5 1;
-#X connect 69 0 22 0;
-#X connect 69 0 46 1;
-#X connect 69 0 16 0;
-#X connect 69 0 56 0;
-#X connect 69 0 60 0;
-#X connect 69 1 50 0;
diff --git a/externals/frankenstein/patches/test.graph b/externals/frankenstein/patches/test.graph
deleted file mode 100755
index 0c18d7eee49592812d9fc0f3fb8dd90a8fb369f1..0000000000000000000000000000000000000000
Binary files a/externals/frankenstein/patches/test.graph and /dev/null differ
diff --git a/externals/frankenstein/rhythms_memory.c b/externals/frankenstein/rhythms_memory.c
deleted file mode 100644
index 75ea5a4026d3fb78ad1cb6b4722aa58ab425eeb9..0000000000000000000000000000000000000000
--- a/externals/frankenstein/rhythms_memory.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/* 
-rhythms_memory
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-uses graphs to store rhythms
-
-TODO:
-  * memory save/load to file (?)
-  * output rhythms in the form of list of floats (easy)
-  * add velo (?)
-  * input rhythms from a list (second inlet) (easy)
-  * let it create variations on known rhythms (?)
-  * let it merge rhythms (?)
-
-*/
-
-#include "m_pd.h"
-
-#include "common.h"
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-
-static t_class *rhythms_memory_class;
-
-typedef struct event event;
-typedef struct event
-{
-	unsigned short int voice;
-	double when;
-	event *next;
-};
-
-typedef struct _rhythms_memory
-{
-    t_object x_obj; // myself
-	// 3 outlets:
-	// bangs_out plays the wanted rhythmsin realtime
-	// list_out outputs the wanted rhythm as a list of floats
-	// info_out outputs info on the last recognized rhythm
-	t_outlet *bangs_out, *list_out, *info_out;
-	t_rhythm_event *curr_seq;
-	int seq_initialized;
-	// the memory
-	t_rhythm_memory_representation *rhythms_memory;
-	// measure length
-	double measure_start_time;
-	double measure_length;
-	// input rhythm's events
-	event *events;
-	// output rhythm's events
-	unsigned short int next_main_rhythm_out;
-	unsigned short int next_sub_rhythm_out;
-	event *events_out;
-	t_clock *x_clock;
-    double x_deltime;
-	double last_event_out_time;
-	
-} t_rhythms_memory;
-
-void rhythms_memory_free(t_rhythms_memory *x)
-{
-	if (x->curr_seq)
-		freeBeats(x->curr_seq);	
-	if (x->rhythms_memory)
-		rhythm_memory_free(x->rhythms_memory);
-
-	clock_free(x->x_clock);
-}
-
-// called when a new measure starts
-void start_measure(t_rhythms_memory *x)
-{
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_start_time = clock_getlogicaltime();
-	x->last_event_out_time = 0;
-}
-
-// called when a new event occours
-void add_event(t_rhythms_memory *x, unsigned short int voice)
-{
-	event *newEvent, *currEvent, *lastEvent;
-	double when;
-	when = clock_gettimesince(x->measure_start_time);
-	newEvent = (event *) malloc(sizeof(event));
-	newEvent->when = when;
-	newEvent->voice = voice;
-	newEvent->next = 0;
-	currEvent = x->events;
-	if (currEvent)
-	{
-		// this is not the first event
-		while(currEvent)
-		{
-			lastEvent = currEvent;
-			currEvent = currEvent->next;
-		}
-		lastEvent->next = newEvent;
-	} else
-	{
-		// this is the first event
-		x->events = newEvent;
-	}
-	post("event added");
-}
-
-// called when a measure ends
-void end_measure(t_rhythms_memory *x)
-{
-	float fduration;
-	event *currEvent, *lastEvent;
-	unsigned short int is_it_a_new_rhythm;
-	unsigned short int id, subid;
-	float root_closeness, sub_closeness;
-	int counter;
-	t_atom *lista;
-	// these 2 are for output rhythm
-	int rhythm_found;
-	t_rhythm_event *wanted_rhythm;
-	t_rhythm_event *curr_rhythm;
-	event *lastOutEvent;
-
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_length = clock_gettimesince(x->measure_start_time);
-	// now that i know the exact length of the current measure
-	// i can process the rhythm in the current measure
-	// and evaluate it
-	currEvent = x->events;
-	// this is not the first event
-	// now I translate events in rhythm
-	counter = 0;
-	while(currEvent)
-	{
-		fduration = (float) (((float) currEvent->when) / ((float) x->measure_length));
-		if (x->seq_initialized)
-		{
-			concatenateBeat(x->curr_seq, currEvent->voice, fduration, 1);
-		} else
-		{
-			setFirstBeat(&(x->curr_seq), currEvent->voice, fduration, 1);
-			x->seq_initialized = 1;
-		}
-		currEvent = currEvent->next;
-		counter++;
-	}
-	
-	// delete events after having evaluated them
-	currEvent = x->events;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events = 0;
-
-	if (x->curr_seq)
-	{
-		// now I evaluate this rhythm with the memory
-		rhythm_memory_evaluate(x->rhythms_memory, x->curr_seq, &is_it_a_new_rhythm,
-								&id, &subid, &root_closeness, &sub_closeness);
-		// tell out the answer
-		// allocate space for the list
-		lista = (t_atom *) malloc(sizeof(t_atom) * 5);
-		SETFLOAT(lista, (float) is_it_a_new_rhythm);
-		SETFLOAT(lista+1, (float) id);
-		SETFLOAT(lista+2, (float) subid);
-		SETFLOAT(lista+3, (float) root_closeness);
-		SETFLOAT(lista+4, (float) sub_closeness);
-		outlet_anything(x->info_out,
-						gensym("list") ,
-						5, 
-						lista);
-		free(lista);
-		// rhythm_memory_evaluate freed the memory for the rhythm if needed
-		x->seq_initialized = 0;
-		x->curr_seq = 0;
-	}
-
-	// I free the list of events_out (if present)
-	currEvent = x->events_out;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events_out = 0;
-	// i set up the list of events_out
-	// for the wanted rhythm
-	if (x->next_main_rhythm_out)
-	{
-		wanted_rhythm = 0;
-		// ask the memory for the wanted rhythm
-		rhythm_found = rhythm_memory_get_rhythm(x->rhythms_memory, // the memory
-								&wanted_rhythm, // a pointer to the returned rhythm
-								// the id of the main rhythm wanted
-								x->next_main_rhythm_out, 
-								// the sub-id of the sub-rhythm wanted
-								x->next_sub_rhythm_out);
-		if (rhythm_found==0)
-		{
-			post("rhythms_memory: rhythm %i %i was not found ", x->next_main_rhythm_out, x->next_sub_rhythm_out);
-			return;
-		}
-
-		if (wanted_rhythm==0)
-		{
-			error("rhythms_memory: wanted_rhythm should not be null! ");
-			return;
-		}
-
-		// now I setup the events_out list
-		// for each event in wanted_rhythm
-		// allocate and link an element of elements_out
-		curr_rhythm = wanted_rhythm;
-		lastOutEvent = 0;
-		while (curr_rhythm)
-		{
-			event *newEvent;
-			newEvent = malloc(sizeof(event));
-			newEvent->next = 0;
-			newEvent->voice = curr_rhythm->voice;
-			newEvent->when = (double) (duration2float(curr_rhythm->start) * x->measure_length);
-			post("DEBUG: add event in moment: %f", newEvent->when);
-			if (x->events_out)
-			{
-				// this is not the first event
-				// assign the next
-				lastOutEvent->next = newEvent;
-			} else
-			{
-				// this is the first event
-				x->events_out = newEvent;
-			}
-			// change the last pointer
-			lastOutEvent = newEvent;
-			curr_rhythm = curr_rhythm->next;
-		}
-
-		// also setup the timer for the first event
-		if (x->events_out)
-		{
-			// setup the clock
-			clock_delay(x->x_clock, x->events_out->when);
-			// remember when next event will occour
-			x->last_event_out_time = x->events_out->when;
-			// remember the curr event
-			lastOutEvent = x->events_out;
-			//reassign next event
-			x->events_out = x->events_out->next;
-			// free old event
-			free(lastOutEvent);
-		}
-		x->next_main_rhythm_out = 0;
-
-	}
-
-	// also start the new measure!
-	start_measure(x);
-
-	
-}
-
-// this function is called  by pd
-// when the timer bangs
-static void rhythms_tick(t_rhythms_memory *x)
-{
-	event *lastOutEvent;
-    // here i must:
-	// take the next element in x->events_out
-	// and compute when I'll need to schedule next event
-	// (next_event - curr_event)
-	// set the next element as the current one
-	// and free the memory allocated for the old curr event
-	// set up the timer	
-	post("DEBUG: eveng bang");
-	// first of all trigger the bang!
-	outlet_bang(x->bangs_out);
-	//then do the stuff
-	if (x->events_out)
-	{
-		// setup the clock
-		clock_delay(x->x_clock, x->events_out->when - x->last_event_out_time);
-		// remember when next event will occour
-		x->last_event_out_time = x->events_out->when ;
-		// remember the curr event
-		lastOutEvent = x->events_out;
-		//reassign next event
-		x->events_out = x->events_out->next;
-		// free old event
-		free(lastOutEvent);
-	}
-}
-
-// the user wants me to play a rhythm in the next measure
-// the user MUST pass 2 args: main_rhythm and sub_rhythm wanted
-static void ask_rhythm(t_rhythms_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
-	if (argc<2)
-	{
-		error("this method needs at least 2 floats: main_rhythm and sub_rhythm wanted");
-		return;
-	}
-	//argv++;
-	x->next_main_rhythm_out = atom_getfloat(argv++);
-	x->next_sub_rhythm_out = atom_getfloat(argv);
-	post("DEBUG: asked rhythm %i %i", x->next_main_rhythm_out, x->next_sub_rhythm_out); 
-	// i have nothing left to do:
-	// when this measure will end a list of events_out will be set
-	// from the current values of x->next_main_rhythm_out and x->next_sub_rhythm_out
-}
-
-// add this rhythm to the memory
-static void add_rhythm(t_rhythms_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-}
-
-// creates a variation of a given rhythm (in memory)
-// with a given degree of closeness
-static void variation(t_rhythms_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-
-	// get the rhythm
-
-	// using the transitions table create a new one
-
-	// add it to the memory?
-
-	// output to the list outlet?
-
-	// set it as the next played rhythm
-}
-
-static void rhythms_memory_bang(t_rhythms_memory *x) {
-
-	// generate a random value
-	float rnd;
-	t_rhythm_event *events;
-	t_duration dur;
-
-	rnd = rand()/((double)RAND_MAX + 1);
-	dur = float2duration(rnd);
-
-	post("random value=%f duration.numerator=%i duration.denominator=%i", rnd, dur.numerator, dur.denominator);
-
-	if (x->seq_initialized)
-	{
-		concatenateBeat(x->curr_seq, 0, rnd, 1);
-	} else
-	{
-		setFirstBeat(&(x->curr_seq), 0, rnd, 1);
-		x->seq_initialized = 1;
-	}
-
-	// print the sequence
-	events = x->curr_seq;
-	while(events)
-	{
-		post("event: numerator=%i, denominator=%i", events->duration.numerator, events->duration.denominator);
-		events=events->next;
-	}
-	
-}
-
-void *rhythms_memory_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_rhythms_memory *x = (t_rhythms_memory *)pd_new(rhythms_memory_class);
-	// first is for bangs (to let this external play in realtime
-	//x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->bangs_out = outlet_new(&x->x_obj, gensym("bang"));
-	// this outputs lists of events
-	x->list_out = outlet_new(&x->x_obj, gensym("symbol"));
-	// this outputs info on the last detected rhythm
-	x->info_out = outlet_new(&x->x_obj, gensym("symbol"));
-
-	// inlet for rhythms in the form of lists
-	inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("list"), gensym("rhythm_in"));
-
-	x->x_clock = clock_new(x, (t_method)rhythms_tick);
-	x->seq_initialized = 0;
-
-	rhythm_memory_create(&(x->rhythms_memory));
-	start_measure(x);
-
-    return (x);
-}
-
-// debugging function
-void init(t_rhythms_memory *x)
-{
-	if (x->curr_seq)
-		freeBeats(x->curr_seq);	
-	if (x->rhythms_memory)
-		rhythm_memory_free(x->rhythms_memory);
-	x->seq_initialized = 0;
-	rhythm_memory_create(&(x->rhythms_memory));
-}
-
-// debugging function
-void crash(t_rhythms_memory *x)
-{
-	int *a;
-	a = malloc(sizeof(int));
-	a[99999999999] = 1;
-}
-
-
-void rhythms_memory_setup(void)
-{
-    rhythms_memory_class = class_new(gensym("rhythms_memory"), (t_newmethod)rhythms_memory_new,
-        (t_method)rhythms_memory_free, sizeof(t_rhythms_memory), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(rhythms_memory_class, (t_method)rhythms_memory_bang);
-	class_addmethod(rhythms_memory_class, (t_method)end_measure, gensym("measure"), 0);
-	class_doaddfloat(rhythms_memory_class, (t_method)add_event);
-	class_addmethod(rhythms_memory_class, (t_method)crash, gensym("crash"), 0);
-	// the user asks for a rhythm
-	class_addmethod(rhythms_memory_class, (t_method)ask_rhythm, gensym("rhythm_out"),
-        A_GIMME, 0);
-	// adds a rhythm passing it as a list of floats
-	class_addmethod(rhythms_memory_class, (t_method)add_rhythm, gensym("rhythm_in"),
-        A_GIMME, 0);
-	// builds a variation of a given rhythm
-	class_addmethod(rhythms_memory_class, (t_method)variation, gensym("variation"),
-        A_GIMME, 0);
-	class_addmethod(rhythms_memory_class, (t_method)init, gensym("init"), 0);
-}
-
-
diff --git a/externals/frankenstein/rhythms_memory.vcproj b/externals/frankenstein/rhythms_memory.vcproj
deleted file mode 100755
index a7505539d950a87dab3e84d0574257ce5d284207..0000000000000000000000000000000000000000
--- a/externals/frankenstein/rhythms_memory.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="rhythms_memory"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:rhythms_memory_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/rhythms_memory.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="rhythms_memory.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/ritmo1.c b/externals/frankenstein/ritmo1.c
deleted file mode 100644
index e7e994add872eb75ae2d366254adb7205863d669..0000000000000000000000000000000000000000
--- a/externals/frankenstein/ritmo1.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* 
-ritmo1
-try to extract the current pattern
-*/
-#include "m_pd.h"
-
-#define BUFFER_LENGHT 16
-
-static t_class *ritmo1_class;
-
-typedef struct _ritmo1
-{
-    t_object x_obj; // myself
-    t_symbol *x_arrayname_src; // where i read the current pattern
-    t_symbol *x_arrayname_dest; // where i put the computed pattern
-	t_float *buf1;
-//	t_float *buf2;
-//	t_float *buf3;
-} t_ritmo1;
-
-void ritmo1_allocate_buffers(t_ritmo1 *x)
-{
-	x->buf1 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf2 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf3 =  (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-}
-
-void ritmo1_free(t_ritmo1 *x)
-{
-	freebytes(x->buf1, sizeof(x->buf1));
-//	freebytes(x->buf2, sizeof(x->buf2));	
-//	freebytes(x->buf3, sizeof(x->buf3));
-}
-
-static void ritmo1_bang(t_ritmo1 *x) {
-
-	int i, vecsize;
-	t_garray *arysrc;
-	t_garray *arydest;
-	t_float *vecsrc;
-	t_float *vecdest;
-
-	if (!(arysrc = (t_garray *)pd_findbyclass(x->x_arrayname_src, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc, &vecsize, &vecsrc))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src->s_name);
-	}
-	  else 	if (!(arydest = (t_garray *)pd_findbyclass(x->x_arrayname_dest, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest->s_name);
-	}
-    else if (!garray_getfloatarray(arydest, &vecsize, &vecdest))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest->s_name);
-	}
-	else // I got arrays and data
-	{
-		// step 1: compute the pattern
-		// and write it in vecdest
-		for (i=0; i<16; i++)
-		{
-	//		vecdest[i] = (x->buf1[i] + x->buf2[i] + x->buf3[i] + vecsrc[i])/4;
-			vecdest[i] = (x->buf1[i] + vecsrc[i])/2;
-		}
-		// redraw the arrays
-		garray_redraw(arysrc);
-		garray_redraw(arydest);
-
-		// step 2: cycle buffers
-	//	x->buf3 = x->buf2;
-	//	x->buf2 = x->buf1;
-	//	x->buf1 = x->buf3;
-		// fill the first buffer with src data
-		for (i=0; i<16; i++)
-		{
-			x->buf1[i] = vecsrc[i];
-			vecsrc[i]=0;
-		}
-	}
-}
-
-static void ritmo1_src(t_ritmo1 *x, t_symbol *s) {
-    x->x_arrayname_src = s;
-}
-
-static void ritmo1_dest(t_ritmo1 *x, t_symbol *s) {
-    x->x_arrayname_dest = s;
-}
-
-static void *ritmo1_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_ritmo1 *x = (t_ritmo1 *)pd_new(ritmo1_class);
-	ritmo1_allocate_buffers(x);
-	if (argc>0) 
-	{
-		x->x_arrayname_src = atom_getsymbolarg(0, argc, argv);
-	} 
-	if (argc>1) 
-	{
-		x->x_arrayname_dest = atom_getsymbolarg(1, argc, argv);
-	}
-    return (x);
-}
-
-void ritmo1_setup(void)
-{
-    ritmo1_class = class_new(gensym("ritmo1"), (t_newmethod)ritmo1_new,
-        (t_method)ritmo1_free, sizeof(t_ritmo1), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(ritmo1_class, (t_method)ritmo1_bang);
-    class_addmethod(ritmo1_class, (t_method)ritmo1_src, gensym("src"),A_SYMBOL, 0);
-    class_addmethod(ritmo1_class, (t_method)ritmo1_dest, gensym("dest"),A_SYMBOL, 0);
-}
-
-
diff --git a/externals/frankenstein/sglib.h b/externals/frankenstein/sglib.h
deleted file mode 100644
index 6c88a32ab66e87ce5a53eeee2e96010395fe88b1..0000000000000000000000000000000000000000
--- a/externals/frankenstein/sglib.h
+++ /dev/null
@@ -1,1947 +0,0 @@
-/* 
-
-  This is SGLIB version 1.0.3
-
-  (C) by Marian Vittek, Bratislava, http://www.xref-tech.com/sglib, 2003-5
-
-  License Conditions: You can use a verbatim copy (including this
-  copyright notice) of sglib freely in any project, commercial or not.
-  You can also use derivative forms freely under terms of Open Source
-  Software license or under terms of GNU Public License.  If you need
-  to use a derivative form in a commercial project, or you need sglib
-  under any other license conditions, contact the author.
-
-*/
-
-
-#ifndef _SGLIB__h_
-#define _SGLIB__h_
-
-/* the assert is used exclusively to write unexpected error messages */
-#include <assert.h>
-
-
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-/* -                            LEVEL - 0  INTERFACE                          - */
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------------ STATIC ARRAYS ------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-/* 
-
-  Basic algorithms  for sorting arrays. Multiple  depending arrays can
-  be rearranged using user defined 'elem_exchangers'
-
-*/
-
-/*               HEAP - SORT  (level 0)           */
-
-#define SGLIB_ARRAY_SINGLE_HEAP_SORT(type, a, max, comparator) {\
-  SGLIB_ARRAY_HEAP_SORT(type, a, max, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-
-#define SGLIB_ARRAY_HEAP_SORT(type, a, max, comparator, elem_exchanger) {\
-  int   _k_;\
-  for(_k_=(max)/2; _k_>=0; _k_--) {\
-    SGLIB___ARRAY_HEAP_DOWN(type, a, _k_, max, comparator, elem_exchanger);\
-  }\
-  for(_k_=(max)-1; _k_>=0; _k_--) {\
-    elem_exchanger(type, a, 0, _k_);\
-    SGLIB___ARRAY_HEAP_DOWN(type, a, 0, _k_, comparator, elem_exchanger);\
-  }\
-}
-
-#define SGLIB___ARRAY_HEAP_DOWN(type, a, ind, max, comparator, elem_exchanger) {\
-  type  _t_;\
-  int   _m_, _l_, _r_, _i_;\
-  _i_ = (ind);\
-  _m_ = _i_;\
-  do {\
-    _i_ = _m_;          \
-    _l_ = 2*_i_+1;\
-    _r_ = _l_+1;\
-    if (_l_ < (max)){\
-      if (comparator(((a)[_m_]), ((a)[_l_])) < 0) _m_ = _l_;\
-      if (_r_ < (max)) {\
-        if (comparator(((a)[_m_]), ((a)[_r_])) < 0) _m_ = _r_;\
-      }\
-    }\
-    if (_m_ != _i_) {\
-     elem_exchanger(type, a, _i_, _m_);\
-    }\
-  } while (_m_ != _i_);\
-}
-
-
-/*             QUICK - SORT   (level 0)          */
-
-#define SGLIB_ARRAY_SINGLE_QUICK_SORT(type, a, max, comparator) {\
-  SGLIB_ARRAY_QUICK_SORT(type, a, max, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-
-#define SGLIB_ARRAY_QUICK_SORT(type, a, max, comparator, elem_exchanger) {\
-  int   _i_, _j_, _p_, _stacki_, _start_, _end_;\
-  /* can sort up to 2^64 elements */\
-  int   _startStack_[64]; \
-  int   _endStack_[64];\
-  type  _tmp_;\
-  _startStack_[0] = 0;\
-  _endStack_[0] = (max);\
-  _stacki_ = 1;\
-  while (_stacki_ > 0) {\
-    _stacki_ --;\
-    _start_ = _startStack_[_stacki_];\
-    _end_ = _endStack_[_stacki_];\
-    while (_end_ - _start_ > 2) {\
-      _p_ = _start_;\
-      _i_ = _start_ + 1;\
-      _j_ = _end_ - 1;\
-      while (_i_<_j_) {\
-        for(; _i_<=_j_ && comparator(((a)[_i_]),((a)[_p_]))<=0; _i_++) ;\
-        if (_i_ > _j_) {\
-          /* all remaining elements lesseq than pivot */\
-          elem_exchanger(type, a, _j_, _p_);\
-          _i_ = _j_;\
-        } else {\
-          for(; _i_<=_j_ && comparator(((a)[_j_]),((a)[_p_]))>=0; _j_--) ;\
-          if (_i_ > _j_) {\
-            /* all remaining elements greater than pivot */\
-            elem_exchanger(type, a, _j_, _p_);\
-            _i_ = _j_;\
-          } else if (_i_ < _j_) {\
-            elem_exchanger(type, a, _i_, _j_);\
-            if (_i_+2 < _j_) {_i_++; _j_--;}\
-            else if (_i_+1 < _j_) _i_++;\
-          }\
-        }\
-      }\
-      /* O.K. i==j and pivot is on a[i] == a[j] */\
-      /* handle recursive calls without recursion */\
-      if (_i_-_start_ > 1 && _end_-_j_ > 1) {\
-        /* two recursive calls, use array-stack */\
-        if (_i_-_start_ < _end_-_j_-1) {\
-          _startStack_[_stacki_] = _j_+1;\
-          _endStack_[_stacki_] = _end_;\
-          _stacki_ ++;\
-          _end_ = _i_;\
-        } else {\
-          _startStack_[_stacki_] = _start_;\
-          _endStack_[_stacki_] = _i_;\
-          _stacki_ ++;\
-          _start_ = _j_+1;\
-        }\
-      } else {\
-        if (_i_-_start_ > 1) {\
-          _end_ = _i_;\
-        } else {\
-          _start_ = _j_+1;\
-        }\
-      }\
-    }\
-    if (_end_ - _start_ == 2) {\
-      if (comparator(((a)[_start_]),((a)[_end_-1])) > 0) {\
-        elem_exchanger(type, a, _start_, _end_-1);\
-      }\
-    }\
-  }\
-}
-
-/*             BINARY SEARCH (level 0)          */
-
-#define SGLIB_ARRAY_BINARY_SEARCH(type, a, start_index, end_index, key, comparator, found, result_index) {\
-  int _kk_, _cc_, _ii_, _jj_, _ff_;\
-  _ii_ = (start_index); \
-  _jj_ = (end_index);\
-  _ff_ = 0;\
-  while (_ii_ <= _jj_ && _ff_==0) {\
-    _kk_ = (_jj_+_ii_)/2;\
-    _cc_ = comparator(((a)[_kk_]), (key));\
-    if (_cc_ == 0) {\
-      (result_index) = _kk_;    \
-      _ff_ = 1;\
-    } else if (_cc_ < 0) {\
-      _ii_ = _kk_+1;\
-    } else {\
-      _jj_ = _kk_-1;\
-    }\
-  }\
-  if (_ff_ == 0) {\
-    /* not found, but set its resulting place in the array */\
-    (result_index) = _jj_+1;\
-  }\
-  (found) = _ff_;\
-}
-
-/* -------------------------------- queue (in an array) ------------------ */
-/* queue is a quadruple (a,i,j,dim) such that:                             */
-/*  a is the array storing values                                          */
-/*  i is the index of the first used element in the array                  */
-/*  j is the index of the first free element in the array                  */
-/*  dim is the size of the array a                                         */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! */
-
-#define SGLIB_QUEUE_INIT(type, a, i, j) { i = j = 0; }
-#define SGLIB_QUEUE_IS_EMPTY(type, a, i, j) ((i)==(j))
-#define SGLIB_QUEUE_IS_FULL(type, a, i, j, dim) ((i)==((j)+1)%(dim))
-#define SGLIB_QUEUE_FIRST_ELEMENT(type, a, i, j) (a[i])
-#define SGLIB_QUEUE_ADD_NEXT(type, a, i, j, dim) {\
-  if (SGLIB_QUEUE_IS_FULL(type, a, i, j, dim)) assert(0 && "the queue is full");\
-  (j) = ((j)+1) % (dim);\
-}
-#define SGLIB_QUEUE_ADD(type, a, elem, i, j, dim) {\
-  a[j] = (elem);\
-  SGLIB_QUEUE_ADD_NEXT(type, a, i, j, dim);\
-}
-#define SGLIB_QUEUE_DELETE_FIRST(type, a, i, j, dim) {\
-  if (SGLIB_QUEUE_IS_EMPTY(type, a, i, j)) assert(0 && "the queue is empty");\
-  (i) = ((i)+1) % (dim);\
-}
-#define SGLIB_QUEUE_DELETE(type, a, i, j, dim) {\
-  SGLIB_QUEUE_DELETE_FIRST(type, a, i, j, dim);\
-}
-
-/* ----------------- priority queue (heap) (in an array) -------------------- */
-/* heap is a triple (a,i,dim) such that:                                      */
-/*  a is the array storing values                                             */
-/*  i is the index of the first free element in the array                     */
-/*  dim is the size of the array a                                            */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!!    */
-
-#define SGLIB_HEAP_INIT(type, a, i) { i = 0; }
-#define SGLIB_HEAP_IS_EMPTY(type, a, i) ((i)==0)
-#define SGLIB_HEAP_IS_FULL(type, a, i, dim) ((i)==(dim))
-#define SGLIB_HEAP_FIRST_ELEMENT(type, a, i) (a[0])
-#define SGLIB_HEAP_ADD_NEXT(type, a, i, dim, comparator, elem_exchanger) {\
-  int _i_;\
-  if (SGLIB_HEAP_IS_FULL(type, a, i, dim)) assert(0 && "the heap is full");\
-  _i_ = (i)++;\
-  while (_i_ > 0 && comparator(a[_i_/2], a[_i_]) < 0) {\
-    elem_exchanger(type, a, (_i_/2), _i_);\
-    _i_ = _i_/2;\
-  }\
-}
-#define SGLIB_HEAP_ADD(type, a, elem, i, dim, comparator) {\
-  if (SGLIB_HEAP_IS_FULL(type, a, i, dim)) assert(0 && "the heap is full");\
-  a[i] = (elem);\
-  SGLIB_HEAP_ADD_NEXT(type, a, i, dim, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-#define SGLIB_HEAP_DELETE_FIRST(type, a, i, dim, comparator, elem_exchanger) {\
-  if (SGLIB_HEAP_IS_EMPTY(type, a, i)) assert(0 && "the heap is empty");\
-  (i)--;\
-  a[0] = a[i];\
-  SGLIB___ARRAY_HEAP_DOWN(type, a, 0, i, comparator, elem_exchanger);\
-}
-#define SGLIB_HEAP_DELETE(type, a, i, dim, comparator) {\
-  SGLIB_HEAP_DELETE_FIRST(type, a, i, dim, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-
-
-/* ----------------- hashed table of pointers (in an array) -------------------- */
-
-/*
-
-  This hashed table is storing pointers to objects (not containers).
-  In this table there is a one-to-one mapping between 'objects' stored
-  in the table and indexes where they are placed. Each index is
-  pointing to exactly one 'object' and each 'object' stored in the
-  table occurs on exactly one index.  Once an object is stored in the
-  table, it can be represented via its index.
-
-  In case of collision while adding an object the index shifted 
-  by SGLIB_HASH_TAB_SHIFT_CONSTANT (constant can be redefined)
-
-  You can NOT delete an element from such hash table. The only
-  justification (I can see) for this data structure is an exchange
-  file format, having an index table at the beginning and then
-  refering objects via indexes.
-
-  !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! 
-
-*/
-
-#define SGLIB_HASH_TAB_INIT(type, table, dim) {\
-  int _i_;\
-  for(_i_ = 0; _i_ < (dim); _i_++) (table)[_i_] = NULL;\
-}
-
-#define SGLIB_HASH_TAB_ADD_IF_NOT_MEMBER(type, table, dim, elem, hash_function, comparator, member){\
-  unsigned _pos_;\
-  type     *_elem_;\
-  SGLIB_HASH_TAB_FIND_MEMBER(type, table, dim, elem, _pos_, _elem_);\
-  (member) = (table)[_pos_];\
-  if (_elem_ == NULL) {\
-    if ((table)[_pos_] != NULL) assert(0 && "the hash table is full");\
-    (table)[_pos_] = (elem);\
-  }\
-}
-
-#define SGLIB_HASH_TAB_FIND_MEMBER(type, table, dim, elem, hash_function, comparator, resultIndex, resultMember) {\
-  unsigned _i_;\
-  int      _count_;\
-  type     *_e_;\
-  _count = 0;\
-  _i_ = hash_function(elem);\
-  _i_ %= (dim);\
-  while ((_e_=(table)[_i_])!=NULL && comparator(_e_, (elem))!=0 && _count_<(dim)) {\
-    _count_ ++;\
-    _i_ = (_i_ + SGLIB_HASH_TAB_SHIFT_CONSTANT) % (dim);\
-  }\
-  (resultIndex) = _i_;\
-  if (_count_ < (dim)) (resultMember) = _e_;\
-  else (resultMember) = NULL;\
-}
-
-#define SGLIB_HASH_TAB_IS_MEMBER(type, table, dim, elem, hash_function, resultIndex) {\
-  unsigned _i_;\
-  int      _c_;\
-  type     *_e_;\
-  _count = 0;\
-  _i_ = hash_function(elem);\
-  _i_ %= (dim);\
-  while ((_e_=(table)[_i_])!=NULL && _e_!=(elem) && _c_<(dim)) {\
-    _c_ ++;\
-    _i_ = (_i_ + SGLIB_HASH_TAB_SHIFT_CONSTANT) % (dim);\
-  }\
-  if (_e_==(elem)) (resultIndex) = _i_;\
-  else (resultIndex) = -1;\
-}
-
-#define SGLIB_HASH_TAB_MAP_ON_ELEMENTS(type, table, dim, iteratedIndex, iteratedVariable, command) {\
-  unsigned  iteratedIndex;\
-  type      *iteratedVariable;\
-  for(iteratedIndex=0; iteratedIndex < (dim); iteratedIndex++) {\
-    iteratedVariable = (table)[iteratedIndex];\
-    if (iteratedVariable != NULL) {command;}\
-  }\
-}
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------- DYNAMIC DATA STRUCTURES -------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-/* ------------------------------------ lists (level 0) --------------------- */
-
-#define SGLIB_LIST_ADD(type, list, elem, next) {\
-  (elem)->next = (list);\
-  (list) = (elem);\
-}
-
-#define SGLIB_LIST_CONCAT(type, first, second, next) {\
-  if ((first)==NULL) {\
-    (first) = (second);\
-  } else {\
-    type *_p_;\
-    for(_p_ = (first); _p_->next!=NULL; _p_=_p_->next) ;\
-    _p_->next = (second);\
-  }\
-}
-
-#define SGLIB_LIST_DELETE(type, list, elem, next) {\
-  type **_p_;\
-  for(_p_ = &(list); *_p_!=NULL && *_p_!=(elem); _p_= &(*_p_)->next) ;\
-  assert(*_p_!=NULL && "element is not member of the container, use DELETE_IF_MEMBER instead"!=NULL);\
-  *_p_ = (*_p_)->next;\
-}
-
-#define SGLIB_LIST_ADD_IF_NOT_MEMBER(type, list, elem, comparator, next, member) {\
-  type *_p_;\
-  for(_p_ = (list); _p_!=NULL && comparator(_p_, (elem)) != 0; _p_= _p_->next) ;\
-  (member) = _p_;\
-  if (_p_ == NULL) {\
-    SGLIB_LIST_ADD(type, list, elem, next);\
-  }\
-}
-
-#define SGLIB_LIST_DELETE_IF_MEMBER(type, list, elem, comparator, next, member) {\
-  type **_p_;\
-  for(_p_ = &(list); *_p_!=NULL && comparator((*_p_), (elem)) != 0; _p_= &(*_p_)->next) ;\
-  (member) = *_p_;\
-  if (*_p_ != NULL) {\
-    *_p_ = (*_p_)->next;\
-  }\
-}
-
-#define SGLIB_LIST_IS_MEMBER(type, list, elem, next, result) {\
-  type *_p_;\
-  for(_p_ = (list); _p_!=NULL && _p_ != (elem); _p_= _p_->next) ;\
-  (result) = (_p_!=NULL);\
-}
-
-#define SGLIB_LIST_FIND_MEMBER(type, list, elem, comparator, next, member) {\
-  type *_p_;\
-  for(_p_ = (list); _p_!=NULL && comparator(_p_, (elem)) != 0; _p_= _p_->next) ;\
-  (member) = _p_;\
-}
-
-#define SGLIB_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, next, command) {\
-  type *_ne_;\
-  type *iteratedVariable;\
-  (iteratedVariable) = (list); \
-  while ((iteratedVariable)!=NULL) {\
-    _ne_ = (iteratedVariable)->next;\
-    {command;};\
-    (iteratedVariable) = _ne_;\
-  }\
-}
-
-#define SGLIB_LIST_LEN(type, list, next, result) {\
-  type *_ce_;\
-  (result) = 0;\
-  SGLIB_LIST_MAP_ON_ELEMENTS(type, list, _ce_, next, (result)++);\
-}
-
-#define SGLIB_LIST_REVERSE(type, list, next) {\
-  type *_list_,*_tmp_,*_res_;\
-  _list_ = (list);\
-  _res_ = NULL;\
-  while (_list_!=NULL) {\
-    _tmp_ = _list_->next; _list_->next = _res_;\
-    _res_ = _list_;   _list_ = _tmp_;\
-  }\
-  (list) = _res_;\
-}
-
-#define SGLIB_LIST_SORT(type, list, comparator, next) {\
-  /* a non-recursive merge sort on lists */\
-  type *_r_;\
-  type *_a_, *_b_, *_todo_, *_t_, **_restail_;\
-  int _i_, _n_, _contFlag_;\
-  _r_ = (list);\
-  _contFlag_ = 1;\
-  for(_n_ = 1; _contFlag_; _n_ = _n_+_n_) {\
-    _todo_ = _r_; _r_ = NULL; _restail_ = &_r_; _contFlag_ =0;\
-    while (_todo_!=NULL) {\
-      _a_ = _todo_;\
-      for(_i_ = 1, _t_ = _a_;  _i_ < _n_ && _t_!=NULL;  _i_++, _t_ = _t_->next) ;\
-      if (_t_ ==NULL) {\
-        *_restail_ = _a_;\
-        break;\
-      }\
-      _b_ = _t_->next; _t_->next=NULL;\
-      for(_i_ =1, _t_ = _b_;  _i_<_n_ && _t_!=NULL;  _i_++, _t_ = _t_->next) ;\
-      if (_t_ ==NULL) {\
-        _todo_ =NULL;\
-      } else {\
-        _todo_ = _t_->next; _t_->next=NULL;\
-      }\
-      /* merge */\
-      while (_a_!=NULL && _b_!=NULL) {\
-        if (comparator(_a_, _b_) < 0) {\
-          *_restail_ = _a_;  _restail_ = &(_a_->next); _a_ = _a_->next;\
-        } else {\
-          *_restail_ = _b_;  _restail_ = &(_b_->next); _b_ = _b_->next;\
-        }\
-      }\
-      if (_a_!=NULL) *_restail_ = _a_;\
-      else *_restail_ = _b_;\
-      while (*_restail_!=NULL) _restail_ = &((*_restail_)->next);\
-      _contFlag_ =1;\
-    }\
-  }\
-  (list) = _r_;\
-}
-
-/* --------------------------------- sorted list (level 0) --------------------- */
-/*
-  All operations suppose that the list is sorted and they preserve
-  this property.
-*/
-
-
-#define SGLIB_SORTED_LIST_ADD(type, list, elem, comparator, next) {\
-  type **_e_;\
-  int  _cmpres_;\
-  SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, _cmpres_, _e_);\
-  (elem)->next = *_e_;\
-  *_e_ = (elem);\
-}
-
-#define SGLIB_SORTED_LIST_ADD_IF_NOT_MEMBER(type, list, elem, comparator, next, member) {\
-  type **_e_;\
-  int _cmp_res_;\
-  SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, _cmp_res_, _e_);\
-  if (_cmp_res_ != 0) {\
-    (elem)->next = *_e_;\
-    *_e_ = (elem);\
-    (member) = NULL;\
-  } else {\
-    (member) = *_e_;\
-  }\
-}
-
-#define SGLIB_SORTED_LIST_DELETE(type, list, elem, next) {\
-  SGLIB_LIST_DELETE(type, list, elem, next);\
-}
-
-#define SGLIB_SORTED_LIST_DELETE_IF_MEMBER(type, list, elem, comparator, next, member) {\
-  type **_e_;\
-  int _cmp_res_;\
-  SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, _cmp_res_, _e_);\
-  if (_cmp_res_ == 0) {\
-    (member) = *_e_;\
-    *_e_ = (*_e_)->next;\
-  } else {\
-    (member) = NULL;\
-  }\
-}
-
-#define SGLIB_SORTED_LIST_FIND_MEMBER(type, list, elem, comparator, next, member) {\
-  type *_p_;\
-  int _cmpres_;\
-  for(_p_ = (list); _p_!=NULL && (_cmpres_=comparator(_p_, (elem))) < 0; _p_=_p_->next) ;\
-  if (_cmpres_ != 0) (member) = NULL;\
-  else (member) = _p_;\
-}
-
-#define SGLIB_SORTED_LIST_IS_MEMBER(type, list, elem, comparator, next, result) {\
-  type *_p_;\
-  int _cmpres_;\
-  for(_p_ = (list); _p_!=NULL && (_cmpres_=comparator(_p_, (elem))) < 0; _p_=_p_->next) ;\
-  while (_p_ != NULL && _p_ != (elem) && (_cmpres_ = comparator(_p_, (elem))) == 0) _p_=_p_->next;\
-  (result) = (_p_ == (elem));\
-}
-
-#define SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, comparator_result, member_ptr) {\
-  for((member_ptr) = &(list); \
-      *(member_ptr)!=NULL && ((comparator_result)=comparator((*member_ptr), (elem))) < 0; \
-      (member_ptr) = &(*(member_ptr))->next) ;\
-  if (*(member_ptr) == NULL) (comparator_result) = -1;\
-}
-
-#define SGLIB_SORTED_LIST_LEN(type, list, next, result) {\
-  SGLIB_LIST_LEN(type, list, next, result);\
-}
-
-#define SGLIB_SORTED_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, next, command) {\
-  SGLIB_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, next, command);\
-}
-
-
-/* ------------------------------- double linked list (level 0) ------------------------- */
-/*
-  Lists with back pointer to previous element. Those lists implements deletion
-  of an element in a constant time.
-*/
-
-#define SGLIB___DL_LIST_CREATE_SINGLETON(type, list, elem, previous, next) {\
-  (list) = (elem);\
-  (list)->next = (list)->previous = NULL;\
-}
-
-#define SGLIB_DL_LIST_ADD_AFTER(type, place, elem, previous, next) {\
-  if ((place) == NULL) {\
-    SGLIB___DL_LIST_CREATE_SINGLETON(type, place, elem, previous, next);\
-  } else {\
-    (elem)->next = (place)->next;\
-    (elem)->previous = (place);\
-    (place)->next = (elem);\
-    if ((elem)->next != NULL) (elem)->next->previous = (elem);\
-  }\
-}
-
-#define SGLIB_DL_LIST_ADD_BEFORE(type, place, elem, previous, next) {\
-  if ((place) == NULL) {\
-    SGLIB___DL_LIST_CREATE_SINGLETON(type, place, elem, previous, next);\
-  } else {\
-    (elem)->next = (place);\
-    (elem)->previous = (place)->previous;\
-    (place)->previous = (elem);\
-    if ((elem)->previous != NULL) (elem)->previous->next = (elem);\
-  }\
-}
-
-#define SGLIB_DL_LIST_ADD(type, list, elem, previous, next) {\
-  SGLIB_DL_LIST_ADD_BEFORE(type, list, elem, previous, next)\
-}
-
-#define SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, the_add_operation) {\
-  type *_dlp_;\
-  for(_dlp_ = (list); _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->previous) ;\
-  if (_dlp_ == NULL && (list) != NULL) {\
-    for(_dlp_ = (list)->next; _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->next) ;\
-  }\
-  (member) = _dlp_;\
-  if (_dlp_ == NULL) {\
-    the_add_operation(type, list, elem, previous, next);\
-  }\
-}
-
-#define SGLIB_DL_LIST_ADD_BEFORE_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, SGLIB_DL_LIST_ADD_BEFORE);\
-}
-
-#define SGLIB_DL_LIST_ADD_AFTER_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, SGLIB_DL_LIST_ADD_AFTER);\
-}
-
-#define SGLIB_DL_LIST_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, SGLIB_DL_LIST_ADD);\
-}
-
-#define SGLIB_DL_LIST_CONCAT(type, first, second, previous, next) {\
-  if ((first)==NULL) {\
-    (first) = (second);\
-  } else if ((second)!=NULL) {\
-    type *_dlp_;\
-    for(_dlp_ = (first); _dlp_->next!=NULL; _dlp_=_dlp_->next) ;\
-    SGLIB_DL_LIST_ADD_AFTER(type, _dlp_, second, previous, next);\
-  }\
-}
-
-#define SGLIB_DL_LIST_DELETE(type, list, elem, previous, next) {\
-  type *_l_;\
-  _l_ = (list);\
-  if (_l_ == (elem)) {\
-    if ((elem)->previous != NULL) _l_ = (elem)->previous;\
-    else _l_ = (elem)->next;\
-  }\
-  if ((elem)->next != NULL) (elem)->next->previous = (elem)->previous;\
-  if ((elem)->previous != NULL) (elem)->previous->next = (elem)->next;\
-  (list) = _l_;\
-}
-
-#define SGLIB_DL_LIST_DELETE_IF_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  type *_dlp_;\
-  for(_dlp_ = (list); _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->previous) ;\
-  if (_dlp_ == NULL && (list) != NULL) {\
-    for(_dlp_ = (list)->next; _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->next) ;\
-  }\
-  (member) = _dlp_;\
-  if (_dlp_ != NULL) {\
-    SGLIB_DL_LIST_DELETE(type, list, _dlp_, previous, next);\
-  }\
-}
-
-#define SGLIB_DL_LIST_IS_MEMBER(type, list, elem, previous, next, result) {\
-  type *_dlp_;\
-  SGLIB_LIST_IS_MEMBER(type, list, elem, previous, result);\
-  if (result == 0 && (list) != NULL) {\
-    _dlp_ = (list)->next;\
-    SGLIB_LIST_IS_MEMBER(type, _dlp_, elem, next, result);\
-  }\
-}
-
-#define SGLIB_DL_LIST_FIND_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  type *_dlp_;\
-  SGLIB_LIST_FIND_MEMBER(type, list, elem, comparator, previous, member);\
-  if ((member) == NULL && (list) != NULL) {\
-    _dlp_ = (list)->next;\
-    SGLIB_LIST_FIND_MEMBER(type, _dlp_, elem, comparator, next, member);\
-  }\
-}
-
-#define SGLIB_DL_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, previous, next, command) {\
-  type *_dl_;\
-  type *iteratedVariable;\
-  if ((list)!=NULL) {\
-    _dl_ = (list)->next;\
-    SGLIB_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, previous, command);\
-    SGLIB_LIST_MAP_ON_ELEMENTS(type, _dl_, iteratedVariable, next, command);\
-  }\
-}
-
-#define SGLIB_DL_LIST_SORT(type, list, comparator, previous, next) {\
-  type *_dll_, *_dlp_, *_dlt_;\
-  _dll_ = (list);\
-  if (_dll_ != NULL) {\
-    for(; _dll_->previous!=NULL; _dll_=_dll_->previous) ;\
-    SGLIB_LIST_SORT(type, _dll_, comparator, next);\
-    SGLIB___DL_LIST_CREATE_FROM_LIST(type, _dll_, previous, next);\
-    (list) = _dll_;\
-  }\
-}
-
-#define SGLIB_DL_LIST_GET_FIRST(type, list, previous, next, result) {\
-  type *_dll_;\
-  _dll_ = (list);\
-  if (_dll_ != NULL) {\
-    for(; _dll_->previous!=NULL; _dll_=_dll_->previous) ;\
-  }\
-  (result) = _dll_;\
-}
-
-#define SGLIB_DL_LIST_GET_LAST(type, list, previous, next, result) {\
-  type *_dll_;\
-  _dll_ = (list);\
-  if (_dll_ != NULL) {\
-    for(; _dll_->next!=NULL; _dll_=_dll_->next) ;\
-  }\
-  (result) = _dll_;\
-}
-
-#define SGLIB_DL_LIST_LEN(type, list, previous, next, result) {\
-  type *_dl_;\
-  int _r1_, _r2_;\
-  if ((list)==NULL) {\
-    (result) = 0;\
-  } else {\
-    SGLIB_LIST_LEN(type, list, previous, _r1_);\
-    _dl_ = (list)->next;\
-    SGLIB_LIST_LEN(type, _dl_, next, _r2_);\
-    (result) = _r1_ + _r2_;\
-  }\
-}
-
-#define SGLIB_DL_LIST_REVERSE(type, list, previous, next) {\
-  type *_list_,*_nlist_,*_dlp_,*_dln_;\
-  _list_ = (list);\
-  if (_list_!=NULL) {\
-    _nlist_ = _list_->next;\
-    while (_list_!=NULL) {\
-      _dln_ = _list_->next; \
-      _dlp_ = _list_->previous; \
-      _list_->next = _dlp_;\
-      _list_->previous = _dln_;\
-      _list_ = _dlp_;\
-    }\
-    while (_nlist_!=NULL) {\
-      _dln_ = _nlist_->next; \
-      _dlp_ = _nlist_->previous; \
-      _nlist_->next = _dlp_;\
-      _nlist_->previous = _dln_;\
-      _nlist_ = _dln_;\
-    }\
-  }\
-}
-
-#define SGLIB___DL_LIST_CREATE_FROM_LIST(type, list, previous, next) {\
-  type *_dlp_, *_dlt_;\
-  _dlp_ = NULL;\
-  for(_dlt_ = (list); _dlt_!=NULL; _dlt_ = _dlt_->next) {\
-    _dlt_->previous = _dlp_;\
-    _dlp_ = _dlt_;\
-  }\
-}
-
-
-/* ------------------------------- binary tree traversal (level 0) -------------------- */
-
-
-#define SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, iteratedVariable, order, left, right, command) {\
-  /* this is non-recursive implementation of tree traversal */\
-  /* it maintains the path to the current node in the array '_path_' */\
-  /* the _path_[0] contains the root of the tree; */\
-  /* the _path_[_pathi_] contains the _current_element_ */\
-  /* the macro does not use the _current_element_ after execution of command */\
-  /* command can destroy it, it can free the element for example */\
-  type *_path_[SGLIB_MAX_TREE_DEEP];\
-  type *_right_[SGLIB_MAX_TREE_DEEP];\
-  char _pass_[SGLIB_MAX_TREE_DEEP];\
-  type *_cn_;\
-  int _pathi_;\
-  type *iteratedVariable;\
-  _cn_ = (tree);\
-  _pathi_ = 0;\
-  while (_cn_!=NULL) {\
-    /* push down to leftmost innermost element */\
-    while(_cn_!=NULL) {\
-      _path_[_pathi_] = _cn_;\
-      _right_[_pathi_] = _cn_->right;\
-      _pass_[_pathi_] = 0;\
-      _cn_ = _cn_->left;\
-      if (order == 0) {\
-        iteratedVariable = _path_[_pathi_];\
-        {command;}\
-      }\
-      _pathi_ ++;\
-      if (_pathi_ >= SGLIB_MAX_TREE_DEEP) assert(0 && "the binary_tree is too deep");\
-    }\
-    do {\
-      _pathi_ --;\
-      if ((order==1 && _pass_[_pathi_] == 0)\
-          || (order == 2 && (_pass_[_pathi_] == 1 || _right_[_pathi_]==NULL))) {\
-        iteratedVariable = _path_[_pathi_];\
-        {command;}\
-      }\
-      _pass_[_pathi_] ++;\
-    } while (_pathi_>0 && _right_[_pathi_]==NULL) ;\
-    _cn_ = _right_[_pathi_];\
-    _right_[_pathi_] = NULL;\
-    _pathi_ ++;\
-  }\
-}
-
-#define SGLIB_BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, left, right, command) {\
-  SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, 1, left, right, command);\
-}
-
-#define SGLIB_BIN_TREE_MAP_ON_ELEMENTS_PREORDER(type, tree, _current_element_, left, right, command) {\
-  SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, 0, left, right, command);\
-}
-
-#define SGLIB_BIN_TREE_MAP_ON_ELEMENTS_POSTORDER(type, tree, _current_element_, left, right, command) {\
-  SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, 2, left, right, command);\
-}
-
-#define SGLIB___BIN_TREE_FIND_MEMBER(type, tree, elem, left, right, comparator, res) {\
-  type *_s_;\
-  int _c_;\
-  _s_ = (tree);\
-  while (_s_!=NULL) {\
-    _c_ = comparator((elem), _s_);\
-    if (_c_ < 0) _s_ = _s_->left;\
-    else if (_c_ > 0) _s_ = _s_->right;\
-    else break;\
-  }\
-  (res) = _s_;\
-}
-
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-/* -                             LEVEL - 1  INTERFACE                         - */
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------------ STATIC ARRAYS ------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-/* ----------------------------- array sorting (level 1) ---------------------- */
-
-#define SGLIB_DEFINE_ARRAY_SORTING_PROTOTYPES(type, comparator) \
- extern void sglib_##type##_array_quick_sort(type *a, int max);\
- extern void sglib_##type##_array_heap_sort(type *a, int max);\
-
-
-#define SGLIB_DEFINE_ARRAY_SORTING_FUNCTIONS(type, comparator) \
- void sglib_##type##_array_quick_sort(type *a, int max) {\
-   SGLIB_ARRAY_SINGLE_QUICK_SORT(type, a, max, comparator);\
- }\
- void sglib_##type##_array_heap_sort(type *a, int max) {\
-   SGLIB_ARRAY_SINGLE_HEAP_SORT(type, a, max, comparator);\
- }\
-
-
-/* ----------------------------- array queue (level 1) ------------------- */
-/* sglib's queue is stored in a fixed sized array                          */
-/* queue_type MUST be a structure containing fields:                       */
-/*  afield is the array storing elem_type                                  */
-/*  ifield is the index of the first element in the queue                  */
-/*  jfield is the index of the first free element after the queue          */
-/*  dim is the size of the array afield                                    */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! */
-
-
-#define SGLIB_DEFINE_QUEUE_PROTOTYPES(queue_type, elem_type, afield, ifield, jfield, dim) \
- extern void sglib_##queue_type##_init(queue_type *q); \
- extern int sglib_##queue_type##_is_empty(queue_type *q); \
- extern int sglib_##queue_type##_is_full(queue_type *q); \
- extern elem_type sglib_##queue_type##_first_element(queue_type *q); \
- extern elem_type *sglib_##queue_type##_first_element_ptr(queue_type *q); \
- extern void sglib_##queue_type##_add_next(queue_type *q); \
- extern void sglib_##queue_type##_add(queue_type *q, elem_type elem); \
- extern void sglib_##queue_type##_delete_first(queue_type *q); \
- extern void sglib_##queue_type##_delete(queue_type *q);
-
-
-#define SGLIB_DEFINE_QUEUE_FUNCTIONS(queue_type, elem_type, afield, ifield, jfield, dim) \
- void sglib_##queue_type##_init(queue_type *q) {\
-  SGLIB_QUEUE_INIT(elem_type, q->afield, q->ifield, q->jfield);\
- }\
- int sglib_##queue_type##_is_empty(queue_type *q) {\
-  return(SGLIB_QUEUE_IS_EMPTY(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- int sglib_##queue_type##_is_full(queue_type *q) {\
-  return(SGLIB_QUEUE_IS_FULL(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- elem_type sglib_##queue_type##_first_element(queue_type *q) {\
-  return(SGLIB_QUEUE_FIRST_ELEMENT(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- elem_type *sglib_##queue_type##_first_element_ptr(queue_type *q) {\
-  return(& SGLIB_QUEUE_FIRST_ELEMENT(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- void sglib_##queue_type##_add_next(queue_type *q) {\
-  SGLIB_QUEUE_ADD_NEXT(elem_type, q->afield, q->ifield, q->jfield, dim);\
- }\
- void sglib_##queue_type##_add(queue_type *q, elem_type elem) {\
-  SGLIB_QUEUE_ADD(elem_type, q->afield, elem, q->ifield, q->jfield, dim);\
- }\
- void sglib_##queue_type##_delete_first(queue_type *q) {\
-  SGLIB_QUEUE_DELETE_FIRST(elem_type, q->afield, q->ifield, q->jfield, dim);\
- }\
- void sglib_##queue_type##_delete(queue_type *q) {\
-  SGLIB_QUEUE_DELETE_FIRST(elem_type, q->afield, q->ifield, q->jfield, dim);\
- }
-
-
-/* ------------------------ array heap (level 1) ------------------------- */
-/* sglib's heap is a priority queue implemented in a fixed sized array     */
-/* heap_type MUST be a structure containing fields:                        */
-/*  afield is the array of size dim storing elem_type                      */
-/*  ifield is the index of the first free element after the queue          */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! */
-
-
-#define SGLIB_DEFINE_HEAP_PROTOTYPES(heap_type, elem_type, afield, ifield, dim, comparator, elem_exchanger) \
- extern void sglib_##heap_type##_init(heap_type *q); \
- extern int sglib_##heap_type##_is_empty(heap_type *q); \
- extern int sglib_##heap_type##_is_full(heap_type *q); \
- extern elem_type sglib_##heap_type##_first_element(heap_type *q); \
- extern elem_type *sglib_##heap_type##_first_element_ptr(heap_type *q); \
- extern void sglib_##heap_type##_add_next(heap_type *q); \
- extern void sglib_##heap_type##_add(heap_type *q, elem_type elem); \
- extern void sglib_##heap_type##_delete_first(heap_type *q); \
- extern void sglib_##heap_type##_delete(heap_type *q)
-
-#define SGLIB_DEFINE_HEAP_FUNCTIONS(heap_type, elem_type, afield, ifield, dim, comparator, elem_exchanger) \
- void sglib_##heap_type##_init(heap_type *q) {\
-  SGLIB_HEAP_INIT(elem_type, q->afield, q->ifield);\
- }\
- int sglib_##heap_type##_is_empty(heap_type *q) {\
-  return(SGLIB_HEAP_IS_EMPTY(elem_type, q->afield, q->ifield));\
- }\
- int sglib_##heap_type##_is_full(heap_type *q) {\
-  return(SGLIB_HEAP_IS_FULL(elem_type, q->afield, q->ifield));\
- }\
- elem_type sglib_##heap_type##_first_element(heap_type *q) {\
-  return(SGLIB_HEAP_FIRST_ELEMENT(elem_type, q->afield, q->ifield));\
- }\
- elem_type *sglib_##heap_type##_first_element_ptr(heap_type *q) {\
-  return(& SGLIB_HEAP_FIRST_ELEMENT(elem_type, q->afield, q->ifield));\
- }\
- void sglib_##heap_type##_add_next(heap_type *q) {\
-  SGLIB_HEAP_ADD_NEXT(elem_type, q->afield, q->ifield, dim, comparator, elem_exchanger);\
- }\
- void sglib_##heap_type##_add(heap_type *q, elem_type elem) {\
-  SGLIB_HEAP_ADD(elem_type, q->afield, elem, q->ifield, dim, comparator, elem_exchanger);\
- }\
- void sglib_##heap_type##_delete_first(heap_type *q) {\
-  SGLIB_HEAP_DELETE_FIRST(elem_type, q->afield, q->ifield, dim, comparator, elem_exchanger);\
- }\
- void sglib_##heap_type##_delete(heap_type *q) {\
-  SGLIB_HEAP_DELETE_FIRST(elem_type, q->afield, q->ifield, dim, comparator, elem_exchanger);\
- }
-
-
-/* ------------------------ hashed table  (level 1) ------------------------- */
-/*
- 
-  sglib's hash table is an array storing directly pointers to objects (not containers).
-  In this table there is a one-to-one mapping between 'objects' stored
-  in the table and indexes where they are placed. Each index is
-  pointing to exactly one 'object' and each 'object' stored in the
-  table occurs on exactly one index.  Once an object is stored in the
-  table, it can be represented via its index.
-
-  type          - is the type of elements
-  dim           - is the size of the hash array
-  hash_function - is a hashing function mapping type* to unsigned
-  comparator    - is a comparator on elements
-
-  !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! 
-*/
-
-#define SGLIB_DEFINE_HASHED_TABLE_PROTOTYPES(type, dim, hash_function, comparator) \
-  struct sglib_hashed_##type##_iterator {\
-    int currentIndex;\
-    int (*subcomparator)(type *, type *);\
-    type *equalto;\
-  };\
-  extern void sglib_hashed_##type##_init(type *table[dim]);\
-  extern int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member);\
-  extern int sglib_hashed_##type##_is_member(type *table[dim], type *elem);\
-  extern type * sglib_hashed_##type##_find_member(type *table[dim], type *elem);\
-  extern type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]); \
-  extern type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto); \
-  extern type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it); \
-  extern type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it);
-
-#define SGLIB_DEFINE_HASHED_TABLE_FUNCTIONS(type, dim, hash_function, comparator) \
-  struct sglib_hashed_##type##_iterator {\
-    int currentIndex;\
-    type **table;\
-    int (*subcomparator)(type *, type *);\
-    type *equalto;\
-  };\
-  void sglib_hashed_##type##_init(type *table[dim]) {\
-    SGLIB_HASH_TAB_INIT(type, table, dim);\
-  }\
-  int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member) {\
-    SGLIB_HASH_TAB_ADD_IF_NOT_MEMBER(type, table, dim, elem, hash_function, comparator, *member);\
-  }\
-  int sglib_hashed_##type##_is_member(type *table[dim], type *elem) {\
-    int ind;\
-    SGLIB_HASH_TAB_IS_MEMBER(type, table, dim, elem, hash_function, ind);\
-    return(ind != -1);\
-  }\
-  type * sglib_hashed_##type##_find_member(type *table[dim], type *elem) {\
-    type *mmb;\
-    int ind;\
-    SGLIB_HASH_TAB_FIND_MEMBER(type, table, dim, elem, hash_function, comparator, ind, mmb);\
-    return(mmb);\
-  }\
-  type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto) {\
-    int i;\
-    it->table = table;\
-    it->subcomparator = subcomparator;\
-    it->equalto = equalto;\
-    for(i=0; i<(dim) && table[i]==NULL; i++) ;\
-    it->currentIndex = i;\
-    if (i<(dim)) return(table[i]);\
-    return(NULL);\
-  }\
-  type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]) {\
-    sglib_hashed_##type##_it_init_on_equal(it, table, NULL, NULL);\
-  }\
-  type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it) {\
-    return(table[it->currentIndex]);\
-  }\
-  type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it) {\
-    i=it->currentIndex;\
-    if (i<(dim)) {\
-      for(i++; i<(dim) && table[i]==NULL; i++) ;\
-    }\
-    it->currentIndex = i;\
-    if (i<(dim)) return(table[i]);\
-    return(NULL);\
-  }
-
-
-/* ------------------- hashed container (only for level 1)  -------------------- */
-/* 
-  hashed container is a table of given fixed size containing another
-  (dynamic) base container in each cell. Once an object should be
-  inserted into the hashed container, a hash function is used to
-  determine the cell where the object belongs and the object is
-  inserted into the base container stored in this cell. Usually the
-  base container is simply a list or a sorted list, but it can be a
-  red-black tree as well.
-
-  parameters:
-  type - the type of the container stored in each cell.
-  dim  - the size of the hashed array
-  hash_function - the hashing function hashing 'type *' to unsigned.  
-
-*/
-
-#define SGLIB_DEFINE_HASHED_CONTAINER_PROTOTYPES(type, dim, hash_function) \
-  struct sglib_hashed_##type##_iterator {\
-    struct sglib_##type##_iterator containerIt;\
-    type **table;\
-    int currentIndex;\
-    int (*subcomparator)(type *, type *);\
-    type *equalto;\
-  };\
-  extern void sglib_hashed_##type##_init(type *table[dim]);\
-  extern void sglib_hashed_##type##_add(type *table[dim], type *elem);\
-  extern int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member);\
-  extern void sglib_hashed_##type##_delete(type *table[dim], type *elem);\
-  extern int sglib_hashed_##type##_delete_if_member(type *table[dim], type *elem, type **memb);\
-  extern int sglib_hashed_##type##_is_member(type *table[dim], type *elem);\
-  extern type * sglib_hashed_##type##_find_member(type *table[dim], type *elem);\
-  extern type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]); \
-  extern type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto); \
-  extern type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it); \
-  extern type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it);
-
-#define SGLIB_DEFINE_HASHED_CONTAINER_FUNCTIONS(type, dim, hash_function) \
-  /*extern unsigned hash_function(type *elem);*/\
-  void sglib_hashed_##type##_init(type *table[dim]) {\
-    unsigned i;\
-    for(i=0; i<(dim); i++) table[i] = NULL;\
-  }\
-  void sglib_hashed_##type##_add(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    sglib_##type##_add(&(table)[i], elem);\
-  }\
-  int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_add_if_not_member(&(table)[i], elem, member));\
-  }\
-  void sglib_hashed_##type##_delete(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    sglib_##type##_delete(&(table)[i], elem);\
-  }\
-  int sglib_hashed_##type##_delete_if_member(type *table[dim], type *elem, type **memb) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_delete_if_member(&(table)[i], elem, memb));\
-  }\
-  int sglib_hashed_##type##_is_member(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_is_member((table)[i], elem));\
-  }\
-  type * sglib_hashed_##type##_find_member(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_find_member((table)[i], elem));\
-  }\
-  type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto) {\
-    type *e;\
-    it->table = table;\
-    it->currentIndex = 0;\
-    it->subcomparator = subcomparator;\
-    it->equalto = equalto;\
-    e = sglib_##type##_it_init_on_equal(&it->containerIt, table[it->currentIndex], it->subcomparator, it->equalto);\
-    if (e==NULL) e = sglib_hashed_##type##_it_next(it);\
-    return(e);\
-  }\
-  type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]) {\
-	return(sglib_hashed_##type##_it_init_on_equal(it, table, NULL, NULL));\
-  }\
-  type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it) {\
-    return(sglib_##type##_it_current(&it->containerIt));\
-  }\
-  type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it) {\
-    type *e;\
-    e = sglib_##type##_it_next(&it->containerIt);\
-    while (e==NULL && (++(it->currentIndex))<(dim)) {\
-      e = sglib_##type##_it_init_on_equal(&it->containerIt, it->table[it->currentIndex], it->subcomparator, it->equalto);\
-    }\
-    return(e);\
-  }
-
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------- DYNAMIC DATA STRUCTURES -------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-
-/* ------------------------------------ list (level 1) -------------------------------- */
-
-#define SGLIB_DEFINE_LIST_PROTOTYPES(type, comparator, next) \
- struct sglib_##type##_iterator {\
-   type *currentelem;\
-   type *nextelem;\
-   int (*subcomparator)(type *, type *);\
-   type *equalto;\
- };\
- extern void sglib_##type##_add(type **list, type *elem);\
- extern int sglib_##type##_add_if_not_member(type **list, type *elem, type **member);\
- extern void sglib_##type##_concat(type **first, type *second);\
- extern void sglib_##type##_delete(type **list, type *elem);\
- extern int sglib_##type##_delete_if_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_is_member(type *list, type *elem);\
- extern type *sglib_##type##_find_member(type *list, type *elem);\
- extern void sglib_##type##_sort(type **list);\
- extern int sglib_##type##_len(type *list);\
- extern void sglib_##type##_reverse(type **list);\
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it);
-
-
-#define SGLIB_DEFINE_LIST_FUNCTIONS(type, comparator, next) \
- int sglib_##type##_is_member(type *list, type *elem) {\
-   int result;\
-   SGLIB_LIST_IS_MEMBER(type, list, elem, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_find_member(type *list, type *elem) {\
-   type *result;\
-   SGLIB_LIST_FIND_MEMBER(type, list, elem, comparator, next, result);\
-   return(result);\
- }\
- int sglib_##type##_add_if_not_member(type **list, type *elem, type **member) {\
-   SGLIB_LIST_ADD_IF_NOT_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member==NULL);\
- }\
- void sglib_##type##_add(type **list, type *elem) {\
-   SGLIB_LIST_ADD(type, *list, elem, next);\
- }\
- void sglib_##type##_concat(type **first, type *second) {\
-   SGLIB_LIST_CONCAT(type, *first, second, next);\
- }\
- void sglib_##type##_delete(type **list, type *elem) {\
-   SGLIB_LIST_DELETE(type, *list, elem, next);\
- }\
- int sglib_##type##_delete_if_member(type **list, type *elem, type **member) {\
-   SGLIB_LIST_DELETE_IF_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member!=NULL);\
- }\
- void sglib_##type##_sort(type **list) { \
-   SGLIB_LIST_SORT(type, *list, comparator, next);\
- }\
- int sglib_##type##_len(type *list) {\
-   int res;\
-   SGLIB_LIST_LEN(type, list, next, res);\
-   return(res);\
- }\
- void sglib_##type##_reverse(type **list) {\
-   SGLIB_LIST_REVERSE(type, *list, next);\
- }\
- \
- type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto) {\
-   it->subcomparator = subcomparator;\
-   it->equalto = equalto;\
-   it->nextelem = list;\
-   return(sglib_##type##_it_next(it));\
- }\
- type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list) {\
-   return(sglib_##type##_it_init_on_equal(it, list, NULL, NULL));\
- }\
- type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-   return(it->currentelem);\
- }\
- type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-   type *ce, *eq;\
-   int  (*scp)(type *, type *);\
-   ce = it->nextelem;\
-   it->nextelem = NULL;\
-   if (it->subcomparator != NULL) {\
-	 eq = it->equalto; \
-     scp = it->subcomparator;\
-     while (ce!=NULL && scp(ce, eq)!=0) ce = ce->next;\
-   }\
-   it->currentelem = ce;\
-   if (ce != NULL) it->nextelem = ce->next;\
-   return(ce);\
- }
-
-/* ----------------------------- sorted list (level 1) ----------------------------------- */
-
-
-#define SGLIB_DEFINE_SORTED_LIST_PROTOTYPES(type, comparator, next) \
- struct sglib_##type##_iterator {\
-   type *currentelem;\
-   type *nextelem;\
-   int (*subcomparator)(type *, type *);\
-   type *equalto;\
- };\
- extern void sglib_##type##_add(type **list, type *elem);\
- extern int sglib_##type##_add_if_not_member(type **list, type *elem, type **member);\
- extern void sglib_##type##_delete(type **list, type *elem);\
- extern int sglib_##type##_delete_if_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_is_member(type *list, type *elem);\
- extern type *sglib_##type##_find_member(type *list, type *elem);\
- extern int sglib_##type##_len(type *list);\
- extern void sglib_##type##_sort(type **list);\
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it);
-
-
-#define SGLIB_DEFINE_SORTED_LIST_FUNCTIONS(type, comparator, next) \
- int sglib_##type##_is_member(type *list, type *elem) {\
-   int result;\
-   SGLIB_SORTED_LIST_IS_MEMBER(type, list, elem, comparator, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_find_member(type *list, type *elem) {\
-   type *result;\
-   SGLIB_SORTED_LIST_FIND_MEMBER(type, list, elem, comparator, next, result);\
-   return(result);\
- }\
- int sglib_##type##_add_if_not_member(type **list, type *elem, type **member) {\
-   SGLIB_SORTED_LIST_ADD_IF_NOT_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member==NULL);\
- }\
- void sglib_##type##_add(type **list, type *elem) {\
-   SGLIB_SORTED_LIST_ADD(type, *list, elem, comparator, next);\
- }\
- void sglib_##type##_delete(type **list, type *elem) {\
-   SGLIB_SORTED_LIST_DELETE(type, *list, elem, next);\
- }\
- int sglib_##type##_delete_if_member(type **list, type *elem, type **member) {\
-   SGLIB_SORTED_LIST_DELETE_IF_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member!=NULL);\
- }\
- int sglib_##type##_len(type *list) {\
-   int res;\
-   SGLIB_SORTED_LIST_LEN(type, list, next, res);\
-   return(res);\
- }\
- void sglib_##type##_sort(type **list) { \
-   SGLIB_LIST_SORT(type, *list, comparator, next);\
- }\
- \
- type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto) {\
-   it->subcomparator = subcomparator;\
-   it->equalto = equalto;\
-   it->nextelem = list;\
-   return(sglib_##type##_it_next(it));\
- }\
- type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list) {\
-   return(sglib_##type##_it_init_on_equal(it, list, NULL, NULL));\
- }\
- type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-   return(it->currentelem);\
- }\
- type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-   type *ce, *eq;\
-   int  (*scp)(type *, type *);\
-   int  c;\
-   ce = it->nextelem;\
-   it->nextelem = NULL;\
-   if (it->subcomparator != NULL) {\
-	 eq = it->equalto; \
-     scp = it->subcomparator;\
-     while (ce!=NULL && (c=scp(ce, eq)) < 0) ce = ce->next;\
-     if (ce != NULL && c > 0) ce = NULL;\
-   }\
-   it->currentelem = ce;\
-   if (ce != NULL) it->nextelem = ce->next;\
-   return(ce);\
- }
-
-
-/* ----------------------------- double linked list (level 1) ------------------------------ */
-
-
-#define SGLIB_DEFINE_DL_LIST_PROTOTYPES(type, comparator, previous, next) \
- struct sglib_##type##_iterator {\
-   type *currentelem;\
-   type *prevelem;\
-   type *nextelem;\
-   int (*subcomparator)(type *, type *);\
-   type *equalto;\
- };\
- extern void sglib_##type##_add(type **list, type *elem);\
- extern void sglib_##type##_add_before(type **list, type *elem);\
- extern void sglib_##type##_add_after(type **list, type *elem);\
- extern int sglib_##type##_add_if_not_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_add_before_if_not_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_add_after_if_not_member(type **list, type *elem, type **member);\
- extern void sglib_##type##_concat(type **first, type *second);\
- extern void sglib_##type##_delete(type **list, type *elem);\
- extern int sglib_##type##_delete_if_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_is_member(type *list, type *elem);\
- extern type *sglib_##type##_find_member(type *list, type *elem);\
- extern type *sglib_##type##_get_first(type *list);\
- extern type *sglib_##type##_get_last(type *list);\
- extern void sglib_##type##_sort(type **list);\
- extern int sglib_##type##_len(type *list);\
- extern void sglib_##type##_reverse(type **list);\
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it);
-
-
-#define SGLIB_DEFINE_DL_LIST_FUNCTIONS(type, comparator, previous, next) \
- void sglib_##type##_add(type **list, type *elem) {\
-  SGLIB_DL_LIST_ADD(type, *list, elem, previous, next);\
- }\
- void sglib_##type##_add_after(type **list, type *elem) {\
-  SGLIB_DL_LIST_ADD_AFTER(type, *list, elem, previous, next);\
- }\
- void sglib_##type##_add_before(type **list, type *elem) {\
-  SGLIB_DL_LIST_ADD_BEFORE(type, *list, elem, previous, next);\
- }\
- int sglib_##type##_add_if_not_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_ADD_IF_NOT_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member==NULL);\
- }\
- int sglib_##type##_add_after_if_not_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_ADD_AFTER_IF_NOT_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member==NULL);\
- }\
- int sglib_##type##_add_before_if_not_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_ADD_BEFORE_IF_NOT_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member==NULL);\
- }\
- void sglib_##type##_concat(type **first, type *second) {\
-   SGLIB_DL_LIST_CONCAT(type, *first, second, previous, next);\
- }\
- void sglib_##type##_delete(type **list, type *elem) {\
-  SGLIB_DL_LIST_DELETE(type, *list, elem, previous, next);\
- }\
- int sglib_##type##_delete_if_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_DELETE_IF_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member!=NULL);\
- }\
- int sglib_##type##_is_member(type *list, type *elem) {\
-   int result;\
-   SGLIB_DL_LIST_IS_MEMBER(type, list, elem, previous, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_find_member(type *list, type *elem) {\
-   type *result;\
-   SGLIB_DL_LIST_FIND_MEMBER(type, list, elem, comparator, previous, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_get_first(type *list) {\
-   type *result;\
-   SGLIB_DL_LIST_GET_FIRST(type, list, previous, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_get_last(type *list) {\
-   type *result;\
-   SGLIB_DL_LIST_GET_LAST(type, list, previous, next, result);\
-   return(result);\
- }\
- void sglib_##type##_sort(type **list) {\
-   SGLIB_DL_LIST_SORT(type, *list, comparator, previous, next);\
- }\
- int sglib_##type##_len(type *list) {\
-   int res;\
-   SGLIB_DL_LIST_LEN(type, list, previous, next, res);\
-   return(res);\
- }\
- void sglib_##type##_reverse(type **list) {\
-   SGLIB_DL_LIST_REVERSE(type, *list, previous, next);\
- }\
- \
- type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto) {\
-   it->subcomparator = subcomparator;\
-   it->equalto = equalto;\
-   it->prevelem = list;\
-   it->nextelem = list;\
-   if (list != NULL) it->nextelem = list->next;\
-   return(sglib_##type##_it_next(it));\
- }\
- type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list) {\
-   return(sglib_##type##_it_init_on_equal(it, list, NULL, NULL));\
- }\
- type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-   return(it->currentelem);\
- }\
- type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-   type *ce, *eq;\
-   int  (*scp)(type *, type *);\
-   ce = it->prevelem;\
-   it->prevelem = NULL;\
-   if (it->subcomparator != NULL) {\
-	 eq = it->equalto; \
-     scp = it->subcomparator;\
-     while (ce!=NULL && scp(eq, ce)!=0) ce = ce->previous;\
-   }\
-   if (ce != NULL) {\
-     it->prevelem = ce->previous;\
-   } else {\
-     ce = it->nextelem;\
-     it->nextelem = NULL;\
-     if (it->subcomparator != NULL) {\
-	   eq = it->equalto; \
-       scp = it->subcomparator;\
-       while (ce!=NULL && scp(ce, eq)!=0) ce = ce->next;\
-     }\
-     if (ce != NULL) it->nextelem = ce->next;\
-   }\
-   it->currentelem = ce;\
-   return(ce);\
- }
-
-
-/* --------------------------------- red-black trees (level 1) -------------------------------- */
-
-/*
-
-This  implementation requires  pointers  to left  and  right sons  (no
-parent  pointer  is needed)  and  one  bit  of additional  information
-storing the color of  the node. The implementation follows discrepancy
-fixing rules from:
-http://www.cis.ohio-state.edu/~gurari/course/cis680/cis680Ch11.html
-
-*/
-
-#define SGLIB___RBTREE_FIX_INSERTION_DISCREPANCY(type, tree, leftt, rightt, bits, RED, BLACK) {\
-  type *t, *tl, *a, *b, *c, *ar, *bl, *br, *cl, *cr;\
-  t = *tree;\
-  tl = t->leftt;\
-  if (t->rightt!=NULL && SGLIB___GET_VALUE(t->rightt->bits)==RED) {\
-    if (SGLIB___GET_VALUE(tl->bits)==RED) {\
-      if ((tl->leftt!=NULL && SGLIB___GET_VALUE(tl->leftt->bits)==RED) \
-          || (tl->rightt!=NULL && SGLIB___GET_VALUE(tl->rightt->bits)==RED)) {\
-        SGLIB___SET_VALUE(t->leftt->bits,BLACK);\
-        SGLIB___SET_VALUE(t->rightt->bits,BLACK);\
-        SGLIB___SET_VALUE(t->bits,RED);\
-      }\
-    }\
-  } else {\
-    if (SGLIB___GET_VALUE(tl->bits)==RED) {\
-      if (tl->leftt!=NULL && SGLIB___GET_VALUE(tl->leftt->bits)==RED) {\
-        a = t; b = tl; c = tl->leftt;\
-        br = b->rightt;\
-        a->leftt = br;\
-        b->leftt = c; b->rightt = a;\
-        SGLIB___SET_VALUE(a->bits,RED);\
-        SGLIB___SET_VALUE(b->bits,BLACK);\
-        *tree = b;\
-      } else if (tl->rightt!=NULL && SGLIB___GET_VALUE(tl->rightt->bits)==RED) {\
-        a = t; b = tl; ar=a->rightt;\
-        bl=b->leftt; c=b->rightt;\
-        cl=c->leftt; cr=c->rightt;\
-        b->rightt = cl;\
-        a->leftt = cr;\
-        c->leftt = b;\
-        c->rightt = a;\
-        SGLIB___SET_VALUE(c->bits,BLACK);\
-        SGLIB___SET_VALUE(a->bits,RED);\
-        *tree = c;\
-      }\
-    }\
-  }\
-}
-
-#define SGLIB___RBTREE_FIX_DELETION_DISCREPANCY(type, tree, leftt, rightt, bits, RED, BLACK, res) {\
-  type  *t, *a, *b, *c, *d, *ar, *bl, *br, *cl, *cr, *dl, *dr;\
-  t = a = *tree;\
-  assert(t!=NULL);\
-  ar = a->rightt;\
-  b = t->leftt;\
-  if (b==NULL) {\
-    assert(SGLIB___GET_VALUE(t->bits)==RED);\
-    SGLIB___SET_VALUE(t->bits,BLACK);\
-    res = 0;\
-  } else {\
-    bl = b->leftt;\
-    br = b->rightt;\
-    if (SGLIB___GET_VALUE(b->bits)==RED) {\
-      if (br==NULL) {\
-        *tree = b;\
-        SGLIB___SET_VALUE(b->bits,BLACK);\
-        b->rightt = a;\
-        a->leftt = br;\
-        res = 0;\
-      } else {\
-        c = br;\
-        assert(c!=NULL && SGLIB___GET_VALUE(c->bits)==BLACK);\
-        cl = c->leftt;\
-        cr = c->rightt;\
-        if ((cl==NULL||SGLIB___GET_VALUE(cl->bits)==BLACK) && (cr==NULL||SGLIB___GET_VALUE(cr->bits)==BLACK)) {\
-          *tree = b;\
-          b->rightt = a;\
-          SGLIB___SET_VALUE(b->bits,BLACK);\
-          a->leftt = c;\
-          SGLIB___SET_VALUE(c->bits,RED);\
-          res = 0;\
-        } else if (cl!=NULL && SGLIB___GET_VALUE(cl->bits)==RED) {\
-          if (cr!=NULL && SGLIB___GET_VALUE(cr->bits)==RED) {\
-            d = cr;\
-            dl = d->leftt;\
-            dr = d->rightt;\
-            *tree = d;\
-            SGLIB___SET_VALUE(d->bits,BLACK);\
-            d->leftt = b;\
-            c->rightt = dl;\
-            d->rightt = a;\
-            a->leftt = dr;\
-            res = 0;\
-          } else {\
-            *tree = c;\
-            c->leftt = b;\
-            c->rightt = a;\
-            b->leftt = bl;\
-            b->rightt = cl;\
-            a->leftt = cr;\
-            SGLIB___SET_VALUE(cl->bits,BLACK);\
-            res = 0;\
-          }\
-        } else if (cr!=NULL && SGLIB___GET_VALUE(cr->bits)==RED) {\
-          assert(cl==NULL || SGLIB___GET_VALUE(cl->bits)==BLACK);\
-          d = cr;\
-          dl = d->leftt;\
-          dr = d->rightt;\
-          *tree = d;\
-          SGLIB___SET_VALUE(d->bits,BLACK);\
-          d->leftt = b;\
-          c->rightt = dl;\
-          d->rightt = a;\
-          a->leftt = dr;\
-          res = 0;\
-        } else {\
-          assert(0);\
-          res = 0;\
-        }\
-      }\
-    } else {\
-      if ((bl==NULL || SGLIB___GET_VALUE(bl->bits)==BLACK) && (br==NULL || SGLIB___GET_VALUE(br->bits)==BLACK)) {\
-        res = (SGLIB___GET_VALUE(a->bits)==BLACK);\
-        SGLIB___SET_VALUE(a->bits,BLACK);\
-        SGLIB___SET_VALUE(b->bits,RED);\
-      } else if (bl!=NULL && SGLIB___GET_VALUE(bl->bits)==RED) {\
-        if (br==NULL || SGLIB___GET_VALUE(br->bits)==BLACK) {\
-          *tree = b;\
-          SGLIB___SET_VALUE(b->bits,SGLIB___GET_VALUE(a->bits));\
-          SGLIB___SET_VALUE(a->bits,BLACK);\
-          b->rightt = a;\
-          a->leftt = br;\
-          SGLIB___SET_VALUE(bl->bits,BLACK);\
-          res = 0;\
-        } else {\
-          assert(bl!=NULL);\
-          assert(br!=NULL);\
-          assert(SGLIB___GET_VALUE(bl->bits)==RED);\
-          assert(SGLIB___GET_VALUE(br->bits)==RED);\
-          c = br;\
-          cl = c->leftt;\
-          cr = c->rightt;\
-          *tree = c;\
-          SGLIB___SET_VALUE(c->bits,SGLIB___GET_VALUE(a->bits));\
-          SGLIB___SET_VALUE(a->bits,BLACK);\
-          c->leftt = b;\
-          c->rightt = a;\
-          b->rightt = cl;\
-          a->leftt = cr;\
-          res = 0;\
-        }\
-      } else {\
-        assert(br!=NULL && SGLIB___GET_VALUE(br->bits)==RED);\
-        c = br;\
-        cl = c->leftt;\
-        cr = c->rightt;\
-        *tree = c;\
-        SGLIB___SET_VALUE(c->bits,SGLIB___GET_VALUE(a->bits));\
-        SGLIB___SET_VALUE(a->bits,BLACK);\
-        c->leftt = b;\
-        c->rightt = a;\
-        b->rightt = cl;\
-        a->leftt = cr;\
-        res = 0;\
-      }\
-    }\
-  }\
-}
-
-
-#define SGLIB_DEFINE_RBTREE_FUNCTIONS_GENERAL(type, left, right, bits, comparator, RED, BLACK) \
-static void sglib___##type##_fix_left_insertion_discrepancy(type **tree) {\
-  SGLIB___RBTREE_FIX_INSERTION_DISCREPANCY(type, tree, left, right, bits, RED, BLACK);\
-}\
-\
-static void sglib___##type##_fix_right_insertion_discrepancy(type **tree) {\
-  SGLIB___RBTREE_FIX_INSERTION_DISCREPANCY(type, tree, right, left, bits, RED, BLACK);\
-}\
-\
-static int sglib___##type##_fix_left_deletion_discrepancy(type **tree) {\
-  int       res;\
-  SGLIB___RBTREE_FIX_DELETION_DISCREPANCY(type, tree, right, left, bits, RED, BLACK, res);\
-  return(res);\
-}\
-\
-static int sglib___##type##_fix_right_deletion_discrepancy(type **tree) {\
-  int       res;\
-  SGLIB___RBTREE_FIX_DELETION_DISCREPANCY(type, tree, left, right, bits, RED, BLACK, res);\
-  return(res);\
-}\
-\
-static void sglib___##type##_add_recursive(type **tree, type *elem) {\
-  int cmp;\
-  type *t;\
-  t = *tree;\
-  if (t == NULL) {\
-    SGLIB___SET_VALUE(elem->bits,RED);\
-    *tree =elem;\
-  } else {\
-    cmp = comparator(elem, t);\
-    if (cmp < 0 || (cmp==0 && elem<t)) {\
-      sglib___##type##_add_recursive(&t->left, elem);\
-      if (SGLIB___GET_VALUE(t->bits)==BLACK) sglib___##type##_fix_left_insertion_discrepancy(tree);\
-    } else {\
-      sglib___##type##_add_recursive(&t->right, elem);\
-      if (SGLIB___GET_VALUE(t->bits)==BLACK) sglib___##type##_fix_right_insertion_discrepancy(tree);\
-    }\
-  }\
-}\
-\
-static int sglib___##type##_delete_rightmost_leaf(type **tree, type **theLeaf) {\
-  type  *t;\
-  int       res, deepDecreased;\
-  t = *tree;\
-  res = 0;\
-  assert(t!=NULL);\
-  if (t->right == NULL) {\
-    *theLeaf = t;\
-    if (t->left!=NULL) {\
-      if (SGLIB___GET_VALUE(t->bits)==BLACK && SGLIB___GET_VALUE(t->left->bits)==BLACK) res = 1;\
-      SGLIB___SET_VALUE(t->left->bits,BLACK);\
-      *tree = t->left;\
-    } else {\
-      *tree = NULL;\
-      res = (SGLIB___GET_VALUE(t->bits)==BLACK);\
-    }\
-  } else {\
-    deepDecreased = sglib___##type##_delete_rightmost_leaf(&t->right, theLeaf);\
-    if (deepDecreased) res = sglib___##type##_fix_right_deletion_discrepancy(tree);\
-  }\
-  return(res);\
-}\
-\
-int sglib___##type##_delete_recursive(type **tree, type *elem) {\
-  type  *t, *theLeaf;\
-  int       cmp, res, deepDecreased;\
-  t = *tree;\
-  res = 0;\
-  if (t==NULL) {\
-    assert(0 && "The element to delete not found in the tree,  use 'delete_if_member'"!=NULL);\
-  } else {\
-    cmp = comparator(elem, t);\
-    if (cmp < 0 || (cmp==0 && elem<t)) {\
-      deepDecreased = sglib___##type##_delete_recursive(&t->left, elem);\
-      if (deepDecreased) {\
-        res = sglib___##type##_fix_left_deletion_discrepancy(tree);\
-      }\
-    } else if (cmp > 0  || (cmp==0 && elem>t)) {\
-      deepDecreased = sglib___##type##_delete_recursive(&t->right, elem);\
-      if (deepDecreased) {\
-        res = sglib___##type##_fix_right_deletion_discrepancy(tree);\
-      }\
-    } else {\
-      assert(elem==t && "Deleting an element which is non member of the tree, use 'delete_if_member'"!=NULL);\
-      if (t->left == NULL) {\
-        if (t->right == NULL) {\
-          /* a leaf, delete, it; */\
-          *tree = NULL;\
-          res = (SGLIB___GET_VALUE(t->bits)==BLACK);\
-        } else {\
-          if (SGLIB___GET_VALUE(t->bits)==0 && SGLIB___GET_VALUE(t->right->bits)==0) res = 1;\
-          SGLIB___SET_VALUE(t->right->bits,BLACK);\
-          *tree = t->right;\
-        }\
-      } else {\
-        /* propagate deletion until righmost leaf of left subtree */\
-        deepDecreased = sglib___##type##_delete_rightmost_leaf(&t->left, &theLeaf);\
-        theLeaf->left = t->left;\
-        theLeaf->right = t->right;\
-        SGLIB___SET_VALUE(theLeaf->bits,SGLIB___GET_VALUE(t->bits));\
-        *tree = theLeaf;\
-        if (deepDecreased) res = sglib___##type##_fix_left_deletion_discrepancy(tree);\
-      }\
-    }\
-  }\
-  return(res);\
-}\
-\
-void sglib_##type##_add(type **tree, type *elem) {\
-  elem->left = elem->right = NULL;\
-  sglib___##type##_add_recursive(tree, elem);\
-  SGLIB___SET_VALUE((*tree)->bits,BLACK);\
-}\
-\
-void sglib_##type##_delete(type **tree, type *elem) {\
-  sglib___##type##_delete_recursive(tree, elem);\
-  if (*tree!=NULL) SGLIB___SET_VALUE((*tree)->bits,BLACK);\
-}\
-\
-type *sglib_##type##_find_member(type *t, type *elem) {\
-  type *res;\
-  SGLIB___BIN_TREE_FIND_MEMBER(type, t, elem, left, right, comparator, res);\
-  return(res);\
-}\
-\
-int sglib_##type##_is_member(type *t, type *elem) {\
-  int       cmp;\
-  while (t!=NULL) {\
-    cmp = comparator(elem, t);\
-    if (cmp < 0 || (cmp==0 && elem<t)) {\
-      t = t->left;\
-    } else if (cmp > 0 || (cmp==0 && elem>t)) {\
-      t = t->right;\
-    } else {\
-      assert(t == elem);\
-      return(1);\
-    }\
-  }\
-  return(0);\
-}\
-\
-int sglib_##type##_delete_if_member(type **tree, type *elem, type **memb) {\
-  if ((*memb=sglib_##type##_find_member(*tree, elem))!=NULL) {\
-    sglib_##type##_delete(tree, *memb);\
-    return(1);\
-  } else {\
-    return(0);\
-  }\
-}\
-int sglib_##type##_add_if_not_member(type **tree, type *elem, type **memb) {\
-  if ((*memb=sglib_##type##_find_member(*tree, elem))==NULL) {\
-    sglib_##type##_add(tree, elem);\
-    return(1);\
-  } else {\
-    return(0);\
-  }\
-}\
-int sglib_##type##_len(type *t) {\
-    int   n;\
-    type  *e;\
-    n = 0;\
-    SGLIB_BIN_TREE_MAP_ON_ELEMENTS(type, t, e, left, right, n++);\
-    return(n);\
-}\
-\
-void sglib__##type##_it_compute_current_elem(struct sglib_##type##_iterator *it) {\
-    int   i,j,cmp;\
-    type  *s, *eqt;\
-    int   (*subcomparator)(type *, type *);\
-    eqt = it->equalto;\
-    subcomparator = it->subcomparator;\
-    it->currentelem = NULL;\
-    while(it->pathi > 0 && it->currentelem==NULL) {\
-        i = it->pathi-1;\
-        if (i >= 0) {\
-            if (it->pass[i] >= 2) {\
-                /* goto up */\
-                it->pathi --;\
-            } else {\
-              if (it->pass[i] == 0) {\
-                  /* goto left */\
-                s = it->path[i]->left;\
-              } else {\
-                /* goto right */\
-                s = it->path[i]->right;\
-              }\
-              if (eqt != NULL) {\
-                if (subcomparator == NULL) {\
-                  SGLIB___BIN_TREE_FIND_MEMBER(type, s, eqt, left, right, comparator, s);\
-                } else {\
-                  SGLIB___BIN_TREE_FIND_MEMBER(type, s, eqt, left, right, subcomparator, s);\
-                }\
-              }\
-              if  (s != NULL) {\
-                j = i+1;\
-                it->path[j] = s;\
-                it->pass[j] = 0;\
-                it->pathi ++;\
-              }\
-              it->pass[i] ++;\
-            }\
-        }\
-        if (it->pathi>0 && it->order == it->pass[it->pathi-1]) {\
-            it->currentelem = it->path[it->pathi-1];\
-        }\
-    }\
-}\
-type *sglib__##type##_it_init(struct sglib_##type##_iterator *it, type *tree, int order, int (*subcomparator)(type *, type *), type *equalto) {\
-    type *t;\
-    assert(it!=NULL);\
-    it->order = order;\
-    it->equalto = equalto;\
-    it->subcomparator = subcomparator;\
-    if (equalto == NULL) {  \
-        t = tree;\
-    } else {\
-        if (subcomparator == NULL) {\
-          SGLIB___BIN_TREE_FIND_MEMBER(type, tree, equalto, left, right, comparator, t);\
-        } else {\
-          SGLIB___BIN_TREE_FIND_MEMBER(type, tree, equalto, left, right, subcomparator, t);\
-        }\
-    }\
-    if (t == NULL) {\
-        it->pathi = 0;\
-        it->currentelem = NULL;\
-    } else {\
-        it->pathi = 1;\
-        it->pass[0] = 0;\
-        it->path[0] = t;\
-        if (order == 0) {\
-            it->currentelem = t;\
-        } else {\
-            sglib__##type##_it_compute_current_elem(it);\
-        }\
-    }\
-    return(it->currentelem);\
-}\
-type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 2, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_preorder(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 0, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_inorder(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 1, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_postorder(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 2, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *tree, int (*subcomparator)(type *, type *), type *equalto) {\
-  return(sglib__##type##_it_init(it, tree, 1, subcomparator, equalto));\
-}\
-type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-  return(it->currentelem);\
-}\
-type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-  sglib__##type##_it_compute_current_elem(it);\
-  return(it->currentelem);\
-}\
-\
-static void sglib___##type##_consistency_check_recursive(type *t, int *pathdeep, int cdeep) {\
-  if (t==NULL) {\
-    if (*pathdeep < 0) *pathdeep = cdeep;\
-    else assert(*pathdeep == cdeep);\
-  } else {\
-    if (t->left!=NULL) assert(comparator(t->left, t) <= 0);\
-    if (t->right!=NULL) assert(comparator(t, t->right) <= 0);\
-    if (SGLIB___GET_VALUE(t->bits) == RED) {\
-      assert(t->left == NULL || SGLIB___GET_VALUE(t->left->bits)==BLACK);\
-      assert(t->right == NULL || SGLIB___GET_VALUE(t->right->bits)==BLACK);\
-      sglib___##type##_consistency_check_recursive(t->left, pathdeep, cdeep);\
-      sglib___##type##_consistency_check_recursive(t->right, pathdeep, cdeep);\
-    } else {\
-      sglib___##type##_consistency_check_recursive(t->left, pathdeep, cdeep+1);\
-      sglib___##type##_consistency_check_recursive(t->right, pathdeep, cdeep+1);\
-    }\
-  }\
-}\
-\
-void sglib___##type##_consistency_check(type *t) {\
-  int pathDeep;\
-  assert(t==NULL || SGLIB___GET_VALUE(t->bits) == BLACK);\
-  pathDeep = -1;\
-  sglib___##type##_consistency_check_recursive(t, &pathDeep, 0);\
-}
-
-
-#define SGLIB_DEFINE_RBTREE_PROTOTYPES(type, left, right, colorbit, comparator) \
- struct sglib_##type##_iterator {\
-    type *currentelem;\
-    char pass[SGLIB_MAX_TREE_DEEP];\
-    type *path[SGLIB_MAX_TREE_DEEP];\
-    short int pathi;\
-    short int order;\
-    type *equalto;\
-    int (*subcomparator)(type *, type *);\
- };\
- extern void sglib___##type##_consistency_check(type *t); \
- extern void sglib_##type##_add(type **tree, type *elem); \
- extern int sglib_##type##_add_if_not_member(type **tree, type *elem, type **memb); \
- extern void sglib_##type##_delete(type **tree, type *elem); \
- extern int sglib_##type##_delete_if_member(type **tree, type *elem, type **memb); \
- extern int sglib_##type##_is_member(type *t, type *elem); \
- extern type *sglib_##type##_find_member(type *t, type *elem); \
- extern int sglib_##type##_len(type *t); \
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_preorder(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_inorder(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_postorder(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *tree, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it); \
-
-
-#define SGLIB_DEFINE_RBTREE_FUNCTIONS(type, left, right, colorbit, comparator) \
-  SGLIB_DEFINE_RBTREE_FUNCTIONS_GENERAL(type, left, right, colorbit, comparator, 1, 0)
-
-
-
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-/* -                          SUPPLEMENTARY DEFINITIONS                       - */
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-#define SGLIB___GET_VALUE(x) (x)
-#define SGLIB___SET_VALUE(x, value) {(x) = (value);}
-#define SGLIB_ARRAY_ELEMENTS_EXCHANGER(type, a, i, j) {type _sgl_aee_tmp_; _sgl_aee_tmp_=(a)[(i)]; (a)[(i)]=(a)[(j)]; (a)[(j)]= _sgl_aee_tmp_;}
-
-
-#define SGLIB_NUMERIC_COMPARATOR(x, y) ((int)((x) - (y)))
-#define SGLIB_REVERSE_NUMERIC_COMPARATOR(x, y) ((int)((y) - (x)))
-
-#ifndef SGLIB_MAX_TREE_DEEP
-#define SGLIB_MAX_TREE_DEEP 128
-#endif
-
-#ifndef SGLIB_HASH_TAB_SHIFT_CONSTANT
-#define SGLIB_HASH_TAB_SHIFT_CONSTANT 16381   /* should be a prime */
-/* #define SGLIB_HASH_TAB_SHIFT_CONSTANT 536870912  for large tables */
-#endif
-
-#endif /* _SGLIB__h_ */
diff --git a/externals/frankenstein/test-chords_graph.pd b/externals/frankenstein/test-chords_graph.pd
deleted file mode 100644
index 639eac866f07941cdce82791eaf2b69898314eac..0000000000000000000000000000000000000000
--- a/externals/frankenstein/test-chords_graph.pd
+++ /dev/null
@@ -1,46 +0,0 @@
-#N canvas 241 61 710 346 12;
-#X msg 63 130 write test.graph;
-#X msg 93 158 read test.graph;
-#X obj 389 33 notein;
-#X obj 389 68 chord 59;
-#X msg 293 151 add \$1;
-#X obj 71 255 chords_graph;
-#X obj 293 123 symbol;
-#X obj 294 96 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 285 234 next 1;
-#X obj 366 165 symbol;
-#X obj 367 138 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 366 193 set \$1;
-#X msg 123 188 init 1;
-#X symbolatom 71 281 20 0 0 0 - - -;
-#X symbolatom 429 103 25 0 0 0 - - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 385 252 pd readme;
-#X connect 0 0 5 0;
-#X connect 1 0 5 0;
-#X connect 2 0 3 0;
-#X connect 2 1 3 1;
-#X connect 3 2 6 1;
-#X connect 3 2 9 1;
-#X connect 3 2 14 0;
-#X connect 4 0 5 0;
-#X connect 5 0 13 0;
-#X connect 6 0 4 0;
-#X connect 7 0 6 0;
-#X connect 8 0 5 0;
-#X connect 9 0 11 0;
-#X connect 10 0 9 0;
-#X connect 11 0 5 0;
-#X connect 12 0 5 0;
diff --git a/externals/frankenstein/test-harmonizer.pd b/externals/frankenstein/test-harmonizer.pd
deleted file mode 100644
index 1818262ff464680f8842b9baa32ecad01c5a722b..0000000000000000000000000000000000000000
--- a/externals/frankenstein/test-harmonizer.pd
+++ /dev/null
@@ -1,197 +0,0 @@
-#N canvas 328 37 714 655 12;
-#X symbolatom 179 191 20 0 0 0 - - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 496 48 pd readme;
-#X obj 121 316 harmonizer;
-#X msg 52 273 current \$1;
-#X msg 158 270 target \$1;
-#X obj 52 249 symbol;
-#X obj 52 229 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 248 symbol;
-#X obj 289 248 int 36;
-#X obj 355 249 int 60;
-#X obj 426 247 int 67;
-#X obj 494 246 int 76;
-#X obj 566 249 int 84;
-#X obj 335 276 pack f f f f f;
-#X obj 358 220 t b b b b b;
-#X obj 246 356 unpack f f f f f;
-#X obj 135 105 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 135 133 set \$1;
-#N canvas 0 0 706 416 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 326 134 pd midi;
-#N canvas 0 0 454 304 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 115 77 write test.graph;
-#X msg 145 105 read test.graph;
-#X msg 175 135 init 1;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 243 133 pd fileIO;
-#X obj 100 81 t b b;
-#X obj 157 215 t b a;
-#X obj 28 391 bang;
-#X symbolatom 256 35 20 0 0 0 - - -;
-#X obj 256 11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 203 407 mtof;
-#X obj 203 431 sig~;
-#X obj 204 457 osc~ 440;
-#X obj 280 405 mtof;
-#X obj 280 429 sig~;
-#X obj 281 455 osc~ 440;
-#X obj 338 509 mtof;
-#X obj 338 533 sig~;
-#X obj 339 559 osc~ 440;
-#X obj 375 403 mtof;
-#X obj 375 427 sig~;
-#X obj 376 453 osc~ 440;
-#X obj 425 509 mtof;
-#X obj 424 532 sig~;
-#X obj 425 558 osc~ 440;
-#X obj 186 491 throw~ audio;
-#X obj 284 482 throw~ audio;
-#X obj 391 483 throw~ audio;
-#X obj 337 586 throw~ audio;
-#X obj 439 588 throw~ audio;
-#X obj 99 533 catch~ audio;
-#X obj 99 585 dac~;
-#X obj 99 558 *~ 0.2;
-#X obj 109 418 print;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X obj 83 169 chords_memory test.graph;
-#X obj 471 355 voicing_analyzer;
-#X floatatom 470 390 5 0 0 0 - - -;
-#X floatatom 506 411 5 0 0 0 - - -;
-#X floatatom 539 393 5 0 0 0 - - -;
-#X floatatom 587 412 5 0 0 0 - - -;
-#X msg 461 152 i_like_parallelism \$1;
-#X obj 463 132 hsl 128 15 -1 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 6500 1;
-#X obj 436 85 hsl 128 15 0 8 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 11700 1;
-#X msg 434 106 wideness \$1;
-#X obj 270 76 hsl 128 15 -1 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 268 96 small_intervals \$1;
-#X connect 2 0 15 0;
-#X connect 2 0 49 0;
-#X connect 2 0 55 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 26 0;
-#X connect 15 1 9 1;
-#X connect 15 1 29 0;
-#X connect 15 2 10 1;
-#X connect 15 2 32 0;
-#X connect 15 3 11 1;
-#X connect 15 3 35 0;
-#X connect 15 4 12 1;
-#X connect 15 4 38 0;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 54 0;
-#X connect 19 0 54 0;
-#X connect 20 0 54 0;
-#X connect 21 0 50 0;
-#X connect 21 1 16 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 24 0 5 1;
-#X connect 24 0 16 0;
-#X connect 24 0 7 0;
-#X connect 25 0 24 0;
-#X connect 26 0 27 0;
-#X connect 27 0 28 0;
-#X connect 28 0 41 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 0;
-#X connect 31 0 42 0;
-#X connect 32 0 33 0;
-#X connect 33 0 34 0;
-#X connect 34 0 44 0;
-#X connect 35 0 36 0;
-#X connect 36 0 37 0;
-#X connect 37 0 43 0;
-#X connect 38 0 39 0;
-#X connect 39 0 40 0;
-#X connect 40 0 45 0;
-#X connect 46 0 48 0;
-#X connect 48 0 47 0;
-#X connect 48 0 47 1;
-#X connect 50 0 51 0;
-#X connect 51 0 54 0;
-#X connect 52 0 50 1;
-#X connect 52 0 53 0;
-#X connect 54 0 0 0;
-#X connect 54 0 5 1;
-#X connect 54 0 16 1;
-#X connect 54 0 22 0;
-#X connect 55 0 56 0;
-#X connect 55 1 57 0;
-#X connect 55 2 58 0;
-#X connect 55 3 59 0;
-#X connect 60 0 2 0;
-#X connect 61 0 60 0;
-#X connect 62 0 63 0;
-#X connect 63 0 2 0;
-#X connect 64 0 65 0;
-#X connect 65 0 2 0;
diff --git a/externals/frankenstein/test-harmonizer2.pd b/externals/frankenstein/test-harmonizer2.pd
deleted file mode 100644
index 099e1273850e07e7d4641800fb912ee2952c49d0..0000000000000000000000000000000000000000
--- a/externals/frankenstein/test-harmonizer2.pd
+++ /dev/null
@@ -1,585 +0,0 @@
-#N canvas 194 23 947 709 10;
-#X symbolatom 157 205 18 0 0 2 next_chord - -;
-#N canvas 39 349 535 332 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 607 47 pd readme;
-#X msg 52 286 current \$1;
-#X msg 158 283 target \$1;
-#X obj 52 262 symbol;
-#X obj 52 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 264 329 unpack f f f f f;
-#X obj 127 108 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 127 132 set \$1;
-#N canvas 0 22 714 424 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 512 135 pd midi;
-#N canvas 0 22 462 312 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 115 77 write test.graph;
-#X msg 145 105 read test.graph;
-#X msg 175 135 init 1;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 429 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 63 359 bang;
-#X obj 221 380 mtof;
-#X obj 270 379 mtof;
-#X obj 355 383 mtof;
-#X obj 67 504 print;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X obj 527 400 loadbang;
-#X obj 313 382 mtof;
-#X obj 399 384 mtof;
-#X obj 462 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 462 41 metro 7000;
-#X obj 13 32 r novelty;
-#X obj 599 121 int 0;
-#X obj 646 120 + 1;
-#X obj 600 171 tabread tab-novelty;
-#X obj 600 194 s novelty;
-#X obj 685 119 table tab-novelty;
-#X obj 600 147 % 10;
-#X obj 462 63 t b b;
-#X msg 489 365 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
-#X obj 203 97 symbol;
-#X msg 203 125 tonality \$1;
-#X obj 203 73 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X obj 307 94 symbol;
-#X obj 307 70 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X msg 307 122 modulation \$1;
-#X obj 445 189 print sequence;
-#X msg 235 15 search 9 1 5 0.9;
-#X msg 262 407 i9 0 10 \$1 80 0.5;
-#X msg 502 440 i25 0 17000 0.98 0.8 20000;
-#X msg 500 464 i10 0 17000 10 30;
-#X msg 500 487 i30 0 17000 2 30;
-#X obj 172 422 print;
-#X obj 265 445 s csound;
-#N canvas 0 25 807 561 bay 0;
-#X obj 12 83 loadbang;
-#N canvas 0 22 759 336 ascoltaHits 0;
-#X obj 161 223 outlet;
-#X obj 146 33 r 1-hit;
-#X obj 147 54 bang;
-#X msg 147 83 60;
-#X obj 198 57 bang;
-#X obj 197 36 r 2-hit;
-#X msg 198 86 72;
-#X obj 254 57 bang;
-#X msg 254 86 48;
-#X obj 253 36 r 3-hit;
-#X obj 303 60 bang;
-#X msg 303 89 67;
-#X obj 303 39 r 4-hit;
-#X obj 359 60 bang;
-#X obj 422 60 bang;
-#X obj 422 39 r 6-hit;
-#X obj 359 39 r 5-hit;
-#X msg 359 89 76;
-#X msg 422 89 36;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 0 0;
-#X connect 9 0 7 0;
-#X connect 10 0 11 0;
-#X connect 11 0 0 0;
-#X connect 12 0 10 0;
-#X connect 13 0 17 0;
-#X connect 14 0 18 0;
-#X connect 15 0 14 0;
-#X connect 16 0 13 0;
-#X connect 17 0 0 0;
-#X connect 18 0 0 0;
-#X restore 428 102 pd ascoltaHits;
-#X obj 430 164 mtof;
-#N canvas 0 22 462 312 chords 0;
-#X obj 132 43 inlet;
-#X obj 131 240 outlet;
-#X obj 262 31 loadbang;
-#X obj 260 74 metro 20000;
-#X obj 257 115 int 0;
-#X obj 303 117 + 1;
-#X obj 257 136 % 2;
-#X obj 246 162 select 0 1;
-#X obj 131 214 + 0;
-#X msg 243 182 0;
-#X msg 270 184 7;
-#X msg 260 54 1;
-#X connect 0 0 8 0;
-#X connect 2 0 11 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 1;
-#X connect 6 0 7 0;
-#X connect 7 0 9 0;
-#X connect 7 1 10 0;
-#X connect 8 0 1 0;
-#X connect 9 0 8 1;
-#X connect 10 0 8 1;
-#X connect 11 0 3 0;
-#X restore 430 131 pd chords;
-#N canvas 0 22 940 672 ascolta-valori 0;
-#X obj 135 554 outlet;
-#X obj 28 146 line;
-#X msg 27 123 \$1 100;
-#X msg 27 175 control amp1 \$1;
-#X obj 146 100 line;
-#X msg 145 77 \$1 100;
-#X obj 144 26 + 1;
-#X obj 143 51 / 2;
-#X obj 265 143 line;
-#X msg 264 119 \$1 100;
-#X obj 382 135 line;
-#X msg 381 112 \$1 100;
-#X obj 380 61 + 1;
-#X obj 379 86 / 2;
-#X msg 264 171 control amp2 \$1;
-#X obj 297 304 line;
-#X msg 296 281 \$1 100;
-#X obj 414 288 line;
-#X msg 413 265 \$1 100;
-#X obj 412 214 + 1;
-#X obj 411 239 / 2;
-#X obj 533 331 line;
-#X msg 532 307 \$1 100;
-#X obj 650 323 line;
-#X msg 649 300 \$1 100;
-#X obj 648 249 + 1;
-#X obj 647 274 / 2;
-#X msg 296 324 control amp3 \$1;
-#X msg 531 359 control amp4 \$1;
-#N canvas 0 22 678 338 graph16 0;
-#X array vol 100 float 3;
-#A 0 0.382146 0.444444 0.527258 0.5757 0.610071 0.636731 0.658514 0.676931
-0.692884 0.706956 0.719544 0.730931 0.741327 0.75089 0.759744 0.767987
-0.775698 0.782941 0.78977 0.796229 0.802357 0.808187 0.813745 0.819055
-0.82414 0.829017 0.833703 0.838212 0.842557 0.84675 0.8508 0.854718
-0.858511 0.862187 0.865754 0.869217 0.872583 0.875856 0.879043 0.882146
-0.885171 0.888121 0.891 0.893811 0.896558 0.899243 0.901869 0.904438
-0.906954 0.909417 0.911831 0.914197 0.916517 0.918792 0.921026 0.923218
-0.925371 0.927485 0.929563 0.931605 0.933613 0.935588 0.937531 0.939443
-0.941324 0.943177 0.945001 0.946797 0.948567 0.950311 0.952031 0.953725
-0.955396 0.957044 0.95867 0.960273 0.961856 0.963418 0.964959 0.966481
-0.967984 0.969468 0.970934 0.972382 0.973813 0.975227 0.976624 0.978006
-0.979371 0.980721 0.982056 0.983376 0.984682 0.985974 0.987252 0.988516
-0.989767 0.991005 0.99223 1.0615;
-#X coords 0 1 99 0 200 140 1;
-#X restore 532 24 graph;
-#X obj 26 101 tabread vol;
-#X obj 28 76 * 100;
-#X obj 265 97 tabread vol;
-#X obj 262 75 * 100;
-#X obj 28 48 clip 0 1;
-#X obj 262 40 clip 0 1;
-#X obj 307 264 tabread vol;
-#X obj 307 242 * 100;
-#X obj 308 222 clip 0 1;
-#X obj 534 284 tabread vol;
-#X obj 534 262 * 100;
-#X obj 535 242 clip 0 1;
-#X msg 149 129 control pos1 \$1;
-#X msg 385 164 control pos2 \$1;
-#X msg 417 317 control pos3 \$1;
-#X msg 653 352 control pos4 \$1;
-#X obj 434 493 line;
-#X msg 433 469 \$1 100;
-#X obj 551 485 line;
-#X msg 550 462 \$1 100;
-#X obj 549 411 + 1;
-#X obj 548 436 / 2;
-#X obj 435 446 tabread vol;
-#X obj 435 424 * 100;
-#X obj 436 404 clip 0 1;
-#X msg 432 521 control amp5 \$1;
-#X msg 553 514 control pos5 \$1;
-#X obj 28 13 r 1-velo;
-#X obj 145 6 r 1-x;
-#X obj 264 17 r 2-velo;
-#X obj 296 202 r 3-velo;
-#X obj 412 194 r 3-x;
-#X obj 528 216 r 4-velo;
-#X obj 649 229 r 4-x;
-#X obj 429 378 r 5-velo;
-#X obj 550 391 r 5-x;
-#X obj 382 40 r 2-x;
-#X obj 839 58 + 1;
-#X obj 761 97 log;
-#X obj 803 59 int 1;
-#X obj 759 119 / 4.65;
-#X obj 807 83 t f f;
-#X obj 785 33 metro 10;
-#X obj 785 14 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 763 183 tabwrite vol;
-#X msg 848 32 1;
-#X obj 758 141 + 0.8;
-#X obj 757 160 / 1.8;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X connect 4 0 42 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 5 0;
-#X connect 8 0 14 0;
-#X connect 9 0 8 0;
-#X connect 10 0 43 0;
-#X connect 11 0 10 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 0 0;
-#X connect 15 0 27 0;
-#X connect 16 0 15 0;
-#X connect 17 0 44 0;
-#X connect 18 0 17 0;
-#X connect 19 0 20 0;
-#X connect 20 0 18 0;
-#X connect 21 0 28 0;
-#X connect 22 0 21 0;
-#X connect 23 0 45 0;
-#X connect 24 0 23 0;
-#X connect 25 0 26 0;
-#X connect 26 0 24 0;
-#X connect 27 0 0 0;
-#X connect 28 0 0 0;
-#X connect 30 0 2 0;
-#X connect 31 0 30 0;
-#X connect 32 0 9 0;
-#X connect 33 0 32 0;
-#X connect 34 0 31 0;
-#X connect 35 0 33 0;
-#X connect 36 0 16 0;
-#X connect 37 0 36 0;
-#X connect 38 0 37 0;
-#X connect 39 0 22 0;
-#X connect 40 0 39 0;
-#X connect 41 0 40 0;
-#X connect 42 0 0 0;
-#X connect 43 0 0 0;
-#X connect 44 0 0 0;
-#X connect 45 0 0 0;
-#X connect 46 0 55 0;
-#X connect 47 0 46 0;
-#X connect 48 0 56 0;
-#X connect 49 0 48 0;
-#X connect 50 0 51 0;
-#X connect 51 0 49 0;
-#X connect 52 0 47 0;
-#X connect 53 0 52 0;
-#X connect 54 0 53 0;
-#X connect 55 0 0 0;
-#X connect 56 0 0 0;
-#X connect 57 0 34 0;
-#X connect 58 0 6 0;
-#X connect 59 0 35 0;
-#X connect 60 0 38 0;
-#X connect 61 0 19 0;
-#X connect 62 0 41 0;
-#X connect 63 0 25 0;
-#X connect 64 0 54 0;
-#X connect 65 0 50 0;
-#X connect 66 0 12 0;
-#X connect 67 0 69 1;
-#X connect 68 0 70 0;
-#X connect 69 0 67 0;
-#X connect 69 0 71 0;
-#X connect 70 0 76 0;
-#X connect 71 0 68 0;
-#X connect 71 1 74 1;
-#X connect 72 0 69 0;
-#X connect 73 0 72 0;
-#X connect 75 0 69 0;
-#X connect 76 0 77 0;
-#X connect 77 0 74 0;
-#X restore 592 84 pd ascolta-valori;
-#X obj 567 118 bay --------;
-#X obj 367 279 catch~ mainL;
-#X obj 491 281 catch~ mainR;
-#X obj 376 318 *~ 0.01;
-#X obj 467 319 *~ 0.01;
-#X obj 701 211 vsl 15 128 0 0.8 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 317 1;
-#X floatatom 700 346 5 0 0 0 - - -;
-#X obj 750 195 loadbang;
-#X msg 750 216 0.02;
-#X obj 265 365 csound~ 2 2;
-#X obj 332 137 r csound;
-#X msg 156 24 i9 0 8 400 90 0.3;
-#X msg 23 159 i30 0 17000 2 30;
-#X msg 23 136 i10 0 17000 10 30;
-#X msg 24 112 i25 0 17000 0.98 0.8 20000;
-#X msg 1 182 bang \; csound bin /usr/local/bin/csound \; csound orc
-bay.orc \; csound sco bay.sco \; csound csound -dm0 \; csound bang
-\; pd dsp 1;
-#X msg 267 58 i9 0 8 450 90 0.3;
-#X msg 293 20 i9 0 8 500 90 0.3;
-#X obj 255 392 /~ 32767;
-#X obj 324 391 /~ 32767;
-#N canvas 77 25 718 506 note---- 0;
-#X obj 95 284 outlet;
-#X obj 95 222 mtof;
-#X obj 202 211 mtof;
-#X obj 309 220 mtof;
-#X obj 412 221 mtof;
-#X obj 120 133 inlet;
-#X obj 195 140 inlet;
-#X obj 310 163 inlet;
-#X obj 414 170 inlet;
-#X obj 533 224 mtof;
-#X obj 535 173 inlet;
-#X obj 204 283 outlet;
-#X obj 303 284 outlet;
-#X obj 408 280 outlet;
-#X obj 539 274 outlet;
-#X connect 1 0 0 0;
-#X connect 2 0 11 0;
-#X connect 3 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 3 0;
-#X connect 8 0 4 0;
-#X connect 9 0 14 0;
-#X connect 10 0 9 0;
-#X restore 567 142 pd note----;
-#X obj 324 411 /~ 1.5;
-#X obj 255 412 /~ 1.5;
-#X obj 235 450 outlet~;
-#X obj 328 446 outlet~;
-#X msg 404 197 i9 0 14 \$1 90 0.3;
-#X obj 408 242 inlet~;
-#X obj 479 243 inlet~;
-#X connect 0 0 20 0;
-#X connect 0 0 17 0;
-#X connect 0 0 18 0;
-#X connect 0 0 19 0;
-#X connect 1 0 3 0;
-#X connect 2 0 30 0;
-#X connect 3 0 2 0;
-#X connect 5 0 25 0;
-#X connect 5 1 25 1;
-#X connect 5 2 25 2;
-#X connect 5 3 25 3;
-#X connect 5 4 25 4;
-#X connect 6 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 14 0;
-#X connect 9 0 14 1;
-#X connect 10 0 9 1;
-#X connect 10 0 8 1;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 13 0 10 0;
-#X connect 14 0 23 0;
-#X connect 14 1 24 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 17 0 14 0;
-#X connect 18 0 14 0;
-#X connect 19 0 14 0;
-#X connect 21 0 14 0;
-#X connect 22 0 14 0;
-#X connect 23 0 27 0;
-#X connect 24 0 26 0;
-#X connect 25 0 30 0;
-#X connect 25 1 30 0;
-#X connect 25 2 30 0;
-#X connect 25 3 30 0;
-#X connect 25 4 30 0;
-#X connect 26 0 29 0;
-#X connect 27 0 28 0;
-#X connect 30 0 14 0;
-#X connect 31 0 8 0;
-#X connect 32 0 9 0;
-#X restore 195 544 pd bay;
-#X obj 242 683 dac~;
-#X obj 194 629 +~;
-#X obj 294 632 +~;
-#X obj 151 527 vsl 15 128 0.01 1 1 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8262 1;
-#X obj 186 599 *~ 0.5;
-#X obj 238 600 *~ 0.5;
-#X obj 87 563 loadbang;
-#X floatatom 149 660 5 0 0 0 - - -;
-#X obj 380 526 vsl 15 128 0.1 3 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8321 1;
-#X floatatom 378 659 5 0 0 0 - - -;
-#X obj 217 653 *~ 1;
-#X obj 269 654 *~ 1;
-#X obj 311 574 loadbang;
-#X text 67 620 volume bay;
-#X msg 313 597 2;
-#X msg 104 594 0.2;
-#X obj 83 169 chords_memory test.graph;
-#X obj 91 411 print;
-#X msg 23 420 voices \$1;
-#X floatatom 23 399 5 0 0 0 - - -;
-#X obj 88 478 voicing_analyzer 4;
-#X obj 121 330 harmonizer 4;
-#X msg 64 443 help;
-#X connect 2 0 83 0;
-#X connect 3 0 83 0;
-#X connect 4 0 2 0;
-#X connect 5 0 4 0;
-#X connect 6 0 3 0;
-#X connect 7 0 12 0;
-#X connect 8 0 12 1;
-#X connect 9 0 12 2;
-#X connect 10 0 12 3;
-#X connect 11 0 12 4;
-#X connect 12 0 83 0;
-#X connect 13 0 7 0;
-#X connect 13 1 8 0;
-#X connect 13 2 9 0;
-#X connect 13 3 10 0;
-#X connect 13 4 11 0;
-#X connect 14 0 7 1;
-#X connect 14 0 22 0;
-#X connect 14 0 23 0;
-#X connect 14 1 8 1;
-#X connect 14 1 24 0;
-#X connect 14 2 9 1;
-#X connect 14 2 32 0;
-#X connect 14 3 10 1;
-#X connect 14 3 25 0;
-#X connect 14 4 11 1;
-#X connect 14 4 33 0;
-#X connect 15 0 17 0;
-#X connect 16 0 20 0;
-#X connect 17 0 78 0;
-#X connect 18 0 78 0;
-#X connect 19 0 78 0;
-#X connect 20 0 27 0;
-#X connect 21 0 13 0;
-#X connect 21 1 6 0;
-#X connect 22 0 4 0;
-#X connect 23 0 55 0;
-#X connect 24 0 55 0;
-#X connect 25 0 55 0;
-#X connect 27 0 28 0;
-#X connect 28 0 78 0;
-#X connect 29 0 27 1;
-#X connect 29 0 30 0;
-#X connect 31 0 56 0;
-#X connect 31 0 57 0;
-#X connect 31 0 58 0;
-#X connect 31 0 44 0;
-#X connect 32 0 55 0;
-#X connect 33 0 55 0;
-#X connect 34 0 35 0;
-#X connect 35 0 43 0;
-#X connect 36 0 29 0;
-#X connect 37 0 38 0;
-#X connect 37 0 42 0;
-#X connect 38 0 37 1;
-#X connect 39 0 40 0;
-#X connect 42 0 39 0;
-#X connect 43 0 20 0;
-#X connect 43 1 37 0;
-#X connect 45 0 46 0;
-#X connect 46 0 78 0;
-#X connect 47 0 45 0;
-#X connect 48 0 78 0;
-#X connect 50 0 52 0;
-#X connect 51 0 50 0;
-#X connect 52 0 78 0;
-#X connect 54 0 78 0;
-#X connect 55 0 60 0;
-#X connect 55 0 59 0;
-#X connect 56 0 60 0;
-#X connect 57 0 60 0;
-#X connect 58 0 60 0;
-#X connect 61 0 66 0;
-#X connect 61 1 67 0;
-#X connect 63 0 72 0;
-#X connect 64 0 73 0;
-#X connect 65 0 66 1;
-#X connect 65 0 67 1;
-#X connect 65 0 69 0;
-#X connect 66 0 63 0;
-#X connect 67 0 64 0;
-#X connect 68 0 77 0;
-#X connect 70 0 71 0;
-#X connect 70 0 72 1;
-#X connect 70 0 73 1;
-#X connect 72 0 62 0;
-#X connect 73 0 62 1;
-#X connect 74 0 76 0;
-#X connect 76 0 70 0;
-#X connect 77 0 65 0;
-#X connect 78 0 0 0;
-#X connect 78 0 4 1;
-#X connect 78 0 21 0;
-#X connect 78 0 45 1;
-#X connect 78 0 15 0;
-#X connect 78 0 50 1;
-#X connect 78 1 49 0;
-#X connect 78 2 53 0;
-#X connect 80 0 83 0;
-#X connect 81 0 80 0;
-#X connect 82 0 26 0;
-#X connect 83 0 14 0;
-#X connect 83 0 79 0;
-#X connect 83 0 82 0;
-#X connect 84 0 82 0;
diff --git a/externals/frankenstein/test-rhythm.pd b/externals/frankenstein/test-rhythm.pd
deleted file mode 100644
index 4fac39ab959a68289e540ed6fa7da44056d4aab9..0000000000000000000000000000000000000000
--- a/externals/frankenstein/test-rhythm.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 0 0 458 308 12;
-#X obj 140 162 test;
-#X obj 140 102 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X connect 1 0 0 0;
diff --git a/externals/frankenstein/test-rhythms_memory.pd b/externals/frankenstein/test-rhythms_memory.pd
deleted file mode 100644
index d2287e719b5b78285ada6689446d6f5e82710193..0000000000000000000000000000000000000000
--- a/externals/frankenstein/test-rhythms_memory.pd
+++ /dev/null
@@ -1,94 +0,0 @@
-#N canvas 91 38 913 531 12;
-#X obj 126 256 rhythms_memory;
-#X msg 126 212 measure;
-#X msg 232 220 0;
-#X obj 123 48 metro 500;
-#X obj 85 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 123 25 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 124 71 int 0;
-#X obj 175 72 + 1;
-#X obj 124 94 % 4;
-#X obj 127 155 sel 0;
-#X obj 125 185 bang;
-#X obj 232 185 bng 30 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 231 363 unpack f f f f f;
-#X floatatom 229 390 5 0 0 1 is_this_a_new_rhythm - -;
-#X floatatom 258 408 5 0 0 1 id - -;
-#X floatatom 291 426 5 0 0 1 subid - -;
-#X floatatom 323 446 5 0 0 1 root_closeness - -;
-#X floatatom 355 469 5 0 0 1 sub_closeness - -;
-#X text 442 392 (0=known \, 1=new root \, 2=new sub);
-#X obj 124 117 t f f;
-#X msg 568 247 crash;
-#N canvas 0 0 454 304 drum 0;
-#X obj 108 27 inlet;
-#X obj 108 212 outlet~;
-#X obj 139 93 noise~;
-#X obj 122 159 *~;
-#X obj 207 155 line;
-#X msg 224 101 1 10;
-#X obj 311 89 delay 50;
-#X msg 314 112 0 100;
-#X obj 245 56 t b b;
-#X connect 0 0 8 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 3 1;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 6 0;
-#X connect 8 1 5 0;
-#X restore 276 155 pd drum;
-#X obj 274 124 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 270 187 dac~;
-#X floatatom 180 155 5 0 0 0 - - -;
-#X obj 126 294 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 489 133 1 0 0.5;
-#X text 381 17 you can ask it to play a stored rhythm;
-#X text 559 227 (crash me! for debugging);
-#X text 405 98 you will be able to send rhythms in the form of list
-of floats (TODO);
-#X obj 180 319 print;
-#X text 152 294 here you get the wanted rhythms played in realtime
-;
-#X text 235 315 here you'll get the wanted rhythms in the form of lists
-of floats (TODO);
-#X text 373 361 here you get info on the last detected rhythm;
-#X msg 384 39 rhythm_out 6 0;
-#X connect 0 0 25 0;
-#X connect 0 0 21 0;
-#X connect 0 1 30 0;
-#X connect 0 2 12 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 0 6 0;
-#X connect 5 0 3 0;
-#X connect 6 0 7 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 1;
-#X connect 8 0 19 0;
-#X connect 9 0 10 0;
-#X connect 10 0 1 0;
-#X connect 11 0 2 0;
-#X connect 12 0 13 0;
-#X connect 12 1 14 0;
-#X connect 12 2 15 0;
-#X connect 12 3 16 0;
-#X connect 12 4 17 0;
-#X connect 19 0 21 0;
-#X connect 19 0 24 0;
-#X connect 19 1 9 0;
-#X connect 20 0 0 0;
-#X connect 21 0 23 0;
-#X connect 21 0 23 1;
-#X connect 22 0 21 0;
-#X connect 22 0 11 0;
-#X connect 26 0 0 1;
-#X connect 34 0 0 0;
diff --git a/externals/frankenstein/test.c b/externals/frankenstein/test.c
deleted file mode 100644
index 49462a312418d4c426724ca8d1916c998dca6eb9..0000000000000000000000000000000000000000
--- a/externals/frankenstein/test.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
-just a dummy test patch
-
-*/
-
-#include "m_pd.h"
-
-#include "common.h"
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-
-static t_class *test_class;
-
-
-
-typedef struct _test
-{
-    t_object x_obj; // myself
-	t_outlet *l_out;
-	t_rhythm_event *curr_seq;
-	int seq_initialized;
-	t_rhythm_memory_representation *rhythms_memory;
-	
-} t_test;
-
-void test_free(t_test *x)
-{
-	freeBeats(x->curr_seq);
-}
-
-static void test_bang(t_test *x) {
-
-	// generate a random value
-	float rnd;
-	t_rhythm_event *events;
-	t_duration dur;
-
-	rnd = rand()/((double)RAND_MAX + 1);
-	dur = float2duration(rnd);
-
-	post("random value=%f duration.numerator=%i duration.denominator=%i", rnd, dur.numerator, dur.denominator);
-
-	if (x->seq_initialized)
-	{
-		concatenateBeat(x->curr_seq, 0, rnd, 1);
-	} else
-	{
-		setFirstBeat(&(x->curr_seq), 0, rnd, 1);
-		x->seq_initialized = 1;
-	}
-
-	// print the sequence
-	events = x->curr_seq;
-	while(events)
-	{
-		post("event: numerator=%i, denominator=%i", events->duration.numerator, events->duration.denominator);
-		events=events->next;
-	}
-	
-}
-
-void *test_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_test *x = (t_test *)pd_new(test_class);
-	x->l_out = outlet_new(&x->x_obj, &s_list);
-	
-	x->seq_initialized = 0;
-
-	rhythm_memory_create(&(x->rhythms_memory));
-
-    return (x);
-}
-
-void test_setup(void)
-{
-    test_class = class_new(gensym("test"), (t_newmethod)test_new,
-        (t_method)test_free, sizeof(t_test), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(test_class, (t_method)test_bang);
-	
-
-}
diff --git a/externals/frankenstein/themes_memory.c b/externals/frankenstein/themes_memory.c
deleted file mode 100644
index cefdb5e1cf8b02df796c6999908cafa597ec3c34..0000000000000000000000000000000000000000
--- a/externals/frankenstein/themes_memory.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/* 
-themes_memory
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-uses graphs to store melodies
-
-it is just like rhythms_memory but works on the more complex world of themes
-
-TODO:
-  * memory save/load to file (?)
-  * output rhythms in the form of list of floats (easy)
-  * add velo (?)
-  * input rhythms from a list (second inlet) (easy)
-  * let it create variations on known rhythms (?)
-  * let it merge rhythms (?)
-
-*/
-
-#include "m_pd.h"
-
-#include "common.h"
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-
-static t_class *themes_memory_class;
-
-typedef struct event event;
-typedef struct event
-{
-	unsigned short int voice;
-	double when;
-	event *next;
-};
-
-typedef struct _themes_memory
-{
-    t_object x_obj; // myself
-	// 3 outlets:
-	// bangs_out plays the wanted rhythmsin realtime
-	// list_out outputs the wanted rhythm as a list of floats
-	// info_out outputs info on the last recognized rhythm
-	t_outlet *bangs_out, *list_out, *info_out;
-	t_rhythm_event *curr_seq;
-	int seq_initialized;
-	// the memory
-	t_rhythm_memory_representation *themes_memory;
-	// measure length
-	double measure_start_time;
-	double measure_length;
-	// input rhythm's events
-	event *events;
-	// output rhythm's events
-	unsigned short int next_main_rhythm_out;
-	unsigned short int next_sub_rhythm_out;
-	event *events_out;
-	t_clock *x_clock;
-    double x_deltime;
-	double last_event_out_time;
-	
-} t_themes_memory;
-
-void themes_memory_free(t_themes_memory *x)
-{
-	if (x->curr_seq)
-		freeBeats(x->curr_seq);	
-	if (x->themes_memory)
-		rhythm_memory_free(x->themes_memory);
-
-	clock_free(x->x_clock);
-}
-
-// called when a new measure starts
-void start_measure(t_themes_memory *x)
-{
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_start_time = clock_getlogicaltime();
-	x->last_event_out_time = 0;
-}
-
-// called when a new event occours
-void add_event(t_themes_memory *x, unsigned short int voice)
-{
-	event *newEvent, *currEvent, *lastEvent;
-	double when;
-	when = clock_gettimesince(x->measure_start_time);
-	newEvent = (event *) malloc(sizeof(event));
-	newEvent->when = when;
-	newEvent->voice = voice;
-	newEvent->next = 0;
-	currEvent = x->events;
-	if (currEvent)
-	{
-		// this is not the first event
-		while(currEvent)
-		{
-			lastEvent = currEvent;
-			currEvent = currEvent->next;
-		}
-		lastEvent->next = newEvent;
-	} else
-	{
-		// this is the first event
-		x->events = newEvent;
-	}
-	post("event added");
-}
-
-// called when a measure ends
-void end_measure(t_themes_memory *x)
-{
-	float fduration;
-	event *currEvent, *lastEvent;
-	unsigned short int is_it_a_new_rhythm;
-	unsigned short int id, subid;
-	float root_closeness, sub_closeness;
-	int counter;
-	t_atom *lista;
-	// these 2 are for output rhythm
-	int rhythm_found;
-	t_rhythm_event *wanted_rhythm;
-	t_rhythm_event *curr_rhythm;
-	event *lastOutEvent;
-
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_length = clock_gettimesince(x->measure_start_time);
-	// now that i know the exact length of the current measure
-	// i can process the rhythm in the current measure
-	// and evaluate it
-	currEvent = x->events;
-	// this is not the first event
-	// now I translate events in rhythm
-	counter = 0;
-	while(currEvent)
-	{
-		fduration = (float) (((float) currEvent->when) / ((float) x->measure_length));
-		if (x->seq_initialized)
-		{
-			concatenateBeat(x->curr_seq, currEvent->voice, fduration, 1);
-		} else
-		{
-			setFirstBeat(&(x->curr_seq), currEvent->voice, fduration, 1);
-			x->seq_initialized = 1;
-		}
-		currEvent = currEvent->next;
-		counter++;
-	}
-	
-	// delete events after having evaluated them
-	currEvent = x->events;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events = 0;
-
-	if (x->curr_seq)
-	{
-		// now I evaluate this rhythm with the memory
-		rhythm_memory_evaluate(x->themes_memory, x->curr_seq, &is_it_a_new_rhythm,
-								&id, &subid, &root_closeness, &sub_closeness);
-		// tell out the answer
-		// allocate space for the list
-		lista = (t_atom *) malloc(sizeof(t_atom) * 5);
-		SETFLOAT(lista, (float) is_it_a_new_rhythm);
-		SETFLOAT(lista+1, (float) id);
-		SETFLOAT(lista+2, (float) subid);
-		SETFLOAT(lista+3, (float) root_closeness);
-		SETFLOAT(lista+4, (float) sub_closeness);
-		outlet_anything(x->info_out,
-						gensym("list") ,
-						5, 
-						lista);
-		free(lista);
-		// rhythm_memory_evaluate freed the memory for the rhythm if needed
-		x->seq_initialized = 0;
-		x->curr_seq = 0;
-	}
-
-	// I free the list of events_out (if present)
-	currEvent = x->events_out;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events_out = 0;
-	// i set up the list of events_out
-	// for the wanted rhythm
-	if (x->next_main_rhythm_out)
-	{
-		wanted_rhythm = 0;
-		// ask the memory for the wanted rhythm
-		rhythm_found = rhythm_memory_get_rhythm(x->themes_memory, // the memory
-								&wanted_rhythm, // a pointer to the returned rhythm
-								// the id of the main rhythm wanted
-								x->next_main_rhythm_out, 
-								// the sub-id of the sub-rhythm wanted
-								x->next_sub_rhythm_out);
-		if (rhythm_found==0)
-		{
-			post("themes_memory: rhythm %i %i was not found ", x->next_main_rhythm_out, x->next_sub_rhythm_out);
-			return;
-		}
-
-		if (wanted_rhythm==0)
-		{
-			error("themes_memory: wanted_rhythm should not be null! ");
-			return;
-		}
-
-		// now I setup the events_out list
-		// for each event in wanted_rhythm
-		// allocate and link an element of elements_out
-		curr_rhythm = wanted_rhythm;
-		lastOutEvent = 0;
-		while (curr_rhythm)
-		{
-			event *newEvent;
-			newEvent = malloc(sizeof(event));
-			newEvent->next = 0;
-			newEvent->voice = curr_rhythm->voice;
-			newEvent->when = (double) (duration2float(curr_rhythm->start) * x->measure_length);
-			post("DEBUG: add event in moment: %f", newEvent->when);
-			if (x->events_out)
-			{
-				// this is not the first event
-				// assign the next
-				lastOutEvent->next = newEvent;
-			} else
-			{
-				// this is the first event
-				x->events_out = newEvent;
-			}
-			// change the last pointer
-			lastOutEvent = newEvent;
-			curr_rhythm = curr_rhythm->next;
-		}
-
-		// also setup the timer for the first event
-		if (x->events_out)
-		{
-			// setup the clock
-			clock_delay(x->x_clock, x->events_out->when);
-			// remember when next event will occour
-			x->last_event_out_time = x->events_out->when;
-			// remember the curr event
-			lastOutEvent = x->events_out;
-			//reassign next event
-			x->events_out = x->events_out->next;
-			// free old event
-			free(lastOutEvent);
-		}
-		x->next_main_rhythm_out = 0;
-
-	}
-
-	// also start the new measure!
-	start_measure(x);
-
-	
-}
-
-// this function is called  by pd
-// when the timer bangs
-static void rhythms_tick(t_themes_memory *x)
-{
-	event *lastOutEvent;
-    // here i must:
-	// take the next element in x->events_out
-	// and compute when I'll need to schedule next event
-	// (next_event - curr_event)
-	// set the next element as the current one
-	// and free the memory allocated for the old curr event
-	// set up the timer	
-	post("DEBUG: eveng bang");
-	// first of all trigger the bang!
-	outlet_bang(x->bangs_out);
-	//then do the stuff
-	if (x->events_out)
-	{
-		// setup the clock
-		clock_delay(x->x_clock, x->events_out->when - x->last_event_out_time);
-		// remember when next event will occour
-		x->last_event_out_time = x->events_out->when ;
-		// remember the curr event
-		lastOutEvent = x->events_out;
-		//reassign next event
-		x->events_out = x->events_out->next;
-		// free old event
-		free(lastOutEvent);
-	}
-}
-
-// the user wants me to play a rhythm in the next measure
-// the user MUST pass 2 args: main_rhythm and sub_rhythm wanted
-static void ask_rhythm(t_themes_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
-	if (argc<2)
-	{
-		error("this method needs at least 2 floats: main_rhythm and sub_rhythm wanted");
-		return;
-	}
-	//argv++;
-	x->next_main_rhythm_out = atom_getfloat(argv++);
-	x->next_sub_rhythm_out = atom_getfloat(argv);
-	post("DEBUG: asked rhythm %i %i", x->next_main_rhythm_out, x->next_sub_rhythm_out); 
-	// i have nothing left to do:
-	// when this measure will end a list of events_out will be set
-	// from the current values of x->next_main_rhythm_out and x->next_sub_rhythm_out
-}
-
-// add this rhythm to the memory
-static void add_rhythm(t_themes_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-}
-
-// creates a variation of a given rhythm (in memory)
-// with a given degree of closeness
-static void variation(t_themes_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-
-	// get the rhythm
-
-	// using the transitions table create a new one
-
-	// add it to the memory?
-
-	// output to the list outlet?
-
-	// set it as the next played rhythm
-}
-
-static void themes_memory_bang(t_themes_memory *x) {
-
-	// generate a random value
-	float rnd;
-	t_rhythm_event *events;
-	t_duration dur;
-
-	rnd = rand()/((double)RAND_MAX + 1);
-	dur = float2duration(rnd);
-
-	post("random value=%f duration.numerator=%i duration.denominator=%i", rnd, dur.numerator, dur.denominator);
-
-	if (x->seq_initialized)
-	{
-		concatenateBeat(x->curr_seq, 0, rnd, 1);
-	} else
-	{
-		setFirstBeat(&(x->curr_seq), 0, rnd, 1);
-		x->seq_initialized = 1;
-	}
-
-	// print the sequence
-	events = x->curr_seq;
-	while(events)
-	{
-		post("event: numerator=%i, denominator=%i", events->duration.numerator, events->duration.denominator);
-		events=events->next;
-	}
-	
-}
-
-void *themes_memory_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_themes_memory *x = (t_themes_memory *)pd_new(themes_memory_class);
-	// first is for bangs (to let this external play in realtime
-	//x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->bangs_out = outlet_new(&x->x_obj, gensym("bang"));
-	// this outputs lists of events
-	x->list_out = outlet_new(&x->x_obj, gensym("symbol"));
-	// this outputs info on the last detected rhythm
-	x->info_out = outlet_new(&x->x_obj, gensym("symbol"));
-
-	// inlet for rhythms in the form of lists
-	inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("list"), gensym("rhythm_in"));
-
-	x->x_clock = clock_new(x, (t_method)rhythms_tick);
-	x->seq_initialized = 0;
-
-	rhythm_memory_create(&(x->themes_memory));
-	start_measure(x);
-
-    return (x);
-}
-
-// debugging function
-void crash(t_themes_memory *x)
-{
-	int *a;
-	a = malloc(sizeof(int));
-	a[99999] = 1;
-}
-
-void themes_memory_setup(void)
-{
-    themes_memory_class = class_new(gensym("themes_memory"), (t_newmethod)themes_memory_new,
-        (t_method)themes_memory_free, sizeof(t_themes_memory), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(themes_memory_class, (t_method)themes_memory_bang);
-	class_addmethod(themes_memory_class, (t_method)end_measure, gensym("measure"), 0);
-	class_doaddfloat(themes_memory_class, (t_method)add_event);
-	class_addmethod(themes_memory_class, (t_method)crash, gensym("crash"), 0);
-	// the user asks for a rhythm
-	class_addmethod(themes_memory_class, (t_method)ask_rhythm, gensym("rhythm_out"),
-        A_GIMME, 0);
-	// adds a rhythm passing it as a list of floats
-	class_addmethod(themes_memory_class, (t_method)add_rhythm, gensym("rhythm_in"),
-        A_GIMME, 0);
-	// builds a variation of a given rhythm
-	class_addmethod(themes_memory_class, (t_method)variation, gensym("variation"),
-        A_GIMME, 0);
-}
-
-
diff --git a/externals/frankenstein/themes_memory.vcproj b/externals/frankenstein/themes_memory.vcproj
deleted file mode 100755
index ba43182a3a606c0c7f26395e41cc02afd175b442..0000000000000000000000000000000000000000
--- a/externals/frankenstein/themes_memory.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="themes_memory"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:themes_memory_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/themes_memory.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="themes_memory.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/voicing_analyzer.c b/externals/frankenstein/voicing_analyzer.c
deleted file mode 100644
index abd76755481459ef2ea7a08dccf2c2a9d3fd6c0b..0000000000000000000000000000000000000000
--- a/externals/frankenstein/voicing_analyzer.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/* 
-voicing_analyzer:
-
-
-*/
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-// for string manipulation
-#include <string.h>
-#include <ctype.h>
-#include "m_pd.h"
-
-// to sort arrays
-#include "sglib.h"
-
-
-#define VOICES 5
-
-#define NOTES_RANGE 80 // this should be multiple of 16
-#define LOWER_POSSIBLE_NOTE 24 // lower note possible, it should be a C
-#define POSSIBLE_NOTES (NOTES_RANGE/12*4) // 4 is the max number of notes in a chord
-
-// default values 
-#define DEF_WIDENESS 3 // 3 octaves
-#define DEF_CENTER_NOTE 72 // central C
-
-#define DEBUG 0 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-static t_class *voicing_analyzer_class;
-
-
-typedef struct _voicing_analyzer
-{
-    t_object x_obj; // myself
-	//int current_voices[VOICES];
-	//int previous_voices[VOICES];
-	int *current_voices;
-	int *previous_voices;
-	t_outlet *small_intervals_out, *i_like_parallelism_out,
-		*center_note_out, *wideness_out;
-	int voices;
-} t_voicing_analyzer;
-
-
-void voicing_analyzer_free(t_voicing_analyzer *x)
-{
-	free(x->current_voices);
-	free(x->previous_voices);
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-}
-
-void voicing_analyzer_allocate(t_voicing_analyzer *x)
-{
-	int i;
-	x->current_voices = malloc(sizeof(int)*x->voices);
-	x->previous_voices = malloc(sizeof(int)*x->voices);
-	for (i=0; i<x->voices; i++)
-	{
-		x->current_voices[i] = 60;
-		x->previous_voices[i] = 60;
-	}
-}
-
-// here i evaluate this voicing
-void analyze_it(t_voicing_analyzer *x, float *wideness, float *i_like_parallelism, int *center_note, float *small_intervals)
-{
-	int i, j, tmp, res, last, avgHI, avgLOW, sameDirection, parallel8_5;
-	int min,max, distance;
-	short int chord_notes[4];
-	short int chord_notes_ok[4];
-	//short int transitions[VOICES];
-	short int *transitions;
-	//short int directions[VOICES];
-	short int *directions;
-	// intervals between voices
-	// for parallel and hidden 5ths
-	// voices spacing etc..
-	//short int intervals[VOICES][VOICES]; 
-	short int **intervals; 
-	//short int notes[VOICES];
-	short int *notes;
-	res = 0; // starting fitness
-	tmp = 0;
-
-	// allocate arrays
-	transitions = malloc(sizeof(short int)*x->voices);
-	directions = malloc(sizeof(short int)*x->voices);
-	notes = malloc(sizeof(short int)*x->voices);
-	intervals = malloc(sizeof(short int *) * x->voices);
-	for (i=0; i<x->voices; i++)
-	{
-		intervals[i] = malloc(sizeof(short int) * x->voices);
-	}
-
- 	// shared objects
-	for (i=0; i<x->voices; i++)
-	{
-		notes[i]=x->current_voices[i];
-		transitions[i] = x->current_voices[i] - x->previous_voices[i];
-		if (transitions[i]!=0)
-			directions[i] = transitions[i]/abs(transitions[i]);
-		else
-			directions[i] = 0;
-		if (DEBUG_VERBOSE)
-			post("directions[%i]=%i", i, directions[i]);
-
-	}
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			intervals[i][j] = (x->current_voices[i] - x->current_voices[j])%12 ;
-			if (DEBUG_VERBOSE)
-				post("intervals[%i][%i]=%i", i, j, intervals[i][j]);
-		}
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(short int, notes, x->voices, SGLIB_NUMERIC_COMPARATOR)
-
-	sameDirection = 0; 
-	parallel8_5 = 0;
-	
-	// all same direction? 
-	if ( directions[0]==directions[1] &&
-	directions[1]==directions[2] &&
-	directions[2]==directions[3])
-	{
-		sameDirection=1;
-		if (DEBUG_VERBOSE)
-			post("same direction!");
-	}
-	
-	// parallel 5ths or octaves? (if yes return 0)
-	// how?
-	// hidden 8ths nor 5ths ?
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			if (intervals[i][j]==7 || intervals[i][j]==0)
-			{
-				// hidden or parallel 5th,octave or unison
-				// bad!
-				if (directions[i]==directions[j])
-				{
-					parallel8_5 += 1;
-					if (DEBUG_VERBOSE)
-						post("hidden or parallel consonance!");
-				}
-			}
-		}
-	}
-
-	// now i can compute parallelism
-	*i_like_parallelism = (float) -1;
-	*i_like_parallelism += sameDirection;
-	if (parallel8_5)
-		*i_like_parallelism += (float) ( ((float)parallel8_5) / ((float)(x->voices*(x->voices - 1)))  );
-
-
-	// is voice spacing uniform ?(except for the bass)
-	// TODO: use notes[]
-	// are voices average centered?
-	for (i=0; i<x->voices; i++)
-	{
-		tmp+=notes[i];
-		if (DEBUG_VERBOSE)
-			post("average note is %i at passage %i", tmp, i);
-	}
-	// this is the average note
-	*center_note = tmp/(x->voices);
-
-	// are intervals small?
-	tmp=0;
-	for (i=0; i<x->voices; i++)
-	{
-	//	if (DEBUG_VERBOSE)
-	//		post("transitions[%i] = %i",i, transitions[i]);
-	//	res-=abs(transitions[i]);
-		// give an incentive for semitones etc..
-		if (transitions[i]==0)
-			res += 5;
-		if (abs(transitions[i]==1))
-			res += 5;
-		if (abs(transitions[i]==2))
-			res += 5;
-		if (abs(transitions[i]==3))
-			res += 2;
-		if (abs(transitions[i]==4))
-			res += 2;
-		if (abs(transitions[i]==5))
-			res += 1;
-		if (abs(transitions[i]==6))
-			res += 1;
-		if (abs(transitions[i]>11))
-			res -= 2;
-		if (abs(transitions[i]>15))
-			res -= 3;
-	}
-
-	*small_intervals = (float) (((float) res) / ((float) (5 * x->voices)));
-
-	// now wideness	
-	min = notes[0];
-	max = notes[x->voices-1];
-	distance = max - min;
-	*wideness = (float) (((float)distance) / ((float)12));
-
-
-	// free memory
-	free(transitions);
-	free(directions); 
-	free(notes);
-	for (i=0; i<x->voices; i++)
-	{
-		free(intervals[i]);
-	}
-	free(intervals);
-}
-
-typedef struct fitness_list_element_t 
-{
-	int index;
-	int fitness;
-} fitness_list_element;
-
-#define FITNESS_LIST_COMPARATOR(e1, e2) (e1.fitness - e2.fitness)
-
-void analyze_voicing(t_voicing_analyzer *x)
-{
-	t_atom lista[4];
-	float small_intervals=0;
-	float i_like_parallelism=0;
-	float wideness=0;
-	int center_note=0;
-	
-	analyze_it(x, &wideness, &i_like_parallelism, &center_note, &small_intervals);
-	
-	// order is important!
-	outlet_float(x->i_like_parallelism_out, i_like_parallelism);
-	outlet_float(x->wideness_out, wideness);
-	outlet_float(x->small_intervals_out, small_intervals);
-	outlet_float(x->center_note_out, center_note);
-	
-}
-
-// called when i send a list (with midi values)
-void set_current_voices(t_voicing_analyzer *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;	
-	
-	if (argc<x->voices)
-	{
-		error("insufficient notes sent!");
-		return;
-	}
-	// fill input array with actual data sent to inlet
-	for (i=0;i<x->voices;i++)
-	{
-		x->previous_voices[i] = x->current_voices[i];
-		x->current_voices[i] = atom_getint(argv++);
-	}
-
-	analyze_voicing(x);
-
-
-}
-
-void set_voices(t_voicing_analyzer *x, t_floatarg f)
-{
-	int newval = (int)  f;
-	if (newval<1)
-	{
-		error("number of voices must be > 0 !");
-		return;
-	}
-	x->voices = newval;
-	voicing_analyzer_free(x);
-	voicing_analyzer_allocate(x);
-}
-
-void print_help(t_voicing_analyzer *x)
-{
-	post("");
-	post("voicing_analyzer is an external that analyze voicing");
-	post("takes as input a list of midi notes");
-	post("and send out 4 values (from left to right):");
-	post("1)the center note of the chord (average value)");
-	post("2)wideness of the chord (how many octaves)");
-	post("3)small intervals were used? (-1=no, 1=yes)");
-	post("4)parallelism was used? (parallel octaves and fifths) (-1=no, 1=yes)");
-	post("available commands:");
-	post("voices: changes the number of expected notes");	
-	post("this externalis part of the frank framework");
-	post("authors: davide morelli, david casals");
-
-}
-
-void *voicing_analyzer_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_voicing_analyzer *x = (t_voicing_analyzer *)pd_new(voicing_analyzer_class);
-	x->center_note_out = outlet_new(&x->x_obj, gensym("float"));
-	x->wideness_out = outlet_new(&x->x_obj, gensym("float"));
-	x->small_intervals_out = outlet_new(&x->x_obj, gensym("float"));
-	x->i_like_parallelism_out = outlet_new(&x->x_obj, gensym("float"));	
-	x->voices = VOICES;
-	if (argc>0) 
-	{
-		x->voices = atom_getintarg(0, argc, argv);
-	}
-	voicing_analyzer_allocate(x);
-
-	return (x);
-}
-
-void voicing_analyzer_setup(void)
-{
-    voicing_analyzer_class = class_new(gensym("voicing_analyzer"), (t_newmethod)voicing_analyzer_new,
-        (t_method)voicing_analyzer_free, sizeof(t_voicing_analyzer), CLASS_DEFAULT, A_GIMME, 0);
-	class_addmethod(voicing_analyzer_class, (t_method)print_help, gensym("help"),0, 0);
-	class_addlist(voicing_analyzer_class, (t_method)set_current_voices);
-	// set number of voices
-	class_addmethod(voicing_analyzer_class, (t_method)set_voices, gensym("voices"), A_DEFFLOAT, 0);
-
-
-}
diff --git a/externals/frankenstein/voicing_analyzer.vcproj b/externals/frankenstein/voicing_analyzer.vcproj
deleted file mode 100755
index c5be06128eaeb64e0162d4dc422305da006cdde2..0000000000000000000000000000000000000000
--- a/externals/frankenstein/voicing_analyzer.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="voicing_analyzer"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:voicing_analyzer_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/voicing_analyzer.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="voicing_analyzer.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/input_noticer/INSTALL.TXT b/externals/input_noticer/INSTALL.TXT
deleted file mode 100644
index 1d2afa85f9944e4e048f40d086c036046d1fb918..0000000000000000000000000000000000000000
--- a/externals/input_noticer/INSTALL.TXT
+++ /dev/null
@@ -1,27 +0,0 @@
-input_noticer install instructions
-David Merrill <dmerrill@media.mit.edu>
-
-In order to make this code compile, I had to install the following libraries
-onto my system:
-
- libhal-dev
- libglib2.0-dev
- libdbus-glib-1-dev
-
-In a debian-based system, they can be installed with apt-get, as in:
- sudo apt-get install libhal-dev
-
-To see if you have the right libraries installed in order to compile, you can
-try compiling the test_noticer.c file, by running the test_noticer_compile.sh
-shell script, as follows:
-
-source test_noticer_compile.sh
-
-Then, run test_noticer, and when it's running you should see messages when 
-you plug, or un-plug a joystick.
-
-Once you've got your libraries sorted out, to compile and install, you should
-first modify the Makefile to suit your system. Then you can type:
-
-make pd_linux
-make install_noticer
diff --git a/externals/input_noticer/Makefile b/externals/input_noticer/Makefile
deleted file mode 100644
index 209ca747193f366d9d37fa7c5b396c980f033576..0000000000000000000000000000000000000000
--- a/externals/input_noticer/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-CC=gcc
-
-pd_linux: input_noticer.pd_linux parseeventnodenum.pd_linux
-
-clean: ; rm -f *.pd_linux *.o *~
-
-# installs all compiled externals.
-# you'll want to change this to match where your externals live
-install: ; sudo cp *.pd_linux /usr/local/lib/pd/extra/ ; sudo cp *help.pd /usr/local/lib/pd/doc/5.reference/
-
-# installs the input_noticer
-# you'll want to change this to match where your externals live
-install_noticer: ; sudo cp input_noticer.pd_linux /usr/local/lib/pd/extra ; sudo cp input_noticer-help.pd /usr/local/lib/pd/doc/5.reference/
-
-# ----------------------- LINUX i386 -----------------------
-
-.SUFFIXES: .pd_linux
-
-LINUXLDFLAGS = `pkg-config --libs glib-2.0 hal dbus-glib-1` -lpthread -lgthread-2.0 -lglib-2.0
-# LINUXLDFLAGS = `pkg-config --libs glib-2.0 hal dbus-glib-1 gthread-2.0`
-
-LINUXCFLAGS = -DUNIX -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch \
-    `pkg-config --cflags --libs glib-2.0 hal dbus-glib-1 gthread-2.0`
-
-LINUXINCLUDE =  -I/usr/local/lib/pd/include -I/usr/lib/pd/src -I/usr/local/include 
-
-.c.pd_linux:
-	$(CC) $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld --export-dynamic -shared -o $*.pd_linux $*.o -lc -lm $(LINUXLDFLAGS)
-	strip --strip-unneeded $*.pd_linux
-	rm $*.o
diff --git a/externals/input_noticer/README.TXT b/externals/input_noticer/README.TXT
deleted file mode 100644
index 1207c9f263aef6337d077828b0dbf130cd1425ff..0000000000000000000000000000000000000000
--- a/externals/input_noticer/README.TXT
+++ /dev/null
@@ -1,58 +0,0 @@
-title: input_noticer
-
-author: David Merrill <dmerrill@media.mit.edu>
-
-desc: Using dbus and the hardware abstraction layer (HAL) in linux, 
-this external allows pd to find all linux device files for a given device type.
-This scanning behavior can happen when the external is set up (via a [bang]),
-and will happen automatically when a new device is added to the system. An
-example linux device file would be:
-
-/dev/input/event5
-
-The pd user specifies device type as a string - i.e. "SideWinder Dual Strike", and
-this external outputs lists containing an index, and the linux device file where 
-each device of the given type was found. For example
-
-{0, /dev/input/event5}
-{1, /dev/input/event6}
-
-These lists can be routed in PD with the [route] object - see the help file for
-[route] for more details.
-
-In order to make this code compile, I had to install the following libraries
-onto my system:
-
- libhal-dev
- libglib2.0-dev
- libdbus-glib-1-dev
-
-In a debian-based system, they can be installed with apt-get, as in:
- sudo apt-get install libhal-dev
-
-To see if you have the right libraries installed in order to compile, you can
-try compiling the test_noticer.c file, by running the test_noticer_compile.sh
-shell script, as follows:
-
-source test_noticer_compile.sh
-
-Then, run test_noticer, and when it's running you should see messages when 
-you plug, or un-plug a joystick.
-
-dmerrill@dmerrill-t40:~/externals/input_noticer$ ./test_noticer
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial_if0
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial_usbraw
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial_if0_logicaldev_input
-found the joystick at: /dev/input/event6
-
-Thanks to Dan Willmans, Seth Nickell, and David Zeuthen for their 
-invaluable help with the whole dbus/hal part. Also, thanks to Hans-Christoph
-Steiner for his help with (and creation of) the joystick external.
-
-For good examples and reference on dbus/hal, please see: 
-NetworkManager.c: http://cvs.gnome.org/viewcvs/NetworkManager/src/NetworkManager.c?rev=1.100&view=markup
-libhal.h: http://webcvs.freedesktop.org/hal/hal/libhal/libhal.h?rev=1.32&view=markup
-
-Parts of this code were pulled from those examples.
-
diff --git a/externals/input_noticer/input_noticer-help.pd b/externals/input_noticer/input_noticer-help.pd
deleted file mode 100644
index 6ad4dc041f43e74f25d7a803c215486ecfb7521c..0000000000000000000000000000000000000000
--- a/externals/input_noticer/input_noticer-help.pd
+++ /dev/null
@@ -1,82 +0,0 @@
-#N canvas 196 114 1367 915 10;
-#X obj 49 116 route 0 1;
-#X obj 49 10 loadbang;
-#X obj 49 45 input_noticer joystick "SideWinder Dual Strike";
-#X obj 110 10 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 549 12 INSTANTIATION ARGUMENTS:;
-#X text 549 31 1) device type: for instance \, as I have entered here:
-joystick;
-#X text 658 182 This external takes the "joystick" that I have entered
-\, and creates "input.joystick" from it \, and then asks HAL to look
-for all devices that have that capability.;
-#X text 659 275 In linux \, this references the HAL info.product field
-for the device. The input_noticer will iterate through all devices
-that HAL returns with the given Capabilities field (see above) \, and
-look for the user-supplied substring. The corresponding linux.device_file
-field is returned \, which will be something like "/dev/input/event6".
-This can be used to connect to objects like [hid].;
-#X text 127 10 <- BANG to scan for devices \, outputs any that are
-found;
-#X text 13 430 Output from input_noticer is a list \, like 0 \, /dev/input/event5
-1 \, /dev/input/event6;
-#X text 59 552 5 means /dev/input/event5;
-#X text 661 60 In linux \, this references the HAL (Hardware Abstraction
-Layer) Capabilities field for the device. You can have a look at what
-your favorite device has by using the HAL Device Manager \, and look
-at the "Device" tab of the most specific entry for your input device.
-In my case \, the device tree for my joystick looks like: "SideWinder
-Dual Strike" -> "USB Hid Interface" -> "Microsoft SideWinder Dual Strike
-USB Version 1.0". Capabilities listed are: input \, input.joystick
-;
-#X text 549 236 2) product substring: for instance \, as I have entered
-here: "SideWinder Dual Strike";
-#X text 11 509 To feed this to [hid] \, you'll need to strip the number
-from the end \, since [hid] currently wants just the number \, and
-interprets the number as follows:;
-#X obj 49 180 parseeventnodenum;
-#X floatatom 49 202 5 0 0 0 - - -;
-#X obj 79 294 hid 0;
-#X msg 79 250 open \$1;
-#X obj 49 221 t b f;
-#X text 173 181 <- converts '/dev/input/eventX' to 'X';
-#X text 11 476 Use [route] to separate the messages \, and you'll be
-left with the second list element \, like /dev/input/event5;
-#X text 120 295 <- gets told which /dev/input/eventX to use;
-#X text 258 309 then is opened \, started;
-#X text 9 410 USING input_noticer:;
-#X text 57 74 <- outputs are tuples like 0 \, /dev/input/event5;
-#X text 246 89 1 \, /dev/input/event6;
-#X text 246 104 etc...;
-#X text 56 148 <- add more below here for multiple input devices;
-#N canvas 282 199 759 562 creating_input_abstractions 0;
-#X text 31 23 The philosophy behind input_noticer is really "plug and
-play". It's silly to have to manually figure out which device file
-a piece of hardware has mapped to \, then change your PD patch to match..
-Or to have to make sure to plug your devices in in the same order every
-time \, to make sure that the device files get created in a deterministic
-way \, etc..;
-#X text 30 122 The point of input_noticer is to make all of this "just
-work" \, so that you can get to the more interesting parts of interaction/instrument/sound/performance
-design.;
-#X text 30 167 -David Merrill <dmerrill@media.mit.edu>;
-#X restore 48 605 pd creating_input_abstractions;
-#X obj 79 321 route abs;
-#X floatatom 79 365 5 0 0 0 - - -;
-#X obj 79 343 route abs_x abs_y;
-#X floatatom 136 367 5 0 0 0 - - -;
-#X msg 32 250 poll 5;
-#X connect 0 0 14 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 14 0 15 0;
-#X connect 15 0 18 0;
-#X connect 16 0 29 0;
-#X connect 17 0 16 0;
-#X connect 18 0 33 0;
-#X connect 18 1 17 0;
-#X connect 29 0 31 0;
-#X connect 31 0 30 0;
-#X connect 31 1 32 0;
-#X connect 33 0 16 0;
diff --git a/externals/input_noticer/input_noticer.c b/externals/input_noticer/input_noticer.c
deleted file mode 100644
index a462f39f33839d272a55604dfa7ed2281b1f25fe..0000000000000000000000000000000000000000
--- a/externals/input_noticer/input_noticer.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * input_noticer - input noticer external for pure-data
- *
- * David Merrill <dmerrill@media.mit.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include <libhal.h>
-#include <stdio.h>
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <stdlib.h>
-#include <string.h>
-#include "input_noticer.h"
-
-static char *version = "$Revision: 1.2 $";
-#define MAX_INPUT_DEVICES 32
-
-/*------------------------------------------------------------------------------
- *  CLASS DEF
- */
-
-typedef struct callback_info {
-  void    (*device_added)(char *device_file);
-  void    (*device_removed)(char *device_file);
-} callback_info;
-
-static t_class *input_noticer_class;
-
-typedef struct _input_noticer {
-	t_object		x_obj;
-	GMainContext	*gmc;
-	GMainLoop		*gml;
-	callback_info	*cbi;
-	LibHalContext	*lhc;
-	DBusConnection	*connection;
-	char			*capability;
-	char			*product_substring;
-	int				device_idx;
-	t_outlet		*notify_out;
-	char			*last_notification_sent;
-	GThread			*gthread;
-	int				started;
-} t_input_noticer;
-
-int udi_matches_device(LibHalContext *ctx, const char *udi);
-static void output_list(t_input_noticer *x, t_symbol *s, int argc, t_atom *argv);
-
-/*------------------------------------------------------------------------------
- * IMPLEMENTATION                    
- */
-
-static void output_inputpath(t_input_noticer *x, int idx, char *path)
-{
-	t_atom t[2];
-
-	// set up the output array
-  	SETFLOAT(&(t[0]),idx); 
-  	SETSYMBOL(&(t[1]),gensym(path));
-
-	// output a list
-  	outlet_list(x->notify_out, &s_list, 2, t);
-}
-
-int scmp(const void *sp1, const void *sp2 )
-{
-    return( strcmp(*(char **)sp1, *(char **)sp2) );
-}
-
-void scan_for_devices(LibHalContext *ctx) {
-	char **		input_devices;
-	int		num_input_devices;
-	int		i,j;
-	int		this_device_idx;
-  	DBusError	dbus_error;
-	char *linux_device_file = NULL;
-	char *found_devices[MAX_INPUT_DEVICES];
-	t_input_noticer *x = libhal_ctx_get_user_data(ctx);
-    
-    /// can't do anything here if we don't have a pointer back to our struct
-    if (x == NULL) return;
-
-	// not really using this, but why not initialize... :)
-    dbus_error_init (&dbus_error);
-
-	// grab an array of all devices that match the capability we're looking for
-    input_devices = libhal_find_device_by_capability (ctx, "input", &num_input_devices, &dbus_error);
-	if (dbus_error_is_set (&dbus_error))
-	{
-		post("could not find existing networking devices: %s\n", dbus_error.message);
-		dbus_error_free (&dbus_error);
-		return;		
-	}
-
-	if (input_devices) 
-        {	
-		// we found at least one
-		this_device_idx = 0;
-		for (i = 0; i < num_input_devices; i++)
-		{
-			if (udi_matches_device(ctx, input_devices[i])) 
-			{
-				post("found a %s",x->product_substring);
-
-				// get the linux.device_file
-				linux_device_file = libhal_device_get_property_string(ctx, input_devices[i],"linux.device_file", NULL);
-				
-				// store the linux device file
-				found_devices[this_device_idx] = linux_device_file;
-
-				this_device_idx++;
-			}
-
-		}
-		// sort the devices alphabetically, so they will stay in the same order
-		qsort (found_devices, this_device_idx, sizeof (char *), scmp);
-		for (i = 0; i < this_device_idx; i++)
-		{
-			output_inputpath(x, i, found_devices[i]);
-			libhal_free_string(found_devices[i]);
-		}
-		libhal_free_string_array(input_devices);
-        } else {
-		post("no input devices found!");
-        }
-}
-
-// this function checks the UDI returned from libhal against the device product string
-// that we are looking
-int udi_matches_device(LibHalContext *ctx, const char *udi) {
-	t_input_noticer *x = libhal_ctx_get_user_data(ctx);
-	int i;
-	char *capability = malloc (strlen("input") + strlen(x->capability) + 2);
-	char *temp1;
-
-	sprintf(capability,"input.%s",x->capability);
-	temp1 = libhal_device_get_property_string (ctx, udi, "info.product", NULL);
-	if (libhal_device_property_exists(ctx, udi, "info.capabilities", NULL)) 
-	{
-		char **capabilities = libhal_device_get_property_strlist(ctx, udi, "info.capabilities", NULL);
-    		for (i=0; capabilities[i] != NULL; i++) 
-		{
-			//post("looking for %s, now checking capability #%d, %s",capability,i,capabilities[i]);
-      			if (!strcmp (capabilities[i], capability)) 
-			{
-         			char *temp = libhal_device_get_property_string (ctx, udi, "info.product", NULL);
-				if (temp != NULL && strstr(temp, x->product_substring)) // if product string matches up
-				{
-					libhal_free_string_array(capabilities);
-					libhal_free_string (temp);
-					free(capability);
-					return 1;					
-				} else {
-					// product string does not match up
-				}
-
-				libhal_free_string (temp);
-         		}
-		}
-		libhal_free_string_array(capabilities);
-        } else {
-        	// no capabilities found
-        }
-        free(capability);
-	return 0;
-}
-
-// this callback gets called whenever HAL notices a new device being added
-void hal_device_added(LibHalContext *ctx, const char *udi) {
-  t_input_noticer *x = libhal_ctx_get_user_data(ctx);
-
-  if (x != NULL && x->started) {
-  	if (udi_matches_device(ctx,udi)) {
-  		scan_for_devices(ctx);
-  	} else {
-        	// post("nope");
-  	}
-  }
-}
-
-void hal_device_removed(LibHalContext *ctx, const char *udi) {
-  // post("device removed, udi = %s\n", udi);  
-}
-
-// I haven't seen this one get called... <Dm>
-void hal_device_new_capability(LibHalContext *ctx, const char *udi, const char *capability) {
-	// post("new device capability, udi = %s\n", udi);  
-}
-
-void input_noticer_stop(t_input_noticer* x) {
-  DEBUG(post("input_noticer_stop"););
-
-  /* Signal the HAL listener to stop */
-  g_main_loop_quit(x->gml);
-
-  /* Wait until it has actually stopped */
-  g_thread_join(x->gthread);
-}
-
-static int input_noticer_close(t_input_noticer *x) {
-	DEBUG(post("input_noticer_close"););
-	
-	input_noticer_stop(x);
-
-   if (x->product_substring) free(x->product_substring);
-   if (x->capability) free(x->capability);
-   
-   return 1;
-}
-
-static int input_noticer_open(t_input_noticer *x, t_symbol *s) {
-  DEBUG(post("input_noticer_open");)
-
-  // close it down, if running already
-  input_noticer_close(x);
-  
-  return 1;
-}
-
-void input_noticer_start(t_input_noticer* x) {
-  post("input_noticer: started");
-
-  x->started = 1;
-  
-  // do first scan here (NOT in input_noticer_new, can't generate output from there)
-  scan_for_devices(x->lhc);
-}
-
-gpointer input_noticer_thread_main(gpointer user_data) {
-  t_input_noticer *x = (t_input_noticer *) user_data;
-	
-  /* Run the main loop.  We stay here until g_main_quit() is called */
-  g_main_loop_run(x->gml);
-
-  return user_data;
-}
-
-/* teardown functions */
-static void input_noticer_free(t_input_noticer* x) {
-  DEBUG(post("input_noticer_free");)
-}
-
-// removes double-quotes from a string, and returns a copy of it, otherwise unharmed
-static char *remove_quotes(char *input_str)
-{
-	char *rv, *tp;
-	unsigned int i;
-
-	// post ("removing quotes from %s", input_str);
-		
-	if (input_str != NULL)
-	{
-		rv = malloc ((strlen(input_str) + 1) * sizeof(char));
-		tp = rv;
-		for (i=0; i < strlen(input_str); i++) {
-			if (input_str[i] != '"') {
-				*tp = input_str[i];
-				tp++;
-			}
-		}
-		*tp = '\0';
-	} else {
-		return NULL;
-	}
-	
-	post ("returning %s", rv);
-	return rv;
-}
-
-/* setup functions */
-static void *input_noticer_new(t_symbol *capability, t_symbol *product_substring) {
-  int i;
-  t_input_noticer *x = (t_input_noticer *)pd_new(input_noticer_class);
-
-  post("[input_noticer] %s, written by David Merrill <dmerrill@media.mit.edu>",version);  
-
-  /* init vars */
-  x->gmc = NULL;
-  x->cbi = NULL;
-  x->lhc = NULL;
-  x->connection = NULL;
-  x->notify_out = NULL;
-  x->last_notification_sent = NULL;
-  x->started = 0;
-  x->capability = remove_quotes((char *)capability->s_name);
-  x->product_substring = remove_quotes((char *)product_substring->s_name);
-
-  // create outlet for notifying
-  x->notify_out = outlet_new(&x->x_obj, 0); // list outlet
-
-  // Setup glib and dbus for threading
-  g_type_init();
-  if (!g_thread_supported ())
-    g_thread_init (NULL);
-  dbus_g_thread_init();
-
-  // create a context for the callback functions
-  x->gmc = g_main_context_new();
-  x->gml = g_main_loop_new(x->gmc, FALSE);
-
-  // create a libhal context
-  if ((x->lhc = libhal_ctx_new()) == NULL) {
-    // complain here (exit)
-    DEBUG(post("input_noticer_open: error, could not create a libhal context!");)
-  }
-  
-  // get the dbus connection
-  x->connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-  if (x->connection == NULL) {
-    // complain here (exit)
-    DEBUG(post("input_noticer_open: error, could not get the DBUS connection!");)
-  }
-
-  // attaches the main loop to dbus, so that the main loop
-  // gets dbus events
-  dbus_connection_setup_with_g_main(x->connection,x->gmc);
-
-  // tells libhal to use our dbus connection, in order to receive
-  // events from hal
-  libhal_ctx_set_dbus_connection(x->lhc,x->connection);
-
-  if (!libhal_ctx_init (x->lhc, NULL)) {
-    DEBUG(post("input_noticer_open: error, could not init libhal!");)
-  } 
-  
-  // handing my custom data structure to libhal context, so that the callback functions
-  // can get to it
-  libhal_ctx_set_user_data(x->lhc, x);
-
-  libhal_ctx_set_device_added(x->lhc, hal_device_added);
-  libhal_ctx_set_device_removed(x->lhc,  hal_device_removed);
-  libhal_ctx_set_device_new_capability(x->lhc,  hal_device_new_capability);
-
-  /* Create the thread that listens for HAL events */
-  x->gthread = g_thread_create(input_noticer_thread_main, x, TRUE, NULL);
- 
-  return (void *)x;
-}
-
-void input_noticer_setup(void) {
-  // DEBUG(post("input_noticer_setup");)
-
-  // define how the object gets instantiated
-  // example: [input_noticer joystick "SideWinder Dual Strike"]
-  input_noticer_class = class_new(	
-  			gensym("input_noticer"), 
-			(t_newmethod)input_noticer_new, 
-			(t_method)input_noticer_free,
-			sizeof(t_input_noticer),
-			CLASS_DEFAULT,
-			A_DEFSYMBOL,
-			A_DEFSYMBOL,
-			0);
-
-  class_addbang(input_noticer_class, input_noticer_start);
-}
diff --git a/externals/input_noticer/input_noticer.h b/externals/input_noticer/input_noticer.h
deleted file mode 100644
index 5bedd24f3eb6f0b865e679f535bb84779f67bfd9..0000000000000000000000000000000000000000
--- a/externals/input_noticer/input_noticer.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef INPUT_NOTICER_H_
-#define INPUT_NOTICER_H_
-
-/*
- * input_noticer - input noticer external for pure-data
- *
- * David Merrill <dmerrill@media.mit.edu>
- *
- * Description: Using dbus and the hardware abstraction layer (HAL) in linux, 
- * this external allows pd to find all linux device files for a given device type.
- * This scanning behavior can happen when the external is set up (via a [bang]),
- * and will happen automatically when a new device is added to the system. An
- * example linux device file would be:
- * 
- * /dev/input/event5
- * 
- * The pd user specifies device type as a string - i.e. "SideWinder Dual Strike", and
- * this external outputs lists containing an index, and the linux device file where 
- * each device of the given type was found. For example
- * 
- * {0, /dev/input/event5}
- * {1, /dev/input/event6}
- * 
- * These lists can be routed in PD with the [route] object - see the help file for
- * more details.
- * 
- * Thanks to Dan Willmans, Seth Nickell, and David Zeuthen for their 
- * invaluable help with the whole dbus/hal part. Also, thanks to Hans-Christoph
- * Steiner for his help with (and creation of) the joystick external.
- * 
- * For good examples and reference on dbus/hal, please see: 
- * NetworkManager.c: http://cvs.gnome.org/viewcvs/NetworkManager/src/NetworkManager.c?rev=1.100&view=markup
- * libhal.h: http://webcvs.freedesktop.org/hal/hal/libhal/libhal.h?rev=1.32&view=markup
- * 
- * Parts of this code were pulled from those examples.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include <m_pd.h>
-
-//#define DEBUG(x)
-#define DEBUG(x) x 
-
-#endif /*INPUT_NOTICER_H_*/
diff --git a/externals/input_noticer/noticer_test.pd b/externals/input_noticer/noticer_test.pd
deleted file mode 100644
index 4ea2dcc12791bbb64196ae0258a34497c63b450c..0000000000000000000000000000000000000000
--- a/externals/input_noticer/noticer_test.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X obj 49 93 print A;
-#X obj 49 70 route 0 1;
-#X obj 107 140 print C;
-#X obj 78 116 print B;
-#X obj 49 10 loadbang;
-#X obj 49 45 input_noticer joystick "SideWinder Dual Strike";
-#X obj 110 10 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X connect 1 0 0 0;
-#X connect 1 1 3 0;
-#X connect 1 2 2 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 0;
diff --git a/externals/input_noticer/parseeventnodenum.c b/externals/input_noticer/parseeventnodenum.c
deleted file mode 100644
index e8ddae1d4f6857709035528df175513606dbe265..0000000000000000000000000000000000000000
--- a/externals/input_noticer/parseeventnodenum.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* 
- * author: David Merrill <dmerrill@media.mit.edu>
- * based on code from Tom Schouten, found online at:
- * http://lists.puredata.info/pipermail/pd-list/2002-02/004871.html
- */
-
-#include "m_pd.h"
-#include <stdio.h>
-
-#define MAXHEAD 1024
-
-typedef struct{
-    char buffer[MAXHEAD];
-} t_parseeventnodenum_data;
- 
-typedef struct parseeventnodenum
-{
-  t_object t_ob;
-  t_outlet *x_out;  
-  t_outlet *x_out_error;
-} t_parseeventnodenum;
-
-void penn_any_method(t_parseeventnodenum *x, t_symbol *s, int argc, t_atom *argv)
-{
-    char* p = s->s_name;
-    int eventnodenum = -1, rv = 0;
-
-    if (sscanf(p,"/dev/input/event%i",&eventnodenum)) {
-
-	// success, send the float to the left outlet
-	outlet_float(x->x_out, eventnodenum);
-    } else {
-
-	// failure, send the input symbol to the right outlet
-	outlet_symbol(x->x_out_error, gensym(p));
-    }
-}
-
-void parseeventnodenum_free(void)
-{
-}
-
-t_class *parseeventnodenum_class;
-
-void *parseeventnodenum_new(void)
-{
-    t_parseeventnodenum *x = (t_parseeventnodenum *)pd_new(parseeventnodenum_class);
-
-    // left outlet is where the parsed number will come out
-    x->x_out = outlet_new(&x->t_ob, gensym("float"));
-
-    // right outlet is where the original string will come out if an error occured
-    x->x_out_error = outlet_new(&x->t_ob, gensym("symbol"));
-
-
-    return (void *)x;
-}
-
-void parseeventnodenum_setup(void)
-{
-    parseeventnodenum_class = class_new(gensym("parseeventnodenum"), (t_newmethod)parseeventnodenum_new,
-    	(t_method)parseeventnodenum_free, sizeof(t_parseeventnodenum), 0, 0);
-    class_addanything(parseeventnodenum_class, penn_any_method);
-}
-
diff --git a/externals/input_noticer/test_noticer.c b/externals/input_noticer/test_noticer.c
deleted file mode 100644
index b963ae32430f2f54cbb49a03786c16af280987ee..0000000000000000000000000000000000000000
--- a/externals/input_noticer/test_noticer.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <libhal.h>
-#include <stdio.h>
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <stdlib.h>
-
-typedef struct callback_info {
-  void    (*device_added)(char *device_file);
-  void    (*device_removed)(char *device_file);
-} callback_info;
-
-// callback fns
-
-// this one actually never gets called in my experience <DJM>
-void hal_device_added(LibHalContext *ctx, const char *udi) {
-  int i, found_joystick;
-  char *linux_device_file = NULL;
-
-  printf("device added, udi = %s\n", udi);
-
-  // find out if this device advertises capabilities
-  if (libhal_device_property_exists(ctx, udi, "info.capabilities", NULL)) {
-    //printf("***** it's a joystick! *****\n");
-
-    // get the capabilities strlist
-    char **capabilities = libhal_device_get_property_strlist(ctx, udi, "info.capabilities", NULL);
-
-    // find out if it's a joystick
-    found_joystick = 0;
-    for (i=0; capabilities[i] != NULL; i++) {
-      if (!strcmp (capabilities[i], "input.joystick")) {
-         char **linux_device_file_strlist;
-         found_joystick = 1;
-
-	// printf("found a joystick!\n");
-
-         // pull out the relevant information (note - in Device Manager, this is reported incorrectly as a strlist,
-	 // whereas it actually returns a string - so we make the correct call here
-         linux_device_file = libhal_device_get_property_string(ctx, udi, "linux.device_file", NULL);
-
-         if (linux_device_file != NULL) {
-            // linux_device_file = linux_device_file_strlist[0];
-            printf("found the joystick at: %s\n", linux_device_file);
-
-         } else {
-	    // we didn't find the device file, better luck next time
-
-         }
-      }
-      // printf("got the following: %s\n", capabilities[i]);
-    }
-  }
-}
-
-void hal_device_removed(LibHalContext *ctx, const char *udi) {
-  printf("device removed, udi = %s\n", udi);  
-}
-
-void hal_device_new_capability(LibHalContext *ctx, const char *udi, const char *capability) {
-  char *device;
-  callback_info *cbi = (callback_info *)libhal_ctx_get_user_data(ctx);
-
-  printf("device has a new capability, udi = %s, cap = %s\n", udi, capability); 
-
-  if (capability && ((strcmp (capability, "input") == 0))) {
-	// 
-	if (libhal_device_property_exists(ctx, udi, "input.device", NULL)) {
-		device = libhal_device_get_property_string(ctx, udi, "input.device",NULL);
-
-		// this is the callback into my PD C code
-		// (*(cbi->device_added))(device);
-		printf("new capability, testing: %s\n",device);
-	}
-  } 
-}
-
-
-
-gpointer hal_thread_main(gpointer user_data) {
-  callback_info *cbi = (callback_info *)(user_data);
-  GMainContext *gmc;
-  GMainLoop *gml;
-  LibHalContext *lhc;
-  DBusConnection *connection;
-
-  gmc = g_main_context_new();
-  gml = g_main_loop_new(gmc,FALSE);
-
-  if ((lhc = libhal_ctx_new()) == NULL) {
-    // complain here (exit)
-  }
-  
-  connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-  if (connection == NULL) {
-
-  }
-
-  // attaches the main loop to dbus, so tha the main loop
-  // gets dbus events
-  dbus_connection_setup_with_g_main(connection,gmc);
-
-  // tells libhal to use our dbus connection, in order to receive
-  // events from hal
-  libhal_ctx_set_dbus_connection(lhc,connection);
-
-  if (!libhal_ctx_init (lhc, NULL)) {
-    // die
-  } 
-  
-  // handing my custom data structure to libhal context
-  libhal_ctx_set_user_data(lhc, cbi);
-
-  libhal_ctx_set_device_added(lhc, hal_device_added);
-  libhal_ctx_set_device_removed(lhc,  hal_device_removed);
-  libhal_ctx_set_device_new_capability(lhc,  hal_device_new_capability);
-
-  // Get stuck here forever, and ever, and ever....
-  g_main_loop_run(gml);
-}
-
-GThread *hal_thread(callback_info *cbi) {
-  GThread *rv;
-
-  // eventually, we will pass in some user data here (the first NULL)
-  // this could be a fn pointer, or a structure with a few fn pointers, 
-  // etc, so that 
-  rv = g_thread_create(hal_thread_main, cbi, TRUE, NULL);
-  return(rv);
-}
-
-int main(int argc, char **argv) {
-  GThread *gth;
-  callback_info * cbi = malloc (sizeof (callback_info));
-  
-  // Setup glib
-  g_type_init();
-  if (!g_thread_supported ())
-    g_thread_init (NULL);
-
-  dbus_g_thread_init();
-
-  gth = hal_thread(cbi);
-  while (1) {
-    sleep(1);
-  }
-}
-
diff --git a/externals/input_noticer/test_noticer_compile.sh b/externals/input_noticer/test_noticer_compile.sh
deleted file mode 100644
index 7adc18a1a868e12dcc72d9d0c41b51e98ce05613..0000000000000000000000000000000000000000
--- a/externals/input_noticer/test_noticer_compile.sh
+++ /dev/null
@@ -1 +0,0 @@
-gcc `pkg-config --cflags --libs glib-2.0 hal dbus-glib-1 gthread-2.0` -o test_noticer test_noticer.c
diff --git a/externals/jackx/GnuGPL.txt b/externals/jackx/GnuGPL.txt
deleted file mode 100644
index fa0bef492c23ea37a1944eb13238e8b8de60613a..0000000000000000000000000000000000000000
--- a/externals/jackx/GnuGPL.txt
+++ /dev/null
@@ -1,290 +0,0 @@
-GNU GENERAL PUBLIC LICENSE
-
-Version 2, June 1991 
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
-59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom
-to share and change it. By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This General
-Public License applies to most of the Free Software Foundation's
-software and to any other program whose authors commit to using it.
-(Some other Free Software Foundation software is covered by the
-GNU Library General Public License instead.) You can apply it to your
-programs, too. 
-
-When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new free
-programs; and that you know you can do these things. 
-
-To protect your rights, we need to make restrictions that forbid anyone
-to deny you these rights or to ask you to surrender the rights. These
-restrictions translate to certain responsibilities for you if you distribute
-copies of the software, or if you modify it. 
-
-For example, if you distribute copies of such a program, whether gratis
-or for a fee, you must give the recipients all the rights that you have. You
-must make sure that they, too, receive or can get the source code. And
-you must show them these terms so they know their rights. 
-
-We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software. 
-
-Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on,
-we want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations. 
-
-Finally, any free program is threatened constantly by software patents.
-We wish to avoid the danger that redistributors of a free program will
-individually obtain patent licenses, in effect making the program
-proprietary. To prevent this, we have made it clear that any patent must
-be licensed for everyone's free use or not licensed at all. 
-
-The precise terms and conditions for copying, distribution and
-modification follow. 
-
-TERMS AND CONDITIONS FOR
-COPYING, DISTRIBUTION AND
-MODIFICATION
-
-0. This License applies to any program or other work which contains a
-notice placed by the copyright holder saying it may be distributed under
-the terms of this General Public License. The "Program", below, refers
-to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it, either
-verbatim or with modifications and/or translated into another language.
-(Hereinafter, translation is included without limitation in the term
-"modification".) Each licensee is addressed as "you". 
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of running
-the Program is not restricted, and the output from the Program is
-covered only if its contents constitute a work based on the Program
-(independent of having been made by running the Program). Whether
-that is true depends on what the Program does. 
-
-1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the notices
-that refer to this License and to the absence of any warranty; and give
-any other recipients of the Program a copy of this License along with the
-Program. 
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee. 
-
-2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions: 
-
-     a) You must cause the modified files to carry prominent notices
-     stating that you changed the files and the date of any change. 
-
-     b) You must cause any work that you distribute or publish, that in
-     whole or in part contains or is derived from the Program or any
-     part thereof, to be licensed as a whole at no charge to all third
-     parties under the terms of this License. 
-
-     c) If the modified program normally reads commands interactively
-     when run, you must cause it, when started running for such
-     interactive use in the most ordinary way, to print or display an
-     announcement including an appropriate copyright notice and a
-     notice that there is no warranty (or else, saying that you provide a
-     warranty) and that users may redistribute the program under
-     these conditions, and telling the user how to view a copy of this
-     License. (Exception: if the Program itself is interactive but does
-     not normally print such an announcement, your work based on
-     the Program is not required to print an announcement.) 
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program, and
-can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based on
-the Program, the distribution of the whole must be on the terms of this
-License, whose permissions for other licensees extend to the entire
-whole, and thus to each and every part regardless of who wrote it. 
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based
-on the Program. 
-
-In addition, mere aggregation of another work not based on the
-Program with the Program (or with a work based on the Program) on a
-volume of a storage or distribution medium does not bring the other
-work under the scope of this License. 
-
-3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following: 
-
-     a) Accompany it with the complete corresponding
-     machine-readable source code, which must be distributed under
-     the terms of Sections 1 and 2 above on a medium customarily
-     used for software interchange; or, 
-
-     b) Accompany it with a written offer, valid for at least three
-     years, to give any third party, for a charge no more than your cost
-     of physically performing source distribution, a complete
-     machine-readable copy of the corresponding source code, to be
-     distributed under the terms of Sections 1 and 2 above on a
-     medium customarily used for software interchange; or, 
-
-     c) Accompany it with the information you received as to the offer
-     to distribute corresponding source code. (This alternative is
-     allowed only for noncommercial distribution and only if you
-     received the program in object code or executable form with
-     such an offer, in accord with Subsection b above.) 
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to control
-compilation and installation of the executable. However, as a special
-exception, the source code distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies the
-executable. 
-
-If distribution of executable or object code is made by offering access to
-copy from a designated place, then offering equivalent access to copy
-the source code from the same place counts as distribution of the source
-code, even though third parties are not compelled to copy the source
-along with the object code. 
-
-4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt otherwise
-to copy, modify, sublicense or distribute the Program is void, and will
-automatically terminate your rights under this License. However, parties
-who have received copies, or rights, from you under this License will not
-have their licenses terminated so long as such parties remain in full
-compliance. 
-
-5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and all
-its terms and conditions for copying, distributing or modifying the
-Program or works based on it. 
-
-6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the original
-licensor to copy, distribute or modify the Program subject to these terms
-and conditions. You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein. You are not responsible
-for enforcing compliance by third parties to this License. 
-
-7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot distribute
-so as to satisfy simultaneously your obligations under this License and
-any other pertinent obligations, then as a consequence you may not
-distribute the Program at all. For example, if a patent license would not
-permit royalty-free redistribution of the Program by all those who
-receive copies directly or indirectly through you, then the only way you
-could satisfy both it and this License would be to refrain entirely from
-distribution of the Program. 
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply
-and the section as a whole is intended to apply in other circumstances. 
-
-It is not the purpose of this section to induce you to infringe any patents
-or other property right claims or to contest validity of any such claims;
-this section has the sole purpose of protecting the integrity of the free
-software distribution system, which is implemented by public license
-practices. Many people have made generous contributions to the wide
-range of software distributed through that system in reliance on
-consistent application of that system; it is up to the author/donor to
-decide if he or she is willing to distribute software through any other
-system and a licensee cannot impose that choice. 
-
-This section is intended to make thoroughly clear what is believed to be
-a consequence of the rest of this License. 
-
-8. If the distribution and/or use of the Program is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Program under this License may add an
-explicit geographical distribution limitation excluding those countries, so
-that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License. 
-
-9. The Free Software Foundation may publish revised and/or new
-versions of the General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may differ in
-detail to address new problems or concerns. 
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number
-of this License, you may choose any version ever published by the Free
-Software Foundation. 
-
-10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we
-sometimes make exceptions for this. Our decision will be guided by the
-two goals of preserving the free status of all derivatives of our free
-software and of promoting the sharing and reuse of software generally. 
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF
-CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM,
-TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
-WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE
-PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
-EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
-THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
-COST OF ALL NECESSARY SERVICING, REPAIR OR
-CORRECTION. 
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW
-OR AGREED TO IN WRITING WILL ANY COPYRIGHT
-HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
-ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
-ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
-LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
-INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
-WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
-OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES. 
-
-END OF TERMS AND CONDITIONS
diff --git a/externals/jackx/README b/externals/jackx/README
deleted file mode 100644
index 1bef9174073ffb980d07e662f2c09432864cc4fd..0000000000000000000000000000000000000000
--- a/externals/jackx/README
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Another small external lib.
-This one has two objects:
-jack-connect :connect/disconnect/toggle/query connections from named ports
-jack-ports: find the ports in the jack-graph. You can send it regular-expressions plus a few keywords to get client and port names.
-
-There are two basic help patches included.
-
-
-
-To compile:
-make sure that m_pd.h is in your include path
-type make.
-Manually install everything :)
-
-have fun
-
-TODO
-finally learn autotools
-When and if the jack-developers finalize their transport structures add a jack-transport object.
-
-
-
-Gerard van Dongen
-gml@xs4all.nl
diff --git a/externals/jackx/jack-connect-help.pd b/externals/jackx/jack-connect-help.pd
deleted file mode 100644
index be2cb512e68ecb737fafa68871f2e648d93131b0..0000000000000000000000000000000000000000
--- a/externals/jackx/jack-connect-help.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 1260 312 610 300 10;
-#X obj 137 190 jack-connect;
-#X obj 137 231 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 136 12 connect;
-#X msg 139 39 toggle;
-#X msg 156 89 symbol alsa_pcm;
-#X msg 195 133 symbol pure_data_0;
-#X msg 138 65 query;
-#X msg 317 8 bang;
-#X msg 382 6 0;
-#X obj 346 30 metro 50;
-#X msg 173 113 symbol capture_2;
-#X msg 216 155 symbol input0;
-#X text 307 89 output client;
-#X text 306 111 output port;
-#X text 343 133 input client;
-#X text 344 155 input port;
-#X msg 24 13 disconnect;
-#X text 185 232 output is 1 for connect(ed) 0 for disconnect(ed);
-#X text 199 64 doesn't change the connection only outputs the state
-;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 1;
-#X connect 5 0 0 3;
-#X connect 6 0 0 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 0;
-#X connect 9 0 3 0;
-#X connect 10 0 0 2;
-#X connect 11 0 0 4;
-#X connect 16 0 0 0;
diff --git a/externals/jackx/jack-ports-help.pd b/externals/jackx/jack-ports-help.pd
deleted file mode 100644
index b87c172842dddaa72abdc3892602a32dd6d53647..0000000000000000000000000000000000000000
--- a/externals/jackx/jack-ports-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 1245 199 744 386 10;
-#X obj 161 197 jack-ports;
-#X msg 160 1 bang;
-#X obj 146 239 print output;
-#X obj 253 238 print input;
-#X text 41 267 output is in the form of a pairs client - port. outputs
-on the left \, inputs on the right.;
-#X text 200 5 will give all ports registered;
-#X text 181 25 Input is a regular expression for the client/port plus
-one or more of the following keywords: virtual: a port that is _not_
-a physical hw interface physical: a port that _is_ a hw interface output:a
-port that is a jack output input: a port that is a jack input;
-#X msg 184 123 virtual input .*3.*;
-#X text 340 123 will give all software inputs with a 3 in the name
-;
-#X msg 182 153 physical ouput .*[34].*;
-#X text 356 152 will give the hw jack outputs with either a 3 or a
-4 in the name;
-#X text 354 181 notice that these are soundcard _inputs_!!;
-#X connect 0 0 2 0;
-#X connect 0 1 3 0;
-#X connect 1 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
diff --git a/externals/jackx/jack.pd b/externals/jackx/jack.pd
deleted file mode 100644
index de8dbc1a70353bd7ee630af0ed5785e00e00c7c6..0000000000000000000000000000000000000000
--- a/externals/jackx/jack.pd
+++ /dev/null
@@ -1,47 +0,0 @@
-#N canvas 0 0 827 657 10;
-#X obj 77 194 jack-connect;
-#X msg 47 68 c;
-#X floatatom 78 237 5 0 0 0 - - -;
-#X msg 67 18 connect;
-#X msg 184 44 toggle;
-#X msg 178 82 symbol alsa_pcm;
-#X msg 215 127 symbol pure_data_0;
-#X msg 79 157 query;
-#X msg 227 153 symbol output0;
-#X msg 199 103 symbol playback_3;
-#X msg 317 8 bang;
-#X msg 382 6 0;
-#X obj 346 30 metro 50;
-#X obj 354 345 jack-ports;
-#X msg 365 263 bang;
-#X msg 443 271 input pure_data.*;
-#X msg 451 225 output;
-#X msg 475 298 pure_data.*;
-#X msg 523 323 pure.* output;
-#X msg 415 175 physical output .*[34].*;
-#X obj 306 399 unpack s s;
-#X obj 412 401 unpack s s;
-#X obj 265 479 jack-connect;
-#X obj 408 490 print;
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 3;
-#X connect 6 0 0 1;
-#X connect 7 0 0 0;
-#X connect 8 0 0 2;
-#X connect 9 0 0 4;
-#X connect 10 0 12 0;
-#X connect 11 0 12 0;
-#X connect 12 0 4 0;
-#X connect 13 0 20 0;
-#X connect 13 0 23 0;
-#X connect 13 1 21 0;
-#X connect 13 1 23 0;
-#X connect 14 0 13 0;
-#X connect 15 0 13 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 18 0 13 0;
-#X connect 19 0 13 0;
diff --git a/externals/jackx/jackx.c b/externals/jackx/jackx.c
deleted file mode 100644
index 75042cec049de628cc352ad92ea1131ea6ab971b..0000000000000000000000000000000000000000
--- a/externals/jackx/jackx.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* jack utility externals for linux pd
- * copyright 2003 Gerard van Dongen gml@xs4all.nl
-
-* This program is free software; you can redistribute it and/or               
-* modify it under the terms of the GNU General Public License                 
-* as published by the Free Software Foundation; either version 2              
-* of the License, or (at your option) any later version.                      
-* This program is distributed in the hope that it will be useful,             
-* but WITHOUT ANY WARRANTY; without even the implied warranty of              
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               
-* GNU General Public License for more details.                                
-* You should have received a copy of the GNU General Public License           
-* along with this program; if not, write to the Free Software                 
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
-
-
-
-* objects:  
-* jack-connect
-* this can query and set the port connections on the jack system
-* methods:
-* jack-ports
-* this can query jack ports with regex's
-
-
-
-
- */
-
-
-
-
-#include "m_pd.h"
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <jack/jack.h>
-
-
-static t_class *jackports_class;
-static t_class *jackconnect_class;
-
-typedef struct _jackports {
-	t_object x_obj;
-	t_outlet *input_ports, *output_ports;
-	char expression[128];
-	char *buffer; //used internally it doesn't have to be reserved every time
-	t_atom *a_outlist;
-
-} t_jackports;
-
-typedef struct _jackconnect {
-	t_object x_obj;
-	t_symbol *input_client,*input_port, *output_client,*output_port;
-	char source[128],destination[128]; //ought to be enough for most names
-	int connected;
-} t_jackconnect;
-
-static jack_client_t * jc;
-
-
-
-/********************************************************************************************************
-
-methods for jack-ports
-
-*********************************************************************************************************/
-
-void jackports_input(t_jackports *x, t_symbol *s,int argc, t_atom *argv)
-{
-	if (jc){
-	const char ** ports;
-
-	int l = 0;
-	int n = 0;
-	int keyflag = 0;
-	int expflag =0;
-	int portflags = 0;
-	t_symbol *s_client;
-	t_symbol *s_port;
-	char *t;
-
-	if (!strcmp(s->s_name,"bang")) {
-		strcpy(x->expression,"");
-		expflag = 1;
-	} else {
-
-		//parse symbol s and all arguments for keywords:
-		//physical,virtual,input and output
-
-		if (!strcmp(s->s_name,"physical")) {
-			portflags = portflags | JackPortIsPhysical;
-			keyflag = 1;
-		}
-		if (!strcmp(s->s_name,"virtual")) {
-			portflags = portflags & (~JackPortIsPhysical);
-			keyflag = 1;
-		}		
-		if (!strcmp(s->s_name,"input")) {
-			portflags = portflags | JackPortIsInput;
-			keyflag = 1;
-		}
-
-		if (!strcmp(s->s_name,"output")) {
-			portflags = portflags | JackPortIsOutput;
-			keyflag = 1;
-		}
-		if (!keyflag) {
-			strcpy(x->expression,s->s_name);
-			expflag = 1;
-		}
-		for (n=0;n<argc;n++) {
-			keyflag = 0;
-			atom_string(argv+n,x->buffer,128);
-			if (!strcmp(x->buffer,"physical")) {
-				portflags = portflags | JackPortIsPhysical;
-				keyflag = 1;
-			}
-			if (!strcmp(x->buffer,"virtual")) {
-				portflags = portflags & (~JackPortIsPhysical);
-				keyflag = 1;
-			}		
-			if (!strcmp(x->buffer,"input")) {
-				portflags = portflags | JackPortIsInput;
-				keyflag = 1;
-			}
-			
-			if (!strcmp(x->buffer,"output")) {
-				portflags = portflags | JackPortIsOutput;
-				keyflag = 1;
-			}
-			if (!keyflag && !expflag) {
-				strcpy(x->expression,x->buffer);
-				expflag = 1;
-			}
-
-
-		}
-
-
-	}
-
-
-	ports = jack_get_ports (jc,x->expression,NULL,portflags|JackPortIsOutput);
-	n=0;
-	if (ports) {
-		while (ports[n]) {
-			//seperate port and client
-			
-			l = strlen(ports[n]);
-			t = strchr(ports[n],':');
-
-			if (t) {
-				s_port=gensym(strchr(ports[n],':')+1);
-			
-
-				snprintf(x->buffer,l-strlen(s_port->s_name),ports[n]);
-				s_client = gensym(x->buffer);
-
-				SETSYMBOL(x->a_outlist,s_client);			
-				SETSYMBOL(x->a_outlist+1,s_port);
-
-				// output in output-outlet
-				outlet_list(x->output_ports,&s_list,2,x->a_outlist);
-			}
-
-			n++;
-		}
-	}
-	free(ports);
-
-	ports = jack_get_ports (jc,x->expression,NULL,portflags|JackPortIsInput);
-	n=0;
-	if (ports) {
-		while (ports[n]) {
-			l = strlen(ports[n]);
-			t = strchr(ports[n],':');
-
-			if (t) {
-				s_port=gensym(strchr(ports[n],':')+1);
-			
-
-				snprintf(x->buffer,l-strlen(s_port->s_name),ports[n]);
-				s_client = gensym(x->buffer);
-
-				SETSYMBOL(x->a_outlist,s_client);			
-				SETSYMBOL(x->a_outlist+1,s_port);
-
-				// output in output-outlet
-				outlet_list(x->input_ports,&s_list,2,x->a_outlist);
-			}
-		
-			
-			n++;
-		}
-	}
-	free(ports);
-
-	strcpy(x->expression,"");//reset regex
-	}
-
-}
-
-
-
-
-void *jackports_new(void)
-{
-	t_jackports * x = (t_jackports *)pd_new(jackports_class);
-	x->output_ports = outlet_new(&x->x_obj, &s_list);
-	x->input_ports = outlet_new(&x->x_obj, &s_list);
-	x->a_outlist = getbytes(3 * sizeof(t_atom));
-	x->buffer = getbytes(128);
-
-	return (void*)x;
-}
-
-
-
-/********************************************************************************************************
-
-methods for jack-connect
-
-*********************************************************************************************************/
-void jackconnect_getnames(t_jackconnect *x)
-{
-	char* to = x->source;
-	to = (char*)stpcpy( to,x->output_client->s_name);
-	to = (char*)stpcpy(to,":");
-	to = (char*)stpcpy(to,x->output_port->s_name);
-	to = x->destination;
-	to = (char*)stpcpy(to,x->input_client->s_name);
-	to = (char*)stpcpy(to,":");
-	to = (char*)stpcpy(to,x->input_port->s_name);
-
-}
-void jackconnect_connect(t_jackconnect *x)
-{
-
-	if (jc) {
-
-		jackconnect_getnames(x);
-		post("connecting   %s with %s",x->source,x->destination);
-		if (!jack_connect(jc,x->source,x->destination)) {
-			x->connected = 1;
-			outlet_float(x->x_obj.ob_outlet,x->connected);
-		}
-	}
-
-}
-
-void jackconnect_disconnect(t_jackconnect *x)
-{
-	if (jc) {
-
-		jackconnect_getnames(x);
-		if (!jack_disconnect(jc,x->source,x->destination)) {
-			x->connected = 0;
-			outlet_float(x->x_obj.ob_outlet,x->connected);
-		}
-		post("disconnecting   %s with %s",x->source,x->destination);
-	}
-
-}
-
-void jackconnect_toggle(t_jackconnect *x)
-{
-	if (jc) {
-
-		jackconnect_getnames(x);
-		post("toggling connection   %s with %s",x->source,x->destination);
-		if (jack_disconnect(jc,x->source,x->destination)) {
-			jack_connect(jc,x->source,x->destination);
-			x->connected = 1;
-		} else {
-			x->connected = 0;
-		}
-		outlet_float(x->x_obj.ob_outlet,x->connected);
-	}
-}
-
-
-void jackconnect_query(t_jackconnect *x)
-{
-	if (jc) {
-
-		const char **ports;
-		int n=0;
-		jackconnect_getnames(x);
-		
-		post("querying connection   %s with %s",x->source,x->destination);
-		
-		ports = jack_port_get_all_connections(jc,(jack_port_t *)jack_port_by_name(jc,x->source));
-		x->connected = 0;
-		
-		if(ports){
-			while (ports[n]){
-				post("n = %i",n);
-				if (!strcmp(ports[n],x->destination)){
-					x->connected = 1;
-					break;
-				}
-				n++;
-				
-			}
-			free(ports);
-		}
-		outlet_float(x->x_obj.ob_outlet,x->connected);
-	}
-
-
-
-}
-
-
-
-
-
-
-
-void *jackconnect_new(void)
-{
-	t_jackconnect * x = (t_jackconnect *)pd_new(jackconnect_class);
-
-	outlet_new(&x->x_obj, &s_float);
-	symbolinlet_new(&x->x_obj,&x->output_client);
-	symbolinlet_new(&x->x_obj,&x->output_port);
-	symbolinlet_new(&x->x_obj,&x->input_client);
-	symbolinlet_new(&x->x_obj,&x->input_port);
-
-	/* to prevent segfaults put default names in the client/port variables */
-	x->input_client = gensym("none");
-	x->input_port = gensym("none");
-	x->output_client =  gensym("none");
-	x->output_port =  gensym("none");
-	x->connected = 0;
-	jackconnect_getnames(x);
-
-	return (void*)x;
-}
-
-
-/********************************************************************************************************
-
-setup for jack-connect and jack-ports
-
-*********************************************************************************************************/
-
-
-
-void jackx_setup(void)
-{
-
-	post("//////////////////////////////////////////\n"
-	     "/////Jack utility external library///////\n"
-	     "////Gerard van Dongen, gml@xs4all.nl////\n"
-	     "///testing for jack////////////////////\n"
-	     "//////////////////////////////////////");
-
-
-	jc = jack_client_new("jacky-x");
-
-
-
-
-        /*jack ports setup */
-
-	jackports_class = class_new(gensym("jack-ports"),(t_newmethod)jackports_new,0,sizeof(t_jackports),CLASS_DEFAULT,0);
-
-
-
-
-	class_addanything(jackports_class,jackports_input);
-
-	class_sethelpsymbol(jackports_class,gensym("jack-ports"));
-
-	/*jack-connect setup */
-
-
-
-	jackconnect_class = class_new(gensym("jack-connect"),(t_newmethod)jackconnect_new,0,sizeof(t_jackconnect),CLASS_DEFAULT,0);
-
-	class_addmethod(jackconnect_class, (t_method)jackconnect_connect, gensym("connect"),0);
-	class_addmethod(jackconnect_class, (t_method)jackconnect_disconnect, gensym("disconnect"),0);
-	class_addmethod(jackconnect_class, (t_method)jackconnect_toggle, gensym("toggle"),0);
-	class_addmethod(jackconnect_class, (t_method)jackconnect_query, gensym("query"),0);
-	class_addbang(jackconnect_class, (t_method)jackconnect_toggle);
-	class_sethelpsymbol(jackports_class,gensym("jack-connect"));
-}
-
-
-
-
diff --git a/externals/jackx/makefile b/externals/jackx/makefile
deleted file mode 100644
index 333a18dd3e6d1536521f75fe3a4d4be652de5ebf..0000000000000000000000000000000000000000
--- a/externals/jackx/makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-
-CFLAGS = -DPD $(OPT_CFLAGS) -I../../pd/src -Wall -W $(DEBUG_CFLAGS)
-LDFLAGS =  
-LIBS = -lm
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Linux)
-  OS_NAME = linux
-  EXTENSION = pd_linux
-  CFLAGS += -DUNIX -Dunix -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared
-endif
-ifeq ($(UNAME),Darwin)
-  OS_NAME = darwin
-  EXTENSION = pd_darwin
-  CFLAGS += -DMACOSX -DUNIX -Dunix
-  LDFLAGS += -bundle -bundle_loader ../../pd/bin/pd -undefined dynamic_lookup
-endif
-
-all: jackx.$(EXTENSION)
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-	rm -f -- $*.o
-
-clean:
-	-rm -f -- jackx.$(EXTENSION)
-	-rm -f -- jackx.o
diff --git a/externals/k_cext/Makefile b/externals/k_cext/Makefile
deleted file mode 100644
index 1ed4d0e535b8037d1881fe8a02c4d539492eecf5..0000000000000000000000000000000000000000
--- a/externals/k_cext/Makefile
+++ /dev/null
@@ -1,98 +0,0 @@
-NAME=k_cext
-CSYM=k_cext
-
-DIR=k_cext
-
-current: pd_linux
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo /DINCLUDEPATH=\"D:\\sourcescvs\\pd\"
-
-PDNTINCLUDE = /I. /ID:\sourcescvs\pd\src
-PDNTLIB = libc.lib oldnames.lib kernel32.lib "C:\Pure Data\bin\pd.lib"
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c k_cext_win.c
-	link /dll /export:$(CSYM)_setup $*.obj k_cext_win.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux  k_cext.c k_cext.h  k_cext_generatecode.c
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDEPATH=../../src
-LINUXINCLUDE =  -I$(LINUXINCLUDEPATH)
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\" -o k_cext.o -c k_cext.c
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\" -o k_cext_unix.o -c k_cext_unix.c
-	ld --export-dynamic  -shared -o k_cext.pd_linux k_cext.o k_cext_unix.o -lc -lm
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s $(DIR)/$*.pd_linux ..
-	ln -sf $(DIR)/$*.pd_linux ../k_cfunc.pd_linux
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: $(NAME).pd_darwin k_cext.c k_cext.h   k_cext_generatecode.c
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\ -o $*.o -c k_cext.c
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\ -o $*.o -c k_cext_macosx.c
-	cc -bundle -undefined suppress  -flat_namespace -o $*.pd_darwin $*.o 
-	rm -f $*.o ../$*.pd_darwin
-	ln -s $*/$*.pd_darwin ..
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations *~ core
diff --git a/externals/k_cext/README b/externals/k_cext/README
deleted file mode 100644
index e5998169d8aaace729af3b64c06a86a8fb189bfa..0000000000000000000000000000000000000000
--- a/externals/k_cext/README
+++ /dev/null
@@ -1,262 +0,0 @@
-
-
-
-k_cext PD external
-
-
-
-INTRODUCTION
-
-	The k_cext PD external makes you able to program
-	the programming language "C" directly within
-	the PD objects.
-
-	+-------------------------------------------------------+
-	| Which means: You don't need an external text-editor.  |
-	+-------------------------------------------------------+
-
-
-
-WHY USE K_CEXT
-
-	First, the reason for using "C", and not some other programming
-	or scripting language, was simply because it is
-	so easy to compile and link c code inside externals in pd.
-	Because C is probably not the best suited language for this
-	task, except when extreme cpu-efficiency is needed.
-
-	Still, I personally think making small k_cext objects
-	is a lot more comfortable than making large pd sub-patches
-	doing the same things. And thats probably the main reason
-	to use k_cext.
-	
-
-
-
-A SMALL EXAMPLE IN K_CEXT
-
-	The following k_cext object have one inlet and one outlet.
-	What it does, when receiving a value on the inlet, is to
-	send the _previously_ received inlet value to the outlet.
-
-
-	[ k_cext 1 1;
-	  static t_float prev=0;
-	  O(0,prev);
-	  prev=V(0); ]
-
-
-	The "k_cext 1 1" line is the k_cext header. The first "1"
-	means that it has one inlet, and the second "1" means that
-	it has one outlet.
-
-	The "static t_float prev=0;" line declares a variable for the
-	object called "prev". "t_float" means that the type of the variable is
-	a floating-point number. "static" means here that the value
-	for the variable is remembered the next time the object
-	is runned, which is necesarry if we want to send out the
-	previous value sent to the inlet.
-
-	"O(0,prev);" sends the value of "prev" to outlet number 0.
-	"O" is a function.
-
-	"prev=V(0);" stores the value of the current inlet to the
-	variable "prev" for the next time the object is run.
-
-
-
-
-THE SAME EXAMPLE AS A PD SUB-PATCH
-
-
-	The following PD-patch does the same:
-
-	[inlet]
-	|
-	[t f b]
-	 \   /
-	  \ /
-	   X	
-	  / \
-	 /   \
-	[float]
-	|
-	[outlet]
-	
-
-	I guess its a matter of personal taste, but I really don't
-	find the PD-way of sending out a previous value very intuitive.
-
-	And the advantage of using k_cext instead of making
-	PD sub-patches becomes more appearent the larger the tasks are.
-	Look at the help-file, and try to do the same things directly in PD.
-
-
-
-K_CEXT OBJECT
-
-	A k_cext object can be divided into three parts:
-
-	1. Header.
-	2. Variables
-	3. Body.
-
-
-
-K_CEXT HEADER
-
-	The first line in a k_cext header is built up like this:
-
-	"k_cext <num_inlets> <num_outlets> <default inlet values>".
-
-	"k_cext 4 5 1 2 3 4" means that the object has 4 inlets,
-	5 outlets, and the value of V(0) is by default 1, the
-	value of V(1) is by default 2, the value of V(2) is by
-	default 3, and the value of V(3) is by default 4.
-
-	Its optional whether you want to set "default inlet values"
-	or not. If not set, they get the value 0.
-
-
-
-K_CEXT VARIABLES
-
-	There are four types of variables that makes sense using
-	in a k_cext object. These are:
-
-	"int" - integer number.
-	"t_float" - floating point numbers.
-	"INTARRAY" - An array of integer numbers.
-	"FLOATARRAY" - An array of floating point numbers.
-
-	See the help patch for examples of use.
-
-
-
-MACROS / USING THE PD OBJECT AS A TEXT-EDITOR
-
-	Using the pd object as a text-editor is unfortunately
-	a bit limited. But by using some pre-defined macros
-	spesified in the "k_cext.h" file, its not that bad.
-
-	begin/end -
-		The most noticable limitation is probably that you are
-		not able to write { or }. This is solved by
-		using the BEGIN and END macros. Or better; the "DO"
-	        symbol which makes k_cext automaticly insert BEGIN and
-	        END for you. Look at the help-do.pd patch.
-
-	lineshift - 
-		The pd object text editor doesn't understand lineshift
-		directly. Instead you have to use ";" at the end
-		of each line.
-
-	semicolon -
-		If you need to write ";", but dont want the line to end
-		right there, use the "SC" macro instead.
-
-	indentation -
-		The pd object text editor automaticly removes spaces and
-		tabs from the beginning of lines. You can work around this by
-		writing ". " instead. The k_cext external removes all
-		". "'s at the beginning of lines before compiling the code.
-
-	strings -
-		It does not seem to be possible to write "'s anymore in PD.
-		The workaround is to define strings like this: s<thisisastring>s
-
-
-	More macros are defined in the k_cext.h header file.
-
-
-
-OS
-	k_cext runs fine in linux using gcc and in windows using visual C.
-	The macosx code was made by looking at code inside PD, and has never
-	been tested (at least not that I know if). It might work, but probably
-	not. Check out the k_cext_macosx.c file.
-
-
-FAQ
-	Q: I can not get k_cext to work in windows, and I dont have Visual C.
-	A: You need Visual C.
-
-	Q: Where can I get a windows .dll file?
-	A: Since you allready need to have some basic knowledge about C, in
-	   addition to a C compiler, it should not be that hard for you to
-	   compile the .dll file yourself, if you know how to use the k_cext
-	   external. So you have to make it yourself.
-
-	Q: k_func does not work with Visual C.
-	A: Visual C does not have a varargs macro. Send complains to Microsoft.
-
-
-
-CHANGES
-	0.3.0 -> 0.3.1:
-	-Works with VisualC. (0.3.0 didn't):
-	  -Workaround for missing variable number of argument macros in VisualC, (which is not a gcc
-	   extension, by the way, but a part of the iso99 c-standard). (Does not work)
-	  -Workaround for missing stdbool.h file in VisualC. (also a part of the iso99 c-standard)
-	   (Thomas Grill)
-	  -Workaround for missing static <something> <something>[] in VisualC.
-	  -Fixed a variable which was not defined at the beginning of the function. (Thomas Grill)
-	  -Added macros to bang outlet and to access values (Tim Blechman)
-	  -Support for $0 values. (Tim Blechmann)
-	  -Some changes to k_cext to link with functions defined in k_cext, which wasn't possible
-           before. (for Windows). (Tim Blechmann)
-	  -Added code to make it possible to use strings again. See help-strings.pd.
-	  -Fixed horrible bug that sometime caused FLOAT k_cfuncs to crash PD.
-
-	0.2.5 -> 0.3.0:
-	-Added the k_cfunc object. k_cfunc is very similar to k_cext, but instead of being triggered
-	 by getting a bang or value on the first inlet, the k_cfunc-code is run
-	 when being called from another k_cfunc object or a k_cext object. In other words,
-	 its a c function object available for k_cext.
-
-	0.2.4 -> 0.2.5:
-	-Fixed the problem that integer numbers sometimes was converted to
-	 floats before compiling.
-	-Fixed ENDSWITCH macro.
-	-Small internal changes.
-	-Changed the PD subpatch example in the README file to use the trigger
-	 object. The information that was written earlier that you had to
-	 make connections in a certain order, was misinformation. The behaviour
-	 is unspesified according to the spesification. The trigger object fix
-	 such situations. (But if you need to use the trigger-object, its a good
-	 sign that you should rather use k_cext for the operation anyway. My
-	 opinion.)
-	-Removed the windows .dll file. If you are not able to compile up k_cext
-	 yourself, you most probably aren't able to use k_cext either.
-	-Added a "print" message, which prints out the generated c-code with
-	 line-numbers to the terminal.
-	-Prints out the generated c-code with linenumbers if compilation fails.
-	 Makes debugging a lot faster.
-	-Added a SEND macro that takes a symbol string and a number, and sends
-	 a pd message.
-	-Added "DO", which can (and should) be used instead of the BEGIN macro.
-	 DO is not a macro, but a special symbol used by the k_cext
-	 preprocessor to know when to automaticly insert BEGIN and
-	 END based on indentation. Just like Python. :)
-	-Changed the main example patch to use DO instead of BEGIN/END.
-	-Added some more example patches.
-	-Fixed nearly correct indentation for the generated C code.
-
-	0.2.3 -> 0.2.4:
-	-Added a lot of new macros to k_cext.h.
-	-Fixed the help file a bit.
-	-Wrote the README file.
-	-Changed the license for k_cext.h from GPL to LGPL.
-	 (Note, the k_cext external is still GPL)
-	-Some windows code was for some strange reason put
-	 in the macosx file. Fixed.
-	-Added Mac OSX to the Makefile. (Not tested.)
-
-
-CREDITS
-	k_cext is made by Kjetil S. Matheussen 2002/2003.
-	k.s.matheussen@notam02.no
-
-	The windows-port is made by Olaf Matthes.
-	olaf.matthes@gmx.de
-
diff --git a/externals/k_cext/help-do.pd b/externals/k_cext/help-do.pd
deleted file mode 100644
index 1e7420c0a295352dfa8f29bf4be2e0c5213dd9ff..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-do.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 338 168 450 300 10;
-#X floatatom 8 272 5 0 0;
-#X floatatom 136 274 5 0 0;
-#X msg 129 103 1;
-#X floatatom 224 103 5 0 0;
-#X obj 12 158 k_cext 1 2 \; IF I(0)!=1 THEN DO \; . O0(I(0)) \; . O1(I(0)+1)
-\; ELSE \; . O0(-2) \; . O1(-3) \;;
-#X obj 269 141 k_cext 1 2 \; IF I(0)!=1 THEN BEGIN \; . O0(I(0)) \;
-. O1(I(0)+1) \; ELSE \; . O0(-2) \; . O1(-3) \; ENDIF;
-#X floatatom 274 269 5 0 0;
-#X floatatom 400 270 5 0 0;
-#X text 34 65 With DO:;
-#X text 288 65 Without DO:;
-#X text 10 5 DO is not a macro \, but a special symbol used by the
-k_cext preprocessor to know when to automaticly insert BEGIN and END
-based on indentation.;
-#X msg 293 109 print;
-#X msg 10 114 print;
-#X text 32 76 ---------;
-#X text 287 76 ---------;
-#X connect 2 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 3 0 5 0;
-#X connect 4 0 0 0;
-#X connect 4 1 1 0;
-#X connect 5 0 6 0;
-#X connect 5 1 7 0;
-#X connect 11 0 5 0;
-#X connect 12 0 4 0;
diff --git a/externals/k_cext/help-fibonacci.pd b/externals/k_cext/help-fibonacci.pd
deleted file mode 100644
index 38cd1949fc8d5ac1abdf04c0e762217debe2e707..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-fibonacci.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X floatatom 51 143 5 0 0 0 - - -;
-#X floatatom 49 231 10 0 0 0 - - -;
-#X obj 50 174 k_cext 1 1 \; IF I(0)< 30 THEN DO \; . O(0 \, INT_fib(I(0)))
-\;;
-#X text 216 177 Set a limit on 30 \, because of;
-#X text 215 192 the computing time.;
-#X text 43 27 The simplest way to find the fibonacci numbers.;
-#X obj 49 62 k_cfunc INT_fib int n \; IF n<2 THEN DO \; . return n
-\; ELSE \; . return INT_fib(n-1)+INT_fib(n-2) \;;
-#X connect 0 0 2 0;
-#X connect 2 0 1 0;
diff --git a/externals/k_cext/help-gcd.pd b/externals/k_cext/help-gcd.pd
deleted file mode 100644
index 57ddcfdb6f5ef5cdc808d642492373c52bb9cc6e..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-gcd.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 469 87 530 363 10;
-#X msg 14 79 print;
-#X floatatom 114 202 5 0 0 0 - - -;
-#X floatatom 73 201 5 0 0 0 - - -;
-#X msg 98 247 bang;
-#X floatatom 70 327 5 0 0 0 - - -;
-#X text 14 42 Find the greatest common divisor between two numbers.
-;
-#X msg 12 208 print;
-#X obj 73 271 k_cext 2 1 \; O(0 \, INT_gcd(I(0) \, I(1))) \;;
-#X obj 114 225 t b f;
-#X obj 285 174 k_cfunc INT_te \; return INT_te() \;;
-#X msg 283 132 print;
-#X obj 14 112 k_cfunc INT_gcd int a int b \; IF b==0 THEN DO \; . return
-a \; ELSE \; . return INT_gcd(b \, a%b) \;;
-#X connect 0 0 11 0;
-#X connect 1 0 8 0;
-#X connect 2 0 7 0;
-#X connect 3 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 3 0;
-#X connect 8 1 7 1;
-#X connect 10 0 9 0;
diff --git a/externals/k_cext/help-k_cext.pd b/externals/k_cext/help-k_cext.pd
deleted file mode 100644
index 6e1a14d168e082845cbf9fc33a4330f6ab23e95e..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-k_cext.pd
+++ /dev/null
@@ -1,130 +0,0 @@
-#N canvas 231 140 726 710 10;
-#X floatatom 19 52 5 0 0 0 - - -;
-#X floatatom 17 116 5 0 0 0 - - -;
-#X floatatom 238 54 5 0 0 0 - - -;
-#X floatatom 237 117 5 0 0 0 - - -;
-#X floatatom 419 50 5 0 0 0 - - -;
-#X floatatom 419 137 5 0 0 0 - - -;
-#X floatatom 30 216 5 0 0 0 - - -;
-#X floatatom 30 337 5 0 0 0 - - -;
-#X text 416 29 Sends out previous value.;
-#X text 235 33 Adds one.;
-#X floatatom 367 199 5 0 0 0 - - -;
-#X text 26 198 (Gliding average);
-#X floatatom 29 405 5 0 0 0 - - -;
-#X floatatom 29 502 20 0 0 0 - - -;
-#X text 32 356 Calculates the faculty.;
-#X text 139 707 Additional \, read the macros in k_cext.h;
-#X floatatom 373 394 5 0 0 0 - - -;
-#X floatatom 367 501 5 0 0 0 - - -;
-#X floatatom 515 397 5 0 0 0 - - -;
-#X floatatom 516 501 5 0 0 0 - - -;
-#X text 361 366 Divide two numbers.;
-#X text 361 379 Integer modulus in the second outlet.;
-#X floatatom 53 682 10 0 0 0 - - -;
-#X floatatom 176 587 5 0 0 0 - - -;
-#X msg 62 584 bang;
-#X text 16 31 Sends out the input.;
-#X text 10 149 ______________________________________________________
-;
-#X text 12 341 ______________________________________________________
-;
-#X text 226 516 ______________________________________________________
-;
-#X text 231 688 ______________________________________________________
-;
-#X text 20 -9 ______________________________________________________
-;
-#X text 102 -28 k_cext. The c external object for PD by K.Matheussen
-\;;
-#X text 230 -9 ______________________________________________________
-;
-#X text 221 149 ______________________________________________________
-;
-#X text 231 341 ______________________________________________________
-;
-#X text 11 516 ______________________________________________________
-;
-#X text 8 688 ______________________________________________________
-;
-#X obj 323 357 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 334 165 vsl 8 185 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 183 7 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X obj 381 8 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X text 201 9 2;
-#X text 398 10 3;
-#X text 16 9 1;
-#X text 12 166 4;
-#X text 352 165 5;
-#X text 13 356 6;
-#X text 338 357 7;
-#X text 22 535 8;
-#X obj 17 75 k_cext 1 1 \; O0(V(0)) \;;
-#X obj 237 76 k_cext 1 1 \; O0(V(0) + 1) \;;
-#X obj 422 72 k_cext 1 1 \; static t_float a=0 \; O0(a) \; a=V(0) \;
-;
-#X obj 30 240 k_cext 1 1 \; static FLOATARRAY(a \, 5) \; static int
-p=0 \; a[p%5]=V(0) \; p++ \; O0( (a[0]+a[1]+a[2]+a[3]+a[4])/5 ) \;
-;
-#X obj 133 681 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 199 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 275 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X floatatom 289 588 5 0 0 0 - - -;
-#X floatatom 359 338 5 0 0 0 - - -;
-#X floatatom 437 337 5 0 0 0 - - -;
-#X floatatom 530 337 5 0 0 0 - - -;
-#X text 371 174 Some modulo operations;
-#X obj 460 530 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X text 478 535 9 Start mozilla;
-#X msg 479 566 bang;
-#X text 43 534 Sends out four random numbers between the value of inlet
-1 and inlet 2 Default values for the inlets are set by argument 3 and
-4 (5 and 10).;
-#X text 28 183 Sends out the average of the 5 last values.;
-#X text 33 380 and the SC macro.;
-#X text 33 368 Also demonstrates the use of the FOR;
-#X obj 369 223 k_cext 1 3 \; int v=I(0) \; IF !(v%3) THEN DO \; . O0(v)
-\; ELIF !(v%2) THEN DO \; . O1(v) \; ELSE \; . O2(v) \;;
-#X obj 29 431 k_cext 1 1 \; int out=1 \, i \; FOR i=2 SC i<=I(0) SC
-i++ THEN DO \; . out*=i \; O0(out) \;;
-#X obj 62 608 k_cext 3 4 0 5 10 \; int i \; RANGE(i \, 0 \, 4) DO \;
-. O(i \, (int)BETWEEN(I(1) \, I(2))) \;;
-#X obj 377 426 k_cext 2 2 \; IF I(1)!=0 THEN DO \; . O1(I(0) % I(1))
-\; O0(V(0) / V(1)) \;;
-#X msg 446 198 print;
-#X obj 479 603 k_cext 1 0 \; system( s<mozilla&>s ) \;;
-#X connect 0 0 49 0;
-#X connect 2 0 50 0;
-#X connect 4 0 51 0;
-#X connect 6 0 52 0;
-#X connect 10 0 68 0;
-#X connect 12 0 69 0;
-#X connect 16 0 71 0;
-#X connect 18 0 71 1;
-#X connect 23 0 70 1;
-#X connect 24 0 70 0;
-#X connect 49 0 1 0;
-#X connect 50 0 3 0;
-#X connect 51 0 5 0;
-#X connect 52 0 7 0;
-#X connect 56 0 70 2;
-#X connect 63 0 73 0;
-#X connect 68 0 57 0;
-#X connect 68 1 58 0;
-#X connect 68 2 59 0;
-#X connect 69 0 13 0;
-#X connect 70 0 22 0;
-#X connect 70 1 53 0;
-#X connect 70 2 54 0;
-#X connect 70 3 55 0;
-#X connect 71 0 17 0;
-#X connect 71 1 19 0;
-#X connect 72 0 68 0;
diff --git a/externals/k_cext/help-k_cext2.pd b/externals/k_cext/help-k_cext2.pd
deleted file mode 100644
index 3ae42d39a8c063814284f6d0b4df722989a9386a..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-k_cext2.pd
+++ /dev/null
@@ -1,128 +0,0 @@
-#N canvas 325 15 782 775 10;
-#X floatatom 19 52 5 0 0 0 - - -;
-#X floatatom 17 116 5 0 0 0 - - -;
-#X floatatom 238 54 5 0 0 0 - - -;
-#X floatatom 237 117 5 0 0 0 - - -;
-#X floatatom 419 50 5 0 0 0 - - -;
-#X floatatom 419 137 5 0 0 0 - - -;
-#X floatatom 30 216 5 0 0 0 - - -;
-#X floatatom 30 337 5 0 0 0 - - -;
-#X text 416 29 Sends out previous value.;
-#X text 235 33 Adds one.;
-#X floatatom 539 178 5 0 0 0 - - -;
-#X text 26 198 (Gliding average);
-#X floatatom 29 405 5 0 0 0 - - -;
-#X floatatom 29 502 20 0 0 0 - - -;
-#X text 32 356 Calculates the faculty.;
-#X text 139 707 Additional \, read the macros in k_cext.h;
-#X floatatom 373 394 5 0 0 0 - - -;
-#X floatatom 367 501 5 0 0 0 - - -;
-#X floatatom 515 397 5 0 0 0 - - -;
-#X floatatom 516 501 5 0 0 0 - - -;
-#X text 361 366 Divide two numbers.;
-#X text 361 379 Integer modulus in the second outlet.;
-#X floatatom 53 682 10 0 0 0 - - -;
-#X floatatom 176 587 5 0 0 0 - - -;
-#X msg 62 584 bang;
-#X text 16 31 Sends out the input.;
-#X text 10 149 ______________________________________________________
-;
-#X text 12 341 ______________________________________________________
-;
-#X text 226 516 ______________________________________________________
-;
-#X text 231 688 ______________________________________________________
-;
-#X text 20 -9 ______________________________________________________
-;
-#X text 102 -28 k_cext. The c external object for PD by K.Matheussen
-\;;
-#X text 230 -9 ______________________________________________________
-;
-#X text 221 149 ______________________________________________________
-;
-#X text 231 341 ______________________________________________________
-;
-#X text 11 516 ______________________________________________________
-;
-#X text 8 688 ______________________________________________________
-;
-#X obj 323 357 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 334 165 vsl 8 185 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 183 7 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X obj 381 8 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X text 201 9 2;
-#X text 398 10 3;
-#X text 16 9 1;
-#X text 12 166 4;
-#X text 352 165 5;
-#X text 13 356 6;
-#X text 338 357 7;
-#X text 22 535 8;
-#X obj 17 75 k_cext 1 1 \; O0(V(0)) \;;
-#X obj 237 76 k_cext 1 1 \; O0(V(0) + 1) \;;
-#X obj 422 72 k_cext 1 1 \; static t_float a=0 \; O0(a) \; a=V(0) \;
-;
-#X obj 30 240 k_cext 1 1 \; static FLOATARRAY(a \, 5) \; static int
-p=0 \; a[p%5]=V(0) \; p++ \; O0( (a[0]+a[1]+a[2]+a[3]+a[4])/5 ) \;
-;
-#X obj 133 681 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 199 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 275 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X floatatom 289 588 5 0 0 0 - - -;
-#X floatatom 359 338 5 0 0 0 - - -;
-#X floatatom 437 337 5 0 0 0 - - -;
-#X floatatom 530 337 5 0 0 0 - - -;
-#X text 371 174 Some modulo operations;
-#X obj 460 530 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X text 478 535 9 Start mozilla;
-#X msg 479 566 bang;
-#X text 43 534 Sends out four random numbers between the value of inlet
-1 and inlet 2 Default values for the inlets are set by argument 3 and
-4 (5 and 10).;
-#X text 28 183 Sends out the average of the 5 last values.;
-#X text 33 380 and the SC macro.;
-#X text 33 368 Also demonstrates the use of the FOR;
-#X obj 367 202 k_cext 1 3 \; int v=I(0) \; IF !(v%3) THEN DO \; . O0(v)
-\; ELIF !(v%2) THEN DO \; . O1(v) \; ELSE \; . O2(v) \;;
-#X obj 29 431 k_cext 1 1 \; int out=1 \, i \; FOR i=2 SC i<=I(0) SC
-i++ THEN DO \; . out*=i \; O0(out) \;;
-#X obj 62 608 k_cext 3 4 0 5 10 \; int i \; RANGE(i \, 0 \, 4) DO \;
-. O(i \, (int)BETWEEN(I(1) \, I(2))) \;;
-#X obj 377 426 k_cext 2 2 \; IF I(1)!=0 THEN DO \; . O1(I(0) % I(1))
-\; O0(V(0) / V(1)) \;;
-#X obj 479 602 k_cext 1 0 \; system(s<mozilla&>s) \;;
-#X connect 0 0 49 0;
-#X connect 2 0 50 0;
-#X connect 4 0 51 0;
-#X connect 6 0 52 0;
-#X connect 10 0 68 0;
-#X connect 12 0 69 0;
-#X connect 16 0 71 0;
-#X connect 18 0 71 1;
-#X connect 23 0 70 1;
-#X connect 24 0 70 0;
-#X connect 49 0 1 0;
-#X connect 50 0 3 0;
-#X connect 51 0 5 0;
-#X connect 52 0 7 0;
-#X connect 56 0 70 2;
-#X connect 63 0 72 0;
-#X connect 68 0 57 0;
-#X connect 68 1 58 0;
-#X connect 68 2 59 0;
-#X connect 69 0 13 0;
-#X connect 70 0 22 0;
-#X connect 70 1 53 0;
-#X connect 70 2 54 0;
-#X connect 70 3 55 0;
-#X connect 71 0 17 0;
-#X connect 71 1 19 0;
diff --git a/externals/k_cext/help-k_cfunc.pd b/externals/k_cext/help-k_cfunc.pd
deleted file mode 100644
index 390b46cc4c7cf71fa65791564058b8af2cedd30f..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-k_cfunc.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 583 347 825 399 10;
-#X obj 31 310 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 30 256;
-#X obj 259 312 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 20 256;
-#X floatatom 33 110 5 0 0 0 - - -;
-#X floatatom 217 107 5 0 0 0 - - -;
-#X floatatom 30 182 5 0 0 0 - - -;
-#X obj 32 140 k_cext 2 1 \; O(0 \, INT_func(I(0) \, I(1))) \;;
-#X obj 31 234 k_cfunc 0 2 INT_func int a int b \; O(0 \, a) \; O(1
-\, b) \; return a+b \;;
-#X obj 404 315 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 32 256;
-#X obj 632 317 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 12 256;
-#X floatatom 406 115 5 0 0 0 - - -;
-#X floatatom 590 112 5 0 0 0 - - -;
-#X floatatom 403 187 5 0 0 0 - - -;
-#X obj 405 144 k_cext 2 1 \; O(0 \, FLOAT_func(V(0) \, V(1))) \;;
-#X obj 404 239 k_cfunc 0 2 FLOAT_func float a float b \; O(0 \, a)
-\; O(1 \, b) \; return a+b \;;
-#X text 148 25 Demonstrating the use of two functions to add integer
-numbers. The first one does an integer operation \, the second one
-does a floating point operation.;
-#X connect 2 0 5 0;
-#X connect 3 0 5 1;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 6 1 1 0;
-#X connect 9 0 12 0;
-#X connect 10 0 12 1;
-#X connect 12 0 11 0;
-#X connect 13 0 7 0;
-#X connect 13 1 8 0;
diff --git a/externals/k_cext/help-markov.pd b/externals/k_cext/help-markov.pd
deleted file mode 100644
index b0d45a9b00027c3d61c02ef25788868072510478..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-markov.pd
+++ /dev/null
@@ -1,66 +0,0 @@
-#N canvas 0 107 907 643 10;
-#X obj 244 40 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X obj 283 31 r state;
-#X obj 261 66 f 1;
-#X floatatom 312 55 3 0 0 0 - - -;
-#X text 227 19 STEP;
-#X msg 371 52 \; state 1;
-#X text 371 32 reset;
-#X obj 33 25 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X obj 72 16 r state;
-#X obj 50 51 f 1;
-#X floatatom 101 40 3 0 0 0 - - -;
-#X text 16 4 STEP;
-#X obj 26 511 s state;
-#X text 244 391 documentation patches.;
-#X text 245 375 chain example in the PD;
-#X msg 155 65 print;
-#X msg 200 66 print;
-#X obj 26 100 k_cext 1 1 \; int state=I(0) \; int random=RANDOM(100)
-\; \; SWITCH state THEN DO \; . case 1: \; . . IF random<30 THEN DO
-\; . . . state=1 \; . . ELIF random<60 THEN DO \; . . . state=2 \;
-. . ELSE \; . . . state=3 \; . . break \; . case 2: \; . . IF random<10
-THEN DO \; . . . state=1 \; . . ELIF random<60 THEN DO \; . . . state=2
-\; . . ELSE \; . . . state=3 \; . . break \; . case 3: \; . . IF random<70
-THEN DO \; . . . state=1 \; . . ELIF random<80 THEN DO \; . . . state=2
-\; . . ELSE \; . . . state=3 \; O0(state) \;;
-#X obj 561 300 k_cfunc INT_markov int a int b \; int random=RANDOM(100)
-\; IF random<a THEN DO \; . return 1 \; ELIF random<b THEN DO \; .
-return 2 \; ELSE \; . return 3 \;;
-#X obj 574 46 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X obj 613 37 r state;
-#X obj 591 72 f 1;
-#X floatatom 642 61 3 0 0 0 - - -;
-#X text 557 25 STEP;
-#X msg 530 72 print;
-#X text 237 29 comment;
-#X text 244 360 Three ways to implement the markov;
-#X msg 561 259 print;
-#X obj 260 103 k_cext 1 0 \; \; int state=I(0) \; int s1[3]=BEGIN 30
-\, 10 \, 70 END \; int s2[3]=BEGIN 60 \, 60 \, 80 END \; int random=RANDOM(100)
-\; \; IF random < s1[state] THEN DO \; . SEND(state \, 1) \; ELIF random
-< s2[state] THEN DO \; . SEND(state \, 2) \; ELSE \; . SEND(state \,
-3) \;;
-#X obj 557 115 k_cext 1 0 \; \; int s1[3]=BEGIN 30 \, 10 \, 70 END
-\; int s2[3]=BEGIN 60 \, 60 \, 80 END \; SEND(state \, INT_markov(s1[I(0)]
-\, s2[I(0)])) \;;
-#X connect 0 0 2 0;
-#X connect 1 0 2 1;
-#X connect 1 0 3 0;
-#X connect 2 0 28 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 1;
-#X connect 8 0 10 0;
-#X connect 9 0 17 0;
-#X connect 15 0 17 0;
-#X connect 16 0 28 0;
-#X connect 17 0 12 0;
-#X connect 19 0 21 0;
-#X connect 20 0 21 1;
-#X connect 20 0 22 0;
-#X connect 21 0 29 0;
-#X connect 24 0 29 0;
-#X connect 27 0 18 0;
diff --git a/externals/k_cext/help-rangeifelifelse.pd b/externals/k_cext/help-rangeifelifelse.pd
deleted file mode 100644
index df694dd90617a76d136aa9efa17b38bd2b975bb4..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-rangeifelifelse.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 321 226 450 300 10;
-#X floatatom 102 55 5 0 0;
-#X floatatom 112 275 5 0 0;
-#X floatatom 172 276 5 0 0;
-#X floatatom 218 278 5 0 0;
-#X floatatom 273 280 5 0 0;
-#X obj 160 39 k_cext 1 4 \; \; int lokke \; int a=5 \; \; RANGE(lokke
-\, 0 \, 4) DO \; . O(lokke \, I(0)) \; . IF I(0)==0 THEN DO \; . .
-O(1 \, 2) \; . ELIF I(0)==1 THEN DO \; . . O(2 \, 3) \; . ELSE \; .
-. O(3 \, 4) \; . . IF a==2 THEN DO \; . . . O(3 \, 23) \; . . . IF
-a==3 THEN DO \; . . . . O(2 \, 4) \;;
-#X msg 163 15 print;
-#X connect 0 0 5 0;
-#X connect 5 0 1 0;
-#X connect 5 1 2 0;
-#X connect 5 2 3 0;
-#X connect 5 3 4 0;
-#X connect 6 0 5 0;
diff --git a/externals/k_cext/help-send.pd b/externals/k_cext/help-send.pd
deleted file mode 100644
index ee7d0a982451ff6f4e8cc36894f3eb83475c0f43..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-send.pd
+++ /dev/null
@@ -1,29 +0,0 @@
-#N canvas 488 163 708 409 10;
-#X floatatom 96 329 5 0 0 0 - - -;
-#X floatatom 39 199 5 0 0 0 - - -;
-#X floatatom 149 207 5 0 0 0 - - -;
-#X text 28 15 The SEND macro is just as efficient;
-#X text 30 29 as the send object \, and is defined like this:;
-#X obj 42 248 send a_sym;
-#X obj 96 297 r a_sym;
-#X floatatom 161 331 5 0 0 0 - - -;
-#X obj 161 299 r a_sym2;
-#X floatatom 384 235 5 0 0 0 - - -;
-#X text 379 202 Warning \, the following code will not do;
-#X msg 321 182 print;
-#X text 379 215 as one might expect:;
-#X text 32 59 #define SEND(symname \, val) do BEGIN static t_symbol
-*k_cext_internal_symbol=NULL SC if(k_cext_internal_symbol==NULL) k_cext_internal_symbol=gensym(symname)
-SC if(k_cext_internal_symbol->s_thing) pd_float(k_cext_internal_symbol->s_thing
-\, val) SC END while(0);
-#X obj 141 235 k_cext 1 0 \; SEND(a_sym \, I(0)) \;;
-#X obj 382 261 k_cext 1 0 \; char *syms[2]=BEGIN s<a_sym>s \, s<a_sym2>s
-END \; static int s=0 \; IF s==0 THEN DO \; . s=1 \; ELSE \; . s=0
-\; SEN(syms[s] \, s+5) \;;
-#X text 381 383 (The SEN macro expect real strings.);
-#X connect 1 0 5 0;
-#X connect 2 0 14 0;
-#X connect 6 0 0 0;
-#X connect 8 0 7 0;
-#X connect 9 0 15 0;
-#X connect 11 0 15 0;
diff --git a/externals/k_cext/help-send2.pd b/externals/k_cext/help-send2.pd
deleted file mode 100644
index 7d8cae7a5aa571a712c2230e8f8d83bfc3dafdf7..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-send2.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 427 167 481 300 10;
-#X obj 8 75 k_cext 1 0 \; SENDFLOAT(" \$0-receive" \, 42) \; SENDSYMBOL("
-\$0-receive" \, "hello_world") \;;
-#X obj 8 53 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1
-;
-#X obj 9 134 r \$0-receive;
-#X obj 9 160 route float symbol;
-#X floatatom 9 184 5 0 0 0 - - -;
-#X symbolatom 78 205 15 0 0 0 - - -;
-#X text 4 15 SENDFLOAT sends a float \, SENDSYMBOL sends a symbol:
-;
-#X text 4 233 leading spaces in the receive name will be dropped ...
-this makes $N arguments usable (as long as no receive names with leading
-spaces will be allowed);
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
diff --git a/externals/k_cext/help-sort.pd b/externals/k_cext/help-sort.pd
deleted file mode 100644
index 018fbb3eb29df1e940b29f35bd5fd6c87423bb8e..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-sort.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 149 460 622 320 10;
-#X floatatom 20 82 5 0 0 0 - - -;
-#X floatatom 20 267 5 0 0 0 - - -;
-#X text 14 24 Sends out the largest of;
-#X obj 20 111 k_cext 1 1 \; static FLOATARRAY(a \, 5) \; FLOATARRAY(a2
-\, 5) \; static int p=0 \; int i \; a[p%5]=V(0) \; p++ \; RANGE(i \,
-0 \, 5) a2[i]=a[i] \; FLOATSORT(a2 \, 5) \; O(0 \, a2[4]) \;;
-#X text 14 41 the five last float numbers.;
-#X floatatom 318 80 5 0 0 0 - - -;
-#X floatatom 318 265 5 0 0 0 - - -;
-#X text 312 22 Sends out the largest of;
-#X obj 318 109 k_cext 1 1 \; static INTARRAY(a \, 5) \; INTARRAY(a2
-\, 5) \; static int p=0 \; int i \; a[p%5]=I(0) \; p++ \; RANGE(i \,
-0 \, 5) a2[i]=a[i] \; INTSORT(a2 \, 5) \; O(0 \, a2[4]) \;;
-#X text 312 39 the five last integer numbers.;
-#X connect 0 0 3 0;
-#X connect 3 0 1 0;
-#X connect 5 0 8 0;
-#X connect 8 0 6 0;
diff --git a/externals/k_cext/help-string.pd b/externals/k_cext/help-string.pd
deleted file mode 100644
index aa97cf1bc47ee4df0e19f2c61f35b0d5d84ff0a3..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-string.pd
+++ /dev/null
@@ -1,11 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X msg 31 84 bang;
-#X obj 30 125 k_cext \; system(s<echo something>s) \;;
-#X text 26 40 Strings are started with s< and ended with >s;
-#X obj 248 125 k_cext \; SEN(s<ai>s \, 1) \;;
-#X obj 31 200 r ai;
-#X obj 33 232 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 4 0 5 0;
diff --git a/externals/k_cext/help-value.pd b/externals/k_cext/help-value.pd
deleted file mode 100644
index ca7c2a424516fed6a0f58fd0150c697f6e2ed58d..0000000000000000000000000000000000000000
--- a/externals/k_cext/help-value.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 63 54 481 300 10;
-#X obj 12 62 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 12 85 t b b;
-#X obj 12 159 value \$0-count;
-#X floatatom 12 183 5 0 0 0 - - -;
-#X obj 47 108 k_cext 1 0 \; float f = VALUE(" \$0-count") \; SETVALUE("
-\$0-count" \, f+1) \;;
-#X text 70 86 yet another counter;
-#X text 8 17 VALUE returns the content of a value object \, SETVALUE
-sets the content of a value object:;
-#X text 4 218 leading spaces in the receive name will be dropped ...
-this makes $N arguments usable (as long as no receive names with leading
-spaces will be allowed);
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 1 4 0;
-#X connect 2 0 3 0;
diff --git a/externals/k_cext/k_cext.c b/externals/k_cext/k_cext.c
deleted file mode 100644
index a96030266e43537c5bdb1fa572c3da4821428df6..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/* --------------------------- k_cext  ----------------------------------- */
-/*                                                                              */
-/* Program c directly within a pd object. */
-/*                                                                              */
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-
-#include "m_pd.h"
-#include "k_cext.h"
-
-#include <ctype.h>
-
-static char *version = 
-"k_cext v0.3.1, written by Kjetil S. Matheussen, k.s.matheussen@notam02.no\n"
-"Windows-port by Olaf Matthes. Contributors: Thomas Grill and Tim Blechmann.";
-
-int instancenumber=0; // Can not be static because of the win-port.
-
-
-static t_class *k_cext_class;
-static t_class *k_cfunc_class;
-
-int k_cext_intcompare(const void *p1, const void *p2)
-{
-  int i = *((int *)p1);
-  int j = *((int *)p2);
-  
-  if (i > j)
-    return (1);
-  if (i < j)
-    return (-1);
-  return (0);
-}
-
-int k_cext_floatcompare(const void *p1, const void *p2)
-{
-  float i = *((int *)p1);
-  float j = *((int *)p2);
-  
-  if (i > j)
-    return (1);
-  if (i < j)
-    return (-1);
-  return (0);
-}
-
-
-static void k_cext_print(t_k_cext *x){
-  FILE *printfile;
-  char name[500];
-  int lokke;
-  char temp[500];
-
-  sprintf(name,"%s.c",x->filename);
-
-  printfile=fopen(name,"r");
-  post("------------------------------------------");
-  for(lokke=1;;lokke++){
-    char temp2[500];
-    int c;
-    if((c=fgetc(printfile))==EOF) break;
-    ungetc(c,printfile);
-    fgets(temp,400,printfile);
-    sprintf(temp2,"%3d %s",lokke,temp);
-    temp2[strlen(temp2)-1]=0;
-    post(temp2);
-  }
-  fclose(printfile);
-  post("------------------------------------------");
-
-}
-
-static void k_cext_bang(t_k_cext *x)
-{
-  /* Fixme, for some reason, k_cfunc's float method points to k_cext_float
-     instead of k_cfunc_float.
-     As a workaround, there is this x->iscext==true test below. */
-  if(x->k_cext_process!=NULL && x->iscext==true)
-    (*x->k_cext_process)(x);
-}
-
-
-static void k_cext_float(t_k_cext *x, t_floatarg f)
-{
-  x->values[0]=f;
-
-  k_cext_bang(x);
-}
-
-static void k_cfunc_float(t_k_cext *x, t_floatarg f)
-{
-  post("k_cfunc_float");
-  x->values[0]=f;
-}
-
-
-#include "k_cext_funchandler.c"
-
-
-struct k_cext_init{
-  int indentation;
-  int set_indentation[500]; // Very unlikely that anyone wants to indent more than 500 levels.
-  int thisisanelifline;
-  FILE *file;
-  char name[500];
-  char funcname[500];
-
-  int num_intfuncs;
-  int num_floatfuncs;
-
-  char intfuncnames[50000]; // Max functionname length=50, max number of functions=1000.
-  char floatfuncnames[50000];
-
-  int doinitpos1;
-  int doinitpos2;
-
-  /* The rest is used by k_cfunc objects. */
-  bool cfuncnamefound;
-  char cfuncname[200];
-  int cfuncrettype; //0=int, 1=float
-  int numargs;
-  char cfuncargtypes[50000];
-  char cfuncargnames[50000];
-};
-
-
-
-
-/******************************/
-/* Set up inlets and outlets. */
-/******************************/
-static void k_cext_makeinletsandoutlets(t_k_cext *x,t_int argc,t_atom* argv){
-  int lokke;
-
-  if(argc<2 || argv[1].a_type!=A_FLOAT){
-    x->num_outs=0;
-  }else{
-    x->num_outs=atom_getfloatarg(1,argc,argv);    
-    x->outlets=calloc(sizeof(t_outlet*),x->num_outs);
-  }
-
-  if(argc<1  || argv[1].a_type!=A_FLOAT){
-    x->num_ins=1;
-  }else{
-    x->num_ins=atom_getfloatarg(0,argc,argv);    
-  }
-
-  x->inlets=calloc(sizeof(t_inlet*),x->num_ins);
-  x->values=calloc(sizeof(t_float),x->num_ins);
-
-  for(lokke=1;lokke<x->num_ins;lokke++){
-    x->inlets[lokke-1] = floatinlet_new(&x->x_ob, &x->values[lokke]);
-  }
-
-  for(lokke=0;lokke<x->num_outs;lokke++){
-    x->outlets[lokke] = outlet_new(&x->x_ob, gensym("float"));
-  }
-
-}
-
-
-/******************************/
-/* Set default values for the inlets. */
-/******************************/
-static int k_cext_setdefaultvalues(t_k_cext *x,t_int argc, t_atom* argv){
-  int i;
-  for(i=2;i<argc;i++){
-    char string[500];
-    switch(argv[i].a_type){
-    case A_FLOAT:
-      x->values[i-2]=atom_getfloatarg(i,argc,argv);
-      break;
-    case A_SYMBOL:
-      return i;
-    }
-  }
-  return i;
-}
-
-
-
-#include "k_cext_generatecode.c"
-
-
-
-static void *k_cextandfunc_new(t_symbol *s, t_int argc, t_atom* argv,bool iscext)
-{
-  char temp[500];
-  int i;
-
-  struct k_cext_init k;
-
-  t_k_cext *x = (t_k_cext *)pd_new(k_cext_class);
-  x->iscext=iscext;
-
-  memset(&k,0,sizeof(struct k_cext_init));
-
-  k_cext_makeinletsandoutlets(x,argc,argv);
-
-  if(argv[2].a_type==A_FLOAT){
-    i=k_cext_setdefaultvalues(x,argc,argv);
-  }else{
-    if(argv[1].a_type==A_FLOAT){
-      i=2;
-    }else{
-      if(argv[0].a_type==A_FLOAT){
-	i=1;
-      }else{
-	i=0;
-      }
-    }
-  }
-
-  k_sys_mktempfilename(x->filename);
-  sprintf(k.name,"%s",x->filename);
-  k.name[strlen(k.name)+2]=0;
-  k.name[strlen(k.name)+1]='c';
-  k.name[strlen(k.name)]='.';
-
-  k.file=fopen(k.name,"w");
-  //  post("name: %s\n",name)
-
-  k_sys_writeincludes(k.file);
-
-
-
-  k_cext_generatecode(x,argc,argv,i,&k);
-
-
-
-  /*************************************/
-  /* Compile and link                  */
-  /*************************************/
-
-  k_sys_makecompilestring(temp,k.name,k.funcname);
-  post("Compiling %s",k.name);
-  system(temp);
-
-  sprintf(k.name,"%s.o",k.name);
-
-  if(!k_sys_getprocessfunction(x,k.funcname,k.name)){
-    FILE *printfile;
-    post("Error in loader!");
-    x->k_cext_process=NULL;
-    k_cext_print(x);
-    return NULL;
-  }
-
-
-  if(x->iscext==false){
-    if(k.cfuncrettype==0){
-      k_cext_addintfunc(k.cfuncname,x);
-    }else{
-      k_cext_addfloatfunc(k.cfuncname,x);
-    }
-  }
-
-  return (void *)x;
-}
-
-static void *k_cext_new(t_symbol *s, t_int argc, t_atom* argv){
-  return k_cextandfunc_new(s,argc,argv,true);
-}
-
-static void *k_cfunc_new(t_symbol *s, t_int argc, t_atom* argv){
-  return k_cextandfunc_new(s,argc,argv,false);
-}
-
-
-
-static void k_cext_free(t_k_cext *x)
-{
-  char temp[500];
-
-  if(x->iscext==false){
-    k_cext_setdummy(x->k_cext_process);
-  }
-
-  if(x->handle!=NULL){
-    k_sys_freehandle(x);
-  }
-
-  sprintf(temp,"%s.c",x->filename);
-  k_sys_deletefile(temp);
-
-  free(x->inlets);
-  free(x->outlets);
-  free(x->values);
-}
-
-
-
-
-void k_cext_setup(void)
-{
-
-  k_sys_init();
-
-  /* k_cext */
-  k_cext_class = class_new(gensym("k_cext"), (t_newmethod)k_cext_new,
-			   (t_method)k_cext_free, sizeof(t_k_cext), 0, A_GIMME, 0);
-  class_addfloat(k_cext_class, k_cext_float);
-  class_addbang(k_cext_class, (t_method)k_cext_bang);
-  class_addmethod(k_cext_class, (t_method)k_cext_print, gensym("print"), 0);
-  class_sethelpsymbol(k_cext_class, gensym("help-k_cext.pd"));
-
-  /* k_cfunc */
-  k_cfunc_class = class_new(gensym("k_cfunc"), (t_newmethod)k_cfunc_new,
-			   (t_method)k_cext_free, sizeof(t_k_cext), 0, A_GIMME, 0);
-
-  // This does not work! Why? (Have to make workaround-code in k_cext_bang)
-  class_addfloat(k_cfunc_class, k_cfunc_float);
-  class_addmethod(k_cfunc_class, (t_method)k_cext_print, gensym("print"), 0);
-  class_sethelpsymbol(k_cfunc_class, gensym("help-k_cfunc.pd")); 
-
- 
-  post(version);
-}
-
-void k_cfunc_setup(void){
-  k_cext_setup();
-}
-
-/* TB: for accessing $0 values */
-t_float k_cext_getvalue(char c[])
-{
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    return (*(value_get(gensym(c))));
-}
-
-int k_cext_setvalue(char c[],float f)
-{
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    return value_setfloat(gensym(c),f);
-}
-
-void k_cext_sendfloat (char c[],float f)
-{
-    static t_symbol *k_cext_internal_symbol=NULL;
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    if(k_cext_internal_symbol==NULL) k_cext_internal_symbol=gensym(c);
-    if(k_cext_internal_symbol->s_thing) 
-	pd_float(k_cext_internal_symbol->s_thing, f); 
-}
-
-void k_cext_sendsymbol (char c[],char s[])
-{
-    static t_symbol *k_cext_internal_symbol=NULL;
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    if(k_cext_internal_symbol==NULL) 
-	k_cext_internal_symbol=gensym(c);
-    if(k_cext_internal_symbol->s_thing) 
-	pd_symbol(k_cext_internal_symbol->s_thing, gensym(s)); 
-}
diff --git a/externals/k_cext/k_cext.h b/externals/k_cext/k_cext.h
deleted file mode 100644
index 0dea39feaac3bf4dcfd1cedca284529d62bbce9b..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- *   k_cext.h copyright 2002 Kjetil S. Matheussen.
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as
- *   published by the Free Software Foundation; either version 2.1 of
- *   the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-//#include <stdbool.h>
-#ifdef _MSC_VER
-typedef int bool;
-#define true 1
-#define false 0
-#else
-#include <stdbool.h>
-#endif
-
-#include <stdarg.h>
-
-#ifdef MSW
-#define K_EXTERN __declspec(dllexport) extern
-#else
-#define K_EXTERN extern
-#endif
-
-typedef struct k_cext
-{
-  t_object x_ob;
-  t_float *values;
-
-  int num_ins;
-  int num_outs;
-
-  t_inlet **inlets;
-  t_outlet **outlets;
-
-  void (*k_cext_process)(struct k_cext *x);
-  void *handle;
-
-  char filename[40];
-
-  bool iscext;
-
-  void *userdata; // This attribute /can/ be used by a patch, but using "static" is much cleaner, so please don't.
-} t_k_cext;
-
-
-/* The following functions are used by intsort and floatsort */
-K_EXTERN int k_cext_intcompare(const void *p1, const void *p2);
-K_EXTERN int k_cext_floatcompare(const void *p1, const void *p2);
-
-
-/* The following functions are system dependant, and called internally from k_cext only.
-   All ports must implement these functions.
- */
-
-K_EXTERN int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name);
-K_EXTERN void k_sys_freehandle(t_k_cext *x);
-K_EXTERN void k_sys_mktempfilename(char *to);
-K_EXTERN void k_sys_writeincludes(FILE *file);
-K_EXTERN void k_sys_makecompilestring(char *to,char *name,char *funcname);
-K_EXTERN void k_sys_deletefile(char *name);
-K_EXTERN void k_sys_init(void);
-
-/* TB value accessing / send functions */
-K_EXTERN t_float k_cext_getvalue(char c[]);
-K_EXTERN int k_cext_setvalue(char c[],float f);
-K_EXTERN void k_cext_sendfloat (char c[],float f);
-K_EXTERN void k_cext_sendsymbol (char c[],char s[]);
-
-
-#define V(a) (x->values[a])
-#define I(a) ((int)(x->values[a]))
-
-
-#define O(a,b) outlet_float(x->outlets[a],b)
-
-#define O0(b) O(0,b)
-#define O1(b) O(1,b)
-#define O2(b) O(2,b)
-#define O3(b) O(3,b)
-#define O4(b) O(4,b)
-#define O5(b) O(5,b)
-#define O6(b) O(6,b)
-
-#define BETWEEN(dasmin,dasmax) ((dasmin) + (((float)(dasmax-(dasmin)))*rand())/(RAND_MAX+1.0))
-#define RANDOM(dasmax) BETWEEN(0,dasmax)
-
-#define SEND(symname,val) \
-do{ \
-  static t_symbol *k_cext_internal_symbol=NULL; \
-  if(k_cext_internal_symbol==NULL) k_cext_internal_symbol=gensym(symname); \
-  if(k_cext_internal_symbol->s_thing) pd_float(k_cext_internal_symbol->s_thing, val);  \
-}while(0)
-
-#define SEN(symname,val) SEND(symname,val)
-
-#define INTARRAY(name,len) int name[len]={0}
-#define FLOATARRAY(name,len) t_float name[len]={0.0f}
-
-#define INTSORT(a,b) qsort((void *)(a),b, sizeof (int), k_cext_intcompare);
-#define FLOATSORT(a,b) qsort((void *)(a),b, sizeof (float), k_cext_floatcompare);
-
-/* TB: values and bang outlets */
-#define Ob(a) outlet_bang(x->outlets[a]);
-float k_cext_getvalue(char c[]);
-int k_cext_setvalue(char c[],float f);
-#define VALUE(char) k_cext_getvalue(char)
-#define SETVALUE(char,float) k_cext_setvalue(char,float)
-
-/* TB: send float and symbol functions */
-void k_cext_sendfloat (char c[],float f);
-void k_cext_sendsymbol (char c[],char s[]);
-#define SENDFLOAT(char,float) k_cext_sendfloat(char,float)
-#define SENDSYMBOL(char1,char2) k_cext_sendsymbol(char1,char2)
-
-
-#define IF if(
-#define FOR for(
-#define RANGE(a,b,c) for(a=b;a<c;a++)
-#define WHILE while(
-#define SWITCH switch(
-
-#define THEN )
-#define BEGIN {
-
-#define LOOP for(;;){
-
-#define ELIF }else if(
-
-/* If you think "END ELSE BEGIN" is more natural, just write "END else BEGIN". */
-#define ELSE }else{
-
-#define END }
-#define ENDFOR END
-#define ENDRANGE END
-#define ENDIF END
-#define ENDWHILE END
-#define ENDLOOP END
-#define ENDSWITCH END
-
-#define SC ;
-
-#define NL "\n"
-  
-#define SP " "
-  //#define STRING(a) " " ## a ## " "
-
-  //#define gakk system("echo");
-
-typedef int (*k_cext_f_int_callback)(t_k_cext *x,...);
-typedef float (*k_cext_f_float_callback)(t_k_cext *x,...);
-
-#ifndef _MSC_VER
-static k_cext_f_int_callback *k_cext_int_funcs[];
-static k_cext_f_float_callback *k_cext_float_funcs[];
-static t_k_cext **k_cext_int_x[];
-static t_k_cext **k_cext_float_x[];
-#else
-k_cext_f_int_callback *k_cext_int_funcs[];
-k_cext_f_float_callback *k_cext_float_funcs[];
-t_k_cext **k_cext_int_x[];
-t_k_cext **k_cext_float_x[];
-#endif
-
-bool k_cext_get_int_funcs(k_cext_f_int_callback **funcs,t_k_cext **xs[],int length,...);
-bool k_cext_get_float_funcs(k_cext_f_float_callback **funcs,t_k_cext **xs[],int length,...);
-
-
-#define INT_(b,a) (*k_cext_int_funcs[a])
-#define I_(a) *k_cext_int_x[a]
-
-
-/* 
-   The alternative suggested by Thomas Grill might be better:
-
-#define INT_0(b,a) (*k_cext_int_funcs[a])(*k_cext_int_x[a])
-#define INT_1(b,a,c) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c)
-#define INT_2(b,a,c,d) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c,d)
-#define INT_3(b,a,c,e) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c,d,e)
-#define INT_4(b,a,c,e,f) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c,d,e,f)
-...
- */
-
-
-/* VC is reported not to be an iso99 c compiler, so the following very nice macro can't be used. #$Â¥5Â¥@{@{@$Â¥@ !!! */
-/* #define F_INT(a,...) (*k_cext_int_funcs[a])(*k_cext_int_x[a],__VA_ARGS__) */
-
-
-#define FLOAT_(b,a) (*k_cext_float_funcs[a])
-#define F_(a) *k_cext_float_x[a]
-
-/* Same here. */
-/* #define F_FLOAT(a,...) (*k_cext_float_funcs[a])(*k_cext_float_x[a],__VA_ARGS__) */
-
diff --git a/externals/k_cext/k_cext_funchandler.c b/externals/k_cext/k_cext_funchandler.c
deleted file mode 100644
index 2554fdd5b5b81ae9b281e03799cc32545daa9b28..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext_funchandler.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *   Copyright 2003 Kjetil S. Matheussen.
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as
- *   published by the Free Software Foundation; either version 2.1 of
- *   the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-
-#define MAX_FUNCS 1000
-#define MAX_FUNCLENGTH 50
-
-static char k_cext_intfuncnames[MAX_FUNCLENGTH*MAX_FUNCS]={0};
-static k_cext_f_int_callback k_cext_intfuncpointers[MAX_FUNCS]={0};
-static t_k_cext *k_cext_intxs[MAX_FUNCS];
-
-static char k_cext_floatfuncnames[MAX_FUNCLENGTH*MAX_FUNCS]={0};
-static k_cext_f_float_callback k_cext_floatfuncpointers[MAX_FUNCS]={0};
-static t_k_cext *k_cext_floatxs[MAX_FUNCS];
-
-
-
-static int k_cext_intdummy(t_k_cext *x,...){
-  post("Error. An integer k_func function has dissapeared. Returning 0 instead.\n");
-  return 0;
-}
-
-static float k_cext_floatdummy(t_k_cext *x,...){
-  post("Error. A float k_func function has dissapeared. Returning 0.0f instead.\n");
-  return 0.0f;
-}
-
-void k_cext_setdummy(void *func){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_intfuncpointers[lokke]==func){
-      k_cext_intfuncpointers[lokke]=k_cext_intdummy;
-      return;
-    }
-  }
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_floatfuncpointers[lokke]==func){
-      k_cext_floatfuncpointers[lokke]=k_cext_floatdummy;
-      return;
-    }
-  }
-}
-
-
-static void k_cext_addintfunc(char *name,t_k_cext *x){
-  int lokke;
-
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_intfuncpointers[lokke]==NULL || !strcmp(&k_cext_intfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      post("---Adding ---%s--- at pos %d",name,lokke);
-      sprintf(&k_cext_intfuncnames[lokke*MAX_FUNCLENGTH],"%s",name);
-      k_cext_intxs[lokke]=x;
-      k_cext_intfuncpointers[lokke]=(k_cext_f_int_callback)x->k_cext_process;
-      return;
-    }
-  }
-}
-
-static void k_cext_addfloatfunc(char *name,t_k_cext *x){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_floatfuncpointers[lokke]==NULL  || !strcmp(&k_cext_floatfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      post("---Adding ---%s--- at pos %d",name,lokke);
-      sprintf(&k_cext_floatfuncnames[lokke*MAX_FUNCLENGTH],"%s",name);
-      k_cext_floatxs[lokke]=x;
-      k_cext_floatfuncpointers[lokke]=(k_cext_f_float_callback)x->k_cext_process;
-      return;
-    }
-  }
-}
-
-static int k_cext_findintfromname(char *name){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(!strcmp(&k_cext_intfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      return lokke;
-    }
-  }
-  return -1;
-}
-static int k_cext_findfloatfromname(char *name){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(!strcmp(&k_cext_floatfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      return lokke;
-    }
-  }
-  return -1;
-}
-
-
-
-bool k_cext_get_int_funcs(k_cext_f_int_callback **funcs,t_k_cext **xs[],int length,...){
-    int lokke;
-    bool ret=true;
-    va_list ap;
-    va_start(ap,length);
-
-    for(lokke=0;lokke<length;lokke++){
-      char *name=va_arg(ap,char *);
-      int num=k_cext_findintfromname(name);
-      if(num==-1){
-	post("Error, the k_func function with the name \"%s\" was not found.\n",name);
-	ret=false;
-	goto exit;
-      }
-      funcs[lokke]=&k_cext_intfuncpointers[num];
-      xs[lokke]=&k_cext_intxs[lokke];
-    }
-
- exit:
-    va_end(ap);
-
-    return ret;
-}
-
-bool k_cext_get_float_funcs(k_cext_f_float_callback **funcs,t_k_cext **xs[],int length,...){
-    int lokke;
-    bool ret=true;
-    va_list ap;
-    va_start(ap,length);
-
-    for(lokke=0;lokke<length;lokke++){
-      char *name=va_arg(ap,char *);
-      int num=k_cext_findfloatfromname(name);
-      if(num==-1){
-	post("Error, the k_func function with the name \"%s\" was not found.\n",name);
-	ret=false;
-	goto exit;
-      }
-      funcs[lokke]=&k_cext_floatfuncpointers[num];
-      xs[lokke]=&k_cext_floatxs[num];
-      //post("xs[%d]=%x for %s",lokke,(unsigned int)xs[lokke],name);
-    }
-
- exit:
-    va_end(ap);
-    return ret;
-}
-
-
diff --git a/externals/k_cext/k_cext_generatecode.c b/externals/k_cext/k_cext_generatecode.c
deleted file mode 100644
index cd44355712af83ed15ebc0d16b4168a5bda3fabd..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext_generatecode.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- *   Copyright 2003 Kjetil S. Matheussen.
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as
- *   published by the Free Software Foundation; either version 2.1 of
- *   the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-
-static char *has_intfunc(char *string){
-  char *s=strstr(string,"INT_");
-  if(s==NULL) return NULL;
-  if(s[4]=='(') return has_intfunc(s+4);
-  return s;
-}
-
-static char *has_floatfunc(char *string){
-  char *s=strstr(string,"FLOAT_");
-  if(s==NULL) return NULL;
-  if(s[6]=='(') return has_floatfunc(s+6);
-  return s;
-}
-
-
-static void k_cext_fixfuncs(struct k_cext_init *k,char *string){
-  char newstring[500];
-
-  sprintf(newstring,"%s",string);
-
-  if(has_intfunc(newstring)){
-    char name[500]={0};
-    char *f_intstart=has_intfunc(newstring);
-    char *f_namestart=f_intstart+4;
-    char *f_nameend=strstr(f_namestart+1,"(");
-    int lastarg=false;
-
-    //post("namestart: -%s-",f_namestart);
-    //post("nameend: -%s-",f_nameend);
-
-    if(f_nameend==NULL){
-      post("Error. k_cext needs this syntax: \"%s(\", not \"%s (\"",f_intstart,f_intstart);
-      return;
-    }
-
-    if(f_nameend[1]==')') lastarg=true;
-
-    memcpy(&k->intfuncnames[k->num_intfuncs*50],f_namestart,f_nameend-f_namestart);
-    memcpy(name,f_namestart,f_nameend-f_namestart);
-
-    f_intstart[0]=0;
-    sprintf(string,
-	    "%s INT_(%s,%d)(I_(%d)%s %s",
-	    newstring,
-	    name,
-	    k->num_intfuncs,
-	    k->num_intfuncs,
-	    lastarg==true?"":",",
-	    f_nameend+1
-	    );
-    k->num_intfuncs++;
-  }else{
-    if(has_floatfunc(newstring)){
-      char name[500]={0};
-      char *f_floatstart=has_floatfunc(newstring);
-      char *f_namestart=f_floatstart+6;
-      char *f_nameend=strstr(f_namestart+1,"(");
-      int lastarg=false;
-      
-      //post("namestart: -%s-",f_namestart);
-      //post("nameend: -%s-",f_nameend);
-
-
-      if(f_nameend==NULL){
-	post("Error, k_cext needs this syntax: \"%s(\", not \"%s (\"",f_floatstart,f_floatstart);
-	return;
-      }
-    
-      if(f_nameend[1]==')') lastarg=true;
-      
-      memcpy(&k->floatfuncnames[k->num_floatfuncs*50],f_namestart,f_nameend-f_namestart);
-      memcpy(name,f_namestart,f_nameend-f_namestart);
-
-      f_floatstart[0]=0;
-      sprintf(string,
-	      "%s FLOAT_(%s,%d)(F_(%d)%s %s",
-	      newstring,
-	      name,
-	      k->num_floatfuncs,
-	      k->num_floatfuncs,
-	      lastarg==true?"":",",
-	      f_nameend+1
-	    );
-
-      k->num_floatfuncs++;
-    }else{
-      return;
-    }
-  }
-
-  if(has_intfunc(string) || has_floatfunc(string)){
-    k_cext_fixfuncs(k,string);
-  }
-}
-
-
-static void k_cext_gen_funcname(struct k_cext_init *k){
-  sprintf(k->funcname,"k_cext_process%d",instancenumber++);
-
-  k->doinitpos1=ftell(k->file);
-  fprintf(k->file,"                         \n");
-  //               static bool doinit(void);
-
-  fprintf(k->file,"void %s(t_k_cext *x){\n",k->funcname);
-  k->doinitpos2=ftell(k->file);
-  fprintf(k->file,"             \n");
-  //               if(doinit()){
-
-}
-
-
-static int k_cext_gen_cfunc_funcname(t_k_cext *x,int argc, t_atom* argv,int i, struct k_cext_init *k){
-  char string[500];
-  int lokke;
-
-  k->doinitpos1=ftell(k->file);
-  fprintf(k->file,"                         \n");
-
-  sprintf(string,"%s",atom_getsymbolarg(i,argc,argv)->s_name);
-  if(!strncmp(string,"INT_",4)){
-    k->cfuncrettype=0;
-    sprintf(k->cfuncname,"%s",string+4);
-  }else{
-    if(!strncmp(string,"FLOAT_",6)){
-      k->cfuncrettype=1;
-      sprintf(k->cfuncname,"%s",string+6);
-    }else{
-      post("k_cfunc: Error. Function name must begin with either INT_ or FLOAT_.");
-      return 1;
-    }
-  }
-  i++;
-
-  for(;i<argc;i+=2){  
-    sprintf(string,"%s",atom_getsymbolarg(i,argc,argv)->s_name);
-    if(!strcmp(string,";")) goto end;
-    if(!strcmp(string,"float") || !strcmp(string,"t_float")){
-      sprintf(string,"double");
-    }
-    sprintf(&k->cfuncargtypes[k->numargs*50],"%s",string);
-    sprintf(&k->cfuncargnames[k->numargs*50],"%s",atom_getsymbolarg(i+1,argc,argv)->s_name);
-    k->numargs++;
-  }
-
- end:
-
-  fprintf(k->file,"static %s %s(t_k_cext *x%s",k->cfuncrettype==0?"int":"float",k->cfuncname,k->numargs>0?",":"){\n");
-  for(lokke=0;lokke<k->numargs;lokke++){
-    fprintf(k->file,"%s %s%s",&k->cfuncargtypes[lokke*50],&k->cfuncargnames[lokke*50],lokke==k->numargs-1?"){\n":",");
-  }
-
-  k->doinitpos2=ftell(k->file);
-  fprintf(k->file,"             \n");
-
-  return i;
-}
-
-
-static void k_cext_gen_mainfunccode(t_k_cext *x,int argc, t_atom* argv,int i, struct k_cext_init *k){
-  int lokke;
-  int prevwasnewline=1;
-
-  for(;i<argc;i++){
-    char string[500];
-    switch(argv[i].a_type){
-    case A_FLOAT:
-      if((float)atom_getintarg(i,argc,argv)==atom_getfloatarg(i,argc,argv)){
-	fprintf(k->file,"%d ",(int)atom_getintarg(i,argc,argv));
-      }else{
-	fprintf(k->file,"%f ",atom_getfloatarg(i,argc,argv));
-      }
-      prevwasnewline=0;
-      break;
-    case A_SYMBOL:
-      sprintf(string,"%s",atom_getsymbolarg(i,argc,argv)->s_name);
-
-      if(strstr(string,"s<")!=NULL){
-	char *pos=strstr(string,"s<");
-	pos[0]=' ';
-	pos[1]='\"';
-      }
-
-      if(strstr(string,">s")!=NULL){
-	char *pos=strstr(string,">s");
-	pos[0]='\"';
-	pos[1]=' ';
-      }
-
-      if(strstr(string,"SEND(")!=NULL){
-	char *pos=strstr(string,"SEND(")+3;
-	int len;
-	pos[0]='(';
-	pos[1]='\"';
-
-	len=strlen(string);
-	string[len]='\"';
-	string[len+1]=0;
-      }
-      
-      if(!strcmp(".",string)){
-	sprintf(string," ");
-	k->indentation++;
-
-      
-      }else{if(!strcmp("DO",string)){
-	k->set_indentation[k->indentation]=1;
-	sprintf(string,"BEGIN");
-	
-      }else{if(!strcmp(";",string)){
-	if(prevwasnewline==1) break;
-	sprintf(string,";\n");
-	prevwasnewline=1;
-	k->indentation=0;
-	k->thisisanelifline=0;
-	
-      }else{if(!strcmp("ELIF",string)){
-	k->thisisanelifline=1;
-	
-      }else{
-	
-	if(has_intfunc(string) || has_floatfunc(string)){
-	  k_cext_fixfuncs(k,string);
-	}
-	
-	prevwasnewline=0;
-	//post("%d: -%s-",k->indentation,string);
-	
-	if(
-	   strcmp("ELSE",string)
-	   && k->thisisanelifline==0
-	   )
-	  {
-	    int hasindented=0;
-	    char orgind[500];
-	    for(lokke=0;lokke<k->indentation*2;lokke++){
-	      orgind[lokke]=' ';
-	    }
-	    orgind[lokke]=0;
-	    for(lokke=499;lokke>=k->indentation;lokke--){
-	      if(k->set_indentation[lokke]==1){
-		k->set_indentation[lokke]=0;
-		fprintf(k->file,"END\n");
-		hasindented++;
-	      }		    
-	    }
-	    if(hasindented>0){
-	      char temp2[500];
-	      sprintf(temp2,"%s%s",orgind,string);
-	      sprintf(string,temp2);
-	    }
-	  }
-      }
-      }
-      /*
-	    if(!strcmp("\n",string)){
-	    sprintf(string," ");
-	    }
-      */
-      }
-      }
-
-      fprintf(k->file,"%s",string);
-      if(string[strlen(string)-1]!='\n') fprintf(k->file," ");
-      break;
-    default:
-      post("k_cext.c: Unknown argv type: %d",argv[i].a_type);
-      post("Please send this patch to k->s.matheussen@notam02.no .");
-      break;
-    }
-  }
-}
-
-static void k_cext_gen_endbrackets(struct k_cext_init *k){
-  int lokke;
-  for(lokke=499;lokke>=0;lokke--){
-    if(k->set_indentation[lokke]==1){
-      int lokke2;
-      for(lokke2=0;lokke2<lokke;lokke2++){
-	fprintf(k->file,"  ");
-      }
-      fprintf(k->file,"END\n");
-    }
-  }
-  fprintf(k->file,"}");
-}
-
-
-static void k_cext_gen_funcs_dasfunc(struct k_cext_init *k){
-  sprintf(k->funcname,"k_cext_process%d",instancenumber++);
-  
-  fprintf(k->file,"\n%s %s(t_k_cext *x%s){\n",k->cfuncrettype==0?"int":"float",k->funcname,k->numargs>0?",...":"");
-  
-  if(k->numargs>0){
-    int lokke;
-    fprintf(k->file,"  va_list k_cext_a;\n");
-    for(lokke=0;lokke<k->numargs;lokke++){
-      fprintf(k->file,"  %s %s;\n",&k->cfuncargtypes[lokke*50],&k->cfuncargnames[lokke*50]);
-    }
-    fprintf(k->file,"  va_start(k_cext_a,x);\n");
-    for(lokke=0;lokke<k->numargs;lokke++){
-      fprintf(k->file,"  %s=va_arg(k_cext_a,%s);\n",&k->cfuncargnames[lokke*50],&k->cfuncargtypes[lokke*50]);
-    }    
-    fprintf(k->file,"  va_end(k_cext_a);\n");
-
-    fprintf(k->file,"  return %s(x,",k->cfuncname);
-    for(lokke=0;lokke<k->numargs;lokke++){
-      fprintf(k->file,"%s%s",&k->cfuncargnames[lokke*50],lokke==k->numargs-1?");\n}\n":",");
-    }
-
-  }else{
-    fprintf(k->file,"  return %s(x);\n}\n",k->cfuncname);
-  }
-}
-
-
-static void k_cext_gen_doinit(t_k_cext *x,struct k_cext_init *k){
-  int lokke;
-  if(k->num_intfuncs>0 || k->num_floatfuncs>0){
-    if(x->iscext==true){
-      fprintf(k->file,"}\n");
-    }
-
-    fprintf(k->file,
-	    "static bool doinit(void){\n"
-	    "  static bool k_cext_inited=false;\n"
-	    "  if(k_cext_inited==false){\n"
-	    );
-    if(k->num_intfuncs>0){
-      fprintf(k->file,"    if(k_cext_get_int_funcs(&k_cext_int_funcs[0],&k_cext_int_x[0],%d,",k->num_intfuncs);
-      for(lokke=0;lokke<k->num_intfuncs;lokke++){
-	fprintf(k->file,"\"%s\"%s",k->intfuncnames+(lokke*50),lokke<k->num_intfuncs-1?",":"");
-      }
-      fprintf(k->file,")==false) return false;\n");
-    }
-
-    if(k->num_floatfuncs>0){
-      fprintf(k->file,"    if(k_cext_get_float_funcs(&k_cext_float_funcs[0],&k_cext_float_x[0],%d,",k->num_floatfuncs);
-      for(lokke=0;lokke<k->num_floatfuncs;lokke++){
-	fprintf(k->file,"\"%s\"%s",k->floatfuncnames+(lokke*50),lokke<k->num_floatfuncs-1?",":"");
-      }
-      fprintf(k->file,")==false) return false;\n");
-    }
-
-    fprintf(k->file,
-	    "    k_cext_inited=true;\n"
-	    "  }\n"
-	    "  return true;\n"
-	    "}\n"
-	    );
-
-    if(k->num_intfuncs>0){
-      fprintf(k->file,
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "k_cext_f_int_callback *k_cext_int_funcs[%d]={0};\n"
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "t_k_cext **k_cext_int_x[%d]={0};\n",
-	      k->num_intfuncs,k->num_intfuncs
-	      );
-    }
-    
-    if(k->num_floatfuncs>0){
-      fprintf(k->file,
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "k_cext_f_float_callback *k_cext_float_funcs[%d]={0};\n"
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "t_k_cext **k_cext_float_x[%d]={0};\n",
-	      k->num_floatfuncs,k->num_floatfuncs
-	      );
-    }
-
-    fseek(k->file,k->doinitpos1,SEEK_SET);
-    fprintf(k->file,"static bool doinit(void);");
-
-    fseek(k->file,k->doinitpos2,SEEK_SET);
-    fprintf(k->file,"if(doinit()){");
-  }else{
-    fprintf(k->file,"\n");
-  }
-
-}
-
-static void k_cext_generatecode(t_k_cext *x,int argc, t_atom* argv,int i, struct k_cext_init *k){
-
-  if(x->iscext==true){
-    k_cext_gen_funcname(k);
-  }else{
-    i=k_cext_gen_cfunc_funcname(x,argc,argv,i,k);
-  }
-
-  k_cext_gen_mainfunccode(x,argc,argv,i,k);
-  k_cext_gen_endbrackets(k);
-
-  if(x->iscext==false){
-    if(k->num_intfuncs>0 || k->num_floatfuncs>0){    
-      fprintf(k->file,"return 0;}\n");
-    }
-    k_cext_gen_funcs_dasfunc(k);
-  }
-
-  k_cext_gen_doinit(x,k);
-
-  fclose(k->file);
-}
diff --git a/externals/k_cext/k_cext_macosx.c b/externals/k_cext/k_cext_macosx.c
deleted file mode 100644
index 1bfe97a2d6da1b2d0be43011a89b8d60b7b028f0..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext_macosx.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* k_cext_macosx.c. MacosX part of k_cext. Made by Kjetil Matheussen. Never tested. */
-//
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-#include "m_pd.h"
-#include "k_cext.h"
-
-#include <unistd.h>
-
-#include <mach-o/dyld.h> 
-
-int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name){
-  NSObjectFileImage image; 
-  void *ret;
-  NSSymbol s; 
-
-  x->k_cext_process=NULL;
-  x->handle=NULL;
-
-  if ( NSCreateObjectFileImageFromFile( name, &image) != NSObjectFileImageSuccess ){
-    post("Error. \n");
-    return 0;
-  }
-  ret=NSLinkModule( image, name, NSLINKMODULE_OPTION_BINDNOW); 
-  s = NSLookupSymbolInModule(ret,funcname); 
-  
-  if(s){
-    x->k_cext_process = (t_xxx)NSAddressOfSymbol( s);
-  }else{
-    return 0;
-  }
-
-  return 1;
-}
-
-void k_sys_freehandle(t_k_cext *x){
-  post("k_cext_macosx.c/k_sys_freehandle: FIX ME.\n");
-}
-
-
-void k_sys_mktempfilename(char *to){
-  sprintf(to,"/tmp/pd-k_cext-XXXXXX");
-  mktemp(to);
-}
-
-void k_sys_writeincludes(FILE *file){
-  fprintf(file,"#include \"" INCLUDEPATH "/" LINUXINCLUDE "/m_pd.h\"\n");
-  fprintf(file,"#include \"" INCLUDEPATH  "/k_cext.h\"\n");
-}
-
-
-void k_sys_makecompilestring(char *to,char *name,char *funcname){
-  sprintf(to,"gcc -Wall -O2 %s -o %s.o -shared",name,name);
-}
-
-void k_sys_deletefile(char *name){
-  unlink(name);
-}
-
-static void k_sys_cleanup(void){
-  system("rm -fr /tmp/pd-k_cext-*");
-}
-
-static void finish(int sig){
-  k_sys_cleanup();
-  exit(0);
-}
-
-
-void k_sys_init(void){
-  atexit(k_sys_cleanup);
-  signal(SIGINT,finish);
-}
diff --git a/externals/k_cext/k_cext_unix.c b/externals/k_cext/k_cext_unix.c
deleted file mode 100644
index ee9c25227dd091aa67a56e22be7383ee8451c912..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext_unix.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* k_cext_unix.c. unix part of k_cext. Made by Kjetil Matheussen. Never tested. */
-//
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-#include <m_pd.h>
-#include "k_cext.h"
-#include <dlfcn.h>
-
-#include <unistd.h>
-#include <signal.h>
-
-
-int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name){
-
-  x->handle=dlopen(name,RTLD_NOW|RTLD_GLOBAL);
-
-  if(x->handle!=NULL){
-    x->k_cext_process=(void (*)(struct k_cext *))dlsym(x->handle,funcname);
-    return 1;
-  }
-  return 0;
-}
-
-void k_sys_freehandle(t_k_cext *x){
-  char temp[500];
-  dlclose(x->handle);
-
-  sprintf(temp,"%s.c.o",x->filename);
-  unlink(temp);
-}
-
-void k_sys_mktempfilename(char *to){
-  sprintf(to,"/tmp/pd-k_cext-XXXXXX");
-  mktemp(to);
-}
-
-void k_sys_writeincludes(FILE *file){
-  fprintf(file,"#include \"" INCLUDEPATH "/" LINUXINCLUDE "/m_pd.h\"\n");
-  fprintf(file,"#include \"" INCLUDEPATH  "/k_cext.h\"\n");
-}
-
-void k_sys_makecompilestring(char *to,char *name,char *funcname){
-  sprintf(to,"gcc -Wall -O2 %s -o %s.o -shared",name,name);
-}
-
-void k_sys_deletefile(char *name){
-  unlink(name);
-}
-
-static void k_sys_cleanup(void){
-  system("rm -fr /tmp/pd-k_cext-*");
-}
-
-static void finish(int sig){
-  k_sys_cleanup();
-  exit(0);
-}
-
-
-void k_sys_init(void){
-  atexit(k_sys_cleanup);
-  signal(SIGINT,finish);
-}
diff --git a/externals/k_cext/k_cext_win.c b/externals/k_cext/k_cext_win.c
deleted file mode 100644
index 0ed4e1544930ad136cb9eda1398e49de6af5fef6..0000000000000000000000000000000000000000
--- a/externals/k_cext/k_cext_win.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* k_cext_win.c. Windows part of k_cext. Made by Kjetil Matheussen and Olaf Matthes. */
-//
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-#include <io.h>
-#include <windows.h>
-
-#include "m_pd.h"
-#include "k_cext.h"
-
-#define MAX_INSTANCES 256
-
-char *nametemplate = "pd-XXXXXX";
-extern int instancenumber;	/* number of instance of this object */
-char names[MAX_INSTANCES][9];
-
-
-int k_sys_getprocessfunction(t_k_cext *x, char *funcname, char *name){
-  char dllname[50];
-  strcpy(dllname, name);
-  sys_bashfilename(dllname, dllname);
-  dllname[strlen(dllname)-4]=0;
-  strcat(dllname, ".dll");
-  post("going to load %s...", dllname);
-  x->handle = LoadLibrary(dllname);
-
-  if (!x->handle){
-    x->handle=NULL;
-    post("Error (%d). \n", GetLastError());
-    return 0;
-  }
-  // x->k_cext_process = (t_xxx)GetProcAddress(x->handle, "k_cext_process");  
-  x->k_cext_process=(void (*)(struct k_cext *))GetProcAddress(x->handle, funcname);
-  return 1;
-}
-
-void k_sys_freehandle(t_k_cext *x){
-  char temp[500];
-
-  FreeLibrary((HINSTANCE)x->handle);
-
-  sprintf(temp,"%s.dll",x->filename);
-  unlink(temp);
-  sprintf(temp,"%s.obj",x->filename);
-  unlink(temp);
-  sprintf(temp,"%s.exp",x->filename);
-  unlink(temp);
-  sprintf(temp,"%s.lib",x->filename);
-  unlink(temp);
-
-  unlink(x->filename);
-}
-
-void k_sys_mktempfilename(char *to){
-  char *temp;
-  FILE *file;
-  strcpy(names[instancenumber], nametemplate);
-  temp = _mktemp(names[instancenumber]);
-  if(temp == NULL)
-  {
-    error("could not create unique filename");
-	return;
-  }
-  sprintf(to,"%s",temp);
-  file=fopen(temp,"w");	/* we have to cheat ;-( */
-  fclose(file);
-}
-
-void k_sys_writeincludes(FILE *file){
-  fprintf(file,"#include \"" INCLUDEPATH "\\src\\m_pd.h\"\n");
-  fprintf(file,"#include \"" INCLUDEPATH "\\src\\k_cext.h\"\n");	/* needs to be in pd/src, sorry.. */
-}
-
-void k_sys_makecompilestring(char *to,char *name,char *funcname){
-  sprintf(to,"cl %s " INCLUDEPATH "\\bin\\pd.lib " INCLUDEPATH "\\extra\\k_cext.lib /LD /Gd /GD /Ox /DNT /link /export:%s",
-	  name, funcname);
-}
-
-void k_sys_deletefile(char *name){
-  char delname[16];
-	post("del %s", name);
-  _unlink(name);
-
-}
-
-void k_sys_init(void){
-}
diff --git a/externals/k_cext/test.pd b/externals/k_cext/test.pd
deleted file mode 100644
index f61becb27e5e859293cf35095fecffbe148faf3d..0000000000000000000000000000000000000000
--- a/externals/k_cext/test.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 321 226 450 300 10;
-#X floatatom 102 55 5 0 0;
-#X floatatom 112 275 5 0 0;
-#X floatatom 172 276 5 0 0;
-#X floatatom 218 278 5 0 0;
-#X floatatom 273 280 5 0 0;
-#X obj 160 39 k_cext 1 4 \; \; int lokke \; int a=5 \; \; RANGE(lokke
-\, 0 \, 4) DO \; . O(lokke \, I(0)) \; . IF I(0)==0 THEN DO \; . .
-O(1 \, 2) \; . ELIF I(0)==1 THEN DO \; . . O(2 \, 3) \; . ELSE \; .
-. O(3 \, 4) \; . . IF a==2 THEN DO \; . . . O(3 \, 23) \; . . . IF
-a==3 THEN DO \; . . . . O(2 \, 4) \;;
-#X connect 0 0 5 0;
-#X connect 5 0 1 0;
-#X connect 5 1 2 0;
-#X connect 5 2 3 0;
-#X connect 5 3 4 0;
diff --git a/externals/k_guile/Makefile b/externals/k_guile/Makefile
deleted file mode 100644
index e28f66480c575fdfd80f477c2e0ad2c918807244..0000000000000000000000000000000000000000
--- a/externals/k_guile/Makefile
+++ /dev/null
@@ -1,114 +0,0 @@
-NAME=k_guile
-CSYM=k_guile
-
-DIR=k_guile
-
-current: pd_linux
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo /DINCLUDEPATH=\"c:\\pd\"
-VC="C:\Programme\Microsoft Visual Studio\Vc98"
-
-PDNTINCLUDE = /I. /I\tcl\include /Ic:\pd\src /I$(VC)\include
-
-PDNTLDIR = $(VC)\lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	c:\pd\bin\pd.lib 
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c k_guile_win.c
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$(CSYM)_setup $*.obj k_guile_win.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDEPATH=../../src
-LINUXINCLUDE =  -I$(LINUXINCLUDEPATH)
-
-$(NAME).pd_linux: $(NAME).o
-	ld --export-dynamic  -shared -o $(NAME).pd_linux k_guile.o -lc -lm -lguile
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s $(DIR)/$*.pd_linux ..
-
-$(NAME).o: $(NAME).c global_scm.txt local_scm.txt
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $(NAME).o -c $(NAME).c
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: $(NAME).pd_darwin k_guile.c
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin: global_scm.txt local_scm.txt
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\ -o $*.o -c k_guile.c
-	cc -bundle -undefined suppress  -flat_namespace -o $*.pd_darwin $*.o 
-	rm -f $*.o ../$*.pd_darwin
-	ln -s $*/$*.pd_darwin ..
-
-# ----------------------------------------------------------
-
-
-global_scm.txt: global.scm gen_c_scheme.py
-	./gen_c_scheme.py global.scm >global_scm.txt
-
-local_scm.txt: local.scm gen_c_scheme.py
-	./gen_c_scheme.py local.scm >local_scm.txt
-
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations *~ core global_scm.txt local_scm.txt
-
-
diff --git a/externals/k_guile/README b/externals/k_guile/README
deleted file mode 100644
index 6a613855ae8d8dcc2cd9ae90f2f3aea63ef5e61e..0000000000000000000000000000000000000000
--- a/externals/k_guile/README
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-k_guile PD external
---------------------------------------------
-V0.0.2
-
--This external makes you able to use guile as an extension language for
- PD. Guile is a scheme interpreter. The API is inspired by
- the python pyext external made by Thomas Grill, and a small part of
- the code is made by looking at the flext source.
-
--To be able to use it, you should first know the lisp programming language,
- then check out the help-k_guile.pd example patch and read the small
- example-scripts that the patch loads.
-
-
-API
--------------------------------------------
-k_guile provides the following functions:
-
-* (pd-inlets num-inlets)
-    - Sets number of inlets for the object.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-outlets num-outlets)
-    - Sets number of outlets for the object.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-inlet inlet-num type func)
-    - "func" is a function that is called when the object
-      receives a message to the inlet "inlet-num" of type
-      "type". Normal values for "type" are 'float, 'list,
-      'bang, etc.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-outlet outlet-num arg0 arg1 ...)
-    - Sends value(s) to outlet "outlet-num". 
-      The argument(s) can be of any kind.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-bind symbol func)
-    - Pd messages sent to "symbol" arrives at the "func" function.
-    - send_receive.scm
-    - Both local and global
-
-* (pd-unbind symbol)
-    - Stop receiving messages sent to "symbol".
-    - Both local and global. For the local version, all bindings
-      are automatically unbinded when the object is destroyed or
-      reloaded.
-
-* (pd-send symbol arg0 arg1 ...)
-    - Sends value(s) to receivers for "symbol". "Symbol" can either
-      be a scheme or a pd symbol.
-    - send_receive.scm
-    - Global function.
-
-* (pd-get-symbol symbol)
-    - Returns the pd symbol for the scheme symbol "symbol".
-      pd-send works faster when a pd symbol is used instead of a scheme symbol.
-    - send_receive.scm
-    - Global function.
-
-* (pd-set-destroy-func thunk)
-    - "thunk" is called before the object is destroyed or reloaded.
-    - Local function.
-
-
-
-Scheme programming with the k_guile object.
---------------------------------------------------
--The code executed lives in its own local namespace
- spesific for the pd object. If you need or want to
- break out of the local namespace, simply just use
- (load ) to let another script run in the global
- namespace.
--If you need to call pd-inlets or pd-outlets, they
- should/must be the first functions to call in the
- script. The default number of inlets is 1,
- and the default number of outlets is 0.
--Some global debugging options are set at the top
- of the global.scm file. You might want to edit
- those values _before compiling_ the k_guile external.
--None of the functions have been made with
- thread-safety in mind.
--Backtracing doesn't work properly. Don't know why.
-
-
-Changes
---------------------------------------------------
-v0.0.1->v0.0.2:
--Loads /etc/.k_guile.scm and $HOME/.k_guile.scm at
- startup.
--An inlet can specify 'any as type, and will then
- receive anything.
--The k_guile object can receive "eval" messages to evaluate
- scheme code.
-
-
---------------------------------------------------
-Kjetil S. Matheussen, k.s.matheussen@notam02.no
-last updated 21.1.2004
-
-
diff --git a/externals/k_guile/add.scm b/externals/k_guile/add.scm
deleted file mode 100644
index b4bfd76df9960bf872e40700783a0703cb992425..0000000000000000000000000000000000000000
--- a/externals/k_guile/add.scm
+++ /dev/null
@@ -1,15 +0,0 @@
-
-(pd-inlets 2)
-(pd-outlets 1)
-
-(let ((inlet1 0))
-  (pd-inlet 1 'float
-	    (lambda (x)
-	      (set! inlet1 x)))
-  (pd-inlet 0 'float
-	    (lambda (x)
-	      (pd-outlet 0 (+ inlet1 x)))))
-
-
-
-
diff --git a/externals/k_guile/any.scm b/externals/k_guile/any.scm
deleted file mode 100644
index bf261912c6920d22f6a3348092f2644bf2fd41c9..0000000000000000000000000000000000000000
--- a/externals/k_guile/any.scm
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-(pd-inlet 0 'any
-	  (lambda x
-	    (pd-display "Got " x " to inlet 0")))
diff --git a/externals/k_guile/gen_c_scheme.py b/externals/k_guile/gen_c_scheme.py
deleted file mode 100755
index 58c2dcc6d39dd8aae451c0c5e53a89d15b0abdaf..0000000000000000000000000000000000000000
--- a/externals/k_guile/gen_c_scheme.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-import sys,string
-
-file=open(sys.argv[1],"r")
-
-while 1:
-    line=""
-    while line=="" or line=="\n" or line[0:1]==";":
-        line=file.readline()
-        if line=="":
-            file.close()
-            sys.exit(0)
-    line=string.replace(line[:-1],'\\','\\\\')
-    sys.stdout.write('"'+string.replace(line,'"','\\"')+'\\n"\n')
-
-
-
-
diff --git a/externals/k_guile/global.scm b/externals/k_guile/global.scm
deleted file mode 100644
index 7fe7eccca9364e26e3122650c39b678b3a0f77f2..0000000000000000000000000000000000000000
--- a/externals/k_guile/global.scm
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-;; These functions are global functions available for all guile scripts loaded into PD.
-;; Kjetil S. Matheussen, 2004.
-
-;;/* This program is free software; you can redistribute it and/or                */
-;;/* modify it under the terms of the GNU General Public License                  */
-;;/* as published by the Free Software Foundation; either version 2               */
-;;/* of the License, or (at your option) any later version.                       */
-;;/*                                                                              */
-;;/* This program is distributed in the hope that it will be useful,              */
-;;/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-;;/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-;;/* GNU General Public License for more details.                                 */
-;;/*                                                                              */
-;;/* You should have received a copy of the GNU General Public License            */
-;;/* along with this program; if not, write to the Free Software                  */
-;;/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-;;/*                                                                              */
-
-
-
-(debug-enable 'debug)
-(debug-enable 'trace)
-(debug-enable 'backtrace)
-
-(use-modules (ice-9 stack-catch))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Misc. functions
-;;
-;;
-(define (pd-load-if-exists filename)
-  (if (access? filename F_OK)
-      (load filename)))
-
-(define (pd-display . args)
-  (if (not (null? args))
-      (begin
-	(display (car args))
-	(apply pd-display (cdr args)))
-      (newline)))
-
-(define (pd-filter proc list)
-  (if (null? list)
-      '()
-      (if (proc (car list))
-	  (cons (car list) (pd-filter proc (cdr list)))
-	  (pd-filter proc (cdr list)))))
-
-(define (pd-for init pred least add proc)
-  (if (pred init least)
-      (begin
-	(proc init)
-	(pd-for (+ add init) pred least add proc))))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Argument checking
-;;
-;;
-(define (pd-check-number number message)
-  (if (number? number)
-      #t
-      (begin
-	(pd-display message ": " number " is not a number")
-	#f)))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Bindings
-;;
-;;
-(define pd-global-bindings '())
-
-(define (pd-bind-do symbol func bindings)
-  (if (or (not (symbol? symbol))
-	  (not (procedure? func)))
-      (begin
-	(pd-display "Wrong arguments for pd-bind")
-	bindings)
-      (cons (list symbol 
-		  func
-		  (pd-c-bind symbol func))
-	    bindings)))
-
-(define (pd-unbind-do symbol bindings)
-  (if (not (symbol? symbol))
-      (begin
-	(pd-display "Wrong arguments for pd-unbind")
-	bindings)
-      (let ((binding (assq symbol bindings)))
-	(pd-c-unbind (caddr binding) symbol)
-	(pd-filter (lambda (x) (not (eq? symbol (car x))))
-		   bindings))))
-
-(define (pd-bind symbol func)
-  (set! pd-global-bindings (pd-bind-do symbol func pd-global-bindings)))
-
-(define (pd-unbind symbol)
-  (set! pd-global-bindings (pd-unbind-do symbol pd-global-bindings)))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Sending
-;;
-;;
-(define (pd-send symbol firstarg . args)
-  (if (or (symbol? symbol)
-	  (number? symbol))
-      (cond ((> (length args) 0) (pd-c-send-list symbol (cons firstarg args)))
-	    ((list? firstarg) (pd-c-send-list symbol firstarg))
-	    ((number? firstarg) (pd-c-send-number symbol firstarg))
-	    ((string? firstarg) (pd-c-send-string symbol firstarg))
-	    ((eq? 'bang firstarg) (pd-c-send-bang symbol))
-	    ((symbol? firstarg) (pd-c-send-symbol symbol firstarg))
-	    (else
-	     (pd-display "Unknown argument to pd-outlet-or-send:" firstarg)))))
-
-(define (pd-get-symbol sym)
-  (if (not (symbol? sym))
-      (pd-display sym " is not a scheme symbol")
-      (pd-c-get-symbol sym)))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Backtrace (does not work properly)
-;;
-;;
-
-(define (pd-backtrace-eval string)
-  (eval-string string))
-
-(define (pd-display-errorfunc key . args)
-  (let ((dasstack (make-stack #t)))
-    (display-backtrace dasstack (current-output-port) #f #f)
-					;(display (stack-ref (make-stack #t) 1))
-					;(display (stack-length (make-stack #t)))
-    (display key)(newline)
-    (display args)
-    (newline))
-  0)
-
-(define (pd-backtrace-run thunk)
-  (stack-catch #t
-	       thunk
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-runx func arg1) 
-  (stack-catch #t
-	       (lambda x
-		 (apply func x))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run1 func arg1)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run2 func arg1 arg2)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1 arg2))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run3 func arg1 arg2 arg3)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1 arg2 arg3))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run4 func arg1 arg2 arg3 arg4)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1 arg2 arg3 arg4))
-	       pd-display-errorfunc))
-
-(pd-backtrace-run1 pd-load-if-exists "/etc/.k_guile.scm")
-(pd-backtrace-run1 pd-load-if-exists (string-append (getenv "HOME") "/.k_guile.scm"))
-
diff --git a/externals/k_guile/help-k_guile.pd b/externals/k_guile/help-k_guile.pd
deleted file mode 100644
index 6e7614c91d861ba17430d0c0aa64cdf9f52ff21d..0000000000000000000000000000000000000000
--- a/externals/k_guile/help-k_guile.pd
+++ /dev/null
@@ -1,83 +0,0 @@
-#N canvas 481 303 707 547 10;
-#X obj 101 135 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 101 162 k_guile add.scm;
-#X obj 101 195 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 201 137 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X msg 38 134 reload;
-#X obj 341 157 k_guile send_receive.scm;
-#X msg 341 127 reload;
-#X obj 483 130 s in;
-#X obj 512 97 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 475 186 r out;
-#X msg 468 95 gakk;
-#X obj 475 215 print;
-#X obj 580 95 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 608 96 list 2 3 4;
-#X text 27 19 k_guile - guile external for PD.;
-#X text 26 36 Kjetil S. Matheussen \, 2004;
-#X obj 130 301 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 255 300 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 71 301 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 71 388 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 146 389 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 213 390 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X msg 17 300 reload;
-#X obj 75 341 k_guile inout.scm;
-#X obj 436 346 k_guile mozilla.scm;
-#X msg 436 301 start;
-#X text 300 496 Note \; you can not change the number of inlets and
-outlets by sending reload .;
-#X msg 316 299 testing;
-#X msg 190 299 testing;
-#X msg 409 95 we 3 2;
-#X msg 512 286 eval (newline);
-#X msg 512 309 eval (display(environ));
-#X obj 65 487 k_guile any.scm;
-#X msg 25 448 reload;
-#X obj 193 448 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X msg 149 446 gakk;
-#X obj 261 446 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 289 447 list 2 3 4;
-#X msg 90 446 we 3 2;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 3 0 1 1;
-#X connect 4 0 1 0;
-#X connect 6 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 11 0;
-#X connect 10 0 7 0;
-#X connect 12 0 7 0;
-#X connect 13 0 7 0;
-#X connect 16 0 23 152;
-#X connect 17 0 23 323;
-#X connect 18 0 23 9;
-#X connect 22 0 23 0;
-#X connect 23 13 19 0;
-#X connect 23 185 20 0;
-#X connect 23 346 21 0;
-#X connect 25 0 24 0;
-#X connect 27 0 23 396;
-#X connect 28 0 23 284;
-#X connect 29 0 7 0;
-#X connect 30 0 24 0;
-#X connect 31 0 24 0;
-#X connect 33 0 32 0;
-#X connect 34 0 32 0;
-#X connect 35 0 32 0;
-#X connect 36 0 32 0;
-#X connect 37 0 32 0;
-#X connect 38 0 32 0;
diff --git a/externals/k_guile/inout.scm b/externals/k_guile/inout.scm
deleted file mode 100644
index a2d829c52b1b30768c47e5fdcb6765e31d40d7ed..0000000000000000000000000000000000000000
--- a/externals/k_guile/inout.scm
+++ /dev/null
@@ -1,24 +0,0 @@
-
-(define num-inouts 400)
-
-(pd-inlets num-inouts)
-(pd-outlets num-inouts)
-
-
-(pd-for 0 < num-inouts 1
-	(lambda (i)
-	  (pd-inlet i 'float
-		    (lambda (x)
-		      (pd-display "Got " x " to inlet " i)
-		      (pd-for 0 < num-inouts 1
-			      (lambda (i2)
-				(pd-outlet i2 (+ i2 x))))))))
-
-
-(pd-inlet 284 'testing
-	  (lambda ()
-	    (pd-display "This is a function for handling 'testing sent to inlet 284.")))
-
-
-
-
diff --git a/externals/k_guile/k_guile.c b/externals/k_guile/k_guile.c
deleted file mode 100644
index 82212b9c11bbe049a7baac5d65f8bbe4f0f13409..0000000000000000000000000000000000000000
--- a/externals/k_guile/k_guile.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/* --------------------------- k_guile  ----------------------------------- */
-/*   ;; Kjetil S. Matheussen, 2004.                                             */
-/*                                                                              */
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-
-
-#include "libguile.h"
-
-/* Need some more macros. */
-
-#define POINTER_P(x) (((int) (x) & 3) == 0)
-#define INTEGER_P(x) (! POINTER_P (x))
-
-#define GET_INTEGER SCM_INUM 
-#define MAKE_INTEGER  SCM_MAKINUM
-
-#define MAKE_STRING(a) scm_mem2string(a,strlen(a))
-#define EVAL(a) scm_eval_string(MAKE_STRING(a))
-
-#define MAKE_SYM(a) gensym(SCM_SYMBOL_CHARS(a))
-
-#define MAKE_POINTER(a) scm_ulong2num((unsigned long)a)
-#define GET_POINTER(a) (void *)scm_num2ulong(a,0,"GET_POINTER()")
-
-#define GET_X(a) ((t_k_guile *)GET_POINTER(a))
-
-#define RU_ return SCM_UNSPECIFIED
-
-
-
-#include "m_pd.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <stdbool.h>
-#include <stdarg.h>
-
-
-struct k_guile_workaround;
-
-typedef struct k_guile
-{
-  t_object x_ob;
-
-  int num_ins;
-  int num_outs;
-
-  struct k_guile_workaround **inlets;
-  t_outlet **outlets;
-
-  SCM inlet_func;
-  SCM cleanup_func;
-
-  char *filename;
-
-  bool isinited;
-} t_k_guile;
-
-typedef struct k_guile_workaround{
-  t_object x_ob;
-  t_k_guile *x;
-  t_inlet *inlet;
-  int index;
-  SCM func;
-} t_k_guile_workaround;
-
-
-
-
-#define KG_MAX(a,b) (((a)>(b))?(a):(b))
-#define KG_MIN(a,b) (((a)<(b))?(a):(b))
-
-
-
-static char *version = 
-"k_guile v0.0.2, written by Kjetil S. Matheussen, k.s.matheussen@notam02.no";
-
-static t_class *k_guile_class, *k_guile_workaroundclass;
-
-static SCM pd_backtrace_run;
-static SCM pd_backtrace_runx;
-static SCM pd_backtrace_run1;
-static SCM pd_backtrace_run2;
-static SCM pd_backtrace_run3;
-static SCM pd_backtrace_run4;
-static SCM eval_string_func;
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Functions to evaluate large amount of scheme code from C.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static char *evalstring=NULL;
-static void eval2(char *string){
-  char *new;
-  if(evalstring==NULL){
-    new=malloc(strlen(string)+1);
-    sprintf(new,"%s",string);
-  }else{
-    new=malloc(strlen(evalstring)+strlen(string)+1);
-    sprintf(new,"%s%s",evalstring,string);
-    free(evalstring);
-  }
-  evalstring=new;
-}
-static void eval_file(FILE *file){
-  char line[50000];
-  for(;;){
-    int c=fgetc(file);
-    if(c==EOF) break;
-    ungetc(c,file);
-    fgets(line,49999,file);
-    eval2(line);
-  }
-}
-static SCM eval_do(void){
-  //post(evalstring);
-  SCM ret=EVAL(evalstring);
-  free(evalstring);
-  evalstring=NULL;
-  return ret;
-}
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Sending data to the guile side. Called either via bind or an inlet.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static void k_guile_anything_do(t_k_guile *x,int index,SCM func,t_symbol *s, t_int argc, t_atom* argv){
-  int lokke;
-  SCM applyarg=SCM_EOL;
-
-  for(lokke=argc-1;lokke>=0;lokke--){
-    SCM to=SCM_BOOL_F;
-    switch(argv[lokke].a_type){
-    case A_NULL:
-      to=SCM_EOL;
-      break;
-    case A_FLOAT:
-      to=scm_make_real(atom_getfloatarg(lokke,argc,argv));
-      break;
-    case A_SYMBOL:
-      to=scm_string_to_symbol(MAKE_STRING(atom_getsymbolarg(lokke,argc,argv)->s_name));
-      break;
-    default:
-      post("Strange");
-      break;
-    }
-    applyarg=scm_cons(to,applyarg);
-  }
-
-  if(index>=0){
-    // Inlet
-    scm_call_4(pd_backtrace_run3,x->inlet_func,MAKE_INTEGER(index),scm_string_to_symbol(MAKE_STRING(s->s_name)),applyarg);
-  }else{
-    // Binding
-    if(s!=&s_float && s!=&s_list && s!=&s_symbol){
-      applyarg=scm_cons(scm_string_to_symbol(MAKE_STRING(s->s_name)),applyarg);
-    }
-    if(s!=&s_list && GET_INTEGER(scm_length(applyarg))==1)
-      applyarg=SCM_CAR(applyarg);
-    scm_call_2(pd_backtrace_run1,func,applyarg);
-  }
-}
-
-// Handles inlet>0 and bindings
-static void k_guile_anything(t_k_guile_workaround *x2,t_symbol *s, t_int argc, t_atom* argv){
-  if(x2->index>=0){
-    // Inlet
-    k_guile_anything_do(x2->x,x2->index,0,s,argc,argv);
-  }else{
-    // Binding
-    k_guile_anything_do(NULL,x2->index,x2->func,s,argc,argv);
-  }
-}
-
-// Handles first inlet
-static void k_guile_anything_first(t_k_guile *x,t_symbol *s, t_int argc, t_atom* argv){
-  k_guile_anything_do(x,0,0,s,argc,argv);
-}
-
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Initialization, called from the guile side.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static SCM gpd_inlets(SCM instance,SCM num_ins){
-  int lokke;
-  t_k_guile *x=GET_X(instance);
-
-  if(x->isinited==true) goto exit;
-
-  x->num_ins=GET_INTEGER(num_ins);
-  x->inlets=calloc(sizeof(t_k_guile_workaround*),x->num_ins);
-
-  for(lokke=1;lokke<x->num_ins;lokke++){
-    t_k_guile_workaround *x2;
-    x2=(t_k_guile_workaround*)pd_new(k_guile_workaroundclass);
-    x->inlets[lokke]=x2;
-    x2->x=x;
-    x2->index=lokke;
-    x2->inlet=inlet_new(&x->x_ob,(t_pd*)x2,0,0);
-  }
-
- exit:
-  RU_;
-}
-static SCM gpd_outlets(SCM instance,SCM num_outs){
-  int lokke;
-  t_k_guile *x=GET_X(instance);
-
-  if(x->isinited==true) goto exit;
-
-  x->num_outs=GET_INTEGER(num_outs);
-  x->outlets=calloc(sizeof(t_outlet*),x->num_outs);
-
-  for(lokke=0;lokke<x->num_outs;lokke++){
-    x->outlets[lokke] = outlet_new(&x->x_ob, gensym("anything"));
-  }
-
- exit:
-  RU_;
-}
-
-static SCM gpd_inited_p(SCM instance){
-  t_k_guile *x=GET_X(instance);
-  if(x->isinited==true) return SCM_BOOL_T;
-  return SCM_BOOL_F;
-}
-static SCM gpd_get_num_inlets(SCM instance){
-  t_k_guile *x=GET_X(instance);
-  return MAKE_INTEGER(x->num_ins);
-}
-static SCM gpd_get_num_outlets(SCM instance){
-  t_k_guile *x=GET_X(instance);
-  return MAKE_INTEGER(x->num_outs);
-}
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Binding and unbinding. Called from the guile side. 
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static SCM gpd_bind(SCM symname,SCM func){
-  t_k_guile_workaround *x2;
-  x2=(t_k_guile_workaround*)pd_new(k_guile_workaroundclass);
-  x2->index=-1;
-  x2->func=func;
-  scm_protect_object(x2->func);
-  pd_bind((t_pd *)x2, MAKE_SYM(symname));
-  return MAKE_POINTER(x2);
-}
-static SCM gpd_unbind(SCM scm_x2,SCM symname){
-  t_k_guile_workaround *x2=GET_POINTER(scm_x2);
-  pd_unbind((t_pd *)x2,MAKE_SYM(symname));
-  scm_unprotect_object(x2->func);
-  pd_free((t_pd*)x2);
-  RU_;
-}
-
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Got data from the guile side. Distributing to outlets or receivers.
- *    The guile side is responsible for checking that the arguments are correct.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-#define GET_CLASS() (INTEGER_P(symbol)?(t_symbol*)GET_POINTER(symbol):MAKE_SYM(symbol))->s_thing
-#define CLASS_INIT t_class **s=GET_CLASS();if(s==NULL) post("no receiver"); else 
-#define GET_OUTLET() GET_X(instance)->outlets[GET_INTEGER(outlet)]
-
-
-/* Number -> float */
-static SCM gpd_outlet_number(SCM instance,SCM outlet,SCM val){
-  outlet_float(GET_OUTLET(),scm_num2dbl(val,"gpd_outlet"));
-  RU_;
-}
-
-
-static SCM gpd_send_number(SCM symbol,SCM val){
-  CLASS_INIT
-    pd_float(s,scm_num2dbl(val,"gpd_send_number"));
-  RU_;
-}
-
-
-/* List -> list */
-static t_atom *make_list(t_atom *atom,SCM val){
-  int lokke;
-  int length=GET_INTEGER(scm_length(val));
-
-  for(lokke=0;lokke<length;lokke++){
-    SCM el=scm_list_ref(val,MAKE_INTEGER(lokke));
-    t_atom *to=&atom[lokke];
-    if(SCM_INUMP(el)){
-      SETFLOAT(to,(float)GET_INTEGER(el));
-    }else{
-      if(SCM_UNBNDP(el)){
-	SETSYMBOL(to,gensym("undefined"));
-      }else{
-	if(SCM_STRINGP(el)){
-	  SETSYMBOL(to,gensym(SCM_STRING_CHARS(el)));
-	}else{
-	  if(SCM_SYMBOLP(el)){
-	    SETSYMBOL(to,MAKE_SYM(el));
-	  }else{
-	    if(scm_number_p(el)){
-	      if(scm_real_p(el)){
-		SETFLOAT(to,(float)scm_num2dbl(el,"gpd_outlet_or_send_list"));
-	      }else{
-		post("Illegal argument to gdp_outlet_or_send_list. Setting atom to 0.");
-		SETFLOAT(to,0.0f);
-	      }
-	    }
-	  }
-	}
-      }
-    }
-  }
-  return atom;
-}
-static SCM gpd_outlet_list(SCM instance,SCM outlet,SCM val){
-  int length=GET_INTEGER(scm_length(val));
-  t_atom atom[length];
-  outlet_list(GET_OUTLET(), &s_list,length,make_list(atom,val));
-  RU_;
-}
-static SCM gpd_send_list(SCM symbol,SCM val){
-  int length=GET_INTEGER(scm_length(val));
-  t_atom atom[length];
-  CLASS_INIT
-    pd_list(s, &s_list,length,make_list(atom,val));
-  RU_;
-}
-
-/* Symbol -> symbol */
-static SCM gpd_outlet_symbol(SCM instance,SCM outlet,SCM val){
-  outlet_symbol(GET_OUTLET(),MAKE_SYM(val));
-  RU_;
-}
-static SCM gpd_send_symbol(SCM symbol,SCM val){
-  CLASS_INIT
-    pd_symbol(s,MAKE_SYM(val));
-  RU_;
-}
-
-/* String -> symbol */
-static SCM gpd_outlet_string(SCM instance,SCM outlet,SCM val){
-  outlet_symbol(GET_OUTLET(),gensym(SCM_STRING_CHARS(val)));
-  RU_;
-}
-static SCM gpd_send_string(SCM symbol,SCM val){
-  CLASS_INIT
-    pd_symbol(s,gensym(SCM_STRING_CHARS(val)));
-  RU_;
-}
-
-/* Bang -> bang */
-static SCM gpd_outlet_bang(SCM instance,SCM outlet){
-  outlet_bang(GET_OUTLET());
-  RU_;
-}
-static SCM gpd_send_bang(SCM symbol){
-  CLASS_INIT
-    pd_bang(s);
-  RU_;
-}
-
-/* <- symbol */
-static SCM gpd_get_symbol(SCM symname){
-  return MAKE_POINTER(MAKE_SYM(symname));
-}
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Setting up global guile functions.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static void k_guile_init(void){
-  char *command=
-#include "global_scm.txt"
-    ;
-
-  scm_init_guile();
-  scm_c_define_gsubr("pd-c-outlets",2,0,0,gpd_outlets);
-  scm_c_define_gsubr("pd-c-inlets",2,0,0,gpd_inlets);
-  scm_c_define_gsubr("pd-c-inited?",1,0,0,gpd_inited_p);
-  scm_c_define_gsubr("pd-c-get-num-inlets",1,0,0,gpd_get_num_inlets);
-  scm_c_define_gsubr("pd-c-get-num-outlets",1,0,0,gpd_get_num_outlets);
-  scm_c_define_gsubr("pd-c-bind",2,0,0,gpd_bind);
-  scm_c_define_gsubr("pd-c-unbind",2,0,0,gpd_unbind);
-  scm_c_define_gsubr("pd-c-outlet-number",3,0,0,gpd_outlet_number);
-  scm_c_define_gsubr("pd-c-outlet-list",3,0,0,gpd_outlet_list);
-  scm_c_define_gsubr("pd-c-outlet-symbol",3,0,0,gpd_outlet_symbol);
-  scm_c_define_gsubr("pd-c-outlet-string",3,0,0,gpd_outlet_string);
-  scm_c_define_gsubr("pd-c-outlet-bang",2,0,0,gpd_outlet_bang);
-  scm_c_define_gsubr("pd-c-send-number",2,0,0,gpd_send_number);
-  scm_c_define_gsubr("pd-c-send-list",2,0,0,gpd_send_list);
-  scm_c_define_gsubr("pd-c-send-symbol",2,0,0,gpd_send_symbol);
-  scm_c_define_gsubr("pd-c-send-string",2,0,0,gpd_send_string);
-  scm_c_define_gsubr("pd-c-send-bang",1,0,0,gpd_send_bang);
-  scm_c_define_gsubr("pd-c-get-symbol",1,0,0,gpd_get_symbol);
-
-  EVAL(command);
-
-  pd_backtrace_run=EVAL("pd-backtrace-run");
-  scm_permanent_object(pd_backtrace_run);
-
-  pd_backtrace_runx=EVAL("pd-backtrace-runx");
-  scm_permanent_object(pd_backtrace_runx);
-
-  pd_backtrace_run1=EVAL("pd-backtrace-run1");
-  scm_permanent_object(pd_backtrace_run1);
-
-  pd_backtrace_run2=EVAL("pd-backtrace-run2");
-  scm_permanent_object(pd_backtrace_run2);
-
-  pd_backtrace_run3=EVAL("pd-backtrace-run3");
-  scm_permanent_object(pd_backtrace_run3);
-
-  pd_backtrace_run4=EVAL("pd-backtrace-run4");
-  scm_permanent_object(pd_backtrace_run4);
-
-  eval_string_func=EVAL("eval-string");
-}
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Starting and stopping new guile script
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static bool k_guile_load(t_k_guile *x,char *filename){
-  SCM evalret;
-  bool ret=false;
-  
-  FILE *file=fopen(filename,"r");
-  if(file==NULL){
-    post("file \"%s\" not found.\n",filename);
-    return false;
-  }
-
-
-  // Let the file live in its own name-space (or something like that).
-  eval2("(define (pd-instance-func pd-instance)");
-  eval2(
-#include "local_scm.txt"
-);
-  eval_file(file);
-  eval2("  (cons pd-inlet-func pd-cleanup-func))");
-  eval2("1");
-
-  if(1!=GET_INTEGER(eval_do())){
-    post("Failed.");
-    goto exit;
-  }
-
-  evalret=scm_call_2(pd_backtrace_run1,EVAL("pd-instance-func"),MAKE_POINTER(x));
-  if(INTEGER_P(evalret)){
-    post("Failed.");
-    goto exit;
-  }
-  x->inlet_func=SCM_CAR(evalret);
-  x->cleanup_func=SCM_CDR(evalret);
-  scm_gc_protect_object(x->inlet_func);
-  scm_gc_protect_object(x->cleanup_func);
-
-  ret=true;
-
- exit:
-  fclose(file);
-
-  return ret;
-}
-
-static void *k_guile_new(t_symbol *s){
-  int lokke;
-  t_k_guile *x = (t_k_guile *)pd_new(k_guile_class);
-  x->filename=s->s_name;
-  x->isinited=false;
-
-  if(k_guile_load(x,x->filename)==true){
-    x->isinited=true;
-    return x;
-  }
-
-  return NULL;
-}
-
-static void k_guile_free(t_k_guile *x){
-  int lokke;
-  scm_call_1(pd_backtrace_run,x->cleanup_func);
-  for(lokke=1;lokke<x->num_ins;lokke++){
-    inlet_free(x->inlets[lokke]->inlet);
-    pd_free((t_pd*)x->inlets[lokke]);
-  }
-  for(lokke=0;lokke<x->num_outs;lokke++){
-    outlet_free(x->outlets[lokke]);
-  }
-  scm_gc_unprotect_object(x->inlet_func);
-  scm_gc_unprotect_object(x->cleanup_func);
-
-  free(x->inlets);
-  free(x->outlets);
-}
-
-
-static void k_guile_reload(t_k_guile *x){
-  scm_call_1(pd_backtrace_run,x->cleanup_func);
-  scm_gc_unprotect_object(x->inlet_func);
-  scm_gc_unprotect_object(x->cleanup_func);
-  k_guile_load(x,x->filename);
-}
-
-static void k_guile_eval(t_k_guile *x,t_symbol *s){
-  scm_call_2(pd_backtrace_run1,eval_string_func,MAKE_STRING(s->s_name));
-}
-
-//static void k_guile_evalfile(t_k_guile *x,t_symbol *s){
-//}
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Das setup
- *****************************************************************************************************
- *****************************************************************************************************/
-void k_guile_setup(void){
-
-  k_guile_init();
-
-  k_guile_class = class_new(gensym("k_guile"), (t_newmethod)k_guile_new,
-			   (t_method)k_guile_free, sizeof(t_k_guile), 0, A_DEFSYM, 0);
-
-  class_addanything(k_guile_class, (t_method)k_guile_anything_first);
-  class_addmethod(k_guile_class, (t_method)k_guile_reload, gensym("reload"), 0);
-  class_addmethod(k_guile_class, (t_method)k_guile_eval, gensym("eval"), A_DEFSYM,0);
-  //class_addmethod(k_guile_class, (t_method)k_guile_evalfile, gensym("evalfile"), A_DEFSYM,0);
-  class_sethelpsymbol(k_guile_class, gensym("help-k_guile.pd"));
-
-
-  /* This trick(?) is taken from the flext source. (I don't understand what happens...) */
-  k_guile_workaroundclass=class_new(gensym("indexworkaround"),NULL,NULL,sizeof(t_k_guile_workaround),CLASS_PD|CLASS_NOINLET, A_NULL);
-  class_addanything(k_guile_workaroundclass,k_guile_anything);
-
- 
-  post(version);
-}
-
diff --git a/externals/k_guile/local.scm b/externals/k_guile/local.scm
deleted file mode 100644
index 65546b29b183e26e824750d28a5bf0e73b98f5f9..0000000000000000000000000000000000000000
--- a/externals/k_guile/local.scm
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-;; This file is evaluated (not (load)-ed) right before the file defined in the k_guile object in pd is evaluated or the
-;; reload message has been sent. (see k_guile.c/k_guile_new)
-;; Kjetil S. Matheussen, 2004.
-;;
-;;/* This program is free software; you can redistribute it and/or                */
-;;/* modify it under the terms of the GNU General Public License                  */
-;;/* as published by the Free Software Foundation; either version 2               */
-;;/* of the License, or (at your option) any later version.                       */
-;;/*                                                                              */
-;;/* This program is distributed in the hope that it will be useful,              */
-;;/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-;;/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-;;/* GNU General Public License for more details.                                 */
-;;/*                                                                              */
-;;/* You should have received a copy of the GNU General Public License            */
-;;/* along with this program; if not, write to the Free Software                  */
-;;/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-;;/*                                                                              */
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Instance data
-;;
-;;
-(define pd-num-inlets 1)
-(define pd-num-outlets 0)
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Argument checking
-;;
-;;
-(define (pd-legaloutlet outlet-num)
-  (if (and (< outlet-num pd-num-outlets) (>= outlet-num 0))
-      #t
-      (begin
-	(pd-display "outlet-num out of range")
-	#f)))
-
-(define (pd-legalinlet inlet-num)
-  (if (and (< inlet-num pd-num-inlets) (>= inlet-num 0))
-      #t
-      (begin
-	(pd-display "inlet-num out of range")
-	#f)))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Inlets
-;;
-;;
-(define pd-inlet-vector (make-vector 1 '()))
-(define pd-inlet-anyvector (make-vector 1 '()))
-
-;; This function is called from the C side when the object receives something on an inlet.
-(define (pd-inlet-func inlet-num symbol args)
-  (let ((inlet-func (assq symbol 
-			  (vector-ref pd-inlet-vector
-				      inlet-num))))
-    (if (not inlet-func)
-	(begin
-	  (set! inlet-func (assq 'any
-				 (vector-ref pd-inlet-vector inlet-num)))
-	  (set! args (cons symbol args))))
-    (if inlet-func
-	(apply (cadr inlet-func) args)
-	(pd-display "No function defined for handling \'" symbol " to inlet " inlet-num))))
-
-(define (pd-inlet inlet-num symbol func)
-  (if (not (procedure? func))
-      (pd-display "Wrong argument to pd-inlet: " func " is not a procedure")
-      (if (and (pd-check-number inlet-num "pd-inlet")
-	       (pd-legalinlet inlet-num))
-	  (let ((inlet-funcs (vector-ref (if (eq? symbol 'any)
-					     pd-inlet-anyvector
-					     pd-inlet-vector)
-					 inlet-num)))
-	    (vector-set! pd-inlet-vector 
-			 inlet-num
-			 (cons (list symbol func)
-			       inlet-funcs))))))
-
-(define (pd-inlets new-num-inlets)
-  (let ((num-inlets (if (pd-c-inited? pd-instance)
-			(pd-c-get-num-inlets pd-instance)
-			new-num-inlets)))
-    (if (pd-check-number num-inlets "pd-inlets")
-	(if (<= num-inlets 0)
-	    (pd-display "num-inlets must be greater than 0, not " num-inlets)
-	    (begin
-	      (set! pd-num-inlets num-inlets)
-	      (set! pd-inlet-vector (make-vector num-inlets '()))
-	      (pd-c-inlets pd-instance num-inlets))))))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Outlets
-;;
-;;
-(define (pd-outlets new-num-outlets)
-  (let ((num-outlets (if (pd-c-inited? pd-instance)
-			 (pd-c-get-num-outlets pd-instance)
-			 new-num-outlets)))
-    (if (pd-check-number num-outlets "pd-outlets")
-	(if (<= num-outlets 0)
-	    (pd-display "num-outlets must be greater than 0, not " num-outlets)
-	    (begin
-	      (set! pd-num-outlets num-outlets)
-	      (pd-c-outlets pd-instance num-outlets))))))
-
-(define (pd-outlet outlet-num firstarg . args)
-  (if (pd-legaloutlet outlet-num)
-      (cond ((> (length args) 0) (pd-c-outlet-list pd-instance outlet-num issymbol (cons firstarg args)))
-	    ((list? firstarg) (pd-c-outlet-list pd-instance outlet-num firstarg))
-	    ((number? firstarg) (pd-c-outlet-number pd-instance outlet-num firstarg))
-	    ((string? firstarg) (pd-c-outlet-string pd-instance outlet-num firstarg))
-	    ((eq? 'bang firstarg) (pd-c-outlet-bang pd-instance outlet-num))
-	    ((symbol? firstarg) (pd-c-outlet-symbol pd-instance outlet-num firstarg))
-	    (else
-	     (pd-display "Unknown argument to pd-outlet-or-send:" firstarg)))))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Bindings
-;;
-;;
-;; We must have our own local bind/unbind functions to be able to clean up automaticly.
-(define pd-local-bindings '())
-
-(define (pd-bind symbol func)
-  (set! pd-local-bindings (pd-bind-do symbol func pd-local-bindings)))
-
-(define (pd-unbind symbol)
-  (set! pd-local-bindings (pd-unbind-do symbol pd-local-bindings)))
-
-(define (pd-unbind-all)
-  (if (not (null? pd-local-bindings))
-      (begin
-	(pd-unbind (car (car pd-local-bindings)))
-	(pd-unbind-all))))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Cleanup
-;;
-;;
-(define pd-destroy-func #f)
-(define (pd-set-destroy-func thunk)
-  (if (not (procedure? thunk))
-      (pd-display "Wrong argument to pd-set-destroy-func: " thunk " is not a procedure.")
-      (set! pd-destroy-func thunk)))
-
-;; This func is called from the C-side.
-(define (pd-cleanup-func)
-  (if pd-destroy-func
-      (begin
-	(pd-destroy-func)
-	(set! pd-destroy-func #f)))
-  (pd-unbind-all))
-
diff --git a/externals/k_guile/mozilla.scm b/externals/k_guile/mozilla.scm
deleted file mode 100644
index e0e17b2ed3e4d6541fb26e54c6e6dd53197c729d..0000000000000000000000000000000000000000
--- a/externals/k_guile/mozilla.scm
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-(pd-inlet 0 'start
-	  (lambda x
-	    (system "mozilla&")))
-
-
-
diff --git a/externals/k_guile/send_receive.scm b/externals/k_guile/send_receive.scm
deleted file mode 100644
index bae76688dd4e548fa181743e0d3c71ded6f81d67..0000000000000000000000000000000000000000
--- a/externals/k_guile/send_receive.scm
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-;; Send out what comes in.
-(pd-bind 'in
-	 (lambda (arg)
-	   (pd-send 'out arg)))
-
-
-#!
-;; This one does the same and is faster, but requires some more typing:
-(let ((s-out (pd-get-symbol 'out)))
-  (pd-bind 'in
-	   (lambda (arg)
-	     (pd-send s-out arg))))
-!#
-
-
-#!
-;; And the following example will (most probably) lead to a segmentation fault:
-;; This is also the only way I can think of right now that will make pd segfault using the pd- interface.
-(pd-send 5 arg)
-!#
-
diff --git a/externals/k_jack~/README b/externals/k_jack~/README
deleted file mode 100644
index 30f6b02656c0b0e98e28280f43d21e8a58be755b..0000000000000000000000000000000000000000
--- a/externals/k_jack~/README
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-k_jack~ - General signal in/out external for pure data. Kjetil S. Matheussen.
-V0.0.2
-
-
-This external makes objects with signal inlets and outlets to jack ports. See
-the help patch.
-
-It works by calling functions and using variables in pd/src/s_audio.c that probably
-was not ment to be used for this purpose. But it works. And thats whats important.
-
-Changes
-v0.0.1->v0.0.2:
--Support for pure_data_1. And also pure_data_2/3/etc. if pd is compiled up with support
- for more than two simultaniously running pd sessions.
--Only connect ports once.
-
-
-Kjetil S. Matheussen
-k.s.matheussen@notam02.no
-
-
-
diff --git a/externals/k_jack~/k_jack~-help.pd b/externals/k_jack~/k_jack~-help.pd
deleted file mode 100644
index f8aa28d5a9e3d279fb68e7e4df119b104fd42681..0000000000000000000000000000000000000000
--- a/externals/k_jack~/k_jack~-help.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#N canvas 245 237 811 481 10;
-#X obj 20 67 osc~ 500;
-#X obj 96 113 k_jack~ freqtweak;
-#X obj 97 65 osc~ 600;
-#X obj 11 22 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 97 23 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 597 425 k_jack~ General jack in/out;
-#X text 593 443 -Kjetil S. Matheussen \, 2004;
-#X text 230 114 <- Make sure freqtweak is running first!;
-#X text 292 64 <- Argument is a regexp string;
-#X obj 171 64 k_jack~ alsa_pcm;
-#X text 227 181 <- Its no harm having two similar k_jack objects;
-#X obj 105 181 k_jack~ alsa_pcm;
-#X obj 11 269 k_jack~ alsa_pcm:capture;
-#X obj 11 246 k_jack~ alsa_pcm:playback;
-#X text 201 246 <- Only playback.;
-#X text 200 267 <- Only capture.;
-#X obj 10 355 k_jack~ * . . . . . . . . . . . . . . . . . . .;
-#X text 359 357 <- "*" means all jack ports available. (The "."-s are
-there just for spacing.);
-#X obj 12 297 k_jack~ _1;
-#X text 95 298 <- All ports containing "_1";
-#X connect 0 0 1 0;
-#X connect 1 0 11 0;
-#X connect 1 1 11 1;
-#X connect 2 0 1 1;
-#X connect 3 0 0 0;
-#X connect 4 0 2 0;
-#X connect 9 0 1 0;
-#X connect 9 1 1 1;
-#X coords 0 0 1 1 200 140 1;
diff --git a/externals/k_jack~/k_jack~.c b/externals/k_jack~/k_jack~.c
deleted file mode 100644
index 8f6d140754bc162631785bdc59cf1ef5a1313c78..0000000000000000000000000000000000000000
--- a/externals/k_jack~/k_jack~.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/* --------------------------- k_jack~  ----------------------------------- */
-/*   ;; Kjetil S. Matheussen, 2004.                                             */
-/*                                                                              */
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-
-
-#include <m_pd.h>
-#include <s_stuff.h>
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <jack/jack.h>
-
-
-// Currently, the jack implementation in PD only supports 2 pd instances.
-// However, it doesn't hurt to use 100, so we use 100 to be prepared for
-// the future.
-
-#define MAX_PD_JACKCLIENTS 100
-
-
-static char *version = 
-"k_jack~ v0.0.2, written by Kjetil S. Matheussen, k.s.matheussen@notam02.no";
-
-
-
-
-
-/***********************************************************/
-/********************* Jack part ***************************/
-/***********************************************************/
-
-struct JackPort{
-  struct JackPort *next;
-  char *name;
-  bool is_input;
-  int num;
-};
-
-static struct JackPort *jackports=NULL;
-
-/* Name(+":") of the client we belong to. ("pure_data_0:", "pure_data_1:", ...) */
-static char *clientname=NULL;
-
-
-
-static void set_pd_channels(int inc_ins,int inc_outs){
-  int num_recs=sys_get_inchannels();
-  int num_plays=sys_get_outchannels();
-
-  int t1[1]={0};
-  int t2[1]={0};
-  int t3[1]={num_recs+inc_ins};
-  int t4[1]={num_plays+inc_outs};
-  sys_close_audio();
-  sys_open_audio(1,t1,
-		 1,t3,
-		 1,t2,
-		 1,t4,
-		 sys_getsr(),sys_schedadvance/1000,1);
-}
-
-
-
-static bool find_clientname(jack_client_t *client){
-  bool ret=false;
-
-  if(clientname!=NULL){
-    ret=true;
-  }else{
-    int lokke;
-    int num_clients=0;
-    int num_ports[MAX_PD_JACKCLIENTS]={0};
-    char temp[500];
-    const char **ports;
-
-    for(lokke=0;lokke<MAX_PD_JACKCLIENTS;lokke++){
-      sprintf(temp,"pure_data_%d",lokke);
-      ports=jack_get_ports(client,temp,"",0);
-      if(ports!=NULL){
-	while(ports[num_ports[lokke]]!=NULL){
-	  num_ports[lokke]+=1;
-	}
-      }
-    }
-
-    set_pd_channels(1,1);    
-      
-    for(lokke=0;lokke<MAX_PD_JACKCLIENTS;lokke++){
-      int num_ports2[MAX_PD_JACKCLIENTS]={0};
-      sprintf(temp,"pure_data_%d",lokke);
-      ports=jack_get_ports(client,temp,"",0);
-      if(ports!=NULL){
-	while(ports[num_ports2[lokke]]!=NULL){
-	  num_ports2[lokke]+=1;
-	}
-      }
-      if(num_ports2[lokke]!=num_ports[lokke]){
-	clientname=malloc(500);
-	sprintf(clientname,"pure_data_%d:",lokke);
-	//post("Got clientname: -%s-",clientname);
-	ret=true;
-	break;
-      }
-    }
-    set_pd_channels(-1,-1);
-  }
-
-  return ret;
-}
-
-
-/* Nearly the same as jack_get_ports, but filter out pure_data_%d ports. */
-static const char **my_jack_get_ports(jack_client_t *client,char *name){
-  const char **ret;
-  const char **ports;
-  int lokke=0;
-  int to=0;
-  int num_ports=0;
-
-  if(!strcmp("*",name))
-    ports=jack_get_ports(client,"","",0);
-  else
-    ports=jack_get_ports(client,name,"",0);
-  if(ports==NULL) return NULL;
-
-  while(ports[num_ports]!=NULL){
-    num_ports++;
-  }
-  ret=calloc(sizeof(char *),num_ports);
-
-  while(ports[lokke]!=NULL){
-    if(strstr(ports[lokke],clientname)==NULL){
-      ret[to]=ports[lokke];
-      to++;
-    }
-    lokke++;
-  }
-  if(to==0){
-    free(ret);
-    ret=NULL;
-  }
-
- exit:
-  free(ports);
-  return ret;
-}
-
-
-/* Disconnect all the ports connection to an alsa_pcm port. */
-static void disconnect_all_alsa(jack_client_t *client,const char *portname){
-  int lokke=0;
-  jack_port_t *port=jack_port_by_name(client,portname);
-  const char **ports=jack_port_get_all_connections(client,port);
-  if(ports==NULL) return;
-
-  while(ports[lokke]!=NULL){
-    if(strstr(ports[lokke],"alsa_pcm:")==ports[lokke]){
-      if(jack_port_flags(port)&JackPortIsOutput){
-	jack_disconnect(client,portname,ports[lokke]);
-      }else{
-	jack_disconnect(client,ports[lokke],portname);
-      }
-    }
-    lokke++;
-  }
-  free(ports);
-}
-
-
-static int add_pd_channel(bool is_input){
-  set_pd_channels(is_input==true?0:1,is_input==true?1:0);
-  return is_input==true
-    ?sys_get_outchannels()-1
-    :sys_get_inchannels()-1;
-}
-
-
-/* Returns the dac/adc index the jackport with name 'portname' has in pd. Create if it doesn't exist. */
-static int get_portindex(jack_client_t *client,const char *portname, bool is_input){
-  struct JackPort *jp=jackports;
-
-  while(jp!=NULL){
-    if(!strcmp(jp->name,portname)) break;
-    jp=jp->next;
-  }
-  if(jp==NULL){
-    char temp[500];
-    char temp2[500];
-    jp=calloc(1,sizeof(struct JackPort));
-    jp->name=strdup(portname);
-    jp->is_input=is_input;
-    jp->num=add_pd_channel(is_input);
-    jp->next=jackports;
-    jackports=jp;
-    disconnect_all_alsa(client,portname);
-    if(is_input){
-      sprintf(temp,"%soutput%d",clientname,jp->num);
-      jack_connect(client,temp,portname);
-      sprintf(temp2,"to_%s",portname);
-    }else{
-      sprintf(temp,"%sinput%d",clientname,jp->num);
-      jack_connect(client,portname,temp);
-      sprintf(temp2,"from_%s",portname);
-    }
-    while(strstr(temp2,":")) strstr(temp2,":")[0]='-';
-    if(strlen(temp2)+strlen(clientname)<32)
-      jack_port_set_name(jack_port_by_name(client,temp),temp2);
-  }
-  return jp->num;
-}
-
-
-
-
-/***********************************************************/
-/********************* PD part *****************************/
-/***********************************************************/
-
-typedef struct _k_jack
-{
-  t_object x_obj;
-  int num_recs;
-  int num_plays;
-  int *rec_nums;
-  int *play_nums;
-  float x_float;
-} t_k_jack;
-
-
-static t_class *k_jack_class;
-
-
-
-static t_int *k_jack_perform_add(t_int *w){
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
-  int n = (int)(w[3]);
-  int lokke;
-
-  for(lokke=0;lokke<DEFDACBLKSIZE;lokke++){
-    out[lokke]+=in[lokke];
-  }
-
-  return (w+3);
-}
-
-
-static t_int *k_jack_perform_copy(t_int *w){
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
-  int lokke;
-  
-  for(lokke=0;lokke<DEFDACBLKSIZE;lokke++){
-    out[lokke]=in[lokke];
-  }
-
-  return (w+3);
-}
-
-
-static void k_jack_dsp(t_k_jack *x, t_signal **sp)
-{
-  int lokke;
-  int ch=0;
-
-  for(lokke=0;lokke<x->num_recs;lokke++){
-    if(sp[ch]->s_n!=DEFDACBLKSIZE)
-      post("k_jack~ wrong framesize. Is this possible?");
-    else
-      dsp_add(
-	      k_jack_perform_add,
-	      2,
-	      sp[ch]->s_vec,
-	      sys_soundout + x->rec_nums[lokke]*DEFDACBLKSIZE
-	      );
-    ch++;
-  }
-  for(lokke=0;lokke<x->num_plays;lokke++){
-    if(sp[ch]->s_n!=DEFDACBLKSIZE)
-      post("k_jack~ wrong framesize. Is this possible?");
-    else
-      dsp_add(
-	      k_jack_perform_copy,
-	      2,
-	      sys_soundin + x->play_nums[lokke]*DEFDACBLKSIZE,
-	      sp[ch]->s_vec
-	      );
-    ch++;
-  }
-}
-
-
-static void k_jack_free(t_k_jack *x){
-  free(x->rec_nums);
-  free(x->play_nums);
-}
-
-
-static void *k_jack_new(t_symbol *s){
-  int num_recs=0;
-  int num_plays=0;
-  int lokke=0;
-  static jack_client_t *client=NULL;
-  const char **ports=NULL;
-  t_k_jack *x=NULL;
-
-
-  if(sys_audioapi!=API_JACK){
-    post("Error. k_jack~ will not work without jack as the sound API.");
-    goto exit;
-  }
-
-  if(client==NULL){
-    for(lokke=0;lokke<MAX_PD_JACKCLIENTS;lokke++){
-      char temp[500];
-      sprintf(temp,"k_jack_tilde_%d",lokke);
-      client=jack_client_new(temp);
-      if(client!=NULL) break;
-    }
-  }
-
-  if(client==NULL){
-    post("k_jack~: Could not make jack client.");
-    goto exit;
-  }
-
-  if(find_clientname(client)==false){
-    post("k_jack~: Could not find the name of pure data jack client.");
-    goto exit;
-  }
-
-  ports=my_jack_get_ports(client,s->s_name);
-  if(ports==NULL){
-    post("k_jack~: Client \"%s\" not found.\n",s->s_name);
-    goto exit;
-  }
-  while(ports[lokke]!=NULL){
-    jack_port_t* port=jack_port_by_name(client,ports[lokke]);
-    //post("%s, type: %s, flags: %d",ports[lokke],jack_port_type(port),jack_port_flags(port));
-    if(jack_port_flags(port)&JackPortIsInput){
-      num_recs++;
-    }else{
-      if(jack_port_flags(port)&JackPortIsOutput){
-	num_plays++;
-      }
-    }
-    lokke++;
-  }
-
-  if(num_plays==0 && num_recs==0){
-    post("Client(s) containing the name \"%s\" have no input or output ports.",s->s_name);
-    goto exit;
-  }
-
-  x = (t_k_jack *)pd_new(k_jack_class);
-
-  x->rec_nums=calloc(sizeof(int),num_recs);
-  x->play_nums=calloc(sizeof(int),num_plays);
-
-  //post("recs: %d, plays: %d\n",num_recs,num_plays);
-  lokke=0;
-  while(ports[lokke]!=NULL){
-    jack_port_t* port=jack_port_by_name(client,ports[lokke]);
-    if(jack_port_flags(port)&JackPortIsInput){
-      x->rec_nums[x->num_recs]=get_portindex(client,ports[lokke],true);
-      if(x->num_recs>0)
-	  inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
-      //post("Made inlet %s %d",ports[lokke],x->rec_nums[x->num_recs]);
-      x->num_recs++;
-    }else{
-      if(jack_port_flags(port)&JackPortIsOutput){
-	x->play_nums[x->num_plays]=get_portindex(client,ports[lokke],false);
-	outlet_new(&x->x_obj, gensym("signal"));
-	//post("Made outlet %s %d",ports[lokke],x->play_nums[x->num_plays]);
-	x->num_plays++;
-      }
-    }
-    lokke++;
-  }
-
-
- exit:
-
-  if(ports!=NULL) free(ports);
-
-  /* Program crash if client is closed. (as a workaround, I made it static for reuse. -Kjetil) (I thought this gruesome bug was fixed!?!)*/
-  //if(client!=NULL) jack_client_close(client);
-
-  return (x);
-}
- 
-
-
-void k_jack_tilde_setup(void){
-  k_jack_class = class_new(gensym("k_jack~"), (t_newmethod)k_jack_new, (t_method)k_jack_free,
-			  sizeof(t_k_jack), 0, A_SYMBOL, 0);
-  CLASS_MAINSIGNALIN(k_jack_class, t_k_jack, x_float);
-  class_addmethod(k_jack_class, (t_method)k_jack_dsp, gensym("dsp"), A_CANT, 0);
-  
-  class_sethelpsymbol(k_jack_class, gensym("help-k_jack~.pd"));
-
-  post(version);
-}
-
-
diff --git a/externals/k_jack~/makefile b/externals/k_jack~/makefile
deleted file mode 100644
index a7b24227626874f2754c4a0bca1ecb4f5176bcb6..0000000000000000000000000000000000000000
--- a/externals/k_jack~/makefile
+++ /dev/null
@@ -1,97 +0,0 @@
-NAME=k_jack~
-CSYM=k_jack_tilde
-
-current: pd_linux
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-VC="C:\Programme\Microsoft Visual Studio\VC98"
-
-PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDNTLDIR)\user32.lib \
-	$(PDNTLDIR)\uuid.lib \
-	c:\pd\bin\pd.lib \
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-PDSRCDIR=../../pd/src
-LINUXINCLUDE =  -I$(PDSRCDIR)
-
-.c.pd_linux:
-	gcc $(LINUXCFLAGS) $(LINUXINCLUDE) -g -o $*.o -c $*.c
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc -lm -ljack
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s $*/$*.pd_linux ..
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: $(NAME).pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	$(CC) $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	$(CC) -bundle -bundle_loader ../../pd/bin/pd -undefined dynamic_lookup \
-		-o $*.pd_darwin $*.o 
-	rm -f $*.o
-
-# ----------------------------------------------------------
-
-clean:
-	rm -f *.o *.pd_* so_locations *~
diff --git a/externals/k_vst~/Makefile b/externals/k_vst~/Makefile
deleted file mode 100644
index 1b803223334e28920d24e0927be06e47569f421e..0000000000000000000000000000000000000000
--- a/externals/k_vst~/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-NAME=k_vst~
-CSYM=k_vst_tilde
-
-current: pd_linux
-
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDEPATH=../../src
-LINUXINCLUDE =  -I$(LINUXINCLUDEPATH) -I../../vstserver/include
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -I/site/include/wine -c $(NAME).c -I../include -DPLUGIN_TILDE_USE_VST -DPLUGIN_DEBUG -DPLUGIN_TILDE_VERBOSE
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -I/site/include/wine  -c plugin~_vst.c -I../include -DPLUGIN_TILDE_USE_VST -DPLUGIN_DEBUG -DPLUGIN_TILDE_VERBOSE 
-
-	ld --export-dynamic k_vst~.o plugin~_vst.o -shared -o $(NAME).pd_linux -lc -lm -L/usr/local/lib -L../../vstserver -lvst
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s k_vst~/$*.pd_linux ..
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
diff --git a/externals/k_vst~/README b/externals/k_vst~/README
deleted file mode 100644
index 40c167dec03ec0f78bf35ba454fd9129d03bfa6f..0000000000000000000000000000000000000000
--- a/externals/k_vst~/README
+++ /dev/null
@@ -1,26 +0,0 @@
-
-0.2.5 -> 0.2.6
--Code to allow space in dll names added. Code made by Thomas Charbonnel.
- Also updated the help2 patch to use space in dll name.
-
-0.2.4 -> 0.2.5
--New midicommands: "ctl", "pitchbend", "aftertouch", "prg", "noteon"
- and "noteoff". Code made by Thomas Charbonnel
--Made a better help patch.
-
-0.2.3 -> 0.2.4
-- Added support for VST effect/synth programs; these may now be changed with
-  the 'program' message and a program number.  (added by acb)
-  See the help2 example patch.
-
-V0.2.1 -> 0.2.3:
--Added simple noteon and noteoff messages for vst instruments.
- See help5-k_vst~.pd.
-
-Changes from v0.2.1 -> 0.2.2:
--Added opengui and closegui commands.
-
-
-See comment in the top of the file k_vst~ and the
-file org/README.
-
diff --git a/externals/k_vst~/abyss.pd b/externals/k_vst~/abyss.pd
deleted file mode 100644
index 8ea40269a14322aa51bb522d827f89e73687f18b..0000000000000000000000000000000000000000
--- a/externals/k_vst~/abyss.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 262 30 450 300 10;
-#X obj 131 111 k_vst~ abyss;
-#X msg 59 59 print;
-#X msg 131 68 opengui;
-#X obj 197 68 adc~;
-#X obj 172 147 dac~;
-#X connect 0 1 4 0;
-#X connect 0 2 4 1;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 1;
-#X connect 3 1 0 2;
diff --git a/externals/k_vst~/config.h b/externals/k_vst~/config.h
deleted file mode 100644
index 96c2f17e8c0f8f413a4038c2948c1206e041caba..0000000000000000000000000000000000000000
--- a/externals/k_vst~/config.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: config.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#ifndef __CONFIG_H__
-#define __CONFIG_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* plug-in architecture config */
-
-#if 0
-#ifdef __linux__ /* FIXME? */
-#define PLUGIN_TILDE_USE_LADSPA 1
-#else
-#define PLUGIN_TILDE_USE_LADSPA 0
-#endif
-#ifdef WIN32
-#define PLUGIN_TILDE_USE_VST 1
-#else
-#define PLUGIN_TILDE_USE_VST 0
-#endif
-#endif
-
-    /* make sure something was selected */
-#if (PLUGIN_TILDE_USE_LADSPA == 0) && (PLUGIN_TILDE_USE_VST == 0)
-#error Either PLUGIN_TILDE_USE_LADSPA or PLUGIN_TILDE_USE_VST must be positive
-#endif
-
-/* print debug information */
-#define PLUGIN_TILDE_DEBUG 0
-
-/* print "useful" information */
-#define PLUGIN_TILDE_VERBOSE 0
-
-/* force out-of-place processing */
-#define PLUGIN_TILDE_FORCE_OUTOFPLACE 0
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __CONFIG_H__ */
-/* EOF */
diff --git a/externals/k_vst~/help-k_vst~.pd b/externals/k_vst~/help-k_vst~.pd
deleted file mode 100644
index eb57407c5eb380d4c2c65187b77be8d85a271a65..0000000000000000000000000000000000000000
--- a/externals/k_vst~/help-k_vst~.pd
+++ /dev/null
@@ -1,25 +0,0 @@
-#N canvas 55 404 825 453 10;
-#X msg 20 138 aftertouch <value> <chan>;
-#X msg 23 99 pitchbend <value> <chan>;
-#X msg 22 177 prg <num> <chan>;
-#X msg 19 221 noteon <num> <level> <chan>;
-#X msg 24 59 ctl <cnum> <val> <chan>;
-#X obj 20 254 noteoff <num> <chan>;
-#X text 25 20 Midi commands:;
-#X text 25 35 --------------;
-#X text 280 25 GUI commands;
-#X text 281 38 -------------;
-#X msg 291 72 opengui;
-#X msg 293 111 closegui;
-#X text 495 17 Control value commands;
-#X msg 493 107 control /<control number> <value>;
-#X msg 493 62 control <control_name> <value>;
-#X text 287 184 Misc. commands;
-#X text 286 198 ---------------;
-#X msg 288 226 reset;
-#X msg 289 260 print;
-#X text 492 202 -----------------;
-#X msg 497 223 program <program number>;
-#X msg 497 262 programname <program name>;
-#X text 490 185 Program commands;
-#X obj 234 376 k_vst~ an_effect_or_softsynth.dll;
diff --git a/externals/k_vst~/help2-k_vst~.pd b/externals/k_vst~/help2-k_vst~.pd
deleted file mode 100644
index 585e5e439f136bc51094a18ce4687de447f64d18..0000000000000000000000000000000000000000
--- a/externals/k_vst~/help2-k_vst~.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#N canvas 531 498 450 300 10;
-#X text 281 30 mda_JX10 is available from http://www.mda-vst.com/;
-#X msg 118 152 print;
-#X msg 24 155 program \$1;
-#X floatatom 26 120 5 0 63;
-#X obj 242 250 dac~;
-#X obj 178 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -233017
--1;
-#N canvas 0 0 559 288 playscale 0;
-#X obj 60 42 inlet;
-#X obj 63 258 outlet;
-#X text 122 41 <- bang here;
-#X text 127 264 <- noteon/noteoff events go here;
-#X msg 65 172 noteoff 48;
-#X obj 79 100 delay 400;
-#X obj 154 100 delay 800;
-#X obj 234 100 delay 1200;
-#X msg 148 172 noteoff 52;
-#X msg 234 172 noteoff 55;
-#X msg 33 201 noteon 48 100;
-#X msg 135 201 noteon 52 100;
-#X msg 239 201 noteon 55 100;
-#X obj 312 100 delay 1600;
-#X obj 395 100 delay 2000;
-#X msg 339 201 noteon 59 100;
-#X msg 325 172 noteoff 59;
-#X msg 442 201 noteon 60 100;
-#X msg 413 172 noteoff 60;
-#X obj 132 126 delay 760;
-#X obj 63 126 delay 360;
-#X obj 210 126 delay 1160;
-#X obj 298 127 delay 1560;
-#X text 532 270 acb;
-#X connect 0 0 10 0;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 0 0 13 0;
-#X connect 0 0 14 0;
-#X connect 0 0 19 0;
-#X connect 0 0 5 0;
-#X connect 0 0 20 0;
-#X connect 0 0 21 0;
-#X connect 0 0 22 0;
-#X connect 4 0 1 0;
-#X connect 5 0 11 0;
-#X connect 6 0 12 0;
-#X connect 7 0 15 0;
-#X connect 8 0 1 0;
-#X connect 9 0 1 0;
-#X connect 10 0 1 0;
-#X connect 11 0 1 0;
-#X connect 12 0 1 0;
-#X connect 13 0 17 0;
-#X connect 14 0 18 0;
-#X connect 15 0 1 0;
-#X connect 16 0 1 0;
-#X connect 17 0 1 0;
-#X connect 18 0 1 0;
-#X connect 19 0 8 0;
-#X connect 20 0 4 0;
-#X connect 21 0 9 0;
-#X connect 22 0 16 0;
-#X restore 179 105 pd playscale;
-#X msg 70 196 reset;
-#X text 64 72 Click to hear->;
-#X msg 316 106 \; pd dsp 1;
-#X msg 315 150 \; pd dsp 0;
-#X text 31 35 Select preset below | | | V;
-#X obj 155 188 k_vst~ mda JX10;
-#X connect 1 0 12 0;
-#X connect 2 0 12 0;
-#X connect 3 0 2 0;
-#X connect 5 0 6 0;
-#X connect 6 0 12 0;
-#X connect 7 0 12 0;
-#X connect 12 1 4 0;
-#X connect 12 2 4 1;
diff --git a/externals/k_vst~/k_vst~.c b/externals/k_vst~/k_vst~.c
deleted file mode 100644
index a6c92c01bc12ea94dcebc380f5f5d8e7cc229103..0000000000000000000000000000000000000000
--- a/externals/k_vst~/k_vst~.c
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
-
-   k_vst~, a Pd tilde object for hosting VST plug-ins.
-
-   This is really just the plugin~ source made by Jarno Seppänen,
-   but with a few lines changed (very few that is) to make it
-   work with vst-plugins using the vstlib.
-
-   The name was changed from plugin~ to k_vst~ to avoid nameclash
-   with the plugin~ object running ladspa plugins.
-
-   This object is for i386 non-windows (ie. linux/freebsd) only.
-
-   Copyright (C) 2002 Kjetil S. Matheussen / Notam,
-   k.s.matheussen@notam02.no
-
-   VST program change code made by Andrew C. Bulhak (acb at dev.null.org)
-
-   MIDI code by Thomas Charbonnel <thomas@undata.org>.
-
-   Code to allow space in dll names also made by Thomas Charbonnel <thomas@undata.org>.
-
-
-------------------
-
-   plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: k_vst~.c,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#include "config.h"
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "plugin~.h"
-#include "plugin~_ladspa.h"
-#include "plugin~_vst.h"
-#include "version.h"
-
-#define AEFFECTX_H_LINUXWORKAROUND
-#include "vst/aeffectx.h"
-
-#if PLUGIN_TILDE_USE_LADSPA
-#define PLUGIN_TILDE_BRAND "LADSPA"
-#endif
-#if PLUGIN_TILDE_USE_VST
-#define PLUGIN_TILDE_BRAND "VST"
-#endif
-
-static t_class* plugin_tilde_class = NULL;
-
-
-static char valid_channel (float ch) {
-  if (ch < 1.) {
-    return 0;
-  } else if (ch > 16.) {
-    return 15;
-  } else {
-    return (char)(ch-1);
-  }
-}
-
-static void send_midi_to_plugin (
-				    Pd_Plugin_Tilde* x,
-				    char data0,
-				    char data1,
-				    char data2
-				)
-{
-  struct VstMidiEvent das_event;
-  struct VstMidiEvent *pevent=&das_event;
-
-  struct VstEvents events;
-
-  pevent->type = kVstMidiType;
-  pevent->byteSize = 24;
-  pevent->deltaFrames = 0;
-  pevent->flags = 0;
-  pevent->detune = 0;
-  pevent->noteLength = 0;
-  pevent->noteOffset = 0;
-  pevent->reserved1 = 0;
-  pevent->reserved2 = 0;
-  pevent->noteOffVelocity = 0;
-  pevent->midiData[0] = data0;
-  pevent->midiData[1] = data1;
-  pevent->midiData[2] = data2;
-  pevent->midiData[3] = 0;
-
-
-  events.numEvents = 1;
-  events.reserved  = 0;
-  events.events[0]=(VstEvent*)pevent;
-  
-  x->plugin.vst.instance->dispatcher(
-				     x->plugin.vst.instance,
-				     effProcessEvents, 0, 0, &events, 0.0f
-				     );
- 
-}
-
-static void plugin_tilde_ctl (
-				 Pd_Plugin_Tilde* x,
-				 t_float ctlnum,
-				 t_float ctlval,
-				 t_float ctlchan
-				 )
-{
-  send_midi_to_plugin(x, 0xb0 | valid_channel(ctlchan), (char)ctlnum, (char)ctlval);  
-}
-
-static void plugin_tilde_pitchbend (
-				 Pd_Plugin_Tilde* x,
-				 t_float pitchvalue,
-				 t_float pitchchan
-				 )
-{
-  send_midi_to_plugin(x, 0xe0 | valid_channel(pitchchan), (((int)pitchvalue)>>7) & 127, (int)pitchvalue & 127);  
-}
-
-static void plugin_tilde_aftertouch (
-				 Pd_Plugin_Tilde* x,
-				 t_float atvalue,
-				 t_float atchan
-				 )
-{
-  send_midi_to_plugin(x, 0xa0 | valid_channel(atchan), (char)atvalue, 0);  
-}
-
-
-
-static void plugin_tilde_prg (
-				 Pd_Plugin_Tilde* x,
-				 t_float prgnum,
-				 t_float prgchan
-				 )
-{
-  send_midi_to_plugin(x, 0xc0 | valid_channel(prgchan), (char)prgnum, 0);  
-}
-
-
-
-static void plugin_tilde_noteon (
-				 Pd_Plugin_Tilde* x,
-				 t_float notenum,
-				 t_float notevel,
-				 t_float notechan
-				 )
-{
-  send_midi_to_plugin(x, 0x90 | valid_channel(notechan), (char)notenum, (char)notevel);
-}
-
-static void plugin_tilde_noteoff(
-				 Pd_Plugin_Tilde* x,
-				 t_float notenum,
-				 t_float notechan
-				 )
-{
-  send_midi_to_plugin(x, 0x90 | valid_channel(notechan), (char)notenum, 0);
-}
-
-
-void
-k_vst_tilde_setup (void)
-{
-    /* Make a new Pd class with 2 string creation parameters */
-    plugin_tilde_class = class_new (gensym ("k_vst~"),
-				    (t_newmethod)plugin_tilde_new,
-				    (t_method)plugin_tilde_free,
-				    sizeof (Pd_Plugin_Tilde),
-				    0,
-				    A_GIMME, 0);
-    assert (plugin_tilde_class != NULL);
-
-    /* Let's be explicit in not converting the signals in any way */
-    assert (sizeof (float) == sizeof (t_float));
-#if PLUGIN_TILDE_USE_LADSPA
-    assert (sizeof (float) == sizeof (LADSPA_Data));
-#endif
-
-    /* Set the callback for DSP events; this is a standard Pd message */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_dsp,
-		     gensym ("dsp"),
-		     A_CANT, 0);
-
-    /* Set the callback for "control" messages in the first inlet;
-       this is a message of our own for changing LADSPA control
-       ports/VST parameters */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_ctl,
-		     gensym ("ctl"),
-		     A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_pitchbend,
-		     gensym ("pitchbend"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_aftertouch,
-		     gensym ("aftertouch"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_prg,
-		     gensym ("prg"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_noteon,
-		     gensym ("noteon"),
-		     A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_noteoff,
-		     gensym ("noteoff"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    /* Set the callback for "control" messages in the first inlet;
-       this is a message of our own for changing LADSPA control
-       ports/VST parameters */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_control,
-		     gensym ("control"),
-		     A_DEFSYM, A_DEFFLOAT, 0);
-
-    /* Register a callback for "print" messages in the first inlet;
-       this is a message for printing information on the plug-in */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_print,
-		     gensym ("print"),
-		     0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_opengui,
-		     gensym ("opengui"),
-		     0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_closegui,
-		     gensym ("closegui"),
-		     0);
-
-    /* Register a callback for "reset" messages in the first inlet;
-       this is a message for resetting plug-in state */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_reset,
-		     gensym ("reset"),
-		     0);
-
-    /* Register a callback for setting the program */
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_program,
-		     gensym ("program"),
-		     A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_programname,
-		     gensym ("programname"),
-		     A_DEFSYM, 0);
-
-    /* We have to make a "null" callback for signal input to the first
-       inlet or otherwise Pd'll gracefully fuck the inlets up */
-    class_addmethod (plugin_tilde_class,
-		     nullfn,
-		     gensym ("signal"),
-		     0);
-}
-
-static void*
-plugin_tilde_new (t_symbol* s_name, int argc, t_atom *argv)
-{
-    char buf[255];
-    char name[255];
-    int z;
-    int offset = 0;
-    Pd_Plugin_Tilde* x = NULL;
-    unsigned i = 0;
-
-    /* Allocate object struct */
-    x = (Pd_Plugin_Tilde*)pd_new (plugin_tilde_class);
-    assert (x != NULL);
-
-    /* Initialize object struct */
-    x->plugin_library = NULL;
-    x->plugin_library_filename = NULL;
-    x->num_audio_inputs = 0;
-    x->num_audio_outputs = 0;
-    x->num_control_inputs = 0;
-    x->num_control_outputs = 0;
-    x->audio_inlets = NULL;
-    x->audio_outlets = NULL;
-    x->control_outlet = NULL;
-    x->dsp_vec = NULL;
-    x->dsp_vec_length = 0;
-
-    for (z = 0; z < argc; z++) {
-	atom_string(&argv[z], buf, 255);
-	if (z == 0)
-	{
-	    snprintf(&name[offset], 255, "%s", buf);
-	    offset += strnlen(buf, 255); 
-	} else {
-	    if (255-offset > 0) {
-		snprintf(&name[offset], 255-offset, " %s", buf);
-		offset += strnlen(buf, 255);
-	    }
-	}
-    }
-    
-    /* Construct the clock */
-    x->x_clock = clock_new (x, (t_method)plugin_tilde_tick);
-    assert (x->x_clock != NULL);
-
-#if PLUGIN_TILDE_USE_LADSPA
-    assert (&name[0] != NULL);
-    if (&name[0] == NULL || strlen (&name[0]) == 0) {
-	/* Search for the plugin library */
-	x->plugin_library_filename = plugin_tilde_search_plugin (x, &name[0]);
-	if (x->plugin_library_filename == NULL) {
-	    error ("plugin~: " PLUGIN_TILDE_BRAND " plugin not found in any library");
-	    goto PLUGIN_TILDE_NEW_RETURN_NULL;
-	}
-    }
-    else {
-	/* Search in the given plugin library */
-	x->plugin_library_filename = strdup (&name[0]);
-    }
-#endif /* PLUGIN_TILDE_USE_LADSPA */
-#if PLUGIN_TILDE_USE_VST
-    /* Remember plugin library filename */
-    x->plugin_library_filename = strdup (&name[0]);
-#endif /* PLUGIN_TILDE_USE_VST */
-
-    /* Load LADSPA/VST plugin */
-    if (plugin_tilde_open_plugin (x,
-				  &name[0],
-				  x->plugin_library_filename,
-				  (unsigned long)sys_getsr ())) {
-	error ("plugin~: Unable to open " PLUGIN_TILDE_BRAND " plugin");
-	goto PLUGIN_TILDE_NEW_RETURN_NULL;
-    }
-
-    /* Start the clock (used for plug-in GUI update) */
-    plugin_tilde_tick (x);
-
-    /* Create in- and outlet(s) */
-
-    /* Allocate memory for in- and outlet pointers */
-    x->audio_inlets = (t_inlet**)calloc (x->num_audio_inputs, sizeof (t_inlet*));
-    x->audio_outlets = (t_outlet**)calloc (x->num_audio_outputs, sizeof (t_outlet*));
-    assert (x->audio_inlets != NULL && x->audio_outlets != NULL);
-
-    /* The first inlet is always there (needn't be created), and is
-       used for control messages.  Now, create the rest of the
-       inlets for audio signal input. */ 
-    for (i = 0; i < x->num_audio_inputs; i++) {
-	x->audio_inlets[i] = inlet_new (&x->x_obj,
-					&x->x_obj.ob_pd,
-					gensym ("signal"),
-					gensym ("signal"));
-    }
-
-    /* We use the first outlet always for LADSPA/VST parameter control
-       messages */
-    x->control_outlet = outlet_new (&x->x_obj, gensym ("control"));
-
-    /* The rest of the outlets are used for audio signal output */
-    for (i = 0; i < x->num_audio_outputs; i++) {
-	x->audio_outlets[i] = outlet_new (&x->x_obj, gensym ("signal"));
-    }
-
-    /* Allocate memory for DSP parameters */
-    x->dsp_vec_length = x->num_audio_inputs + x->num_audio_outputs + 2;
-    x->dsp_vec = (t_int*)calloc (x->dsp_vec_length, sizeof (t_int));
-    assert (x->dsp_vec != NULL);
-
-    return x;
-
-    /* erroneous returns */
- PLUGIN_TILDE_NEW_RETURN_NULL:
-    if (x->plugin_library_filename != NULL) {
-	free ((void*)x->plugin_library_filename);
-	x->plugin_library_filename = NULL;
-    }
-    if (x->x_clock != NULL) {
-	clock_free (x->x_clock);
-	x->x_clock = NULL;
-    }
-    return NULL; /* Indicate error to Pd */
-}
-
-static void
-plugin_tilde_free (Pd_Plugin_Tilde* x)
-{
-    unsigned i = 0;
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* Stop and destruct the clock */
-    clock_unset (x->x_clock);
-    clock_free (x->x_clock);
-    x->x_clock = NULL;
-
-    /* Unload LADSPA/VST plugin */
-    plugin_tilde_close_plugin (x);
-
-    /* Free DSP parameter memory */
-    if (x->dsp_vec != NULL) {
-	free (x->dsp_vec);
-	x->dsp_vec = NULL;
-	x->dsp_vec_length = 0;
-    }
-
-    /* Destroy inlets */
-    if (x->audio_inlets != NULL) {
-	for (i = 0; i < x->num_audio_inputs; i++) {
-	    inlet_free (x->audio_inlets[i]);
-	}
-	free (x->audio_inlets);
-	x->audio_inlets = NULL;
-    }
-
-    /* Destroy outlets */
-    if (x->control_outlet != NULL) {
-	outlet_free (x->control_outlet);
-	x->control_outlet = NULL;
-    }
-    if (x->audio_outlets != NULL) {
-	for (i = 0; i < x->num_audio_outputs; i++) {
-	    outlet_free (x->audio_outlets[i]);
-	}
-	free (x->audio_outlets);
-	x->audio_outlets = NULL;
-    }
-
-
-    if (x->plugin_library_filename != NULL) {
-	free ((void*)x->plugin_library_filename);
-	x->plugin_library_filename = NULL;
-    }
-
-}
-
-static void
-plugin_tilde_tick (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* Issue a GUI update (FIXME should use separate GUI thread) */
-    plugin_tilde_update_gui (x);
-
-    /* Schedule next update */
-    clock_delay (x->x_clock, 100); /* FIXME period OK? */
-}
-
-static void
-plugin_tilde_dsp (Pd_Plugin_Tilde* x, t_signal** sp)
-{
-    unsigned i = 0;
-    unsigned long num_samples;
-
-    num_samples = sp[0]->s_n;
-
-    /* Pack vector of parameters for DSP routine */
-    x->dsp_vec[0] = (t_int)x;
-    x->dsp_vec[1] = (t_int)num_samples;
-    /* Inputs are before outputs; ignore the first "null" input */
-    for (i = 2; i < x->dsp_vec_length; i++) {
-	x->dsp_vec[i] = (t_int)(sp[i - 1]->s_vec);
-    }
-
-    /* Connect audio ports with buffers (this is only done when DSP
-       processing begins) */
-    plugin_tilde_connect_audio (x,
-				(float**)(&x->dsp_vec[2]),
-				(float**)(&x->dsp_vec[2 + x->num_audio_inputs]),
-				num_samples);
-
-    /* add DSP routine to Pd's DSP chain */
-    dsp_addv (plugin_tilde_perform, x->dsp_vec_length, x->dsp_vec);
-}
-
-static t_int*
-plugin_tilde_perform (t_int* w)
-{
-    unsigned i = 0;
-    Pd_Plugin_Tilde* x = NULL;
-    t_float** audio_inputs = NULL;
-    t_float** audio_outputs = NULL;
-    int num_samples = 0;
-
-    /* precondition(s) */
-    assert (w != NULL);
-
-    /* Unpack DSP parameter vector */
-    x = (Pd_Plugin_Tilde*)(w[1]);
-    num_samples = (int)(w[2]);
-    audio_inputs = (t_float**)(&w[3]);
-    audio_outputs = (t_float**)(&w[3 + x->num_audio_inputs]);
-
-    /* Call the LADSPA/VST plugin */
-    plugin_tilde_apply_plugin (x);
-
-    return w + (x->dsp_vec_length + 1);
-}
-
-void
-plugin_tilde_emit_control_output (Pd_Plugin_Tilde* x,
-				  const char* name,
-				  float new_value)
-{
-    /* Construct and outlet a "control" message with two Pd atoms */
-    t_atom anything_atoms[2];
-    anything_atoms[0].a_type = A_SYMBOL;
-    anything_atoms[0].a_w.w_symbol = gensym ((char*)name);
-    anything_atoms[1].a_type = A_FLOAT;
-    anything_atoms[1].a_w.w_float = new_value;
-    outlet_anything (x->control_outlet, gensym ("control"), 2, anything_atoms);
-}
-
-static void
-plugin_tilde_control (Pd_Plugin_Tilde* x,
-		      t_symbol* ctrl_name,
-		      t_float ctrl_value)
-     /* Change the value of a named control port of the plug-in */
-{
-    unsigned parm_num = 0;
-
-    /* precondition(s) */
-    assert (x != NULL);
-    /* FIXME we assert that the plug-in is already properly opened */
-    if (ctrl_name->s_name == NULL || strlen (ctrl_name->s_name) == 0) {
-	error ("plugin~: control messages must have a name and a value");
-	return;
-    }
-    if (ctrl_name->s_name[0]=='/'){
-      parm_num = atoi(ctrl_name->s_name+1);
-    }else{
-      parm_num = plugin_tilde_get_parm_number (x, ctrl_name->s_name);
-    }
-    if (parm_num) {
-	plugin_tilde_set_control_input_by_index (x, parm_num - 1, ctrl_value);
-    }
-    else {
-	plugin_tilde_set_control_input_by_name (x, ctrl_name->s_name, ctrl_value);
-    }
-}
-
-static void plugin_tilde_opengui (Pd_Plugin_Tilde* x){
-#if PLUGIN_TILDE_USE_VST
-  plugin_tilde_vst_open_editor(x);
-#endif
-}
-
-static void plugin_tilde_closegui (Pd_Plugin_Tilde* x){
-#if PLUGIN_TILDE_USE_VST
-  plugin_tilde_vst_close_editor(x);
-#endif
-}
-
-static void
-plugin_tilde_print (Pd_Plugin_Tilde* x)
-     /* Print plug-in name, port names and other information */
-
-/*
-stereo_amp: "Stereo amplifier"; control 1 in/0 out; audio 2 in/2 out
-Control inputs:
-Control outputs:
-Audio inputs:
-Audio outputs:
- */
-{
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if 1
-    printf("This is k_vst~ version %s. Made by Kjetil S. Matheussen, but ~99.9 percent based on code\n",PLUGIN_TILDE_VERSION);
-    printf("written by Jarno Seppänen.\n\n");
-#else
-    printf ("This is plugin~ version %s -- NO WARRANTY -- Copyright (C) 2000 Jarno Seppänen\n",
-	    PLUGIN_TILDE_VERSION);
-#endif
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_print (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_print (x);
-#endif
-}
-
-static void
-plugin_tilde_reset (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_reset (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_reset (x);
-#endif
-}
-
-static unsigned
-plugin_tilde_get_parm_number (Pd_Plugin_Tilde* x,
-			      const char* str)
-/* find out if str points to a parameter number or not and return the
-   number or zero.  The number string has to begin with a '#' character */
-{
-    long num = 0;
-    char* strend = NULL;
-    
-    assert (x != NULL);
-    if (str == NULL) {
-	return 0;
-    }
-    if (str[0] != '#') {
-	return 0;
-    }
-    num = strtol (&str[1], &strend, 10);
-    if (str[1] == 0 || *strend != 0) {
-	/* invalid string */
-	return 0;
-    }
-    else if (num >= 1 && num <= (long)x->num_control_inputs) {
-	/* string ok and within range */
-	return (unsigned)num;
-    }
-    else {
-	/* number out of range */
-	return 0;
-    }
-}
-
-static const char*
-plugin_tilde_search_plugin (Pd_Plugin_Tilde* x,
-			    const char* name)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    return plugin_tilde_ladspa_search_plugin (x, name);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    return plugin_tilde_vst_search_plugin (x, name);
-#endif
-}
-
-static int
-plugin_tilde_open_plugin (Pd_Plugin_Tilde* x,
-			  const char* name,
-			  const char* lib_name,
-			  unsigned long sample_rate)
-{
-    int ret = 0;
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: open_plugin (x, \"%s\", \"%s\", %ld);",
-	   name, lib_name, sample_rate);
-#endif
-
-#if PLUGIN_TILDE_USE_LADSPA
-    ret = plugin_tilde_ladspa_open_plugin (x, name, lib_name, sample_rate);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    ret = plugin_tilde_vst_open_plugin (x, name, lib_name, sample_rate);
-#endif
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: plugin active");
-#endif
-
-#if PLUGIN_TILDE_VERBOSE
-    plugin_tilde_print (x);
-#endif
-    return ret;
-}
-
-static void
-plugin_tilde_close_plugin (Pd_Plugin_Tilde* x)
-{
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: close_plugin (x)");
-#endif
-
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_close_plugin (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_close_plugin (x);
-#endif
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: destructed plugin successfully");
-#endif
-}
-
-static void
-plugin_tilde_apply_plugin (Pd_Plugin_Tilde* x)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_apply_plugin (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_apply_plugin (x);
-#endif
-}
-
-static void
-plugin_tilde_connect_audio (Pd_Plugin_Tilde* x,
-			    float** audio_inputs,
-			    float** audio_outputs,
-			    unsigned long num_samples)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_connect_audio (x, audio_inputs, audio_outputs,
-				       num_samples);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_connect_audio (x, audio_inputs, audio_outputs,
-				    num_samples);
-#endif
-}
-
-static void
-plugin_tilde_set_control_input_by_name (Pd_Plugin_Tilde* x,
-					const char* name,
-					float value)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_set_control_input_by_name (x, name, value);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_set_control_input_by_name (x, name, value);
-#endif
-}
-
-static void
-plugin_tilde_set_control_input_by_index (Pd_Plugin_Tilde* x,
-					 unsigned index_,
-					 float value)
-/* plugin~.c:535: warning: declaration of `index' shadows global declaration */
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_set_control_input_by_index (x, index_, value);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_set_control_input_by_index (x, index_, value);
-#endif
-}
-
-static void
-plugin_tilde_update_gui (Pd_Plugin_Tilde* x)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    /* FIXME LADSPA doesn't support GUI's at the moment */
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_update_gui (x);
-#endif
-}
-
-static void
-plugin_tilde_program (Pd_Plugin_Tilde* x, t_float prog_num)
-	/* set the plugin's controls to one of its presets */
-{
-#if PLUGIN_TILDE_USE_LADSPA
-#endif
-#if PLUGIN_TILDE_USE_VST
-	plugin_tilde_vst_set_program(x, (long) prog_num);
-#endif
-}
-
-static void
-plugin_tilde_programname (Pd_Plugin_Tilde* x, t_symbol* progname)
-	/* set the name of the current program in the plugin */
-{
-#if PLUGIN_TILDE_USE_LADSPA
-#endif
-#if PLUGIN_TILDE_USE_VST
-    if (progname->s_name == NULL || strlen (progname->s_name) == 0) {
-	error ("plugin~: control messages must have a name and a value");
-	return;
-    }
-    plugin_tilde_vst_set_program_name(x, progname->s_name);
-#endif
-}
-
-
-/* EOF */
diff --git a/externals/k_vst~/plugin~.h b/externals/k_vst~/plugin~.h
deleted file mode 100644
index 23cb3765d6073890f1cf4dab81a2d732beafa1ca..0000000000000000000000000000000000000000
--- a/externals/k_vst~/plugin~.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#ifndef __PLUGIN_TILDE_H__
-#define __PLUGIN_TILDE_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "config.h"
-
-/* Pd header */
-#ifndef MAXPDSTRING /* lame */
-#include "m_pd.h"
-#endif /* MAXPDSTRING */
-
-#if 0
-#  if PLUGIN_TILDE_USE_LADSPA
-#    include "plugin~_ladspa.h"
-#  endif
-#  if PLUGIN_TILDE_USE_VST
-#    include "plugin~_vst.h"
-#  endif
-#endif /* 0 */
-/*
- * Now I've moved the following two plug-in-architecture-specific structures
- * here because having them in plugin~_ladspa.h and plugin~_vst.h proper will
- * result in a cyclical header dependency
- */
-#if PLUGIN_TILDE_USE_LADSPA
-#include "ladspa/ladspa.h"
-typedef struct
-{
-    const LADSPA_Descriptor*	type;
-    LADSPA_Handle*	instance;
-
-    /* Memory to pass async control data to/from the plugin */
-    float*		control_input_values;
-    float*		control_output_values;
-    /* Used for monitoring changes in the values */
-    float*		prev_control_output_values;
-    int			prev_control_output_values_invalid;
-
-    /* Pointers to signal memory for out-of-place processing */
-    float**		outofplace_audio_outputs;
-    float**		actual_audio_outputs;	/* real audio outputs for out-of-place */
-
-    unsigned long	num_samples;
-    unsigned long	sample_rate;
-
-} Plugin_Tilde_Ladspa;
-#endif /* PLUGIN_TILDE_USE_LADSPA */
-
-#if PLUGIN_TILDE_USE_VST
-#include "vst/AEffect.h"
-typedef struct
-{
-    AEffect*		instance;
-
-    /* audio wire buffer information */
-    float**		audio_inputs;
-    float**		audio_outputs;
-    unsigned long	num_samples;
-
-    int			editor_open;
-
-} Plugin_Tilde_Vst;
-#endif /* PLUGIN_TILDE_USE_VST */
-
-typedef struct
-{
-    /* Pd's way of object-oriented programming */
-    t_object		x_obj;
-    t_clock*		x_clock;
-
-    /* Access to LADSPA/VST plugins */
-    void*		plugin_library;
-    const char*		plugin_library_filename; /* only for diagnostics */
-    union {
-#if PLUGIN_TILDE_USE_LADSPA
-	Plugin_Tilde_Ladspa	ladspa;
-#endif
-#if PLUGIN_TILDE_USE_VST
-	Plugin_Tilde_Vst	vst;
-#endif
-    }			plugin;
-
-    /* Plugin information */
-    unsigned		num_audio_inputs;
-    unsigned		num_audio_outputs;
-    unsigned		num_control_inputs;
-    unsigned		num_control_outputs;
-
-    /* Pointers to our Pd in- and outlets */
-    t_inlet**		audio_inlets;
-    t_outlet**		audio_outlets;
-    t_outlet*		control_outlet;
-
-    /* Pd's way of passing parameters to the DSP routine */
-    t_int*		dsp_vec;
-    unsigned		dsp_vec_length;
-
-} Pd_Plugin_Tilde;
-
-/* Object construction and destruction */
-void		plugin_tilde_setup (void);
-static void*	plugin_tilde_new (t_symbol* s_name, int argc, t_atom *argv);
-static void	plugin_tilde_free (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_tick (Pd_Plugin_Tilde* x);
-
-/* DSP callbacks */
-static void	plugin_tilde_dsp (Pd_Plugin_Tilde* x, t_signal** sp);
-static t_int*	plugin_tilde_perform (t_int* w);
-
-/* Plugin callback for sending control output messages */
-void	plugin_tilde_emit_control_output (Pd_Plugin_Tilde* x,
-					  const char* name,
-					  float new_value);
-
-/* First inlet message callback for "control" messages */
-static void	plugin_tilde_control (Pd_Plugin_Tilde* x,
-				      t_symbol* ctrl_name,
-				      t_float ctrl_value);
-
-static void plugin_tilde_opengui (Pd_Plugin_Tilde* x);
-
-static void plugin_tilde_closegui (Pd_Plugin_Tilde* x);
-
-/* First inlet message callback for "control" messages */
-static void	plugin_tilde_print (Pd_Plugin_Tilde* x);
-
-/* First inlet message callback for "reset" messages */
-static void	plugin_tilde_reset (Pd_Plugin_Tilde* x);
-
-static unsigned	plugin_tilde_get_parm_number (Pd_Plugin_Tilde* x,
-					      const char* str);
-
-/* internal API to wrap the different plug-in interfaces */
-static const char*	plugin_tilde_search_plugin (Pd_Plugin_Tilde* x,
-						    const char* name);
-static int	plugin_tilde_open_plugin (Pd_Plugin_Tilde* x,
-					  const char* name,
-					  const char* lib_name,
-					  unsigned long sample_rate);
-static void	plugin_tilde_close_plugin (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_apply_plugin (Pd_Plugin_Tilde* x);
-
-static void	plugin_tilde_connect_audio (Pd_Plugin_Tilde* x,
-					    float** audio_inputs,
-					    float** audio_outputs,
-					    unsigned long num_samples);
-static void	plugin_tilde_set_control_input_by_name (Pd_Plugin_Tilde* x,
-						const char* name,
-						float value);
-static void	plugin_tilde_set_control_input_by_index (Pd_Plugin_Tilde* x,
-						unsigned index_,
-						float value);
-/*static float	plugin_tilde_get_control_input (Pd_Plugin_Tilde* x,
-						unsigned int index);*/
-static void	plugin_tilde_update_gui (Pd_Plugin_Tilde* x);
-
-static void     plugin_tilde_program (Pd_Plugin_Tilde* x, t_float prog_num);
-static void     plugin_tilde_programname (Pd_Plugin_Tilde* x, t_symbol* progname);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __PLUGIN_TILDE_H__ */
-/* EOF */
diff --git a/externals/k_vst~/plugin~_ladspa.h b/externals/k_vst~/plugin~_ladspa.h
deleted file mode 100644
index 88e0086b72c15ec5ffef94bf1ffc81adcc1cb27b..0000000000000000000000000000000000000000
--- a/externals/k_vst~/plugin~_ladspa.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~_ladspa.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#ifndef __PLUGIN_TILDE_LADSPA_H__
-#define __PLUGIN_TILDE_LADSPA_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "config.h"
-
-#if PLUGIN_TILDE_USE_LADSPA
-
-#include "plugin~.h"
-
-/* LADSPA header */
-#include "ladspa/ladspa.h"
-
-#if 0 /* moved to plugin~.h because of cyclical header dependency */
-typedef struct
-{
-    const LADSPA_Descriptor*	type;
-    LADSPA_Handle*	instance;
-
-    /* Memory to pass async control data to/from the plugin */
-    float*		control_input_values;
-    float*		control_output_values;
-    /* Used for monitoring changes in the values */
-    float*		prev_control_output_values;
-    int			prev_control_output_values_invalid;
-
-    /* Pointers to signal memory for out-of-place processing */
-    float**		outofplace_audio_outputs;
-    float**		actual_audio_outputs;	/* real audio outputs for out-of-place */
-
-    unsigned long	num_samples;
-    unsigned long	sample_rate;
-
-} Plugin_Tilde_Ladspa;
-#endif /* moved to plugin~.h because of cyclical header dependency */
-
-
-/* subroutines to wrap the LADSPA interface */
-const char*	plugin_tilde_ladspa_search_plugin (Pd_Plugin_Tilde* x,
-						   const char* name);
-int	plugin_tilde_ladspa_open_plugin (Pd_Plugin_Tilde* x,
-					 const char* name,
-					 const char* lib_name,
-					 unsigned long sample_rate);
-void	plugin_tilde_ladspa_close_plugin (Pd_Plugin_Tilde* x);
-void	plugin_tilde_ladspa_apply_plugin (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_ladspa_print (Pd_Plugin_Tilde* x);
-void	plugin_tilde_ladspa_reset (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_ladspa_connect_audio (Pd_Plugin_Tilde* x,
-					   float** audio_inputs,
-					   float** audio_outputs,
-					   unsigned long num_samples);
-void	plugin_tilde_ladspa_set_control_input_by_name (Pd_Plugin_Tilde* x,
-					       const char* name,
-					       float value);
-void	plugin_tilde_ladspa_set_control_input_by_index (Pd_Plugin_Tilde* x,
-					       unsigned index_,
-					       float value);
-/*float	plugin_tilde_ladspa_get_control_input (Pd_Plugin_Tilde* x,
-					       const char* name);*/
-/* Control output is handled with plugin_tilde_emit_control_output() callback */
-
-/* Local subroutines */
-static void	plugin_tilde_ladspa_search_plugin_callback (const char* full_filename,
-							    void* plugin_handle,
-							    LADSPA_Descriptor_Function descriptor_function,
-							    void* user_data);
-static void	plugin_tilde_ladspa_count_ports (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_ladspa_connect_control_ports (Pd_Plugin_Tilde* x);
-
-static int	plugin_tilde_ladspa_alloc_outofplace_memory (Pd_Plugin_Tilde* x, unsigned long buflen);
-static void	plugin_tilde_ladspa_free_outofplace_memory (Pd_Plugin_Tilde* x);
-static int	plugin_tilde_ladspa_alloc_control_memory (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_ladspa_free_control_memory (Pd_Plugin_Tilde* x);
-
-#endif /* PLUGIN_TILDE_USE_LADSPA */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __PLUGIN_TILDE_LADSPA_H__ */
-/* EOF */
diff --git a/externals/k_vst~/plugin~_vst.c b/externals/k_vst~/plugin~_vst.c
deleted file mode 100644
index 001924ff11a3e3f6bfdc31612c869c855bb926b0..0000000000000000000000000000000000000000
--- a/externals/k_vst~/plugin~_vst.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~_vst.c,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#include "config.h"
-#if PLUGIN_TILDE_USE_VST
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "plugin~.h"
-#include "plugin~_vst.h"
-/* VST header */
-#define AEFFECTX_H_LINUXWORKAROUND
-#include "vst/aeffectx.h"
-//#include "vst/AEffect.h"
-/* VST dll helper functions */
-#include "vstutils.h"
-#ifdef WIN32
-#include "win/vitunmsvc.h" /* strncasecmp() */
-#include <windows.h> /* GetForegroundWindow() */
-#endif
-
-#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-
-
-const char*
-plugin_tilde_vst_search_plugin (Pd_Plugin_Tilde* x,
-				const char* name)
-{
-    /* searching through VST libraries not supported */
-    error ("plugin~: warning: searching through VST libraries not supported");
-    return NULL;
-}
-
-int
-plugin_tilde_vst_open_plugin (Pd_Plugin_Tilde* x,
-			      const char* name,
-			      const char* lib_name,
-			      unsigned long sample_rate)
-{
-    unsigned port_index;
-
-    /* precondition(s) */
-    assert (x != NULL);
-    /* name is unused */
-    assert (lib_name != NULL);
-    assert (sample_rate != 0);
-
-    /* Initialize object struct */
-    x->plugin.vst.instance = NULL;
-    x->plugin.vst.audio_inputs = NULL;
-    x->plugin.vst.audio_outputs = NULL;
-    x->plugin.vst.num_samples = 0;
-    x->plugin.vst.editor_open = 0;
-
-#if 0
-    /* Attempt to load the plugin. */
-    x->plugin_library = vstutils_load_vst_plugin_dll (lib_name);
-    if (x->plugin_library == NULL)
-    {
-	error ("plugin~: Unable to load VST plugin library \"%s\"",
-	       lib_name);
-	return 1;
-    }
-#endif
-
-    /* Construct the plugin.  This is supposed to call
-       the AudioEffect::AudioEffect() ctor eventually */
-    x->plugin.vst.instance
-#if 1
-      =VSTLIB_new((char*)lib_name);
-#else
-	= vstutils_init_vst_plugin (x->plugin_library,
-				    lib_name,
-				    plugin_tilde_vst_audioMaster);
-#endif
-    if (x->plugin.vst.instance == NULL) {
-	error ("plugin~: Unable to instantiate VST plugin from library \"%s\"",
-	       lib_name);
-	return 1;
-    }
-
-    /* Stuff Pd_Plugin_Tilde* x into user field of AEffect for audioMaster() to use */
-    x->plugin.vst.instance->user = x;
-
-    /* Call plugin open() (through dispatcher()) in order to ensure
-       plugin is properly constructed */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effOpen,
-					0, 0, NULL, 0);
-
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: constructed VST plugin \"%s\" successfully",
-	   lib_name);
-#endif
-
-
-    /* Check another strange id */
-    if (x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effIdentify,
-					    0, 0, NULL, 0)
-	!= 'NvEf') {
-	error ("plugin~_vst: warning: VST plugin malfunction (effIdentify != 'NvEf')");
-    }
-
-
-    /* Tell the sample rate and frame length to the VST plug-in */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effSetSampleRate,
-					0, 0, NULL, (float)sample_rate);
-
-    /* FIXME just give some value since it will be changed later */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effSetBlockSize,
-					0, 16, NULL, 0);
-    /* Find out the number of inputs and outputs needed (all VST
-       parameters can be automated i.e. output if the plug-in so wants
-       and the GUI can be operated). */
-    x->num_audio_inputs = x->plugin.vst.instance->numInputs;
-    x->num_audio_outputs = x->plugin.vst.instance->numOutputs;
-    x->num_control_inputs = x->plugin.vst.instance->numParams;
-    x->num_control_outputs = x->plugin.vst.instance->numParams;
-
-    /* Make sure that processReplacing() is implemented */
-    if (x->plugin.vst.instance->flags & effFlagsCanReplacing == 0) {
-	error ("plugin~_vst: sorry, this VST plug-in type isn't supported (processReplacing() not implemented)");
-	return 1;
-    }
-
-
-    /* Activate the plugin. */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 1, NULL, 0);
-
-
-    /* Finally, attempt open editor GUI if available */
-    //  plugin_tilde_vst_open_editor (x);
-
-
-    /* Make sure the user data still is there */
-    assert (x->plugin.vst.instance->user == x);
-
-    /* success */
-    return 0;
-}
-
-void
-plugin_tilde_vst_close_plugin (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* Attempt to close editor GUI */
-    plugin_tilde_vst_close_editor (x);
-
-    if (x->plugin.vst.instance != NULL)
-    {
-	/* Deactivate the plugin. */
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effMainsChanged,
-					    0, 0, NULL, 0);
-
-	/* Destruct the plugin.  This is supposed to translate to
-	   a call to the AudioEffect::~AudioEffect() dtor */
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effClose,
-					    0, 0, NULL, 0);
-#if 1
-	VSTLIB_delete(x->plugin.vst.instance);
-#endif
-	x->plugin.vst.instance = NULL;
-    }
-
-
-    if (x->plugin_library != NULL)
-    {
-#if 0
-	vstutils_unload_vst_plugin_dll (x->plugin_library);
-#endif
-	x->plugin_library = NULL;
-    }
-}
-
-void
-plugin_tilde_vst_apply_plugin (Pd_Plugin_Tilde* x)
-{
-  static int agurk=0;
-
-    /* Run the plugin on Pd's buffers */
-    /* FIXME need to implement out-of-place buffers and zero them here
-       if processReplacing() isn't implemented */
-
-    x->plugin.vst.instance->processReplacing (x->plugin.vst.instance,
-					      x->plugin.vst.audio_inputs,
-					      x->plugin.vst.audio_outputs,
-					      x->plugin.vst.num_samples);
-
-}
-
-void
-plugin_tilde_vst_print (Pd_Plugin_Tilde* x)
-{
-    unsigned i;
-    char display[25];
-    long l, nprog;
-
-    printf ("control %d in/out; audio %d in/%d out\n"
-	    "Loaded from library \"%s\".\n",
-	    x->num_control_inputs,
-	    x->num_audio_inputs,
-	    x->num_audio_outputs,
-	    x->plugin_library_filename);
-
-    /* print the current program name/number */
-    l = x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-		    effGetProgram, 0, 0, display, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-		    effGetProgramName, 0, 0, display, 0);
-    nprog = x->plugin.vst.instance->numPrograms;
-    printf("Program #%ld (of %ld), \"%s\".\n",l,nprog,display);
-
-    for (i = 0; i < x->num_control_inputs; i++) {
-	/* the Steinberg(tm) way... */
-	char name[9];
-	char label[9];
-	if (i == 0) {
-	    printf ("Control input/output(s):\n");
-	}
-	memset (name, 0, 9);
-	memset (display, 0, 25);
-	memset (label, 0, 9);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamName,
-					    i, 0, name, 0);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamDisplay,
-					    i, 0, display, 0);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamLabel,
-					    i, 0, label, 0);
-	printf (" #%d \"%s\" (%s %s)\n",
-		i + 1, name, display, label);
-    }
-}
-
-void
-plugin_tilde_vst_reset (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-    /* reset plug-in by first deactivating and then re-activating it */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 0, NULL, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 1, NULL, 0);
-}
-
-void
-plugin_tilde_vst_connect_audio (Pd_Plugin_Tilde* x,
-				float** audio_inputs,
-				float** audio_outputs,
-				unsigned long num_samples)
-{
-    assert (x != NULL);
-    assert (audio_inputs != NULL);
-    assert (audio_outputs != NULL);
-    x->plugin.vst.audio_inputs = audio_inputs;
-    x->plugin.vst.audio_outputs = audio_outputs;
-    x->plugin.vst.num_samples = num_samples;
-    /* Tell the block size to the VST plug-in */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 0, NULL, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effSetBlockSize,
-					0, num_samples, NULL, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 1, NULL, 0);
-}
-
-void
-plugin_tilde_vst_set_control_input_by_name (Pd_Plugin_Tilde* x,
-				    const char* name,
-				    float value)
-{
-    unsigned parm_index;
-    int found_port; /* boolean */
-    char parm_name[9]; /* the Steinberg(tm) way! */
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* compare control name to VST parameters' names
-       case-insensitively */
-    found_port = 0;
-    for (parm_index = 0; parm_index < x->num_control_inputs; parm_index++)
-    {
-	unsigned cmp_start, cmp_length;
-	memset (parm_name, 0, 9);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamName,
-					    parm_index, 0, parm_name, 0);
-	/* skip any initial whitespace */
-	cmp_start = 0;
-	while (parm_name[cmp_start] != 0
-	       && parm_name[cmp_start] == ' ') {
-	    cmp_start++;
-	}
-	cmp_length = MIN (strlen (name), strlen (&parm_name[cmp_start]));
-	if (cmp_length != 0
-	    && strncasecmp (name, &parm_name[cmp_start], cmp_length) == 0)
-	{
-	    /* found the first port to match */
-	    found_port = 1;
-	    break;
-	}
-    }
-
-    if (!found_port)
-    {
-	error ("plugin~: VST plugin doesn't have a parameter named \"%s\"",
-	       name);
-	return;
-    }
-
-    plugin_tilde_vst_set_control_input_by_index (x,
-						 parm_index,
-						 value);
-}
-
-void
-plugin_tilde_vst_set_control_input_by_index (Pd_Plugin_Tilde* x,
-				       unsigned index_,
-				       float value)
-{
-    char name[9]; /* the Steinberg(tm) way! */
-
-    /* precondition(s) */
-    assert (x != NULL);
-    /* assert (index_ >= 0); causes a warning */
-    assert (index_ < x->num_control_inputs);
-
-    /* Limit parameter to range [0, 1] */
-    if (value < 0.0 || value > 1.0) {
-	if (value < 0.0) {
-	    value = 0.0;
-	}
-	else {
-	    value = 1.0;
-	}
-	error ("plugin~: warning: parameter limited to within [0, 1]");
-    }
-	
-    /* set the appropriate control port value */
-    x->plugin.vst.instance->setParameter (x->plugin.vst.instance,
-					  index_,
-					  value);
-
-#if PLUGIN_TILDE_DEBUG
-    memset (name, 0, 9);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effGetParamName,
-					index_, 0, name, 0);
-    error ("DEBUG plugin~_vst: control change parameter #%ud: \"%s\" to value %f",
-	   index_ + 1, name, value);
-#endif
-}
-
-/*  change the plugin's program; takes a program index */
-void
-plugin_tilde_vst_set_program (Pd_Plugin_Tilde* x, long prog)
-{
-	long nprog = x->plugin.vst.instance->numPrograms;
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-			                    effSetProgram, 0, prog%nprog, 0, 0);
-}
-
-long
-plugin_tilde_vst_get_program (Pd_Plugin_Tilde* x)
-{
-	return x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-			                           effGetProgram, 0, 0, 0, 0);
-}
-
-long
-plugin_tilde_vst_get_num_of_programs (Pd_Plugin_Tilde* x)
-{
-	return x->plugin.vst.instance->numPrograms;
-}
-
-void
-plugin_tilde_vst_set_program_name (Pd_Plugin_Tilde* x, const char* progname)
-{
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-		effSetProgramName, 0, 0, (void*)progname, 0);
-}
-
-static long
-plugin_tilde_vst_audioMaster (AEffect* effect,
-			      long opcode,
-			      long index,
-			      long value,
-			      void* ptr,
-			      float opt)
-{
-    char param_name[9];
-
-#if 0 /*PLUGIN_TILDE_DEBUG*/
-    error ("DEBUG plugin~_vst: audioMaster(0x%p, %ld, %ld, %ld, 0x%p, %f)",
-	   effect, opcode, index, value, ptr, opt);
-#endif
-
-    switch (opcode) {
-	case audioMasterAutomate:
-	    assert (effect != NULL);
-	    assert (effect->user != NULL); /* this is Pd_Plugin_Tilde* */
-	    effect->setParameter (effect, index, opt);
-	    /* Send "control" messages from here */
-	    memset (param_name, 0, 9);
-	    effect->dispatcher (effect, effGetParamName, index, 0, param_name, 0);
-	    plugin_tilde_emit_control_output (effect->user, param_name, opt);
-	    return 0;
-	    break;
-	case audioMasterVersion:
-	    return 1;
-	    break;
-	case audioMasterCurrentId:
-	    return 0;
-	    break;
-	case audioMasterIdle:
-	    effect->dispatcher (effect, effEditIdle, 0, 0, NULL, 0);
-	    return 0;
-	    break;
-	case audioMasterPinConnected:
-	    /* return 0="true" for all inquiries for now */
-	    return 0;
-	    break;
-    }
-#if 0 /*PLUGIN_TILDE_DEBUG*/
-    error ("DEBUG plugin~_vst: warning: unsupported audioMaster opcode");
-#endif
-    return 0;
-}
-
-void plugin_tilde_vst_open_editor (Pd_Plugin_Tilde* x)
-{
-  x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-				      effEditOpen,
-				      0, 0, NULL, 0);
-  
-#if 0 /* FIXME doesn't work */
-#ifdef WIN32
-    HWND parent;
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~_vst: open_editor()");
-#endif
-
-    if ((x->plugin.vst.instance->flags & effFlagsHasEditor) == 0
-	|| x->plugin.vst.editor_open == 1) {
-	/* no editor or editor already open */
-	return;
-    }
-
-    /* Hmph, don't know about the Pd window, so give the desktop as
-       the parent to the plug-in; we could actually use
-       GetForegroundWindow(), since the user is currently typing into
-       the pd subpatch window */
-    /*parent = GetDesktopWindow ();*/
-    parent = GetForegroundWindow ();
-    /*parent = NULL;*/
-
-    /* Open the editor! */
-    if (!x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					     effEditOpen,
-					     0, 0, parent, 0)) {
-	/* no luck error */
-	error ("plugin~_vst: couldn't open editor");
-    } else {
-	x->plugin.vst.editor_open = 1;
-    }
-#endif /* WIN32 */
-#endif /* FIXME doesn't work */
-}
-
-void
-plugin_tilde_vst_close_editor (Pd_Plugin_Tilde* x)
-{
-  x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-				      effEditClose,
-				      0, 0, NULL, 0);
-
-#if 0 /* FIXME doesn't work */
-#ifdef WIN32
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~_vst: close_editor()");
-#endif
-
-    if ((x->plugin.vst.instance->flags & effFlagsHasEditor) == 0
-	|| x->plugin.vst.editor_open == 0) {
-	/* no editor or it isn't open */
-	return;
-    }
-
-    /* Close the editor */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effEditClose,
-					0, 0, NULL, 0);
-    x->plugin.vst.editor_open = 0;
-
-#endif /* WIN32 */
-#endif /* FIXME doesn't work */
-}
-
-void
-plugin_tilde_vst_update_gui (Pd_Plugin_Tilde* x)
-{
-#if 0 /* FIXME doesn't work */
-#ifdef WIN32
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~_vst: update_gui()");
-#endif
-    if (x->plugin.vst.editor_open) {
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effEditIdle,
-					    0, 0, NULL, 0);
-    }
-#endif /* WIN32 */
-#endif /* FIXME doesn't work */
-}
-
-#endif /* PLUGIN_TILDE_USE_VST */
-
-/* EOF */
diff --git a/externals/k_vst~/plugin~_vst.h b/externals/k_vst~/plugin~_vst.h
deleted file mode 100644
index ff12d405cb044e0d31d00ec9b107f7f90ed80519..0000000000000000000000000000000000000000
--- a/externals/k_vst~/plugin~_vst.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~_vst.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#ifndef __PLUGIN_TILDE_VST_H__
-#define __PLUGIN_TILDE_VST_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "config.h"
-
-#if PLUGIN_TILDE_USE_VST
-
-#include "plugin~.h"
-
-/* VST header */
-#include "vst/AEffect.h"
-
-#if 0 /* moved to plugin~.h because of cyclical header dependency */
-typedef struct
-{
-    AEffect*		instance;
-
-    /* audio wire buffer information */
-    float**		audio_inputs;
-    float**		audio_outputs;
-    unsigned long	num_samples;
-
-    int			editor_open;
-} Plugin_Tilde_Vst;
-#endif /* moved to plugin~.h because of cyclical header dependency */
-
-
-/* subroutines to wrap the VST interface */
-const char*	plugin_tilde_vst_search_plugin (Pd_Plugin_Tilde* x,
-						const char* name);
-int	plugin_tilde_vst_open_plugin (Pd_Plugin_Tilde* x,
-				      const char* name,
-				      const char* lib_name,
-				      unsigned long sample_rate);
-
-void  plugin_tilde_vst_close_editor (Pd_Plugin_Tilde* x);
-void  plugin_tilde_vst_open_editor (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_vst_close_plugin (Pd_Plugin_Tilde* x);
-void	plugin_tilde_vst_apply_plugin (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_vst_print (Pd_Plugin_Tilde* x);
-void	plugin_tilde_vst_reset (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_vst_connect_audio (Pd_Plugin_Tilde* x,
-					float** audio_inputs,
-					float** audio_outputs,
-					unsigned long num_samples);
-void	plugin_tilde_vst_set_control_input_by_name (Pd_Plugin_Tilde* x,
-					    const char* name,
-					    float value);
-void	plugin_tilde_vst_set_control_input_by_index (Pd_Plugin_Tilde* x,
-					       unsigned index_,
-					       float value);
-
-
-/* subroutines needed by the VST interface */
-static long	plugin_tilde_vst_audioMaster (AEffect* effect,
-					      long opcode,
-					      long index,
-					      long value,
-					      void* ptr,
-					      float opt);
-
-  /*
-static void	plugin_tilde_vst_open_editor (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_vst_close_editor (Pd_Plugin_Tilde* x);
-  */
-
-void		plugin_tilde_vst_update_gui (Pd_Plugin_Tilde* x);
-
-void		plugin_tilde_vst_set_program (Pd_Plugin_Tilde*, long);
-long		plugin_tilde_vst_get_program (Pd_Plugin_Tilde*);
-long		plugin_tilde_vst_get_num_of_programs (Pd_Plugin_Tilde*);
-void		plugin_tilde_vst_set_program_name (Pd_Plugin_Tilde*, const char*);
-
-#endif /* PLUGIN_TILDE_USE_VST */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __PLUGIN_TILDE_VST_H__ */
-/* EOF */
diff --git a/externals/k_vst~/version.h b/externals/k_vst~/version.h
deleted file mode 100644
index 8cb2f215769efceb63dc8d36d48cf3cf189dfcb8..0000000000000000000000000000000000000000
--- a/externals/k_vst~/version.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: version.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#ifndef __PLUGIN_TILDE_VERSION_H__
-#define __PLUGIN_TILDE_VERSION_H__
-
-#ifndef PLUGIN_TILDE_VERSION
-#define PLUGIN_TILDE_VERSION "0.2"
-#endif
-
-#endif /* __PLUGIN_TILDE_VERSION_H__ */
diff --git a/externals/k_vst~/vstutils.h b/externals/k_vst~/vstutils.h
deleted file mode 100644
index c90edde5c0d2fbc22cd83844040cf139e8f069ef..0000000000000000000000000000000000000000
--- a/externals/k_vst~/vstutils.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2001 Jarno Seppänen
-   Copyright (C) 2000 Richard W.E. Furse
-   $Id: vstutils.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#ifndef __VSTUTILS_H__
-#define __VSTUTILS_H__
-
-#include <vstlib.h>
-
-#ifdef WIN32 /* currently for Windows only */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* VST SDK header */
-#include "vst/AEffect.h"
-
-void*		vstutils_load_vst_plugin_dll (const char* plugin_dll_filename);
-void		vstutils_unload_vst_plugin_dll (void* plugin_dll);
-AEffect*	vstutils_init_vst_plugin (void* plugin_dll,
-					  const char* plugin_dll_filename,
-					  audioMasterCallback am);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* WIN32 */
-
-#endif /* __VSTUTILS_H__ */
-/* EOF */
diff --git a/externals/many/LICENSE.txt b/externals/many/LICENSE.txt
deleted file mode 100644
index 443254047416efc10bc53cb1adb5421680d5a647..0000000000000000000000000000000000000000
--- a/externals/many/LICENSE.txt
+++ /dev/null
@@ -1,676 +0,0 @@
-
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
- 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-  
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/externals/many/Makefile b/externals/many/Makefile
deleted file mode 100644
index 505f67151f9e52ee47834dbb431c9295f695a426..0000000000000000000000000000000000000000
--- a/externals/many/Makefile
+++ /dev/null
@@ -1,332 +0,0 @@
-## Pd library template version 1.0.6
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = many
-
-# add your .c source files, one object per file, to the SOURCES
-# variable, help files will be included automatically
-SOURCES = 
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = bundle.pd instances.pd instances-template.pd instances~.pd instances-template~.pd polypoly~.pd polypoly-wrap~.pd polypoly-voice~.pd voices~.pd voices-wrap~.pd
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = tick.wav ticker-voice.pd ticker.pd tock.wav aw.wav voicetest.pd run-200voicetest.pd
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, test patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = 
-
-
-
-#------------------------------------------------------------------------------#
-#
-# things you might need to edit if you are using other C libraries
-#
-#------------------------------------------------------------------------------#
-
-# -I"$(PD_INCLUDE)/pd" supports the header location for 0.43
-CFLAGS = -I"$(PD_INCLUDE)/pd" -Wall -W -g
-LDFLAGS =  
-LIBS = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"'
-
-PD_INCLUDE = $(PD_PATH)/include
-# where to install the library, overridden below depending on platform
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL) -p -m 644
-INSTALL_DATA = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU)
-  # GNU/Hurd, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU/kFreeBSD)
-  # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  PD_PATH = $(cygpath $(PROGRAMFILES))/pd
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-# in case somebody manually set the HELPPATCHES above
-HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_DATA) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_DATA) Makefile  $(DISTDIR)
-	$(INSTALL_DATA) README.txt $(DISTDIR)
-	$(INSTALL_DATA) LICENSE.txt $(DISTDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_DATA) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(HELPPATCHES))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "CFLAGS: $(CFLAGS)"
-	@echo "LDFLAGS: $(LDFLAGS)"
-	@echo "LIBS: $(LIBS)"
-	@echo "PD_INCLUDE: $(PD_INCLUDE)"
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/many/README.txt b/externals/many/README.txt
deleted file mode 100644
index 08870b4e50100b6c8fa92d9cec0aac01bc1cdfa8..0000000000000000000000000000000000000000
--- a/externals/many/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-
-'many' is a library of techniques for creating and managing many instances of an object
-
-- bundle: a bundle of instances all connected to the same inlets and outlets
-- instances: many instances that are both individually and globally addressable 
-- instances~: same as [instances] but with outlet~s
-- polypoly~: designed for MIDI polyphony, built upon [poly] and based on [polypoly]
-- voices~: similar to polypoly~, but for generate voice allocation without being tied to MIDI
-
-Objects in the 'many' lib are based on code from Steven Pickles' (aka pix) nqpoly4 and Frank Barknecht's polypoly.  Thanks to pix's nqpoly4 because that was the real groundbreaking work that proved that a useful and reliable instance-managing object could be programmed in Pd.
-
-To install this library, unzip it, rename the folder to be just "many" without the version, and drop that folder into your user-installed libraries folder:
-http://puredata.info/docs/faq/how-do-i-install-externals-and-help-files
-
-- Hans-Christoph Steiner <hans@eds.org>
-
diff --git a/externals/many/TODO.txt b/externals/many/TODO.txt
deleted file mode 100644
index f8250420914fc4f6e395fd980b7b83920caf2f0c..0000000000000000000000000000000000000000
--- a/externals/many/TODO.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-- check out rjlib's u_makepoly and u_robinpoly
-
-- use loadbang instead of initbang
-
-- many polypoly be like u_makepoly with
-
-- make round-robin based on voices~
\ No newline at end of file
diff --git a/externals/many/bundle-help.pd b/externals/many/bundle-help.pd
deleted file mode 100644
index ad21559fdd51abc7a2a30d9a46ef2e364201816b..0000000000000000000000000000000000000000
--- a/externals/many/bundle-help.pd
+++ /dev/null
@@ -1,7 +0,0 @@
-#N canvas 153 160 450 300 10;
-#X text 47 138 inlet0: routed to each instance based on instance number
-;
-#X text 47 158 inlet1: connected directly to each instance;
-#X text 47 218 outlet1: connected directly to each instance;
-#X text 47 198 outlet0: connected directly to each instance;
-#X obj 91 74 bundle 5 instances-template 1 2 3 4 5 6 7;
diff --git a/externals/many/bundle.pd b/externals/many/bundle.pd
deleted file mode 100644
index 2ba5364673fae961d697f50c733d0f3406fbbdc5..0000000000000000000000000000000000000000
--- a/externals/many/bundle.pd
+++ /dev/null
@@ -1,135 +0,0 @@
-#N canvas 604 370 622 492 10;
-#X declare -path /Users/hans/code/pure-data/trunk/externals/many/examples
-;
-#X obj 26 8 inlet;
-#X obj 99 306 until;
-#X obj 137 333 + 1;
-#X obj 99 333 float;
-#X msg 138 306 0;
-#X obj 26 32 send \$0-in1;
-#X obj 135 8 inlet;
-#X obj 135 32 send \$0-in2;
-#X obj 7 181 float \$1;
-#X obj 136 114 outlet;
-#X text 122 62 <-- open this subpatch to see the instances;
-#N canvas 863 482 400 437 create 1;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 242 71 symbol \$2;
-#X obj 173 409 outlet;
-#X obj 173 61 * 20;
-#X obj 173 83 + 70;
-#X msg 52 215 connect 2 0 \$1 1;
-#X msg 42 235 connect \$1 0 3 0;
-#X msg 25 259 connect \$1 1 4 0;
-#X obj 29 141 + 5;
-#X msg 61 193 connect 1 0 \$1 0;
-#X msg 173 176 obj 150 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7;
-#X obj 173 108 pack float symbol float \$1;
-#X obj 29 37 trigger anything anything anything bang anything;
-#X connect 0 0 14 0;
-#X connect 1 0 11 0;
-#X connect 2 0 13 1;
-#X connect 4 0 5 0;
-#X connect 5 0 13 0;
-#X connect 6 0 3 0;
-#X connect 7 0 3 0;
-#X connect 8 0 3 0;
-#X connect 9 0 6 0;
-#X connect 9 0 7 0;
-#X connect 9 0 8 0;
-#X connect 9 0 10 0;
-#X connect 10 0 3 0;
-#X connect 11 0 3 0;
-#X connect 12 0 1 0;
-#X connect 13 0 12 0;
-#X connect 14 0 9 0;
-#X connect 14 2 4 0;
-#X connect 14 3 2 0;
-#X connect 14 4 13 2;
-#X restore 106 363 pd create and link instances;
-#X obj 376 464 send;
-#X obj 99 278 trigger 0 bang;
-#X obj 7 160 loadbang;
-#X msg 46 363 loadbang;
-#X obj 46 227 trigger bang anything anything bang bang bang;
-#X msg 349 363 clear;
-#X obj 7 205 moses 1;
-#X text 59 203 no need to generate anything for 0 instances;
-#N canvas 48 22 633 512 \$0-bundle 0;
-#X restore 26 61 pd \$0-bundle;
-#X obj 26 113 outlet;
-#X obj 26 89 receive \$0-out1;
-#X obj 136 89 receive \$0-out2;
-#X obj 397 362 symbol pd-\$0-bundle;
-#N canvas 231 432 566 361 setup 0;
-#X obj 78 -165 inlet;
-#X obj 78 149 outlet;
-#X text 116 -107 This will create fake "in/outlets" as senders and
-receivers.;
-#X obj 78 17 float \$0;
-#N canvas 1084 528 552 411 expandpath 0;
-#X obj 59 16 inlet;
-#X obj 104 371 outlet;
-#X obj 59 98 list append;
-#X msg 59 153 symbol \$1/\$2;
-#X obj 58 67 ggee/getdir 2;
-#X obj 59 184 hcs/stat;
-#X obj 104 349 symbol;
-#X obj 59 43 trigger bang anything;
-#X obj 104 205 bang;
-#X obj 59 233 list split 1;
-#X connect 0 0 1 0;
-#X connect 2 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 2 0;
-#X connect 5 0 9 0;
-#X connect 5 1 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 4 0;
-#X connect 7 1 2 1;
-#X connect 7 1 6 1;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X restore 394 -80 pd expandpath;
-#X obj 177 -29 ggee/getdir 2;
-#X msg 177 -3 obj 10 5 declare -path \$1;
-#X obj 78 -88 trigger bang bang;
-#X msg 78 43 obj 10 40 receive \$1-in1 \, obj 400 40 receive \$1-in2
-\, obj 10 560 send \$1-out1 \, obj 380 560 send \$1-out2;
-#X connect 0 0 7 0;
-#X connect 3 0 8 0;
-#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 3 0;
-#X connect 7 1 5 0;
-#X connect 8 0 1 0;
-#X restore 289 363 pd setup;
-#X obj 67 160 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 3 0 11 0;
-#X connect 4 0 3 1;
-#X connect 6 0 7 0;
-#X connect 8 0 18 0;
-#X connect 11 0 12 0;
-#X connect 13 0 1 0;
-#X connect 13 1 4 0;
-#X connect 14 0 8 0;
-#X connect 15 0 12 0;
-#X connect 16 0 15 0;
-#X connect 16 1 13 0;
-#X connect 16 3 25 0;
-#X connect 16 4 17 0;
-#X connect 16 5 24 0;
-#X connect 17 0 12 0;
-#X connect 18 1 16 0;
-#X connect 22 0 21 0;
-#X connect 23 0 9 0;
-#X connect 24 0 12 1;
-#X connect 25 0 12 0;
-#X connect 26 0 8 0;
diff --git a/externals/many/debian/changelog b/externals/many/debian/changelog
deleted file mode 100644
index 3a6ef5d4db061713417cbb43e40bf21ff00693c0..0000000000000000000000000000000000000000
--- a/externals/many/debian/changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-pd-many (0.0-1) unstable; urgency=low
-
-  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
-
- -- Hans-Christoph Steiner <hans@eds.org>  Thu, 21 Jan 2010 23:27:04 -0500
diff --git a/externals/many/debian/compat b/externals/many/debian/compat
deleted file mode 100644
index 7f8f011eb73d6043d2e6db9d2c101195ae2801f2..0000000000000000000000000000000000000000
--- a/externals/many/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/externals/many/debian/control b/externals/many/debian/control
deleted file mode 100644
index 67c5488d5a3a699ac30adaa5a1ffb9880ca90aca..0000000000000000000000000000000000000000
--- a/externals/many/debian/control
+++ /dev/null
@@ -1,38 +0,0 @@
-Source: pd-many
-Section: sound
-Priority: optional
-Maintainer: Debian Multimedia Maintainers <pkg-multimedia-maintainers@lists.alioth.debian.org>
-Uploaders: Hans-Christoph Steiner <hans@eds.org>
-Build-Depends: debhelper (>= 7.0.50~),
-               puredata
-Standards-Version: 3.9.1
-Homepage: http://puredata.info
-
-Package: pd-many
-Architecture: all
-Depends: ${shlibs:Depends},
-         pd,
-         pd-ggee,
-         pd-libdir,
-         ${misc:Depends}
-Recommends: pd-import,
-            pd-pddp
-Description: a Pd library for creating and managing many instances of objects
- This is a library for of techniques for creating and managing many
- instances of an object.
- .
-  * bundle: a bundle of instances all connected to the same 
-            inlets and outlets
-  * instances: many instances that are both individually 
-               and globally addressable 
-  * instances~: same as [instances] but with outlet~s
-  * polypoly~: designed for MIDI polyphony, built upon 
-               [poly] and based on [polypoly]
-  * voices~: similar to polypoly~, but for generate voice 
-             allocation without being tied to MIDI
- .
- Objects in the 'many' lib are based on code from Stephen Pickles'
- (aka pix) nqpoly4 and Frank Barknecht's polypoly.  Thanks to pix's
- nqpoly4 because that was the real groundbreaking work that proved
- that a useful and reliable instance-managing object could be
- programmed in Pd.
diff --git a/externals/many/debian/copyright b/externals/many/debian/copyright
deleted file mode 100644
index 5067e09dea45d2723b90487f2eb5ec0597747e82..0000000000000000000000000000000000000000
--- a/externals/many/debian/copyright
+++ /dev/null
@@ -1,25 +0,0 @@
-Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=135
-Name: many
-Maintainer: Hans-Christoph Steiner <hans@eds.org>
-Source: http://sourceforge.net/projects/pure-data/files/libraries/many/
-
-Files: *
-Copyright: 2001-2003, Steven Pickles
-           2007, Frank Barknecht
-           2007-2010, Hans-Christoph Steiner
-License: GPL-3+
- This package is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this package; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-X-Comment: On Debian systems, the complete text of the GNU General
- Public License can be found in `/usr/share/common-licenses/GPL-2'.
diff --git a/externals/many/debian/gbp.conf b/externals/many/debian/gbp.conf
deleted file mode 100644
index ae1dc367f740c6616bd7bcfca574ea002fff0528..0000000000000000000000000000000000000000
--- a/externals/many/debian/gbp.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-[DEFAULT]
-upstream-branch = upstream
-debian-branch = master
-upstream-tag = upstream/%(version)s
-debian-tag = debian/%(version)s
-pristine-tar = True
-sign-tags = True
diff --git a/externals/many/debian/links b/externals/many/debian/links
deleted file mode 100644
index 48fcdf909274726204fa6aff9f251b58f26bdd2a..0000000000000000000000000000000000000000
--- a/externals/many/debian/links
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/lib/pd/extra/many/README.txt        usr/share/doc/pd-many/README
-usr/lib/pd/extra/many/examples          usr/share/doc/pd-many/examples
-usr/share/common-licenses/GPL-2             usr/lib/pd/extra/many/LICENSE.txt
diff --git a/externals/many/debian/rules b/externals/many/debian/rules
deleted file mode 100755
index e138ba64ecc6f4d1273303412aacc1055bee1b04..0000000000000000000000000000000000000000
--- a/externals/many/debian/rules
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/make -f
-
-LIBRARY_NAME = many
-PACKAGE = pd-$(LIBRARY_NAME)
-pkglibdir = /usr/lib/pd/extra
-
-%:
-	dh $@ --buildsystem=makefile
-
-override_dh_auto_install:
-	dh_auto_install -- prefix=/usr pkglibdir=$(pkglibdir)
-# replace license file with link to the Debian license file
-	rm -f -- $(CURDIR)/debian/$(PACKAGE)/$(pkglibdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-override_dh_shlibdeps:
-	dpkg-shlibdeps $(CURDIR)/debian/$(PACKAGE)$(pkglibdir)/$(LIBRARY_NAME)/*.pd_linux \
-		-T$(CURDIR)/debian/$(PACKAGE).substvars
diff --git a/externals/many/debian/source/format b/externals/many/debian/source/format
deleted file mode 100644
index 163aaf8d82b6c54f23c45f32895dbdfdcc27b047..0000000000000000000000000000000000000000
--- a/externals/many/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/externals/many/debian/watch b/externals/many/debian/watch
deleted file mode 100644
index 82c0d1a33c0a4f12317afbb4ff63433bc9d16eaa..0000000000000000000000000000000000000000
--- a/externals/many/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=3
-http://sf.net/pure-data/template-(.*)\.tar\.gz
diff --git a/externals/many/examples/aw.wav b/externals/many/examples/aw.wav
deleted file mode 100644
index 1ad142e83acbc5cff4c1c3a868e73246ee42ef39..0000000000000000000000000000000000000000
Binary files a/externals/many/examples/aw.wav and /dev/null differ
diff --git a/externals/many/examples/petal-test.pd b/externals/many/examples/petal-test.pd
deleted file mode 100644
index 710eee32bb1a614c1c073545c7bf2e3decc37686..0000000000000000000000000000000000000000
--- a/externals/many/examples/petal-test.pd
+++ /dev/null
@@ -1,68 +0,0 @@
-#N canvas 562 93 676 425 10;
-#X declare -path /Users/hans/code/pure-data/trunk/externals/many/examples
-;
-#X obj 579 71 gemwin;
-#X obj 574 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 128 337 gemhead;
-#X obj 227 215 line;
-#X msg 227 195 \$1 1000;
-#X msg 221 161 21;
-#X msg 247 161 13;
-#X msg 277 161 8;
-#X text 281 366 make 35 petal objects waiting for commands;
-#X text 415 152 radius of the flower;
-#X text 333 131 radius of the petals;
-#X text 167 141 number of petals;
-#N canvas 0 22 450 300 pak 0;
-#X obj 107 37 inlet;
-#X obj 209 35 inlet;
-#X obj 209 57 t b a;
-#X obj 107 122 pack 0 0 0;
-#X obj 107 158 outlet;
-#X obj 149 35 inlet;
-#X obj 149 57 t b a;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 1 3 2;
-#X connect 3 0 4 0;
-#X connect 5 0 6 0;
-#X connect 6 0 3 0;
-#X connect 6 1 3 1;
-#X restore 316 241 pd pak;
-#X obj 320 144 vsl 15 60 0 2 0 1 empty empty empty 0 -9 0 10 -261682
--1 -1 5500 0;
-#X floatatom 321 211 5 0 0 0 - - -;
-#X obj 397 157 vsl 15 60 0 4 0 1 empty empty empty 0 -9 0 10 -203904
--1 -1 3300 0;
-#X floatatom 398 224 5 0 0 0 - - -;
-#X text 127 25 draw a shape using many instances and a little math
-;
-#X msg 586 41 create \, 1;
-#X msg 192 161 40;
-#X msg 194 296 draw fill;
-#X msg 215 317 draw line;
-#X msg 175 277 draw point;
-#X obj 175 255 loadbang;
-#X obj 128 364 many/bundle 250 petal;
-#X msg 153 161 250;
-#X connect 1 0 0 0;
-#X connect 2 0 24 0;
-#X connect 3 0 12 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 12 0 24 1;
-#X connect 13 0 14 0;
-#X connect 14 0 12 1;
-#X connect 15 0 16 0;
-#X connect 16 0 12 2;
-#X connect 18 0 0 0;
-#X connect 19 0 4 0;
-#X connect 20 0 24 1;
-#X connect 21 0 24 1;
-#X connect 22 0 24 1;
-#X connect 23 0 22 0;
-#X connect 25 0 4 0;
diff --git a/externals/many/examples/petal.pd b/externals/many/examples/petal.pd
deleted file mode 100644
index eaf09609bb2a483ff9ac5094b5e52213e966ab10..0000000000000000000000000000000000000000
--- a/externals/many/examples/petal.pd
+++ /dev/null
@@ -1,67 +0,0 @@
-#N canvas 602 416 942 484 10;
-#X obj 99 196 separator;
-#X obj 99 429 circle;
-#X obj 522 239 * 360;
-#X obj 99 312 rotateXYZ 0 0 0;
-#X obj 522 190 t b f;
-#X obj 39 35 inlet;
-#X obj 32 455 outlet;
-#X obj 99 340 translateXYZ 1 0 0;
-#X obj 424 310 * 1;
-#X obj 592 262 t b f;
-#X obj 522 218 / 1;
-#X obj 424 247 <= 0;
-#X text 82 458 this object just ignores triggers;
-#X text 483 130 \$1 is this objects index \, we use it to work out
-if we need to render;
-#X text 14 73 draw a petal (really just a circle)..;
-#X text 460 246 if we aren't needed \, scale ourselves to 0 is there
-a better way? email me.;
-#X obj 99 368 scaleXYZ 1;
-#X obj 522 33 inlet;
-#X obj 347 455 outlet;
-#X text 82 34 we connect to the global gemhead;
-#X obj 522 89 unpack float float float;
-#X text 683 87 petal# petalsize petalradius;
-#X obj 427 144 float \$1;
-#X obj 427 120 loadbang;
-#X obj 99 284 colorRGB 0.5 0 1;
-#X obj 168 245 % 8;
-#X obj 168 264 / 7;
-#X obj 522 58 route list;
-#X obj 285 108 route draw;
-#X obj 280 381 list prepend draw;
-#X obj 280 401 list trim;
-#X connect 0 0 24 0;
-#X connect 2 0 3 3;
-#X connect 3 0 7 0;
-#X connect 4 0 10 0;
-#X connect 4 0 11 0;
-#X connect 4 1 10 1;
-#X connect 4 1 11 1;
-#X connect 5 0 0 0;
-#X connect 7 0 16 0;
-#X connect 8 0 16 1;
-#X connect 8 0 16 2;
-#X connect 8 0 16 3;
-#X connect 9 0 8 0;
-#X connect 9 1 8 1;
-#X connect 10 0 2 0;
-#X connect 11 0 8 0;
-#X connect 16 0 1 0;
-#X connect 17 0 27 0;
-#X connect 20 0 4 0;
-#X connect 20 1 9 0;
-#X connect 20 2 7 1;
-#X connect 22 0 11 0;
-#X connect 22 0 10 0;
-#X connect 22 0 25 0;
-#X connect 23 0 22 0;
-#X connect 24 0 3 0;
-#X connect 25 0 26 0;
-#X connect 26 0 24 3;
-#X connect 27 0 20 0;
-#X connect 27 1 28 0;
-#X connect 28 0 29 0;
-#X connect 29 0 30 0;
-#X connect 30 0 1 0;
diff --git a/externals/many/examples/run-200voicetest.pd b/externals/many/examples/run-200voicetest.pd
deleted file mode 100644
index 16f5e69eb008928e847ccf7ebf016adb403fa56f..0000000000000000000000000000000000000000
--- a/externals/many/examples/run-200voicetest.pd
+++ /dev/null
@@ -1,109 +0,0 @@
-#N canvas 506 162 588 537 10;
-#X declare -path ..;
-#X obj 132 207 hsl 60 18 0 1 0 1 empty empty pan 15 9 0 10 -204800
--1 -1 2300 0;
-#X floatatom 135 229 5 0 0 0 - - -;
-#X obj 213 320 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 35 410 three outlets are needed: 2 audio and one message outlet
-that is banged when the voice is finished.;
-#X text 15 20 two inlets are needed: the first for voice-managed messages
-\, and the second for messages that are send to all instances;
-#X obj 386 9 declare -path ..;
-#X obj 63 207 hsl 60 18 0.1 10 1 1 empty empty stretch 10 9 0 10 -204786
--1 -1 4600 0;
-#X floatatom 70 228 5 0 0 0 - - -;
-#X text 231 319 out of voices;
-#X text 26 169 factor by which to stretch sample;
-#X text 26 183 (i.e. 2 means twice as long);
-#X text 33 459 this is the patch of a single voice \, it has the same
-inlets and outlets as voices~ above:;
-#X obj 335 188 table \$0-sample;
-#X text 221 298 (you can send \$0 for localizing things);
-#X obj 336 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#N canvas 0 22 482 301 load 0;
-#X obj 48 10 inlet;
-#X obj 138 251 outlet;
-#X obj 138 167 soundfiler;
-#X obj 138 50 loadbang;
-#X msg 138 146 read -resize \$1 \$2;
-#X obj 138 113 list append \$0-sample;
-#X msg 138 72 aw.wav;
-#X obj 49 61 openpanel;
-#X obj 309 21 inlet;
-#X obj 309 48 trigger bang bang;
-#X obj 320 174 tabwrite~ \$0-sample;
-#X obj 322 145 adc~;
-#X obj 354 146 send \$0-sample;
-#X msg 354 122 resize \$1;
-#X msg 354 82 100000;
-#X connect 0 0 7 0;
-#X connect 2 0 1 0;
-#X connect 3 0 6 0;
-#X connect 4 0 2 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 9 1 14 0;
-#X connect 11 0 10 0;
-#X connect 11 1 10 0;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 14 0 1 0;
-#X restore 336 158 pd load sample;
-#X text 248 263 <-- send the size of the sample table to all instances
-;
-#X obj 67 349 output~;
-#X obj 135 505 voicetest~ 0 0 \$0;
-#X obj 60 272 pack 0 0;
-#X obj 78 250 t b f;
-#X obj 417 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 435 137 <-- record from mic;
-#X text 148 78 <-- play your voice like an instrument \, click and
-drag;
-#X obj 60 297 voices~ 200 voicetest~ \$0;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X obj 106 259 outlet;
-#X obj 106 30 inlet;
-#X obj 160 29 inlet;
-#X obj 106 86 / 80;
-#X obj 106 199 pack float float;
-#X obj 160 152 * 10;
-#X obj 160 86 / 90;
-#X obj 160 110 + 0.1;
-#X obj 160 131 mapping/exponential_curve 0.75;
-#X obj 106 152 t b 0;
-#X connect 1 0 3 0;
-#X connect 2 0 6 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 5 0;
-#X connect 9 0 4 0;
-#X connect 9 1 4 1;
-#X coords 0 0 1 1 90 90 0;
-#X restore 2 175 pd;
-#X obj 64 76 gcanvas 80 80;
-#X text 223 138 load soundfile -->;
-#X connect 0 0 1 0;
-#X connect 0 0 20 0;
-#X connect 6 0 7 0;
-#X connect 6 0 19 0;
-#X connect 14 0 15 0;
-#X connect 15 0 24 1;
-#X connect 19 0 24 0;
-#X connect 20 0 19 0;
-#X connect 20 1 19 1;
-#X connect 21 0 15 1;
-#X connect 24 0 17 0;
-#X connect 24 1 17 1;
-#X connect 24 2 2 0;
-#X connect 25 0 24 0;
-#X connect 26 0 25 0;
-#X connect 26 1 25 1;
diff --git a/externals/many/examples/tick.wav b/externals/many/examples/tick.wav
deleted file mode 100644
index 3b155189fd5dd961ee9ee7dcc54b3779eccd3598..0000000000000000000000000000000000000000
Binary files a/externals/many/examples/tick.wav and /dev/null differ
diff --git a/externals/many/examples/ticker-voice~.pd b/externals/many/examples/ticker-voice~.pd
deleted file mode 100644
index 8493f67b12070176e7b6d684ad4a072f6b79bb72..0000000000000000000000000000000000000000
--- a/externals/many/examples/ticker-voice~.pd
+++ /dev/null
@@ -1,21 +0,0 @@
-#N canvas 474 451 518 379 10;
-#X obj 22 28 inlet;
-#X text 62 27 clock input;
-#X obj 32 357 outlet~;
-#X obj 136 357 outlet~;
-#X obj 41 135 % 2;
-#X obj 41 156 select 0 1;
-#X obj 253 28 inlet;
-#X obj 265 354 outlet;
-#X text 310 354 bang when done to free voice;
-#X text 291 30 optional inlet;
-#X obj 32 249 tabplay~ \$3-tick;
-#X obj 137 250 tabplay~ \$3-tock;
-#X connect 0 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 10 0;
-#X connect 5 1 11 0;
-#X connect 10 0 2 0;
-#X connect 10 1 7 0;
-#X connect 11 0 3 0;
-#X connect 11 1 7 0;
diff --git a/externals/many/examples/ticker.pd b/externals/many/examples/ticker.pd
deleted file mode 100644
index 96db9e4be246e8bb071362e33ca6671eb41aa691..0000000000000000000000000000000000000000
--- a/externals/many/examples/ticker.pd
+++ /dev/null
@@ -1,44 +0,0 @@
-#N canvas 520 164 518 379 10;
-#X declare -path ..;
-#X obj 344 54 table \$0-tick;
-#X obj 344 74 table \$0-tock;
-#X obj 338 241 soundfiler;
-#X msg 339 172 read -resize tick.wav \$1;
-#X obj 339 150 symbol \$0-tick;
-#X obj 333 122 loadbang;
-#X msg 306 215 read -resize tock.wav \$1;
-#X obj 306 193 symbol \$0-tock;
-#X obj 312 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 17 97 metro;
-#X obj 17 37 tgl 15 0 empty empty empty 17 7 0 10 -204786 -1 -1 1 1
-;
-#X obj 47 60 hsl 128 15 1 1000 1 1 empty empty empty -2 -8 0 10 -262130
--1 -1 9800 1;
-#X floatatom 56 84 5 0 0 0 - - -;
-#X obj 17 126 float;
-#X obj 57 126 + 1;
-#X obj 337 17 declare -path ..;
-#X obj 85 312 output~;
-#X text 35 34 <-- turn on clock;
-#X text 185 57 <-- run it faster!;
-#X obj 53 221 voices~ 100 ticker-voice~ \$0;
-#X text 201 302 here is the playback patch:;
-#X obj 211 333 ticker-voice~ 0 0 \$0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 5 0 7 0;
-#X connect 6 0 2 0;
-#X connect 7 0 6 0;
-#X connect 8 0 4 0;
-#X connect 8 0 7 0;
-#X connect 9 0 13 0;
-#X connect 10 0 9 0;
-#X connect 11 0 9 1;
-#X connect 11 0 12 0;
-#X connect 13 0 14 0;
-#X connect 13 0 19 0;
-#X connect 14 0 13 1;
-#X connect 19 0 16 0;
-#X connect 19 1 16 1;
diff --git a/externals/many/examples/tock.wav b/externals/many/examples/tock.wav
deleted file mode 100644
index 5f99b16d3adfb29a377b0fb05f8ae7a76ebb2e39..0000000000000000000000000000000000000000
Binary files a/externals/many/examples/tock.wav and /dev/null differ
diff --git a/externals/many/examples/voicetest~.pd b/externals/many/examples/voicetest~.pd
deleted file mode 100644
index 76c3afd0b64a3fef1e4b9caf082cd384c62b8ca8..0000000000000000000000000000000000000000
--- a/externals/many/examples/voicetest~.pd
+++ /dev/null
@@ -1,40 +0,0 @@
-#N canvas 393 160 577 494 10;
-#X obj 122 11 inlet;
-#X obj 122 463 outlet~;
-#X obj 267 11 inlet;
-#X obj 239 463 outlet~;
-#X obj 320 463 outlet;
-#X text 367 463 bang when done;
-#X obj 122 337 line~;
-#X obj -15 88 print voicetest~_\$1;
-#X obj 282 76 samplerate~;
-#X obj 267 97 /;
-#X obj 320 435 delay;
-#X obj 267 124 * 1000;
-#X text 306 125 ms;
-#X obj 122 241 pack float float;
-#X msg 122 313 0 \, \$2 \$1;
-#X obj 122 179 *;
-#X obj 112 365 tabread4~ \$3-sample;
-#X obj 122 397 pan/equal_power_pan~;
-#X obj 122 60 unpack float float;
-#X obj 282 56 loadbang;
-#X connect 0 0 7 0;
-#X connect 0 0 18 0;
-#X connect 2 0 9 0;
-#X connect 2 0 13 1;
-#X connect 6 0 16 0;
-#X connect 8 0 9 1;
-#X connect 9 0 11 0;
-#X connect 10 0 4 0;
-#X connect 11 0 15 1;
-#X connect 13 0 14 0;
-#X connect 14 0 6 0;
-#X connect 15 0 13 0;
-#X connect 15 0 10 0;
-#X connect 16 0 17 0;
-#X connect 17 0 1 0;
-#X connect 17 1 3 0;
-#X connect 18 0 15 0;
-#X connect 18 1 17 1;
-#X connect 19 0 8 0;
diff --git a/externals/many/instances-help.pd b/externals/many/instances-help.pd
deleted file mode 100644
index 5f122d10ffade141934b10512947467c917439da..0000000000000000000000000000000000000000
--- a/externals/many/instances-help.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#N canvas 153 160 450 300 10;
-#X text 27 21 inlet0: routed to each instance based on instance number
-;
-#X text 27 41 inlet1: connected directly to each instance;
-#X text 27 101 outlet1: connected directly to each instance;
-#X obj 62 163 instances 50 instances-template 1 2 3 4 5 6 7;
-#X text 27 81 outlet0: connected directly to each instance;
-#X text 54 223 up to 7 symbol or float arguments can be used;
diff --git a/externals/many/instances-template-help.pd b/externals/many/instances-template-help.pd
deleted file mode 100644
index 360a6f0525f9c84aabc3072688742ac98c1be5b7..0000000000000000000000000000000000000000
--- a/externals/many/instances-template-help.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X text 79 120 Your [instances] abstraction needs two inlets and two
-outlets. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [instances] and will be passed
-on to the custom abstraction.;
-#X text 80 35 instances-template is a basic patch here only to illustrate what a
-patch designed for [instance] looks like. Feel free to use it as a
-template for your own patches for [instances].;
-#X obj 111 233 instances-template 1 8 four more arguments possible;
-#X text 48 255 message-out;
-#X text 52 212 message-in;
-#X text 328 255 message-out;
-#X text 332 212 message-in;
diff --git a/externals/many/instances-template.pd b/externals/many/instances-template.pd
deleted file mode 100644
index 085c53bcdb9639c1eb31c574abe7d77b5f4a0e08..0000000000000000000000000000000000000000
--- a/externals/many/instances-template.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 411 77 637 579 10;
-#X obj 29 30 inlet;
-#X obj 335 19 inlet;
-#X obj 345 508 outlet;
-#X obj 35 508 outlet;
diff --git a/externals/many/instances-template~-help.pd b/externals/many/instances-template~-help.pd
deleted file mode 100644
index 0e899c523956156c73662ff7b6c5fe1bc5db20c8..0000000000000000000000000000000000000000
--- a/externals/many/instances-template~-help.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X obj 110 254 instances-template~ 1 8 four more arguments possible
-;
-#X text 72 274 dsp-out left;
-#X text 381 274 dsp-out right;
-#X text 35 233 inlet for messages routed to instances;
-#X text 380 234 inlet for audio to all instances;
-#X text 80 35 instances-template~ is a basic patch here only to illustrate
-what a patch designed for [instances~] looks like. Feel free to use
-it as a template for your own patches for [instances~].;
-#X text 76 100 Your [instances~] abstraction needs one [inlet] and
-one [inlet~] and two [outlet~]s. First argument will be the voice index
-number starting from 0 \, second argument will be the total number
-of voices. Four more arguments can be passed as arguments to [instances~]
-and will be passed on to the custom abstraction.;
diff --git a/externals/many/instances-template~.pd b/externals/many/instances-template~.pd
deleted file mode 100644
index 6f639fbbfe8e82c963ed031f8820f825e444a029..0000000000000000000000000000000000000000
--- a/externals/many/instances-template~.pd
+++ /dev/null
@@ -1,36 +0,0 @@
-#N canvas 244 339 552 361 10;
-#X obj 54 11 inlet;
-#X obj 54 324 outlet~;
-#X obj 228 325 outlet~;
-#X obj 243 9 inlet~;
-#X obj 228 150 *~;
-#X obj 211 121 osc~;
-#X obj 100 48 print instances~_\$1;
-#X obj 54 302 *~;
-#X obj 129 137 osc~;
-#X obj 129 158 +~ 1;
-#X obj 129 178 *~ 0.5;
-#X obj 228 305 *~;
-#X obj 243 285 -~;
-#X msg 243 256 1;
-#X obj 243 236 loadbang;
-#X obj 130 81 float;
-#X obj 130 115 / 500;
-#X connect 0 0 6 0;
-#X connect 0 0 15 0;
-#X connect 3 0 4 1;
-#X connect 4 0 11 0;
-#X connect 4 0 7 0;
-#X connect 5 0 4 0;
-#X connect 7 0 1 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 7 1;
-#X connect 10 0 12 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 1;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 5 0;
-#X connect 15 0 16 0;
-#X connect 16 0 8 0;
diff --git a/externals/many/instances.pd b/externals/many/instances.pd
deleted file mode 100644
index e3719f64079056884c01145f7c7fceab9f1c5fa4..0000000000000000000000000000000000000000
--- a/externals/many/instances.pd
+++ /dev/null
@@ -1,156 +0,0 @@
-#N canvas 320 157 643 491 10;
-#X obj 26 8 inlet;
-#X obj 99 336 until;
-#X obj 137 363 + 1;
-#X obj 99 363 float;
-#X msg 138 336 0;
-#X obj 26 32 send \$0-in1;
-#X obj 135 8 inlet;
-#X obj 135 32 send \$0-in2;
-#X obj 7 181 float \$1;
-#X obj 136 114 outlet;
-#X text 122 62 <-- open this subpatch to see the instances;
-#N canvas 90 404 490 437 make 0;
-#X obj 88 14 inlet;
-#X obj 210 83 until;
-#X obj 210 107 float;
-#X obj 248 107 + 1;
-#X msg 251 83 0;
-#X msg 281 113 route;
-#X obj 210 244 list trim;
-#X obj 88 57 trigger bang bang anything bang;
-#X obj 210 317 outlet;
-#N canvas 0 22 450 300 tolist 0;
-#X obj 90 40 inlet;
-#X obj 169 40 inlet;
-#X obj 67 215 outlet;
-#X obj 90 150 list;
-#X obj 67 171 list;
-#X obj 90 127 list prepend;
-#X connect 0 0 5 0;
-#X connect 1 0 5 1;
-#X connect 1 0 4 0;
-#X connect 3 0 4 1;
-#X connect 3 0 5 1;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X restore 210 193 pd tolist;
-#X msg 85 225 connect 1 0 5 0;
-#X obj 210 223 list prepend obj 10 60;
-#X connect 0 0 7 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 0 9 0;
-#X connect 3 0 2 1;
-#X connect 4 0 2 1;
-#X connect 5 0 9 0;
-#X connect 6 0 8 0;
-#X connect 7 0 10 0;
-#X connect 7 1 9 1;
-#X connect 7 2 1 0;
-#X connect 7 3 5 0;
-#X connect 7 3 4 0;
-#X connect 9 0 11 0;
-#X connect 10 0 8 0;
-#X connect 11 0 6 0;
-#X restore 292 393 pd make route;
-#N canvas 493 375 432 461 create 0;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 260 71 symbol \$2;
-#X obj 58 225 pack float float;
-#X obj 173 409 outlet;
-#X msg 58 247 connect 5 \$2 \$1 0;
-#X obj 29 141 + 6;
-#X msg 45 282 connect 2 0 \$1 1;
-#X msg 35 302 connect \$1 0 3 0;
-#X msg 18 326 connect \$1 1 4 0;
-#X obj 173 61 * 31;
-#X obj 173 83 + 100;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X msg 173 176 obj 90 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 29 37 trigger anything anything anything bang;
-#X obj 173 108 pack float symbol;
-#X connect 0 0 14 0;
-#X connect 1 0 13 0;
-#X connect 2 0 15 1;
-#X connect 3 0 5 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 6 0 3 0;
-#X connect 6 0 8 0;
-#X connect 6 0 9 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 11 0;
-#X connect 11 0 15 0;
-#X connect 12 0 1 0;
-#X connect 13 0 4 0;
-#X connect 14 0 6 0;
-#X connect 14 1 3 1;
-#X connect 14 2 10 0;
-#X connect 14 3 2 0;
-#X connect 15 0 12 0;
-#X restore 106 393 pd create and link instances;
-#X obj 466 464 send;
-#X obj 99 308 trigger 0 bang;
-#X obj 7 160 loadbang;
-#X msg 46 393 loadbang;
-#X msg 439 283 clear;
-#X obj 7 235 moses 1;
-#X text 59 233 no need to generate anything for 0 instances;
-#N canvas 48 22 657 548 \$0-instances 1;
-#X restore 26 61 pd \$0-instances;
-#X obj 26 113 outlet;
-#X obj 26 89 receive \$0-out1;
-#X obj 136 89 receive \$0-out2;
-#X obj 487 282 symbol pd-\$0-instances;
-#X obj 7 204 trigger anything bang bang;
-#X obj 46 257 trigger bang anything anything bang;
-#N canvas 268 410 566 361 setup 0;
-#X obj 78 -165 inlet;
-#X obj 78 139 outlet;
-#X text 126 -137 This will create fake "in/outlets" as senders and
-receivers.;
-#X obj 78 -23 float \$0;
-#X obj 177 -49 ggee/getdir 2;
-#X msg 177 -23 obj 10 5 declare -path \$1;
-#X obj 78 -108 trigger bang bang;
-#X msg 78 3 obj 10 40 receive \$1-in1 \, obj 540 40 receive \$1-in2
-\, obj 10 560 send \$1-out1 \, obj 560 560 send \$1-out2;
-#X connect 0 0 6 0;
-#X connect 3 0 7 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 3 0;
-#X connect 6 1 4 0;
-#X connect 7 0 1 0;
-#X restore 384 393 pd setup;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 3 0 12 0;
-#X connect 4 0 3 1;
-#X connect 6 0 7 0;
-#X connect 8 0 25 0;
-#X connect 11 0 13 0;
-#X connect 12 0 13 0;
-#X connect 14 0 1 0;
-#X connect 14 1 4 0;
-#X connect 15 0 8 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 18 1 26 0;
-#X connect 22 0 21 0;
-#X connect 23 0 9 0;
-#X connect 24 0 13 1;
-#X connect 25 0 18 0;
-#X connect 25 1 17 0;
-#X connect 25 2 24 0;
-#X connect 26 0 16 0;
-#X connect 26 1 14 0;
-#X connect 26 2 11 0;
-#X connect 26 3 27 0;
-#X connect 27 0 13 0;
diff --git a/externals/many/instances~-help.pd b/externals/many/instances~-help.pd
deleted file mode 100644
index 6eeb8f912d5ba85b980b3b62b930499d0f0d6cdb..0000000000000000000000000000000000000000
--- a/externals/many/instances~-help.pd
+++ /dev/null
@@ -1,31 +0,0 @@
-#N canvas 202 131 588 471 10;
-#X text 62 424 dsp-out left;
-#X text 371 424 dsp-out right;
-#X text 25 383 inlet for messages routed to instances;
-#X text 370 384 inlet for audio to all instances;
-#X obj 219 318 output~;
-#X obj 365 220 adc~;
-#X obj 168 249 list prepend;
-#X obj 237 228 hradio 15 1 1 5 empty empty empty 0 -8 0 10 -203904
--1 -1 4;
-#X obj 168 272 instances~ 5 instances-template~ 1 2 3 4 5 6 7;
-#X obj 171 203 hsl 128 15 200 500 1 1 empty empty empty -2 -8 0 10
--261682 -1 -1 6600 0;
-#X obj 100 404 instances-template~ 1 8 four more arguments possible
-;
-#X obj 134 142 loadbang;
-#X msg 134 166 0 200 \, 1 300 \, 2 400 \, 3 500 \, 4 100;
-#X text 27 81 outlet~0: connected directly to each instance;
-#X text 27 101 outlet~1: connected directly to each instance;
-#X text 27 41 inlet~: connected directly to each instance;
-#X text 27 21 inlet: routed to each instance based on instance number
-;
-#X connect 5 0 8 1;
-#X connect 5 1 8 1;
-#X connect 6 0 8 0;
-#X connect 7 0 6 1;
-#X connect 8 0 4 0;
-#X connect 8 1 4 1;
-#X connect 9 0 6 0;
-#X connect 11 0 12 0;
-#X connect 12 0 8 0;
diff --git a/externals/many/instances~.pd b/externals/many/instances~.pd
deleted file mode 100644
index 1e39f818b45de09d14f6813b84531089e3bdf0f5..0000000000000000000000000000000000000000
--- a/externals/many/instances~.pd
+++ /dev/null
@@ -1,157 +0,0 @@
-#N canvas 326 147 634 492 10;
-#X obj 26 8 inlet;
-#X obj 106 341 until;
-#X obj 144 368 + 1;
-#X obj 106 368 float;
-#X msg 145 341 0;
-#X obj 7 181 float \$1;
-#X obj 26 113 outlet~;
-#X text 122 62 <-- open this subpatch to see the instances;
-#N canvas 564 572 490 437 make 0;
-#X obj 88 14 inlet;
-#X obj 210 83 until;
-#X obj 210 107 float;
-#X obj 248 107 + 1;
-#X msg 251 83 0;
-#X msg 281 113 route;
-#X obj 210 244 list trim;
-#X obj 88 57 trigger bang bang anything bang;
-#X obj 210 317 outlet;
-#N canvas 0 22 450 300 tolist 0;
-#X obj 90 40 inlet;
-#X obj 169 40 inlet;
-#X obj 67 215 outlet;
-#X obj 90 150 list;
-#X obj 67 171 list;
-#X obj 90 127 list prepend;
-#X connect 0 0 5 0;
-#X connect 1 0 5 1;
-#X connect 1 0 4 0;
-#X connect 3 0 4 1;
-#X connect 3 0 5 1;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X restore 210 193 pd tolist;
-#X msg 88 225 connect 1 0 5 0;
-#X obj 210 223 list prepend obj 10 60;
-#X connect 0 0 7 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 0 9 0;
-#X connect 3 0 2 1;
-#X connect 4 0 2 1;
-#X connect 5 0 9 0;
-#X connect 6 0 8 0;
-#X connect 7 0 10 0;
-#X connect 7 1 9 1;
-#X connect 7 2 1 0;
-#X connect 7 3 5 0;
-#X connect 7 3 4 0;
-#X connect 9 0 11 0;
-#X connect 10 0 8 0;
-#X connect 11 0 6 0;
-#X restore 292 393 pd make route;
-#N canvas 493 375 432 461 create 0;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 260 71 symbol \$2;
-#X obj 173 61 * 20;
-#X obj 58 225 pack float float;
-#X obj 173 409 outlet;
-#X obj 29 141 + 6;
-#X msg 58 247 connect 5 \$2 \$1 0;
-#X msg 45 282 connect 2 0 \$1 1;
-#X msg 35 302 connect \$1 0 3 0;
-#X msg 18 326 connect \$1 1 4 0;
-#X obj 173 83 + 90;
-#X msg 173 177 obj 150 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 29 37 trigger anything anything anything bang;
-#X obj 173 108 pack float symbol;
-#X connect 0 0 14 0;
-#X connect 1 0 12 0;
-#X connect 2 0 15 1;
-#X connect 3 0 11 0;
-#X connect 4 0 7 0;
-#X connect 6 0 8 0;
-#X connect 6 0 4 0;
-#X connect 6 0 9 0;
-#X connect 6 0 10 0;
-#X connect 7 0 5 0;
-#X connect 8 0 5 0;
-#X connect 9 0 5 0;
-#X connect 10 0 5 0;
-#X connect 11 0 15 0;
-#X connect 12 0 5 0;
-#X connect 13 0 1 0;
-#X connect 14 0 6 0;
-#X connect 14 1 4 1;
-#X connect 14 2 3 0;
-#X connect 14 3 2 0;
-#X connect 15 0 13 0;
-#X restore 106 393 pd create and link instances;
-#X obj 466 464 send;
-#X obj 106 314 trigger 0 bang;
-#X obj 7 160 loadbang;
-#X msg 46 393 loadbang;
-#X msg 439 283 clear;
-#N canvas 678 643 566 361 xlets 0;
-#X obj 78 -165 inlet;
-#X obj 78 129 outlet;
-#X text 126 -137 This will create fake "in/outlets" as senders and
-receivers.;
-#X obj 78 -23 float \$0;
-#X msg 78 3 obj 10 40 receive \$1-message \, obj 400 40 catch~ \$1-audio-in
-\, obj 10 560 throw~ \$1-audio-out0 \, obj 380 560 throw~ \$1-audio-out1
-;
-#X obj 177 -49 ggee/getdir 2;
-#X msg 177 -23 obj 10 5 declare -path \$1;
-#X obj 78 -108 trigger bang bang;
-#X connect 0 0 7 0;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 3 0;
-#X connect 7 1 5 0;
-#X restore 384 393 pd xlets;
-#X obj 7 258 moses 1;
-#X text 55 259 no need to generate anything for 0 instances;
-#N canvas 48 22 633 512 \$0-instances 1;
-#X restore 26 61 pd \$0-instances;
-#X obj 26 32 send \$0-message;
-#X obj 161 32 throw~ \$0-audio-in;
-#X obj 163 89 catch~ \$0-audio-out1;
-#X obj 26 89 catch~ \$0-audio-out0;
-#X obj 163 114 outlet~;
-#X obj 161 8 inlet~;
-#X obj 487 282 symbol pd-\$0-instances;
-#X obj 46 280 trigger bang anything anything bang;
-#X obj 7 206 trigger anything bang bang;
-#X connect 0 0 19 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 3 0 9 0;
-#X connect 4 0 3 1;
-#X connect 5 0 27 0;
-#X connect 8 0 10 0;
-#X connect 9 0 10 0;
-#X connect 11 0 1 0;
-#X connect 11 1 4 0;
-#X connect 12 0 5 0;
-#X connect 13 0 10 0;
-#X connect 14 0 10 0;
-#X connect 15 0 10 0;
-#X connect 16 1 26 0;
-#X connect 21 0 23 0;
-#X connect 22 0 6 0;
-#X connect 24 0 20 0;
-#X connect 25 0 10 1;
-#X connect 26 0 13 0;
-#X connect 26 1 11 0;
-#X connect 26 2 8 0;
-#X connect 26 3 15 0;
-#X connect 27 0 16 0;
-#X connect 27 1 14 0;
-#X connect 27 2 25 0;
diff --git a/externals/many/itest.pd b/externals/many/itest.pd
deleted file mode 100644
index cba4be673adcbfd2dcbbff76bfd8756fc94d23c7..0000000000000000000000000000000000000000
--- a/externals/many/itest.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 823 274 637 579 10;
-#X obj 35 508 outlet~;
-#X obj 145 508 outlet~;
-#X obj 330 505 outlet;
-#X text 371 503 bang when done;
-#X obj 29 331 tabplay~ \$3;
-#X obj 35 445 pan/equal_power_pan~;
-#X obj 29 30 inlet;
-#X obj 335 19 inlet;
-#X obj 29 247 delay;
-#X obj 29 85 unpack float float;
-#X connect 4 0 5 0;
-#X connect 4 1 2 0;
-#X connect 5 0 0 0;
-#X connect 5 1 1 0;
-#X connect 6 0 9 0;
-#X connect 8 0 4 0;
-#X connect 9 0 8 0;
-#X connect 9 1 5 1;
diff --git a/externals/many/many-meta.pd b/externals/many/many-meta.pd
deleted file mode 100644
index eacd709eb74fbe6b14f7d6013d703d1478988170..0000000000000000000000000000000000000000
--- a/externals/many/many-meta.pd
+++ /dev/null
@@ -1,7 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 25 49 420 300 META 1;
-#X text 13 41 NAME many;
-#X text 10 25 AUTHOR Hans-Christoph Steiner <hans@eds.org>;
-#X text 10 10 VERSION 0.0.20101128;
-#X text 10 70 LICENSE GPL-3+;
-#X restore 10 10 pd META;
diff --git a/externals/many/polypoly-voice~-help.pd b/externals/many/polypoly-voice~-help.pd
deleted file mode 100644
index 94db875bfa2f2b42b12d7d7e2bf1d7eb82e224b9..0000000000000000000000000000000000000000
--- a/externals/many/polypoly-voice~-help.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X text 32 214 inlet for (note \, velocity) pairs;
-#X text 69 255 dsp-out left;
-#X text 378 255 dsp-out right;
-#X text 377 215 extra inlet to customize freely;
-#X text 96 131 Your [polypoly~] abstraction needs two inlets and two
-outlet~s. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [polypoly~] and will be passed
-on to the custom abstraction.;
-#X text 98 36 polypoly-voice~ is a basic patch here only to illustrate
-what a patch designed for [polypoly~] looks like. Feel free to use
-it as a template for your own voice patches.;
-#X obj 111 234 polypoly-voice~ 1 8 four more arguments possible;
diff --git a/externals/many/polypoly-voice~.pd b/externals/many/polypoly-voice~.pd
deleted file mode 100644
index d8e5e7a112b56c5c3f910cdd9d55936b0ca32e2a..0000000000000000000000000000000000000000
--- a/externals/many/polypoly-voice~.pd
+++ /dev/null
@@ -1,86 +0,0 @@
-#N canvas 403 268 423 406 10;
-#X obj 75 80 inlet;
-#X obj 147 100 inlet;
-#X obj 76 275 outlet~;
-#X obj 148 276 outlet~;
-#X text 62 54 inlet for (note \, velocity) pairs;
-#X text 74 303 left and right dsp outlet;
-#N canvas 0 0 621 566 \$0-instr 1;
-#X obj 75 80 inlet;
-#X obj 76 356 *~;
-#X obj 76 389 *~ 0.2;
-#X obj 75 247 mtof;
-#X obj 139 249 select 0;
-#X obj 75 224 unpack 0 0;
-#X obj 192 276 / 127;
-#X obj 76 295 osc~;
-#X obj 76 455 outlet~;
-#X obj 91 194 print \$1_NOTE;
-#X obj 151 456 outlet~;
-#X obj 383 237 random 100;
-#X obj 150 423 *~ 0.2;
-#X obj 77 424 *~ 0.2;
-#X text 447 286 * ~M_PI/2;
-#X obj 383 285 * 1.5708;
-#X obj 342 350 cos;
-#X obj 423 351 sin;
-#X obj 383 264 * 0.01;
-#X obj 280 349 pow -1;
-#X floatatom 280 410 5 0 0 0 - - -;
-#X floatatom 342 411 5 0 0 0 - - -;
-#X floatatom 423 411 5 0 0 0 - - -;
-#X obj 280 317 f \$2;
-#X msg 139 304 \$1 10;
-#X obj 134 362 *~;
-#X obj 134 381 *~;
-#X text 62 54 inlet for (note \, velocity) pairs;
-#X text 74 483 left and right dsp outlet;
-#X obj 383 172 loadbang;
-#X obj 257 91 inlet;
-#X obj 192 301 pack 0 500;
-#X floatatom 272 119 5 0 0 0 - - -;
-#X obj 139 340 vline~;
-#X text 382 79 loadbang can be used just fine.;
-#X obj 75 100 t a b;
-#X connect 0 0 35 0;
-#X connect 1 0 2 0;
-#X connect 2 0 13 0;
-#X connect 2 0 12 0;
-#X connect 3 0 7 0;
-#X connect 4 0 31 0;
-#X connect 4 1 6 0;
-#X connect 5 0 3 0;
-#X connect 5 1 4 0;
-#X connect 6 0 24 0;
-#X connect 7 0 1 0;
-#X connect 11 0 18 0;
-#X connect 12 0 10 0;
-#X connect 13 0 8 0;
-#X connect 15 0 16 0;
-#X connect 15 0 17 0;
-#X connect 16 0 13 1;
-#X connect 16 0 21 0;
-#X connect 17 0 12 1;
-#X connect 17 0 22 0;
-#X connect 18 0 15 0;
-#X connect 19 0 2 1;
-#X connect 19 0 20 0;
-#X connect 23 0 19 0;
-#X connect 24 0 33 0;
-#X connect 25 0 26 0;
-#X connect 25 0 26 1;
-#X connect 26 0 1 1;
-#X connect 29 0 11 0;
-#X connect 29 0 23 0;
-#X connect 30 0 31 1;
-#X connect 30 0 32 0;
-#X connect 31 0 33 0;
-#X connect 33 0 25 0;
-#X connect 33 0 25 1;
-#X connect 35 0 5 0;
-#X restore 75 223 pd \$0-instr;
-#X text 129 76 extra inlet;
-#X connect 0 0 6 0;
-#X connect 1 0 6 1;
-#X connect 6 0 2 0;
-#X connect 6 1 3 0;
diff --git a/externals/many/polypoly-wrap~-help.pd b/externals/many/polypoly-wrap~-help.pd
deleted file mode 100644
index 43330fd6f1489735bf11b22af1122bbb27fb55c1..0000000000000000000000000000000000000000
--- a/externals/many/polypoly-wrap~-help.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 137 124 450 300 10;
-#X text 60 100 [polypoly~-wrap] is an object used by [polypoly~] to handle
-the voice allocation logic for each patch that [polypoly~] is instantiating.
-It is not a patch that has any use outside of how [polypoly~] uses it
-internally.;
diff --git a/externals/many/polypoly-wrap~.pd b/externals/many/polypoly-wrap~.pd
deleted file mode 100644
index 66c3fd4d547b834812bbaa896607eecea1fc119d..0000000000000000000000000000000000000000
--- a/externals/many/polypoly-wrap~.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 366 494 450 300 10;
-#X obj 45 26 inlet;
-#X obj 45 204 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 96 166 outlet;
-#X obj 222 22 inlet;
-#X text 12 5 nqpwrap (v4) - pix.test.at;
-#X text 252 126 this object is used by nqpoly;
-#X obj 45 137 route \$2;
-#X obj 129 237 outlet~;
-#X obj 223 235 outlet~;
-#X connect 0 0 6 0;
-#X connect 1 0 7 0;
-#X connect 1 1 8 0;
-#X connect 3 0 1 1;
-#X connect 6 0 1 0;
-#X connect 6 1 2 0;
diff --git a/externals/many/polypoly~-help.pd b/externals/many/polypoly~-help.pd
deleted file mode 100644
index e6f1bee2565352b8d3f4e28b15c31e4a2814de11..0000000000000000000000000000000000000000
--- a/externals/many/polypoly~-help.pd
+++ /dev/null
@@ -1,56 +0,0 @@
-#N canvas 145 22 616 708 10;
-#X msg 147 185 bang;
-#X obj 147 263 makenote 80 1000;
-#X obj 147 298 pack 0 0;
-#X obj 147 208 random 30;
-#X obj 147 237 + 40;
-#X msg 269 211 40 \, 44 \, 56 \, 60;
-#X obj 200 167 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 200 187 metro 100;
-#X text 50 559 inlet for (note \, velocity) pairs;
-#X text 87 600 dsp-out left;
-#X text 396 600 dsp-out right;
-#X text 55 85 Arguments: <max polyphony> <voice stealing 0/1> <poly-abstraction
-name> <arg1> <arg2> <arg3> <arg4>;
-#X text 96 635 Thanks to Cesare Marilungo for inspiration.;
-#X text 17 20 [polypoly~];
-#X text 55 669 Also see:;
-#X obj 127 668 poly;
-#X floatatom 228 315 5 0 0 2 decay - -;
-#X floatatom 283 264 5 0 0 0 - - -;
-#X text 427 322 recreate all abstractions;
-#X text 395 560 extra inlet to customize freely;
-#X text 186 339 custom inlet;
-#X text 53 157 Example:;
-#X text 96 470 Your [polypoly~] abstraction needs two inlets and two
-outlet~s. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [polypoly~] and will be passed
-on to the custom abstraction.;
-#X text 54 121 Inlets: <pair: note velocity> <custom> <pair: num abstraction_name>
-;
-#X msg 96 318 clear;
-#X msg 60 318 stop;
-#X text 55 44 [poly]-clone which automatically creates abstractions
-to be played based heavily on [polypoly] by Frank Barknecht.;
-#X obj 153 406 output~;
-#X obj 129 579 polypoly-voice~ 1 8 four more arguments possible;
-#X msg 310 323 12 polypoly-voice~;
-#X obj 147 361 polypoly~ 12 1 polypoly-voice~;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 0 30 0;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X connect 5 0 1 0;
-#X connect 6 0 7 0;
-#X connect 7 0 3 0;
-#X connect 16 0 30 1;
-#X connect 17 0 1 2;
-#X connect 24 0 30 0;
-#X connect 25 0 30 0;
-#X connect 29 0 30 2;
-#X connect 30 0 27 0;
-#X connect 30 1 27 1;
diff --git a/externals/many/polypoly~.pd b/externals/many/polypoly~.pd
deleted file mode 100644
index f20b588462f445f4d8690b3ca4c3a23db4b73979..0000000000000000000000000000000000000000
--- a/externals/many/polypoly~.pd
+++ /dev/null
@@ -1,198 +0,0 @@
-#N canvas 152 148 939 654 10;
-#X obj 36 31 inlet;
-#X obj 292 200 moses 1;
-#X text 555 67 your abstraction is ultimately called with the parameters:
-<index> <number of objects> <arg1> <arg2> <arg3> <arg4>;
-#N canvas 7 455 362 318 \$0-poly 0;
-#X restore 36 254 pd \$0-poly;
-#X obj 36 227 s \$0-in1;
-#N canvas 220 112 751 428 init 0;
-#X obj 197 139 symbol \$0-poly;
-#X obj 197 163 makefilename pd-%s;
-#X obj 197 187 pack s \$0;
-#X msg 204 118 bang;
-#X text 154 317 This will clear the subpatch and create fake "in/outlets"
-as senders and receivers.;
-#X obj 103 206 s \$0-subname;
-#X obj 197 92 b;
-#X obj 197 69 r \$0-init;
-#X msg 197 230 \; \$1 clear \; \$1 obj 50 60 r \$2-in1 \; \$1 obj 199
-60 r \$2-in2 \; \$1 obj 50 200 throw~ \$2-out0 \; \$1 obj 199 200 throw~
-\$2-out1 \;;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 2 0 8 0;
-#X connect 3 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 6 0;
-#X restore 343 108 pd init;
-#X obj 139 31 inlet;
-#X obj 256 63 loadbang;
-#N canvas 0 22 692 559 last-two 0;
-#X obj 153 175 cnv 15 150 80 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 378 110 first reset (b) \, then set new length (f).;
-#X text 311 195 Right outlet is responsible to first fill the list
-;
-#X text 312 211 Left outlet then only lets the smaller list pass.;
-#X obj 180 183 list;
-#X obj 228 113 inlet;
-#X obj 180 149 inlet;
-#X obj 180 302 outlet;
-#X obj 180 228 list split 2;
-#X obj 228 149 b;
-#X connect 4 0 8 0;
-#X connect 5 0 9 0;
-#X connect 6 0 4 0;
-#X connect 8 0 4 1;
-#X connect 8 0 7 0;
-#X connect 8 2 4 1;
-#X connect 9 0 4 1;
-#X restore 386 521 pd last-two;
-#X obj 386 562 list prepend;
-#X msg 386 589 \; \$1 connect \$3 0 \$2 0 \;;
-#X obj 465 541 r \$0-subname;
-#N canvas 183 178 858 457 finish 0;
-#X obj 121 185 until;
-#X obj 156 212 + 1;
-#X obj 121 284 list prepend;
-#X obj 121 162 t a b;
-#X obj 200 255 r \$0-subname;
-#X obj 452 126 r \$0-subname;
-#X obj 77 31 inlet;
-#X obj 77 67 moses 1;
-#X text 412 238 Connect [r \$0-in1] to first object's first inlet;
-#X obj 168 185 4;
-#X obj 121 211 f 4;
-#X text 167 163 first 4 objects are xlets;
-#X msg 415 196 \; \$1 connect 0 0 4 0 \;;
-#X msg 121 318 \; \$1 connect 1 0 \$2 1 \; \$1 connect \$2 1 2 0 \;
-\$1 connect \$2 2 3 0 \;;
-#X obj 415 165 symbol;
-#X obj 121 98 t a b;
-#X text 276 344 Connect all wrapper's middle signal outlet to [s~ \$0-out0]
-;
-#X text 276 330 Connect all wrapper's right inlet to [r \$0-in2];
-#X text 276 359 Connect all wrapper's left signal outlet to [s~ \$0-out1]
-;
-#X connect 0 0 10 0;
-#X connect 1 0 10 1;
-#X connect 2 0 13 0;
-#X connect 3 0 0 0;
-#X connect 3 1 9 0;
-#X connect 4 0 2 1;
-#X connect 5 0 14 1;
-#X connect 6 0 7 0;
-#X connect 7 1 15 0;
-#X connect 9 0 10 1;
-#X connect 10 0 1 0;
-#X connect 10 0 2 0;
-#X connect 14 0 12 0;
-#X connect 15 0 3 0;
-#X connect 15 1 14 0;
-#X restore 274 260 pd finish;
-#X text 600 134 based on: nqpoly (v4) - pix.test.at;
-#X obj 343 135 s \$0-init;
-#X obj 458 494 r \$0-init;
-#X text 600 158 changes: fbar at footils.org 2006;
-#X msg 405 444 \; \$2 obj 50 100 polypoly-wrap~ \$3 \$1 \$4 \$5 \$6
-\$7 \$8 \;;
-#X obj 256 135 t b a a a b;
-#X obj 386 273 t a a b;
-#X obj 343 31 inlet;
-#X obj 36 167 pack 0 0 0;
-#X obj 36 140 - 1;
-#X obj 36 344 outlet~;
-#X obj 454 306 symbol \$3;
-#X obj 405 417 list append \$4 \$5 \$6 \$7;
-#X obj 386 494 + 4;
-#X obj 139 344 outlet~;
-#X obj 36 287 catch~ \$0-out0;
-#X obj 139 287 catch~ \$0-out1;
-#X text 555 30 usage: polypoly~ <number of objects> <voice stealing:
-0/1> <abstraction name> <up to 4 creation args>;
-#X obj 36 113 poly \$1 \$2;
-#N canvas 0 22 382 282 loadbang 0;
-#X obj 130 64 inlet;
-#X obj 130 86 b;
-#X msg 130 141 \; \$1 loadbang;
-#X obj 167 86 r \$0-subname;
-#X obj 130 113 symbol;
-#X connect 0 0 1 0;
-#X connect 1 0 4 0;
-#X connect 3 0 4 1;
-#X connect 4 0 2 0;
-#X restore 256 287 pd loadbang;
-#X obj 139 227 s \$0-in2;
-#N canvas 0 22 227 234 countto 0;
-#X obj 60 97 until;
-#X obj 95 124 + 1;
-#X obj 60 124 f;
-#X obj 107 97 0;
-#X obj 60 77 t a b;
-#X obj 60 54 inlet;
-#X obj 60 145 outlet;
-#X connect 0 0 2 0;
-#X connect 1 0 2 1;
-#X connect 2 0 1 0;
-#X connect 2 0 6 0;
-#X connect 3 0 2 1;
-#X connect 4 0 0 0;
-#X connect 4 1 3 0;
-#X connect 5 0 4 0;
-#X restore 386 246 pd countto;
-#N canvas 183 272 316 307 expandpath 0;
-#X obj 59 16 inlet;
-#X obj 55 271 outlet;
-#X obj 59 98 list append;
-#X msg 58 153 symbol \$1/\$2;
-#X obj 59 43 trigger bang anything;
-#X obj 58 67 ggee/getdir 2;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 5 0;
-#X connect 4 1 2 1;
-#X connect 5 0 2 0;
-#X restore 454 328 pd expandpath;
-#X obj 343 58 unpack float symbol;
-#X obj 448 359 receive \$0-subname;
-#X obj 405 390 pack 0 symbol symbol 0;
-#X obj 534 216 float;
-#X obj 256 108 float \$1;
-#X connect 0 0 31 0;
-#X connect 1 1 34 0;
-#X connect 6 0 33 0;
-#X connect 7 0 40 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 11 0 9 1;
-#X connect 15 0 8 1;
-#X connect 18 0 32 0;
-#X connect 18 1 12 0;
-#X connect 18 2 1 0;
-#X connect 18 3 39 0;
-#X connect 18 4 14 0;
-#X connect 19 0 26 0;
-#X connect 19 1 38 0;
-#X connect 19 2 24 0;
-#X connect 20 0 36 0;
-#X connect 21 0 4 0;
-#X connect 22 0 21 0;
-#X connect 24 0 35 0;
-#X connect 25 0 17 0;
-#X connect 26 0 8 0;
-#X connect 28 0 23 0;
-#X connect 29 0 27 0;
-#X connect 31 0 22 0;
-#X connect 31 1 21 1;
-#X connect 31 2 21 2;
-#X connect 34 0 19 0;
-#X connect 35 0 38 2;
-#X connect 36 0 40 0;
-#X connect 36 1 24 0;
-#X connect 37 0 38 1;
-#X connect 38 0 25 0;
-#X connect 39 0 38 3;
-#X connect 40 0 18 0;
diff --git a/externals/many/rawpoly-test.pd b/externals/many/rawpoly-test.pd
deleted file mode 100644
index b507ce065de4217edc013b0f4ac8d00a9d771f27..0000000000000000000000000000000000000000
--- a/externals/many/rawpoly-test.pd
+++ /dev/null
@@ -1,17 +0,0 @@
-#N canvas 372 366 450 300 10;
-#X text 53 202 beeware of loadbangs when dynamically adding instances
-using the 3rd inlet! Everytime a new instance is created \, all instances
-will receive a loadbang!;
-#X msg 218 113 7;
-#X msg 185 113 3;
-#X msg 249 112 9;
-#X text 279 112 control instances;
-#X obj 113 138 rawpoly 5 itest;
-#X text 27 21 inlet0: routed to each instance based on instance number
-;
-#X text 27 41 inlet1: connected directly to each instance;
-#X text 27 61 outlet~0: connected directly to each instance;
-#X text 27 81 outlet1: connected directly to each instance;
-#X connect 1 0 5 2;
-#X connect 2 0 5 2;
-#X connect 3 0 5 2;
diff --git a/externals/many/rawpoly.pd b/externals/many/rawpoly.pd
deleted file mode 100644
index c81127ae961b4b589a11bd6723065bb334b438f8..0000000000000000000000000000000000000000
--- a/externals/many/rawpoly.pd
+++ /dev/null
@@ -1,185 +0,0 @@
-#N canvas 820 73 679 577 10;
-#X obj 26 8 inlet;
-#X obj 196 378 until;
-#X obj 234 403 + 1;
-#N canvas 169 250 601 588 \$0-poly 0;
-#X restore 26 61 pd \$0-poly;
-#X obj 196 403 float;
-#X obj 26 32 send \$0-in1;
-#X obj 100 8 inlet;
-#X obj 100 32 send \$0-in2;
-#X obj 214 246 float \$1;
-#X obj 126 113 outlet;
-#X obj 126 88 receive \$0-message;
-#X obj 26 89 catch~ \$0-audio;
-#X obj 26 113 outlet~;
-#X text 102 62 <-- open this subpatch to see the instances;
-#N canvas 452 457 572 467 create 0;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 202 60 symbol \$2;
-#X obj 155 61 * 20;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7;
-#X obj 173 409 outlet;
-#X obj 173 174 trigger anything anything;
-#X obj 155 83 + 30;
-#X msg 186 281 connect 0 0 \$1 0;
-#X obj 92 62 * 2;
-#X obj 92 85 + 4;
-#X obj 29 192 pack float float;
-#X obj 29 62 * 2;
-#X obj 29 85 + 5;
-#X msg 294 281 connect \$1 0 \$2 0;
-#X msg 74 261 connect \$1 1 \$2 0;
-#X msg 186 261 connect 1 0 \$2 1;
-#X msg 294 260 connect \$2 1 3 0;
-#X msg 74 281 connect \$2 0 2 0;
-#X obj 350 84 makefilename $%d;
-#X msg 350 62 1;
-#X obj 173 108 pack float symbol float symbol;
-#X obj 29 37 trigger anything anything anything bang anything bang
-;
-#X msg 168 196 obj 125 \$1 route \$3 all;
-#X msg 320 196 obj 210 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X connect 0 0 22 0;
-#X connect 1 0 6 0;
-#X connect 2 0 21 1;
-#X connect 3 0 7 0;
-#X connect 4 0 1 0;
-#X connect 6 0 23 0;
-#X connect 6 1 24 0;
-#X connect 7 0 21 0;
-#X connect 8 0 5 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 1;
-#X connect 11 0 8 0;
-#X connect 11 0 14 0;
-#X connect 11 0 15 0;
-#X connect 11 0 16 0;
-#X connect 11 0 17 0;
-#X connect 11 0 18 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 5 0;
-#X connect 15 0 5 0;
-#X connect 16 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 5 0;
-#X connect 19 0 21 3;
-#X connect 20 0 19 0;
-#X connect 21 0 4 0;
-#X connect 22 0 12 0;
-#X connect 22 1 9 0;
-#X connect 22 2 3 0;
-#X connect 22 3 2 0;
-#X connect 22 4 21 2;
-#X connect 22 5 20 0;
-#X connect 23 0 5 0;
-#X connect 24 0 5 0;
-#X restore 196 450 pd create and link instances;
-#X obj 458 530 send;
-#X msg 136 450 loadbang;
-#X msg 440 449 clear;
-#N canvas 973 300 625 362 xlets 0;
-#X obj 137 -89 inlet;
-#X obj 277 175 outlet;
-#X text 190 -84 This will create fake "in/outlets" as senders and receivers.
-;
-#X msg 137 -59 0;
-#X obj 477 28 makefilename $%d-in1;
-#X obj 337 28 makefilename $%d-in2;
-#X obj 187 28 makefilename $%d-audio;
-#X obj 27 28 makefilename $%d-message;
-#X obj 277 133 list prepend obj;
-#X obj 277 153 list trim;
-#X msg 27 49 480 560 send \$1;
-#X msg 187 49 10 560 throw~ \$1;
-#X msg 337 49 500 10 receive \$1;
-#X msg 477 49 10 10 receive \$1;
-#X obj 137 -36 trigger float float float float;
-#X connect 0 0 3 0;
-#X connect 3 0 14 0;
-#X connect 4 0 13 0;
-#X connect 5 0 12 0;
-#X connect 6 0 11 0;
-#X connect 7 0 10 0;
-#X connect 8 0 9 0;
-#X connect 9 0 1 0;
-#X connect 10 0 8 0;
-#X connect 11 0 8 0;
-#X connect 12 0 8 0;
-#X connect 13 0 8 0;
-#X connect 14 0 7 0;
-#X connect 14 1 6 0;
-#X connect 14 2 5 0;
-#X connect 14 3 4 0;
-#X restore 376 449 pd xlets;
-#X obj 330 10 inlet;
-#X obj 214 268 moses 1;
-#X obj 122 214 moses;
-#X obj 505 449 symbol pd-\$0-poly;
-#X obj 280 404 moses;
-#X msg 223 356 bang;
-#X msg 323 347 0;
-#X obj 376 425 trigger bang bang bang;
-#X obj 142 327 trigger bang bang anything;
-#X obj 253 292 trigger anything bang;
-#X obj 117 175 trigger 0 0;
-#N canvas 0 22 519 307 warning 0;
-#X obj 70 17 inlet;
-#X obj 383 18 inlet;
-#X obj 44 260 print rawpoly_WARNING;
-#X msg 62 122 inlet value less than current instance count- reseting
-all instances!;
-#X msg 116 65 inlet value equal to current instance count- ignoring!
-;
-#X connect 0 0 3 0;
-#X connect 1 0 4 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X restore 92 275 pd warning;
-#X obj 214 224 loadbang;
-#X text 22 507 Beware of loadbangs when dynamically adding instances
-using the 3rd inlet! Everytime a new instance is created \, all instances
-will receive a loadbang!;
-#X obj 207 426 print;
-#X obj 149 255 select;
-#X connect 0 0 5 0;
-#X connect 1 0 4 0;
-#X connect 2 0 23 0;
-#X connect 2 0 4 1;
-#X connect 4 0 2 0;
-#X connect 4 0 14 0;
-#X connect 4 0 33 0;
-#X connect 6 0 7 0;
-#X connect 8 0 20 0;
-#X connect 10 0 9 0;
-#X connect 11 0 12 0;
-#X connect 14 0 15 0;
-#X connect 16 0 15 0;
-#X connect 17 0 15 0;
-#X connect 18 0 15 0;
-#X connect 19 0 29 0;
-#X connect 20 1 28 0;
-#X connect 21 0 30 0;
-#X connect 21 0 8 0;
-#X connect 21 1 34 0;
-#X connect 22 0 15 1;
-#X connect 23 1 24 0;
-#X connect 24 0 1 1;
-#X connect 25 0 4 1;
-#X connect 26 0 18 0;
-#X connect 26 1 17 0;
-#X connect 26 2 22 0;
-#X connect 27 0 16 0;
-#X connect 27 1 1 0;
-#X connect 27 2 23 1;
-#X connect 28 0 27 0;
-#X connect 28 1 26 0;
-#X connect 28 1 25 0;
-#X connect 29 0 21 1;
-#X connect 29 0 34 1;
-#X connect 29 1 21 0;
-#X connect 31 0 8 0;
-#X connect 34 0 30 1;
-#X connect 34 1 27 0;
diff --git a/externals/many/voices-template~-help.pd b/externals/many/voices-template~-help.pd
deleted file mode 100644
index 3a28f3dcd56e8ab0c8bc38f823ba96bac95302bf..0000000000000000000000000000000000000000
--- a/externals/many/voices-template~-help.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X text 72 274 dsp-out left;
-#X text 222 271 dsp-out right;
-#X text 35 233 inlet for messages routed to voices;
-#X text 80 35 voices-template~ is a basic patch here only to illustrate
-what a patch designed for [voices~] looks like. Feel free to use it
-as a template for your own patches for [voices~].;
-#X obj 110 254 voices-template~ 1 8 four more arguments possible;
-#X text 370 234 inlet for messages to all voices;
-#X text 368 273 bang when done;
-#X text 82 100 Your [voices~] abstraction needs two [inlet]s for input
-\, two [outlet~]s for audio \, and a third [outlet] for voice allocation
-control. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [voices~] and will be passed
-on to the custom abstraction.;
diff --git a/externals/many/voices-template~.pd b/externals/many/voices-template~.pd
deleted file mode 100644
index c4341a601acade34d256e14e5c84789d3e8222f1..0000000000000000000000000000000000000000
--- a/externals/many/voices-template~.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 244 339 552 361 10;
-#X obj 54 11 inlet;
-#X obj 54 324 outlet~;
-#X obj 228 325 outlet~;
-#X obj 365 323 outlet;
-#X text 416 322 bang when done;
-#X obj 243 9 inlet;
-#X text 286 12 messages for all voices;
-#X obj 56 113 print voices~_\$1;
-#X text 65 57 messages filtered by voice allocation for a single instance
-;
-#X connect 0 0 7 0;
diff --git a/externals/many/voices-wrap~-help.pd b/externals/many/voices-wrap~-help.pd
deleted file mode 100644
index 43330fd6f1489735bf11b22af1122bbb27fb55c1..0000000000000000000000000000000000000000
--- a/externals/many/voices-wrap~-help.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 137 124 450 300 10;
-#X text 60 100 [polypoly~-wrap] is an object used by [polypoly~] to handle
-the voice allocation logic for each patch that [polypoly~] is instantiating.
-It is not a patch that has any use outside of how [polypoly~] uses it
-internally.;
diff --git a/externals/many/voices-wrap~.pd b/externals/many/voices-wrap~.pd
deleted file mode 100644
index c9a0c9514ed1e2cf7c1fa16998d4ee1330c23dd1..0000000000000000000000000000000000000000
--- a/externals/many/voices-wrap~.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 366 494 452 327 10;
-#X obj 45 26 inlet;
-#X obj 45 177 spigot;
-#X obj 192 274 spigot;
-#X obj 25 249 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 22 301 outlet;
-#X obj 260 23 inlet;
-#X msg 67 124 0 1;
-#X msg 105 125 1 0;
-#X text 252 156 this object is used by nqpoly5;
-#X text 12 5 nqpwrap5 - pix.test.at;
-#X obj 45 64 trigger anything anything;
-#X obj 25 226 trigger anything bang;
-#X obj 105 100 loadbang;
-#X obj 78 155 unpack float float;
-#X obj 85 301 outlet~;
-#X text 213 298 strange ordering to make dynamic patching esaier;
-#X obj 161 301 outlet~;
-#X connect 0 0 10 0;
-#X connect 1 0 11 0;
-#X connect 2 0 4 0;
-#X connect 3 0 14 0;
-#X connect 3 1 16 0;
-#X connect 3 2 7 0;
-#X connect 5 0 3 1;
-#X connect 6 0 13 0;
-#X connect 7 0 13 0;
-#X connect 10 0 1 0;
-#X connect 10 1 2 0;
-#X connect 11 0 3 0;
-#X connect 11 1 6 0;
-#X connect 12 0 7 0;
-#X connect 13 0 1 1;
-#X connect 13 1 2 1;
diff --git a/externals/many/voices~-help.pd b/externals/many/voices~-help.pd
deleted file mode 100644
index b9b131c80969375fadb5ae72bd81acab58ed2409..0000000000000000000000000000000000000000
--- a/externals/many/voices~-help.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#N canvas 281 60 588 471 10;
-#X text 100 423 dsp-out left;
-#X text 236 420 dsp-out right;
-#X text 25 383 inlet for messages routed to instances;
-#X obj 219 318 output~;
-#X obj 168 249 list prepend;
-#X obj 237 228 hradio 15 1 1 5 empty empty empty 0 -8 0 10 -203904
--1 -1 4;
-#X obj 171 203 hsl 128 15 200 500 1 1 empty empty empty -2 -8 0 10
--261682 -1 -1 6600 0;
-#X obj 134 142 loadbang;
-#X msg 134 166 0 200 \, 1 300 \, 2 400 \, 3 500 \, 4 100;
-#X text 27 71 outlet~0: connected directly to each instance;
-#X text 27 91 outlet~1: connected directly to each instance;
-#X obj 321 293 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 27 21 inlet0: routed to each instance based on instance number
-;
-#X text 27 41 inlet1: connected directly to each instance;
-#X text 27 111 outlet:;
-#X text 321 384 inlet for messages to all instances;
-#X obj 168 272 voices~ 5 voices-template~;
-#X text 339 292 message overflow (i.e. out of voices);
-#X obj 128 404 voices-template~ 1 8 four more arguments possible;
-#X text 388 423 bang when done;
-#X connect 4 0 16 0;
-#X connect 5 0 4 1;
-#X connect 6 0 4 0;
-#X connect 7 0 8 0;
-#X connect 8 0 16 0;
-#X connect 16 0 3 0;
-#X connect 16 1 3 1;
-#X connect 16 2 11 0;
diff --git a/externals/many/voices~.pd b/externals/many/voices~.pd
deleted file mode 100644
index e2061fed45cbfab01266464d8c29ba1afac12848..0000000000000000000000000000000000000000
--- a/externals/many/voices~.pd
+++ /dev/null
@@ -1,176 +0,0 @@
-#N canvas 361 57 694 548 10;
-#X obj 26 8 inlet;
-#X obj 256 209 outlet;
-#N canvas 539 471 610 407 finish 0;
-#X obj 77 180 until;
-#X obj 127 206 + 1;
-#X text 210 158 first 3 objects are xlets;
-#X obj 38 26 inlet;
-#X obj 38 62 moses 1;
-#X obj 77 157 trigger anything bang;
-#X text 15 363 Connect all wrapper object's right inlet to [receive
-\$0-in2];
-#X text 360 282 Connect final object to [send \$0-out];
-#X msg 200 177 5;
-#X obj 373 207 + 4;
-#X obj 372 333 outlet;
-#X msg 483 228 connect 0 0 5 0;
-#X msg 373 227 connect \$1 0 4 0;
-#X obj 77 93 trigger anything anything bang;
-#X msg 144 249 connect 1 0 \$1 1;
-#X obj 77 206 float;
-#X connect 0 0 15 0;
-#X connect 1 0 15 1;
-#X connect 3 0 4 0;
-#X connect 4 1 13 0;
-#X connect 5 0 0 0;
-#X connect 5 1 8 0;
-#X connect 8 0 15 1;
-#X connect 9 0 12 0;
-#X connect 11 0 10 0;
-#X connect 12 0 10 0;
-#X connect 13 0 5 0;
-#X connect 13 1 9 0;
-#X connect 13 2 11 0;
-#X connect 14 0 10 0;
-#X connect 15 0 1 0;
-#X connect 15 0 14 0;
-#X restore 106 443 pd finish;
-#X obj 26 67 send \$0-in1;
-#X obj 100 8 inlet;
-#X obj 100 67 send \$0-in2;
-#X obj 26 208 outlet~;
-#X text 122 97 <-- open this subpatch to see the instances;
-#N canvas 138 22 601 588 \$0-voices~ 0;
-#X restore 26 96 pd \$0-voices~;
-#X obj 136 209 outlet~;
-#X obj 26 124 catch~ \$0-audioL;
-#X obj 136 124 catch~ \$0-audioR;
-#X obj 256 124 receive \$0-voicemsg;
-#X obj 168 386 until;
-#X obj 206 413 + 1;
-#X obj 168 413 float;
-#X msg 207 386 0;
-#X obj 27 261 float \$1;
-#X obj 536 514 send;
-#X obj 168 358 trigger 0 bang;
-#X obj 27 239 loadbang;
-#X msg 46 443 loadbang;
-#X msg 509 443 clear;
-#N canvas 73 546 512 291 xlets 0;
-#X obj 70 -124 inlet;
-#X obj 70 70 outlet;
-#X text 101 -86 This will create fake "in/outlets" as senders and receivers.
-;
-#X obj 70 -32 float \$0;
-#X msg 70 -6 obj 10 10 receive \$1-in1 \, obj 400 10 receive \$1-in2
-\, obj 10 560 throw~ \$1-audioL \, obj 380 560 throw~ \$1-audioR \,
-obj 500 560 send \$1-voicemsg;
-#X connect 0 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X restore 444 443 pd xlets;
-#X obj 27 285 moses 1;
-#X text 79 283 no need to generate anything for 0 instances;
-#X obj 557 442 symbol pd-\$0-voices~;
-#N canvas 1048 429 450 300 connect 0;
-#X obj 89 17 inlet;
-#X obj 89 102 + 5;
-#X obj 89 248 outlet;
-#X msg 89 123 connect \$1 1 2 0 \, connect \$1 2 3 0;
-#X connect 0 0 1 0;
-#X connect 1 0 3 0;
-#X connect 3 0 2 0;
-#X restore 340 443 pd connect xlets;
-#X obj 10 241 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#N canvas 934 484 551 402 create+connect 0;
-#X obj 29 10 inlet;
-#X obj 167 139 list append \$3 \$4 \$5 \$6;
-#X obj 347 69 float \$1;
-#X obj 224 93 + 30;
-#X obj 29 181 + 5;
-#X obj 281 70 symbol \$2;
-#N canvas 40 466 316 307 expandpath 0;
-#X obj 59 16 inlet;
-#X obj 55 271 outlet;
-#X obj 59 98 list append;
-#X msg 58 153 symbol \$1/\$2;
-#X obj 59 43 trigger bang anything;
-#X obj 58 67 ggee/getdir 3;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 5 0;
-#X connect 4 1 2 1;
-#X connect 5 0 2 0;
-#X restore 281 90 pd expandpath;
-#X obj 225 347 outlet;
-#X obj 167 115 pack float float symbol float;
-#X obj 224 71 * 50;
-#X msg 167 166 obj 100 \$2 voices-wrap~ \$3 \$1 \$4 \$5 \$6 \$7 \$8
-;
-#X msg 39 296 connect \$1 1 2 0;
-#X msg 29 318 connect \$1 2 3 0;
-#X obj 77 226 pack float float;
-#X obj 29 37 trigger anything anything anything anything bang bang
-;
-#X obj 111 184 + 4;
-#X msg 77 248 connect \$2 0 \$1 0;
-#X obj 38 203 moses 6;
-#X connect 0 0 14 0;
-#X connect 1 0 10 0;
-#X connect 2 0 8 3;
-#X connect 3 0 8 1;
-#X connect 4 0 11 0;
-#X connect 4 0 12 0;
-#X connect 4 0 17 0;
-#X connect 5 0 6 0;
-#X connect 6 0 8 2;
-#X connect 8 0 1 0;
-#X connect 9 0 3 0;
-#X connect 10 0 7 0;
-#X connect 11 0 7 0;
-#X connect 12 0 7 0;
-#X connect 13 0 16 0;
-#X connect 14 0 4 0;
-#X connect 14 1 15 0;
-#X connect 14 2 8 0;
-#X connect 14 3 9 0;
-#X connect 14 4 5 0;
-#X connect 14 5 2 0;
-#X connect 15 0 13 1;
-#X connect 16 0 7 0;
-#X connect 17 1 13 0;
-#X restore 168 443 pd create+connect instances;
-#X obj 66 307 trigger bang anything anything anything bang bang bang
-;
-#X connect 0 0 3 0;
-#X connect 2 0 18 0;
-#X connect 4 0 5 0;
-#X connect 10 0 6 0;
-#X connect 11 0 9 0;
-#X connect 12 0 1 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 1;
-#X connect 15 0 14 0;
-#X connect 15 0 29 0;
-#X connect 16 0 15 1;
-#X connect 17 0 24 0;
-#X connect 19 0 13 0;
-#X connect 19 1 16 0;
-#X connect 20 0 17 0;
-#X connect 21 0 18 0;
-#X connect 22 0 18 0;
-#X connect 23 0 18 0;
-#X connect 24 1 30 0;
-#X connect 26 0 18 1;
-#X connect 27 0 18 0;
-#X connect 28 0 17 0;
-#X connect 29 0 18 0;
-#X connect 30 0 21 0;
-#X connect 30 1 2 0;
-#X connect 30 2 19 0;
-#X connect 30 4 23 0;
-#X connect 30 5 22 0;
-#X connect 30 6 26 0;
diff --git a/externals/pd-l2ork-TODO.txt b/externals/pd-l2ork-TODO.txt
index af5e98beb6ab06d6969f17bed4507873ef8b15c8..0aa7df76e7ddf69fedf7ccbebf3670462e3d9878 100644
--- a/externals/pd-l2ork-TODO.txt
+++ b/externals/pd-l2ork-TODO.txt
@@ -1,3 +1,31 @@
+New Pd-l2ork TODO
+-----------------
+
+[x] Remove all libs that _obviously_ are not included in LIB_TARGETS of externals/Makefile, which
+    don't get built from tar_em_up.sh, and which aren't leveraging Flext
+[ ] Figure out flatspace dependencies and whether we want to support any of them going forward (probably not)
+[ ] Get rid of Flext-based libs that aren't being built
+[ ] Get rid of Flext
+[ ] Check duplicates like
+    * externals/signal and pd/extra/etc.
+    * externals/loaders and externals/import and pd/src/import.c
+    * io and whatever else
+    * grh and grill (and perhaps both can be removed)
+    * pdp_opencv and pix_opencv and whatever is in Gem that might be another dup
+    * check if footils is being used
+    figure out which are currently getting build and get rid of the other ones
+[ ] Check interesting remaining libs like
+    * mmonoplayer
+    * various stuff in tb
+    * rhythm _estimator
+    * supercollider
+    * dfx
+    * deprecated
+    See if we want to keep/maintain any of it and whether it even compiles
+
+Old Pd-l2ork TODO
+-----------------
+
 Diff status between pd-l2ork externals source tree and main community pd svn
 AS OF November 14, 2014
 
diff --git a/externals/pdvjtools/Makefile b/externals/pdvjtools/Makefile
deleted file mode 100644
index c1dfef4a516d11f79e1d31f3b39f30994df6e000..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/Makefile
+++ /dev/null
@@ -1,176 +0,0 @@
-# To use this Makefile for your project, first put the name of your library in
-# LIBRARY_NAME variable. The folder for your project should have the same name
-# as your library.
-LIBRARY_NAME = pdvjtools
-
-# exclude videogrid for now since it doesn't build with ffmpeg from Debian/stable
-CSOURCES = colorgrid/colorgrid.c pdp_freeframe/pdp_freeframe.c pdp_frei0r/pdp_frei0r.c
-CXXSOURCES = pix_preview/pix_preview.cc videogrid/videogrid.cc
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-CSOURCES_Darwin =
-CXXSOURCES_Darwin =
-
-CSOURCES_Linux = 
-CXXSOURCES_Linux = 
-
-CSOURCES_Windows = 
-CXXSOURCES_Windows = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-objectsdir = $(PD_PATH)/extra
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g -I../pdp/include -I../../Gem/src -I/usr/include/ffmpeg
-
-LDFLAGS = 
-LIBS = -lavcodec -lavformat -lavutil -lswscale -lquicktime -lstdc++ 
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    CSOURCES += $(CSOURCES_Darwin)
-    CXXSOURCES += $(CXXSOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-  else # Mac OS X
-    CSOURCES += $(CXXSOURCES_Darwin)
-    CXXSOURCES += $(CXXSOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = macosx
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-    FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    LIBS += -lc 
-    STRIP = strip -x
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CSOURCES += $(CSOURCES_Linux)
-  CXXSOURCES += $(CXXSOURCES_Linux)
-  EXTENSION = pd_linux
-  OS = linux
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CSOURCES += 
-  CXXSOURCES += 
-  EXTENSION = dll
-  OS = cygwin
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L$(PD_PATH)/src
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CSOURCES += $(CSOURCES_Windows)
-  CXXSOURCES += $(CXXSOURCES_Windows)
-  EXTENSION = dll
-  OS = windows
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  WINDOWS_HACKS = -D'O_NONBLOCK=1'
-  CFLAGS += -mms-bitfields $(WINDOWS_HACKS)
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L$(PD_PATH)/src -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install install-doc install-exec clean dist etags
-
-all: $(CSOURCES:.c=.$(EXTENSION)) $(CXXSOURCES:.cc=.$(EXTENSION))
-
-%.$(EXTENSION): %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-%.$(EXTENSION): %.cc
-	$(CXX) $(CFLAGS) -o "$*.o" -c "$*.cc"
-	$(CXX) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-install: all install-doc install-exec
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(LIBRARY_NAME)-meta.pd $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CSOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CXXSOURCES:.cc=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(CSOURCES:.c=.$(EXTENSION)))
-	$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(CXXSOURCES:.cc=.$(EXTENSION)))
-
-install-doc:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CSOURCES:.c=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CXXSOURCES:.cc=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p README $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	install -m644 -p VERSION $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/VERSION.txt
-	install -m644 -p CHANGES $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/CHANGES.txt
-
-install-exec:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-#	install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-
-clean:
-	-rm -f -- $(CSOURCES:.c=.o)
-	-rm -f -- $(CXXSOURCES:.cc=.o)
-	-rm -f -- $(CSOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(CXXSOURCES:.cc=.$(EXTENSION))
-
-distclean: clean
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS).tar.bz2
-
-dist: all dist_$(OS)
-
-dist_linux:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2 $(LIBRARY_NAME)
-
-dist_macosx:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-dist_windows:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-
-etags:
-	etags *.[ch] ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showpaths:
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "CSOURCES: $(CSOURCES)"
-	@echo "CXXSOURCES: $(CXXSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
diff --git a/externals/pdvjtools/README.txt b/externals/pdvjtools/README.txt
deleted file mode 100644
index 4effa19f4f75f846c3229b9dbdbad14eff362f32..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-hello!
diff --git a/externals/pdvjtools/colorgrid/CHANGES.LOG b/externals/pdvjtools/colorgrid/CHANGES.LOG
deleted file mode 100755
index ef94355e97f04de4386e611424a5289b4f391936..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/colorgrid/CHANGES.LOG
+++ /dev/null
@@ -1,13 +0,0 @@
-0.5
-  GOP working
-
-0.4
-  Added the colorpicker image inside the C code, so, there will not be  more path problems. 
-  Now colorgrid has one new requeriment :: libtk-img 
-
-0.2
-  Better algorithm for extract RGB values
-  new spectrum image 
-
-0.1
-  First version for pd 0.37
diff --git a/externals/pdvjtools/colorgrid/INSTALL b/externals/pdvjtools/colorgrid/INSTALL
deleted file mode 100755
index 983cac8b148a1960cd7ee586c2ae37cfb797a7a7..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/colorgrid/INSTALL
+++ /dev/null
@@ -1,15 +0,0 @@
-untar in /usr/local/lib/pd/externs
-
-cd /usr/local/lib/pd/externs/colorgrid
-
-make clean 
-
-make
-
-make install
-
-open help-colorgrid.pd
-
-Thanx for getting here.
-Lluis/
-comments and bugs @ lluis@artefacte.org
diff --git a/externals/pdvjtools/colorgrid/Makefile b/externals/pdvjtools/colorgrid/Makefile
deleted file mode 100755
index 2da52c4f8355b909e261287b233734c91a739d60..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/colorgrid/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-NAME=colorgrid
-CSYM=colorgrid
-
-current: pd_linux
-
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -fPIC -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDE =  -I../../../pd/src 
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc -lm
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
diff --git a/externals/pdvjtools/colorgrid/README b/externals/pdvjtools/colorgrid/README
deleted file mode 100755
index 77a1fc20951135049a2ff94d14671782c51564dc..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/colorgrid/README
+++ /dev/null
@@ -1,20 +0,0 @@
-Version 0.01 
-copyright 2004 by Lluis Gomez
-inspired by the grid object written by Yves Degoyon
-tarballs and updates available @ http://pd.artefacte.org
-
-colorgrid : grid color picker
-
-To install grid, follow the steps from INSTALL
-
-This software is published under GPL terms.
-
-This is software with ABSOLUTELY NO WARRANTY.
-Use it at your OWN RISK. It's possible to damage e.g. hardware or your hearing
-due to a bug or for other reasons. 
-We do not warrant that the program is free of infringement of any third-party
-patents.
-
-*****************************************************************************
-
-
diff --git a/externals/pdvjtools/colorgrid/colorgrid-help.pd b/externals/pdvjtools/colorgrid/colorgrid-help.pd
deleted file mode 100644
index 77af92b05abb3035e8257c6d1bba538765f06b43..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/colorgrid/colorgrid-help.pd
+++ /dev/null
@@ -1,47 +0,0 @@
-#N canvas 26 1 762 514 10;
-#X floatatom 93 434 5 0 0 0 - - -;
-#X floatatom 217 434 5 0 0 0 - - -;
-#X floatatom 430 220 5 0 0 0 - - -;
-#X floatatom 496 220 5 0 0 0 - - -;
-#X obj 430 245 pack f f;
-#X text 471 221 X;
-#X text 537 220 Y;
-#X msg 93 131 bang;
-#X floatatom 342 431 5 0 0 0 - - -;
-#X text 93 451 R;
-#X text 217 450 G;
-#X text 342 445 B;
-#X text 39 12 Grid is a 2-dimensional color picker;
-#X text 39 25 Written by Lluis Gomez i Bigorda ( lluis@artefacte.org
-);
-#X text 39 39 ( inspired by the grid object written by Yves Degoyon
-);
-#X msg 339 246 xgoto \$1 \$2;
-#X text 330 195 Set position without changing output:;
-#X obj 496 246 t b f;
-#X floatatom 430 133 5 0 0 0 - - -;
-#X floatatom 496 133 5 0 0 0 - - -;
-#X obj 430 158 pack f f;
-#X text 471 134 X;
-#X text 537 133 Y;
-#X obj 496 159 t b f;
-#X text 330 108 Set position :;
-#X msg 339 159 goto \$1 \$2;
-#X obj 90 376 colorgrid colorgrid1 256 0 256 50 0 50 0 1 1 10 10 147
-392.06;
-#X connect 2 0 4 0;
-#X connect 3 0 17 0;
-#X connect 4 0 15 0;
-#X connect 7 0 26 0;
-#X connect 15 0 26 0;
-#X connect 17 0 4 0;
-#X connect 17 1 4 1;
-#X connect 18 0 20 0;
-#X connect 19 0 23 0;
-#X connect 20 0 25 0;
-#X connect 23 0 20 0;
-#X connect 23 1 20 1;
-#X connect 25 0 26 0;
-#X connect 26 0 0 0;
-#X connect 26 1 1 0;
-#X connect 26 2 8 0;
diff --git a/externals/pdvjtools/colorgrid/colorgrid.c b/externals/pdvjtools/colorgrid/colorgrid.c
deleted file mode 100644
index cbff1eba122f14caf062938420440227109aabda..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/colorgrid/colorgrid.c
+++ /dev/null
@@ -1,1655 +0,0 @@
-/* Copyright (c) 1997-1999 Miller Puckette.
- * For information on usage and redistribution, and for a DISCLAIMER OF ALL
- * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
-
-/* g_colorgrid.c written by Yves Degoyon 2002                                       */
-/* colorgrid control object : two dimensionnal colorgrid                                 */
-/* thanks to Thomas Musil, Miller Puckette, Guenther Geiger and Krzystof Czaja */
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <ctype.h>
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-
-
-#ifdef NT
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
-#define COLORGRID_IMG "/usr/local/lib/pd/externs/colorgrid/colorgrid.pnm"
-#define DEFAULT_COLORGRID_WIDTH 256
-#define DEFAULT_COLORGRID_HEIGHT 50
-#define DEFAULT_COLORGRID_NBLINES 10
-
-typedef struct _colorgrid
-{
-    t_object x_obj;
-    t_glist *x_glist;
-    t_symbol *x_name; 
-    t_outlet *x_xoutlet; 
-    t_outlet *x_youtlet; 
-    t_outlet *x_zoutlet; 
-    int x_null; 	/* To dissable resize                             */
-    int x_height; 	/* height of the colorgrid                        */
-    t_float x_min; 	/* minimum value of x                        */
-    t_float x_max; 	/* max value of x                            */
-    int x_width; 	/* width of the colorgrid                         */
-    t_float y_min; 	/* minimum value of y                        */
-    t_float y_max; 	/* max value of y                            */
-    t_float x_current; 	/* x coordinate of current position          */
-    t_float y_current; 	/* y coordinate of current position          */
-    int x_selected; 	/* stores selected state                     */
-    int x_point; 	/* indicates if a point is plotted           */
-    int x_colorgrid; 	/* indicates if a colorgrid is requested          */
-    t_float x_xstep; 	/* sets the step ( grain ) for x             */
-    t_float x_ystep; 	/* sets the step ( grain ) for y             */
-    int x_xlines; 	/* number of vertical lines                  */
-    int x_ylines; 	/* number of horizontal lines                */
-    t_symbol*  x_fname;
-} t_colorgrid;
-
-
-t_widgetbehavior colorgrid_widgetbehavior;
-static t_class *colorgrid_class;
-static int colorgridcount=0;
-
-static int guidebug=0;
-static int pointsize = 5;
-
-static char   *colorgrid_version = "colorgrid: version 0.4, written by Yves Degoyon (ydegoyon@free.fr) & Lluis Gomez i Bigorda (lluis@artefacte.org)";
-
-#define COLORGRID_SYS_VGUI2(a,b) if (guidebug) \
-                         post(a,b);\
-                         sys_vgui(a,b)
-
-#define COLORGRID_SYS_VGUI3(a,b,c) if (guidebug) \
-                         post(a,b,c);\
-                         sys_vgui(a,b,c)
-
-#define COLORGRID_SYS_VGUI4(a,b,c,d) if (guidebug) \
-                         post(a,b,c,d);\
-                         sys_vgui(a,b,c,d)
-
-#define COLORGRID_SYS_VGUI5(a,b,c,d,e) if (guidebug) \
-                         post(a,b,c,d,e);\
-                         sys_vgui(a,b,c,d,e)
-
-#define COLORGRID_SYS_VGUI6(a,b,c,d,e,f) if (guidebug) \
-                         post(a,b,c,d,e,f);\
-                         sys_vgui(a,b,c,d,e,f)
-
-#define COLORGRID_SYS_VGUI7(a,b,c,d,e,f,g) if (guidebug) \
-                         post(a,b,c,d,e,f,g );\
-                         sys_vgui(a,b,c,d,e,f,g)
-
-#define COLORGRID_SYS_VGUI8(a,b,c,d,e,f,g,h) if (guidebug) \
-                         post(a,b,c,d,e,f,g,h );\
-                         sys_vgui(a,b,c,d,e,f,g,h)
-
-#define COLORGRID_SYS_VGUI9(a,b,c,d,e,f,g,h,i) if (guidebug) \
-                         post(a,b,c,d,e,f,g,h,i );\
-                         sys_vgui(a,b,c,d,e,f,g,h,i)
-
-/* drawing functions */
-static void colorgrid_draw_update(t_colorgrid *x, t_glist *glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    t_int xpoint=x->x_current, ypoint=x->y_current;
-
-    // later : try to figure out what's this test for ??  
-    // if (glist_isvisible(glist))
-    // {
-       // delete previous point if existing
-       if (x->x_point)  
-       {
-          COLORGRID_SYS_VGUI3(".x%x.c delete %xPOINT\n", canvas, x);
-       }
-        
-       if ( x->x_current < x->x_obj.te_xpix ) xpoint = x->x_obj.te_xpix;
-       if ( x->x_current > x->x_obj.te_xpix + x->x_width - pointsize ) 
-			xpoint = x->x_obj.te_xpix + x->x_width - pointsize;
-       if ( x->y_current < x->x_obj.te_ypix ) ypoint = x->x_obj.te_ypix;
-       if ( x->y_current > x->x_obj.te_ypix + x->x_height - pointsize ) 
-			ypoint = x->x_obj.te_ypix + x->x_height - pointsize;
-       // draw the selected point
-       COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -outline {} -fill #FF0000 -tags %xPOINT\n",
-	     canvas, xpoint, ypoint, xpoint+5, ypoint+5, x);
-       x->x_point = 1;
-    // }  
-    // else 
-    // {
-    //    post( "colorgrid : position updated in an invisible colorgrid" );
-    // }
-}
-
-static void colorgrid_draw_new(t_colorgrid *x, t_glist *glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    char *tagRoot;
-    char fname[MAXPDSTRING]=COLORGRID_IMG;
-
-    char *fdata="UDYKIyBDUkVBVE9SOiBUaGUgR0lNUCdzIFBOTSBGaWx0ZXIgVmVyc2lvbiAx\
-LjAKMjU2IDUwCjI1NQpMBwdMCQdMCgdMDAdMDgdMDwdMEQdMEwdMFAdMFgdM\
-FwdMGQdMGwdMHAdMHgdMHwdMIQdMIwdMJAdMJgdMKAdMKQdMKwdMLAdMLgdM\
-MAdMMQdMMwdMNQdMNgdMOAdMOQdMOwdMPQdMPgdMQAdMQgdMQwdMRQdMRgdM\
-SAdMSgdMSwdMTAdKTAdJTAdHTAdFTAdETAdCTAdATAc/TAc9TAc8TAc6TAc4\
-TAc3TAc1TAczTAcyTAcwTAcvTActTAcrTAcqTAcoTAcnTAclTAcjTAciTAcg\
-TAceTAcdTAcbTAcaTAcYTAcWTAcVTAcTTAcRTAcQTAcOTAcNTAcLTAcJTAcI\
-TAcHTAgHTAoHTAwHTA0HTA8HTBAHTBIHTBQHTBUHTBcHTBgHTBoHTBwHTB0H\
-TB8HTCEHTCIHTCQHTCUHTCcHTCkHTCoHTCwHTC4HTC8HTDEHTDIHTDQHTDYH\
-TDcHTDkHTDoHTDwHTD4HTD8HTEEHTEMHTEQHTEYHTEcHTEkHTEsHTEwHS0wH\
-SUwHR0wHRkwHREwHQ0wHQUwHP0wHPkwHPEwHOkwHOUwHN0wHNkwHNEwHMkwH\
-MUwHL0wHLkwHLEwHKkwHKUwHJ0wHJUwHJEwHIkwHIUwHH0wHHUwHHEwHGkwH\
-GEwHF0wHFUwHFEwHEkwHEEwHD0wHDUwHDEwHCkwHCEwIB0wJB0wLB0wNB0wO\
-B0wQB0wRB0wTB0wVB0wWB0wYB0waB0wbB0wdB0weB0wgB0wiB0wjB0wlB0wn\
-B0woB0wqB0wrB0wtB0wvB0wwB0wyB0wzB0w1B0w3B0w4B0w6B0w8B0w9B0w/\
-B0xAB0xCB0xEB0xFB0xHB0xJB0xKB0xMB0xMB0tMB0pMB0hMB0ZMB0VMB0NM\
-B0JMB0BMBz5MBz1MBztMBzlMBzhMBzZMBzVMBzNMBzFMBzBMBy5MByxMBytM\
-BylMByhMByZMByRMByNMByFMBx9MBx5MBxxMBxtMBxlMBxdMBxZMBxRMBxNM\
-BxFMBw9MBw5MBwxMBwpMBwlTCAhTCghTCwhTDQhTDwhTEQhTEwhTFAhTFghT\
-GAhTGghTGwhTHQhTHwhTIQhTIghTJAhTJghTKAhTKghTKwhTLQhTLwhTMQhT\
-MghTNAhTNghTOAhTOQhTOwhTPQhTPwhTQQhTQghTRAhTRghTSAhTSQhTSwhT\
-TQhTTwhTUQhTUghTUwhRUwhPUwhOUwhMUwhKUwhIUwhGUwhFUwhDUwhBUwg/\
-Uwg+Uwg8Uwg6Uwg4Uwg3Uwg1UwgzUwgxUwgvUwguUwgsUwgqUwgoUwgnUwgl\
-UwgjUwghUwggUwgeUwgcUwgaUwgYUwgXUwgVUwgTUwgRUwgQUwgOUwgMUwgK\
-UwgIUwgIUwkIUwsIUw0IUw4IUxAIUxIIUxQIUxUIUxcIUxkIUxsIUx0IUx4I\
-UyAIUyIIUyQIUyUIUycIUykIUysIUy0IUy4IUzAIUzIIUzQIUzUIUzcIUzkI\
-UzsIUzwIUz4IU0AIU0IIU0QIU0UIU0cIU0kIU0sIU0wIU04IU1AIU1IIU1MI\
-UlMIUFMITlMITFMIS1MISVMIR1MIRVMIRFMIQlMIQFMIPlMIPFMIO1MIOVMI\
-N1MINVMINFMIMlMIMFMILlMILVMIK1MIKVMIJ1MIJVMIJFMIIlMIIFMIHlMI\
-HVMIG1MIGVMIF1MIFVMIFFMIElMIEFMIDlMIDVMIC1MICVMICFMKCFMMCFMO\
-CFMQCFMRCFMTCFMVCFMXCFMYCFMaCFMcCFMeCFMgCFMhCFMjCFMlCFMnCFMo\
-CFMqCFMsCFMuCFMvCFMxCFMzCFM1CFM3CFM4CFM6CFM8CFM+CFM/CFNBCFND\
-CFNFCFNGCFNICFNKCFNMCFNOCFNPCFNRCFNTCFNTCFJTCFFTCE9TCE1TCEtT\
-CElTCEhTCEZTCERTCEJTCEFTCD9TCD1TCDtTCDlTCDhTCDZTCDRTCDJTCDFT\
-CC9TCC1TCCtTCCpTCChTCCZTCCRTCCJTCCFTCB9TCB1TCBtTCBpTCBhTCBZT\
-CBRTCBNTCBFTCA9TCA1TCAtTCApbCQlbCwlbDAlbDglbEAlbEglbFAlbFglb\
-GAlbGglbHAlbHglbIAlbIglbJAlbJQlbJwlbKQlbKwlbLQlbLwlbMQlbMwlb\
-NQlbNwlbOQlbOwlbPQlbPglbQAlbQglbRAlbRglbSAlbSglbTAlbTglbUAlb\
-UglbVAlbVglbVwlbWQlaWwlYWwlWWwlUWwlSWwlQWwlOWwlNWwlLWwlJWwlH\
-WwlFWwlDWwlBWwk/Wwk9Wwk7Wwk5Wwk3Wwk1Wwk0WwkyWwkwWwkuWwksWwkq\
-WwkoWwkmWwkkWwkiWwkgWwkeWwkcWwkbWwkZWwkXWwkVWwkTWwkRWwkPWwkN\
-WwkLWwkJWwkJWwoJWwwJWw4JWxAJWxIJWxQJWxUJWxcJWxkJWxsJWx0JWx8J\
-WyEJWyMJWyUJWycJWykJWysJWywJWy4JWzAJWzIJWzQJWzYJWzgJWzoJWzwJ\
-Wz4JW0AJW0IJW0QJW0UJW0cJW0kJW0sJW00JW08JW1EJW1MJW1UJW1cJW1kJ\
-W1sJWVsJV1sJVVsJU1sJUVsJT1sJTVsJS1sJSVsJR1sJRVsJRFsJQlsJQFsJ\
-PlsJPFsJOlsJOFsJNlsJNFsJMlsJMFsJLlsJLFsJK1sJKVsJJ1sJJVsJI1sJ\
-IVsJH1sJHVsJG1sJGVsJF1sJFVsJFFsJElsJEFsJDlsJDFsJClsJCVsLCVsN\
-CVsPCVsRCVsTCVsVCVsXCVsZCVsbCVscCVseCVsgCVsiCVskCVsmCVsoCVsq\
-CVssCVsuCVswCVsyCVs0CVs1CVs3CVs5CVs7CVs9CVs/CVtBCVtDCVtFCVtH\
-CVtJCVtLCVtNCVtOCVtQCVtSCVtUCVtWCVtYCVtaCVtbCVlbCVdbCVZbCVRb\
-CVJbCVBbCU5bCUxbCUpbCUhbCUZbCURbCUJbCUBbCT5bCT1bCTtbCTlbCTdb\
-CTVbCTNbCTFbCS9bCS1bCStbCSlbCSdbCSVbCSRbCSJbCSBbCR5bCRxbCRpb\
-CRhbCRZbCRRbCRJbCRBbCQ5bCQxbCQtiCQliCwliDQliEAliEgliFAliFgli\
-GAliGgliHAliHgliIAliIgliJAliJgliKAliKwliLQliLwliMQliMwliNQli\
-NwliOQliOwliPQliPwliQQliQwliRQliSAliSgliTAliTgliUAliUgliVAli\
-VgliWAliWgliXAliXgliYAlhYglfYgldYglbYglZYglXYglVYglTYglRYglO\
-YglMYglKYglIYglGYglEYglCYglAYgk+Ygk8Ygk6Ygk4Ygk2YgkzYgkxYgkv\
-YgktYgkrYgkpYgknYgklYgkjYgkhYgkfYgkdYgkbYgkZYgkWYgkUYgkSYgkQ\
-YgkOYgkMYgkKYgkJYgsJYg0JYg8JYhEJYhMJYhUJYhcJYhkJYhsJYh0JYh8J\
-YiIJYiQJYiYJYigJYioJYiwJYi4JYjAJYjIJYjQJYjYJYjgJYjoJYjwJYj8J\
-YkEJYkMJYkUJYkcJYkkJYksJYk0JYk8JYlEJYlMJYlUJYlcJYloJYlwJYl4J\
-YmAJYmIJYGIJXmIJXGIJWmIJV2IJVWIJU2IJUWIJT2IJTWIJS2IJSWIJR2IJ\
-RWIJQ2IJQWIJP2IJPGIJOmIJOGIJNmIJNGIJMmIJMGIJLmIJLGIJKmIJKGIJ\
-JmIJJGIJImIJH2IJHWIJG2IJGWIJF2IJFWIJE2IJEWIJD2IJDWIJC2IKCWIM\
-CWIOCWIQCWISCWIUCWIWCWIZCWIbCWIdCWIfCWIhCWIjCWIlCWInCWIpCWIr\
-CWItCWIvCWIxCWIzCWI2CWI4CWI6CWI8CWI+CWJACWJCCWJECWJGCWJICWJK\
-CWJMCWJOCWJRCWJTCWJVCWJXCWJZCWJbCWJdCWJfCWJhCWJiCWBiCV5iCVxi\
-CVpiCVhiCVZiCVRiCVJiCVBiCU5iCUxiCUpiCUhiCUViCUNiCUFiCT9iCT1i\
-CTtiCTliCTdiCTViCTNiCTFiCS9iCS1iCStiCShiCSZiCSRiCSJiCSBiCR5i\
-CRxiCRpiCRhiCRZiCRRiCRJiCRBiCQ1iCQtpCgppDAppDgppEQppEwppFQpp\
-FwppGgppHAppHgppIAppIwppJQppJwppKQppKwppLgppMAppMgppNAppNwpp\
-OQppOwppPQppPwppQgppRAppRgppSAppSwppTQppTwppUQppUwppVgppWApp\
-WgppXAppXwppYQppYwppZQppZwpoaQpmaQpkaQpiaQpfaQpdaQpbaQpZaQpW\
-aQpUaQpSaQpQaQpOaQpLaQpJaQpHaQpFaQpCaQpAaQo+aQo8aQo6aQo3aQo1\
-aQozaQoxaQouaQosaQoqaQooaQolaQojaQohaQofaQodaQoaaQoYaQoWaQoU\
-aQoRaQoPaQoNaQoLaQoKaQwKaQ4KaRAKaRIKaRQKaRcKaRkKaRsKaR0KaSAK\
-aSIKaSQKaSYKaSgKaSsKaS0KaS8KaTEKaTQKaTYKaTgKaToKaTwKaT8KaUEK\
-aUMKaUUKaUgKaUoKaUwKaU4KaVAKaVMKaVUKaVcKaVkKaVwKaV4KaWAKaWIK\
-aWUKaWcKaWkKZ2kKZWkKYmkKYGkKXmkKXGkKWWkKV2kKVWkKU2kKUGkKTmkK\
-TGkKSmkKSGkKRWkKQ2kKQWkKP2kKPGkKOmkKOGkKNmkKNGkKMWkKL2kKLWkK\
-K2kKKGkKJmkKJGkKImkKIGkKHWkKG2kKGWkKF2kKFGkKEmkKEGkKDmkKDGkL\
-CmkNCmkPCmkRCmkUCmkWCmkYCmkaCmkdCmkfCmkhCmkjCmklCmkoCmkqCmks\
-CmkuCmkxCmkzCmk1Cmk3Cmk6Cmk8Cmk+CmlACmlCCmlFCmlHCmlJCmlLCmlO\
-CmlQCmlSCmlUCmlWCmlZCmlbCmldCmlfCmliCmlkCmlmCmloCmlpCmdpCmVp\
-CmNpCmFpCl9pClxpClppClhpClZpClNpClFpCk9pCk1pCktpCkhpCkZpCkRp\
-CkJpCj9pCj1pCjtpCjlpCjdpCjRpCjJpCjBpCi5pCitpCilpCidpCiVpCiNp\
-CiBpCh5pChxpChppChdpChVpChNpChFpCg5pCgxwCwtwDQtwEAtwEgtwFAtw\
-FwtwGQtwGwtwHgtwIAtwIwtwJQtwJwtwKgtwLAtwLgtwMQtwMwtwNgtwOAtw\
-OgtwPQtwPwtwQQtwRAtwRgtwSQtwSwtwTQtwUAtwUgtwVAtwVwtwWQtwXAtw\
-XgtwYAtwYwtwZQtwZwtwagtwbAtwbwtvcAttcAtrcAtocAtmcAtjcAthcAtf\
-cAtccAtacAtYcAtVcAtTcAtQcAtOcAtMcAtJcAtHcAtFcAtCcAtAcAs9cAs7\
-cAs5cAs2cAs0cAsycAsvcAstcAsqcAsocAsmcAsjcAshcAsfcAsccAsacAsX\
-cAsVcAsTcAsQcAsOcAsMcAsLcAwLcA8LcBELcBMLcBYLcBgLcBsLcB0LcB8L\
-cCILcCQLcCYLcCkLcCsLcC4LcDALcDILcDULcDcLcDkLcDwLcD4LcEELcEML\
-cEULcEgLcEoLcE0LcE8LcFELcFQLcFYLcFgLcFsLcF0LcGALcGILcGQLcGcL\
-cGkLcGsLcG4LcHALbnALa3ALaXALZ3ALZHALYnALYHALXXALW3ALWHALVnAL\
-VHALUXALT3ALTXALSnALSHALRXALQ3ALQXALPnALPHALOXALN3ALNXALMnAL\
-MHALLnALK3ALKXALJnALJHALInALH3ALHXALG3ALGHALFnALE3ALEXALD3AL\
-DHAMC3AOC3AQC3ATC3AVC3AXC3AaC3AcC3AfC3AhC3AjC3AmC3AoC3AqC3At\
-C3AvC3AyC3A0C3A2C3A5C3A7C3A9C3BAC3BCC3BFC3BHC3BJC3BMC3BOC3BQ\
-C3BTC3BVC3BYC3BaC3BcC3BfC3BhC3BjC3BmC3BoC3BrC3BtC3BvC3BwC29w\
-C2xwC2pwC2dwC2VwC2NwC2BwC15wC1xwC1lwC1dwC1RwC1JwC1BwC01wC0tw\
-C0lwC0ZwC0RwC0FwCz9wCz1wCzpwCzhwCzZwCzNwCzFwCy5wCyxwCypwCydw\
-CyVwCyNwCyBwCx5wCxtwCxlwCxdwCxRwCxJwCxBwCw13Cwt3Dgt3EQt3Ewt3\
-Fgt3GAt3Gwt3HQt3IAt3Igt3JQt3Jwt3Kgt3LAt3Lwt3MQt3NAt3Ngt3OQt3\
-Owt3Pgt3QQt3Qwt3Rgt3SAt3Swt3TQt3UAt3Ugt3VQt3Vwt3Wgt3XAt3Xwt3\
-YQt3ZAt3Zgt3aQt3bAt3bgt3cQt3cwt3dgt2dwt0dwtxdwtvdwtsdwtqdwtn\
-dwtldwtidwtgdwtddwtbdwtYdwtWdwtTdwtRdwtOdwtMdwtJdwtGdwtEdwtB\
-dws/dws8dws6dws3dws1dwsydwswdwstdwsrdwsodwsmdwsjdwshdwsedwsb\
-dwsZdwsWdwsUdwsRdwsPdwsMdwsLdw0LdxALdxILdxULdxcLdxoLdxwLdx8L\
-dyELdyQLdyYLdykLdysLdy4LdzELdzMLdzYLdzgLdzsLdz0Ld0ALd0ILd0UL\
-d0cLd0oLd0wLd08Ld1ELd1QLd1YLd1kLd1wLd14Ld2ELd2MLd2YLd2gLd2sL\
-d20Ld3ALd3ILd3ULd3cLdXcLcncLcHcLbXcLa3cLaHcLZncLY3cLYXcLXncL\
-XHcLWXcLVncLVHcLUXcLT3cLTHcLSncLR3cLRXcLQncLQHcLPXcLO3cLOHcL\
-NncLM3cLMXcLLncLK3cLKXcLJncLJHcLIXcLH3cLHHcLGncLF3cLFXcLEncL\
-EHcLDXcMC3cPC3cRC3cUC3cWC3cZC3cbC3ceC3chC3cjC3cmC3coC3crC3ct\
-C3cwC3cyC3c1C3c3C3c6C3c8C3c/C3dBC3dEC3dGC3dJC3dMC3dOC3dRC3dT\
-C3dWC3dYC3dbC3ddC3dgC3diC3dlC3dnC3dqC3dsC3dvC3dxC3d0C3d2C3d3\
-C3Z3C3N3C3F3C253C2x3C2l3C2Z3C2R3C2F3C193C1x3C1p3C1d3C1V3C1J3\
-C1B3C013C0t3C0h3C0Z3C0N3C0F3Cz53Czt3Czl3CzZ3CzR3CzF3Cy93Cyx3\
-Cyp3Cyd3CyV3CyJ3CyB3Cx13Cxt3Cxh3CxZ3CxN3CxF3Cw5+DAx+Dwx+Egx+\
-FAx+Fwx+Ggx+HAx+Hwx+Igx+JAx+Jwx+Kgx+LAx+Lwx+Mgx+NAx+Nwx+Ogx+\
-PAx+Pwx+Qgx+RAx+Rwx+Sgx+TAx+Twx+Ugx+VQx+Vwx+Wgx+XQx+Xwx+Ygx+\
-ZQx+Zwx+agx+bQx+bwx+cgx+dQx+dwx+egx+fQx+fgx7fgx4fgx2fgxzfgxw\
-fgxufgxrfgxofgxlfgxjfgxgfgxdfgxbfgxYfgxVfgxTfgxQfgxNfgxLfgxI\
-fgxFfgxDfgxAfgw9fgw7fgw4fgw1fgwzfgwwfgwtfgwrfgwofgwlfgwjfgwg\
-fgwdfgwafgwYfgwVfgwSfgwQfgwNfgwMfg4MfhEMfhMMfhYMfhkMfhsMfh4M\
-fiEMfiMMfiYMfikMfisMfi4MfjEMfjMMfjYMfjkMfjwMfj4MfkEMfkQMfkYM\
-fkkMfkwMfk4MflEMflQMflYMflkMflwMfl4MfmEMfmQMfmYMfmkMfmwMfm4M\
-fnEMfnQMfnYMfnkMfnwMfn4MfH4MeX4Mdn4MdH4McX4Mbn4MbH4MaX4MZn4M\
-ZH4MYX4MXn4MXH4MWX4MVn4MVH4MUX4MTn4MTH4MSX4MRn4MRH4MQX4MPn4M\
-PH4MOX4MNn4MM34MMX4MLn4MK34MKX4MJn4MI34MIX4MHn4MG34MGX4MFn4M\
-E34MEX4MDn4NDH4QDH4SDH4VDH4YDH4aDH4dDH4gDH4jDH4lDH4oDH4rDH4t\
-DH4wDH4zDH41DH44DH47DH49DH5ADH5DDH5FDH5IDH5LDH5NDH5QDH5TDH5V\
-DH5YDH5bDH5dDH5gDH5jDH5lDH5oDH5rDH5uDH5wDH5zDH52DH54DH57DH5+\
-DH5+DH1+DHp+DHd+DHV+DHJ+DG9+DG1+DGp+DGd+DGV+DGJ+DF9+DF1+DFp+\
-DFd+DFV+DFJ+DE9+DEx+DEp+DEd+DER+DEJ+DD9+DDx+DDp+DDd+DDR+DDJ+\
-DC9+DCx+DCp+DCd+DCR+DCJ+DB9+DBx+DBp+DBd+DBR+DBJ+DA+GDQ2GEA2G\
-Ew2GFQ2GGA2GGw2GHg2GIQ2GJA2GJg2GKQ2GLA2GLw2GMg2GNQ2GNw2GOg2G\
-PQ2GQA2GQw2GRg2GSA2GSw2GTg2GUQ2GVA2GVg2GWQ2GXA2GXw2GYg2GZQ2G\
-Zw2Gag2GbQ2GcA2Gcw2Gdg2GeA2Gew2Gfg2GgQ2GhA2Fhg2Chg1/hg18hg15\
-hg13hg10hg1xhg1uhg1rhg1ohg1mhg1jhg1ghg1dhg1ahg1Xhg1Vhg1Shg1P\
-hg1Mhg1Jhg1Ghg1Ehg1Bhg0+hg07hg04hg01hg0zhg0whg0thg0qhg0nhg0k\
-hg0ihg0fhg0chg0Zhg0Whg0Uhg0Rhg0Ohg0Nhg8NhhINhhQNhhcNhhoNhh0N\
-hiANhiMNhiUNhigNhisNhi4NhjENhjQNhjYNhjkNhjwNhj8NhkINhkUNhkcN\
-hkoNhk0NhlANhlMNhlYNhlgNhlsNhl4NhmENhmQNhmcNhmkNhmwNhm8NhnIN\
-hnUNhncNhnoNhn0NhoANhoMNhoYNg4YNgIYNfYYNeoYNd4YNdYYNcoYNb4YN\
-bIYNaYYNZ4YNZIYNYYYNXoYNW4YNWIYNVoYNU4YNUIYNTYYNSoYNR4YNRYYN\
-QoYNP4YNPIYNOYYNNoYNNIYNMYYNLoYNK4YNKIYNJYYNI4YNIIYNHYYNGoYN\
-F4YNFIYNEoYND4YODYYRDYYUDYYWDYYZDYYcDYYfDYYiDYYkDYYnDYYqDYYt\
-DYYwDYYzDYY1DYY4DYY7DYY+DYZBDYZEDYZGDYZJDYZMDYZPDYZSDYZVDYZX\
-DYZaDYZdDYZgDYZjDYZmDYZoDYZrDYZuDYZxDYZ0DYZ3DYZ5DYZ8DYZ/DYaC\
-DYaFDYaGDYSGDYGGDX6GDXuGDXiGDXaGDXOGDXCGDW2GDWqGDWeGDWWGDWKG\
-DV+GDVyGDVmGDVaGDVSGDVGGDU6GDUuGDUiGDUaGDUOGDUCGDT2GDTqGDTeG\
-DTWGDTKGDS+GDSyGDSmGDSaGDSSGDSGGDR6GDRuGDRiGDRWGDROGDRCNDg6N\
-EQ6NFA6NFw6NGg6NHQ6NIA6NIg6NJQ6NKA6NKw6NLg6NMQ6NNA6NNw6NOg6N\
-PQ6NQA6NQw6NRg6NSQ6NTA6NTw6NUg6NVQ6NWA6NWw6NXg6NYQ6NZA6NZw6N\
-ag6NbQ6NcA6Ncw6Ndg6NeQ6NfA6Nfw6Ngg6NhQ6NiA6Niw6MjQ6JjQ6GjQ6D\
-jQ6AjQ59jQ56jQ53jQ50jQ5xjQ5ujQ5rjQ5ojQ5ljQ5ijQ5fjQ5cjQ5ZjQ5W\
-jQ5TjQ5QjQ5NjQ5KjQ5HjQ5EjQ5BjQ4+jQ47jQ44jQ41jQ4yjQ4vjQ4sjQ4p\
-jQ4mjQ4jjQ4hjQ4ejQ4bjQ4YjQ4VjQ4SjQ4PjQ4OjRAOjRMOjRYOjRkOjRwO\
-jR8OjSIOjSQOjScOjSoOjS0OjTAOjTMOjTYOjTkOjTwOjT8OjUIOjUUOjUgO\
-jUsOjU4OjVEOjVQOjVcOjVoOjV0OjWAOjWMOjWYOjWkOjWwOjW8OjXIOjXUO\
-jXgOjXsOjX4OjYEOjYQOjYcOjYoOjY0Oio0Oh40OhI0OgY0Ofo0Oe40OeI0O\
-dY0Oco0Ob40ObI0OaY0OZo0OY40OYI0OXY0OWo0OV40OVI0OUY0OTo0OS40O\
-SI0ORY0OQo0OP40OPI0OOY0ONo0OM40OMI0OLY0OKo0OJ40OJI0OIo0OH40O\
-HI0OGY0OFo0OE40OEI0PDo0SDo0VDo0YDo0bDo0eDo0hDo0jDo0mDo0pDo0s\
-Do0vDo0yDo01Do04Do07Do0+Do1BDo1EDo1HDo1KDo1NDo1QDo1TDo1WDo1Z\
-Do1cDo1fDo1iDo1lDo1oDo1rDo1uDo1xDo10Do13Do16Do19Do2ADo2DDo2G\
-Do2JDo2MDo2NDouNDoiNDoWNDoKNDn+NDnyNDnmNDnaNDnONDnCNDm2NDmqN\
-DmeNDmSNDmGNDl6NDluNDliNDlWNDlKNDk+NDkyNDkmNDkaNDkONDkCNDj2N\
-DjqNDjeNDjSNDjGNDi6NDiuNDiiNDiWNDiKNDiCNDh2NDhqNDheNDhSNDhGU\
-Dg6UEQ6UFQ6UGA6UGw6UHg6UIQ6UJA6UJw6UKw6ULg6UMQ6UNA6UNw6UOg6U\
-PQ6UQA6URA6URw6USg6UTQ6UUA6UUw6UVg6UWg6UXQ6UYA6UYw6UZg6UaQ6U\
-bA6Ubw6Ucw6Udg6UeQ6UfA6Ufw6Ugg6UhQ6UiA6UjA6Ujw6Ukg6TlA6QlA6N\
-lA6KlA6GlA6DlA6AlA59lA56lA53lA50lA5wlA5tlA5qlA5nlA5klA5hlA5e\
-lA5blA5XlA5UlA5RlA5OlA5LlA5IlA5FlA5ClA4+lA47lA44lA41lA4ylA4v\
-lA4slA4olA4llA4ilA4flA4clA4ZlA4WlA4TlA4PlA4OlBAOlBQOlBcOlBoO\
-lB0OlCAOlCMOlCYOlCkOlC0OlDAOlDMOlDYOlDkOlDwOlD8OlEMOlEYOlEkO\
-lEwOlE8OlFIOlFUOlFgOlFwOlF8OlGIOlGUOlGgOlGsOlG4OlHIOlHUOlHgO\
-lHsOlH4OlIEOlIQOlIcOlIsOlI4OlJEOlJQOkZQOjpQOi5QOh5QOhJQOgZQO\
-fpQOe5QOeJQOdZQOcpQObpQOa5QOaJQOZZQOYpQOX5QOXJQOWJQOVZQOUpQO\
-T5QOTJQOSZQORpQOQ5QOP5QOPJQOOZQONpQOM5QOMJQOLZQOKZQOJpQOI5QO\
-IJQOHZQOGpQOF5QOFJQOEJQPDpQTDpQWDpQZDpQcDpQfDpQiDpQlDpQoDpQs\
-DpQvDpQyDpQ1DpQ4DpQ7DpQ+DpRCDpRFDpRIDpRLDpRODpRRDpRUDpRXDpRb\
-DpReDpRhDpRkDpRnDpRqDpRtDpRwDpR0DpR3DpR6DpR9DpSADpSDDpSGDpSK\
-DpSNDpSQDpSTDpSUDpKUDo+UDoyUDoiUDoWUDoKUDn+UDnyUDnmUDnaUDnOU\
-Dm+UDmyUDmmUDmaUDmOUDmCUDl2UDlqUDlaUDlOUDlCUDk2UDkqUDkeUDkSU\
-DkCUDj2UDjqUDjeUDjSUDjGUDi6UDiuUDieUDiSUDiGUDh6UDhuUDhiUDhWU\
-DhGbDw+bEg+bFg+bGQ+bHA+bHw+bIw+bJg+bKQ+bLQ+bMA+bMw+bNg+bOg+b\
-PQ+bQA+bRA+bRw+bSg+bTQ+bUQ+bVA+bVw+bWw+bXg+bYQ+bZA+baA+baw+b\
-bg+bcg+bdQ+beA+bew+bfw+bgg+bhQ+biQ+bjA+bjw+bkg+blg+bmQ+amw+X\
-mw+Tmw+Qmw+Nmw+Kmw+Gmw+Dmw+Amw99mw95mw92mw9zmw9vmw9smw9pmw9m\
-mw9imw9fmw9cmw9Ymw9Vmw9Smw9Pmw9Lmw9Imw9Fmw9Bmw8+mw87mw84mw80\
-mw8xmw8umw8qmw8nmw8kmw8hmw8dmw8amw8Xmw8Tmw8Qmw8PmxEPmxUPmxgP\
-mxsPmx4PmyIPmyUPmygPmywPmy8PmzIPmzUPmzkPmzwPmz8Pm0MPm0YPm0kP\
-m0wPm1APm1MPm1YPm1kPm10Pm2APm2MPm2cPm2oPm20Pm3APm3QPm3cPm3oP\
-m34Pm4EPm4QPm4cPm4sPm44Pm5EPm5UPm5gPm5sPmJsPlZsPkZsPjpsPi5sP\
-h5sPhJsPgZsPfpsPepsPd5sPdJsPcJsPbZsPapsPZ5sPY5sPYJsPXZsPWZsP\
-VpsPU5sPUJsPTJsPSZsPRpsPQ5sPP5sPPJsPOZsPNZsPMpsPL5sPLJsPKJsP\
-JZsPIpsPHpsPG5sPGJsPFZsPEZsQD5sTD5sXD5saD5sdD5shD5skD5snD5sq\
-D5suD5sxD5s0D5s4D5s7D5s+D5tBD5tFD5tID5tLD5tPD5tSD5tVD5tYD5tc\
-D5tfD5tiD5tmD5tpD5tsD5tvD5tzD5t2D5t5D5t9D5uAD5uDD5uGD5uKD5uN\
-D5uQD5uTD5uXD5uaD5ubD5mbD5abD5KbD4+bD4ybD4mbD4WbD4KbD3+bD3ub\
-D3ibD3WbD3KbD26bD2ubD2ibD2SbD2GbD16bD1ubD1ebD1SbD1GbD02bD0qb\
-D0ebD0SbD0CbDz2bDzqbDzabDzObDzCbDy2bDymbDyabDyObDx+bDxybDxmb\
-DxabDxKiEBCiExCiFxCiGhCiHhCiIRCiJBCiKBCiKxCiLxCiMhCiNhCiORCi\
-PBCiQBCiQxCiRxCiShCiThCiURCiVBCiWBCiWxCiXxCiYhCiZhCiaRCibRCi\
-cBCicxCidxCiehCifhCigRCihRCiiBCiixCijxCikhCilhCimRCinRCioBCh\
-ohCeohCaohCXohCTohCQohCNohCJohCGohCCohB/ohB7ohB4ohB1ohBxohBu\
-ohBqohBnohBjohBgohBcohBZohBWohBSohBPohBLohBIohBEohBBohA+ohA6\
-ohA3ohAzohAwohAsohApohAmohAiohAfohAbohAYohAUohARohAQohIQohYQ\
-ohkQohwQoiAQoiMQoicQoioQoi4QojEQojQQojgQojsQoj8QokIQokYQokkQ\
-okwQolAQolMQolcQoloQol4QomEQomQQomgQomsQom8QonIQonYQonkQon0Q\
-ooAQooMQoocQoooQoo4QopEQopUQopgQopsQop8QoqIQn6IQm6IQmKIQlaIQ\
-kaIQjqIQiqIQh6IQg6IQgKIQfaIQeaIQdqIQcqIQb6IQa6IQaKIQZKIQYaIQ\
-XqIQWqIQV6IQU6IQUKIQTKIQSaIQRqIQQqIQP6IQO6IQOKIQNKIQMaIQLqIQ\
-KqIQJ6IQI6IQIKIQHKIQGaIQFqIQEqIREKIUEKIYEKIbEKIfEKIiEKImEKIp\
-EKIsEKIwEKIzEKI3EKI6EKI+EKJBEKJEEKJIEKJLEKJPEKJSEKJWEKJZEKJc\
-EKJgEKJjEKJnEKJqEKJuEKJxEKJ1EKJ4EKJ7EKJ/EKKCEKKGEKKJEKKNEKKQ\
-EKKTEKKXEKKaEKKeEKKhEKKiEKCiEJ2iEJmiEJaiEJKiEI+iEIuiEIiiEIWi\
-EIGiEH6iEHqiEHeiEHOiEHCiEG2iEGmiEGaiEGKiEF+iEFuiEFiiEFSiEFGi\
-EE6iEEqiEEeiEEOiEECiEDyiEDmiEDaiEDKiEC+iECuiECiiECSiECGiEB6i\
-EBqiEBeiEBOpEBCpFBCpGBCpGxCpHxCpIhCpJhCpKhCpLRCpMRCpNBCpOBCp\
-PBCpPxCpQxCpRhCpShCpTRCpURCpVRCpWBCpXBCpXxCpYxCpZxCpahCpbhCp\
-cRCpdRCpeBCpfBCpgBCpgxCphxCpihCpjhCpkhCplRCpmRCpnBCpoBCppBCp\
-pxCoqRClqRChqRCeqRCaqRCWqRCTqRCPqRCMqRCIqRCEqRCBqRB9qRB6qRB2\
-qRBzqRBvqRBrqRBoqRBkqRBhqRBdqRBZqRBWqRBSqRBPqRBLqRBHqRBEqRBA\
-qRA9qRA5qRA2qRAyqRAuqRArqRAnqRAkqRAgqRAcqRAZqRAVqRASqRAQqRMQ\
-qRYQqRoQqR4QqSEQqSUQqSgQqSwQqTAQqTMQqTcQqToQqT4QqUIQqUUQqUkQ\
-qUwQqVAQqVMQqVcQqVsQqV4QqWIQqWUQqWkQqW0QqXAQqXQQqXcQqXsQqX4Q\
-qYIQqYYQqYkQqY0QqZAQqZQQqZgQqZsQqZ8QqaIQqaYQqakQpqkQoqkQn6kQ\
-m6kQmKkQlKkQkKkQjakQiakQhqkQgqkQfqkQe6kQd6kQdKkQcKkQbakQaakQ\
-ZakQYqkQXqkQW6kQV6kQU6kQUKkQTKkQSakQRakQQqkQPqkQOqkQN6kQM6kQ\
-MKkQLKkQKKkQJakQIakQHqkQGqkQFqkQE6kSEKkVEKkZEKkcEKkgEKkkEKkn\
-EKkrEKkuEKkyEKk2EKk5EKk9EKlAEKlEEKlHEKlLEKlPEKlSEKlWEKlZEKld\
-EKlhEKlkEKloEKlrEKlvEKlzEKl2EKl6EKl9EKmBEKmEEKmIEKmMEKmPEKmT\
-EKmWEKmaEKmeEKmhEKmlEKmoEKmpEKepEKSpEKCpEJypEJmpEJWpEJKpEI6p\
-EIqpEIepEIOpEICpEHypEHipEHWpEHGpEG6pEGqpEGepEGOpEF+pEFypEFip\
-EFWpEFGpEE2pEEqpEEapEEOpED+pEDypEDipEDSpEDGpEC2pECqpECapECKp\
-EB+pEBupEBipEBSxERGxFRGxGRGxHBGxIBGxJBGxKBGxKxGxLxGxMxGxNxGx\
-OhGxPhGxQhGxRhGxSRGxTRGxURGxVBGxWBGxXBGxYBGxYxGxZxGxaxGxbxGx\
-chGxdhGxehGxfhGxgRGxhRGxiRGxjRGxkBGxlBGxmBGxmxGxnxGxoxGxpxGx\
-qhGxrhGvsRGssRGosRGksRGgsRGdsRGZsRGVsRGSsRGOsRGKsRGGsRGDsRF/\
-sRF7sRF3sRF0sRFwsRFssRFosRFlsRFhsRFdsRFZsRFWsRFSsRFOsRFLsRFH\
-sRFDsRE/sRE8sRE4sRE0sREwsREtsREpsRElsREhsREesREasREWsRESsRER\
-sRQRsRcRsRsRsR8RsSMRsSYRsSoRsS4RsTIRsTURsTkRsT0RsUERsUQRsUgR\
-sUwRsU8RsVMRsVcRsVsRsV4RsWIRsWYRsWoRsW0RsXERsXURsXkRsXwRsYAR\
-sYQRsYgRsYsRsY8RsZMRsZYRsZoRsZ4RsaIRsaURsakRsa0RsbERrbERqbER\
-pbERorERnrERmrERlrERk7ERj7ERi7ERiLERhLERgLERfLERebERdbERcbER\
-bbERarERZrERYrERXrERW7ERV7ERU7ERT7ERTLERSLERRLERQbERPbERObER\
-NbERMrERLrERKrERJrERI7ERH7ERG7ERF7ERFLESEbEWEbEaEbEeEbEhEbEl\
-EbEpEbEtEbEwEbE0EbE4EbE8EbE/EbFDEbFHEbFLEbFOEbFSEbFWEbFZEbFd\
-EbFhEbFlEbFoEbFsEbFwEbF0EbF3EbF7EbF/EbGDEbGGEbGKEbGOEbGSEbGV\
-EbGZEbGdEbGgEbGkEbGoEbGsEbGvEbGxEa6xEaqxEaexEaOxEZ+xEZuxEZix\
-EZSxEZCxEY2xEYmxEYWxEYGxEX6xEXqxEXaxEXKxEW+xEWuxEWexEWOxEWCx\
-EVyxEVixEVSxEVGxEU2xEUmxEUaxEUKxET6xETqxETexETOxES+xESuxESix\
-ESSxESCxERyxERmxERW4EhK4FhK4GhK4HhK4IRK4JRK4KRK4LRK4MRK4NRK4\
-ORK4PRK4QRK4RBK4SBK4TBK4UBK4VBK4WBK4XBK4YBK4ZBK4ZxK4axK4bxK4\
-cxK4dxK4exK4fxK4gxK4hxK4ihK4jhK4khK4lhK4mhK4nhK4ohK4phK4qhK4\
-rRK4sRK4tRK3uBKzuBKvuBKruBKnuBKjuBKfuBKbuBKXuBKUuBKQuBKMuBKI\
-uBKEuBKAuBJ8uBJ4uBJ0uBJxuBJtuBJpuBJluBJhuBJduBJZuBJVuBJRuBJO\
-uBJKuBJGuBJCuBI+uBI6uBI2uBIyuBIuuBIruBInuBIjuBIfuBIbuBIXuBIT\
-uBISuBUSuBgSuBwSuCASuCQSuCgSuCwSuDASuDQSuDgSuDsSuD8SuEMSuEcS\
-uEsSuE8SuFMSuFcSuFsSuF4SuGISuGYSuGoSuG4SuHISuHYSuHoSuH4SuIES\
-uIUSuIkSuI0SuJESuJUSuJkSuJ0SuKASuKQSuKgSuKwSuLASuLQSuLgStLgS\
-sLgSrLgSqLgSpLgSoLgSnbgSmbgSlbgSkbgSjbgSibgShbgSgbgSfrgSergS\
-drgScrgSbrgSargSZrgSYrgSXrgSW7gSV7gSU7gST7gSS7gSR7gSQ7gSP7gS\
-O7gSOLgSNLgSMLgSLLgSKLgSJLgSILgSHLgSGLgSFbgTErgXErgbErgfErgj\
-ErgnErgrErguErgyErg2Erg6Erg+ErhCErhGErhKErhOErhRErhVErhZErhd\
-ErhhErhlErhpErhtErhxErh0Erh4Erh8EriAEriEEriIEriMEriQEriUEriX\
-EribErifErijErinErirErivErizEri3Eri4ErW4ErG4Eq24Eqq4Eqa4EqK4\
-Ep64Epq4Epa4EpK4Eo64Eoq4Eoe4EoO4En+4Enu4Ene4EnO4Em+4Emu4Eme4\
-EmS4EmC4Ely4Eli4ElS4ElC4Eky4Eki4EkS4EkG4Ej24Ejm4EjW4EjG4Ei24\
-Eim4EiW4EiG4Eh64Ehq4Eha/ExO/FxO/GxO/HxO/IxO/JxO/KxO/LxO/MxO/\
-NxO/OxO/PxO/QxO/RxO/SxO/TxO/UxO/VxO/WxO/XxO/YxO/ZxO/bBO/cBO/\
-dBO/eBO/fBO/gBO/hBO/iBO/jBO/kBO/lBO/mBO/nBO/oBO/pBO/qBO/rBO/\
-sBO/tBO/uBO/vBO+vxO6vxO2vxOyvxOtvxOpvxOlvxOhvxOdvxOZvxOVvxOR\
-vxONvxOJvxOFvxOBvxN9vxN5vxN1vxNxvxNtvxNpvxNlvxNhvxNdvxNZvxNV\
-vxNRvxNNvxNJvxNEvxNAvxM8vxM4vxM0vxMwvxMsvxMovxMkvxMgvxMcvxMY\
-vxMUvxMTvxUTvxkTvx0TvyETvyUTvyoTvy4TvzITvzYTvzoTvz4Tv0ITv0YT\
-v0oTv04Tv1ITv1YTv1oTv14Tv2ITv2YTv2oTv24Tv3ITv3YTv3oTv34Tv4IT\
-v4YTv4oTv48Tv5MTv5cTv5sTv58Tv6MTv6cTv6sTv68Tv7MTv7cTv7sTv78T\
-u78Tt78Ts78Tr78Tq78Tp78To78Tn78Tm78Tl78Tk78Tj78Tir8Thr8Tgr8T\
-fr8Ter8Tdr8Tcr8Tbr8Tar8TZr8TYr8TXr8TWr8TVr8TUr8TTr8TSr8TRr8T\
-Qr8TPr8TOr8TNr8TMr8TLr8TKr8TJb8TIb8THb8TGb8TFb8UE78YE78cE78g\
-E78kE78oE78sE78wE780E784E788E79AE79EE79JE79NE79RE79VE79ZE79d\
-E79hE79lE79pE79tE79xE791E795E799E7+BE7+FE7+JE7+NE7+RE7+VE7+Z\
-E7+dE7+hE7+lE7+pE7+tE7+yE7+2E7+6E7++E7+/E7y/E7i/E7S/E7C/E6y/\
-E6i/E6S/E6C/E5y/E5i/E5S/E5C/E4y/E4i/E4S/E4C/E3y/E3i/E3S/E3C/\
-E2y/E2e/E2O/E1+/E1u/E1e/E1O/E0+/E0u/E0e/E0O/Ez+/Ezu/Eze/EzO/\
-Ey+/Eyu/Eye/EyO/Ex+/Exu/ExfGExPGGBPGHBPGIBPGJBPGKBPGLRPGMRPG\
-NRPGORPGPRPGQRPGRhPGShPGThPGUhPGVhPGWxPGXxPGYxPGZxPGaxPGcBPG\
-dBPGeBPGfBPGgBPGhRPGiRPGjRPGkRPGlRPGmRPGnhPGohPGphPGqhPGrhPG\
-sxPGtxPGuxPGvxPGwxPFxhPBxhO8xhO4xhO0xhOwxhOsxhOnxhOjxhOfxhOb\
-xhOXxhOSxhOOxhOKxhOGxhOCxhN+xhN5xhN1xhNxxhNtxhNpxhNkxhNgxhNc\
-xhNYxhNUxhNPxhNLxhNHxhNDxhM/xhM6xhM2xhMyxhMuxhMqxhMmxhMhxhMd\
-xhMZxhMVxhMTxhYTxhoTxh8TxiMTxicTxisTxi8TxjMTxjgTxjwTxkATxkQT\
-xkgTxk0TxlETxlUTxlkTxl0TxmITxmYTxmoTxm4TxnITxncTxnsTxn8TxoMT\
-xocTxosTxpATxpQTxpgTxpwTxqATxqUTxqkTxq0TxrETxrUTxroTxr4TxsIT\
-xsYTwsYTvsYTusYTtcYTscYTrcYTqcYTpcYToMYTnMYTmMYTlMYTkMYTi8YT\
-h8YTg8YTf8YTe8YTd8YTcsYTbsYTasYTZsYTYsYTXcYTWcYTVcYTUcYTTcYT\
-SMYTRMYTQMYTPMYTOMYTM8YTL8YTK8YTJ8YTI8YTH8YTGsYTFsYVE8YZE8Yd\
-E8YhE8YmE8YqE8YuE8YyE8Y2E8Y6E8Y/E8ZDE8ZHE8ZLE8ZPE8ZUE8ZYE8Zc\
-E8ZgE8ZkE8ZpE8ZtE8ZxE8Z1E8Z5E8Z+E8aCE8aGE8aKE8aOE8aSE8aXE8ab\
-E8afE8ajE8anE8asE8awE8a0E8a4E8a8E8bBE8bFE8bGE8PGE7/GE7vGE7fG\
-E7PGE67GE6rGE6bGE6LGE57GE5nGE5XGE5HGE43GE4nGE4XGE4DGE3zGE3jG\
-E3TGE3DGE2vGE2fGE2PGE1/GE1vGE1bGE1LGE07GE0rGE0bGE0HGEz3GEznG\
-EzXGEzHGEy3GEyjGEyTGEyDGExzGExjNFBTNGBTNHRTNIRTNJRTNKhTNLhTN\
-MhTNNxTNOxTNPxTNRBTNSBTNTRTNURTNVRTNWhTNXhTNYhTNZxTNaxTNbxTN\
-dBTNeBTNfBTNgRTNhRTNiRTNjhTNkhTNlhTNmxTNnxTNoxTNqBTNrBTNsBTN\
-tRTNuRTNvRTNwhTNxhTNyhTMzRTIzRTDzRS/zRS7zRS2zRSyzRStzRSpzRSl\
-zRSgzRSczRSYzRSTzRSPzRSLzRSGzRSCzRR+zRR5zRR1zRRxzRRszRRozRRk\
-zRRfzRRbzRRXzRRSzRROzRRKzRRFzRRBzRQ9zRQ4zRQ0zRQwzRQrzRQnzRQj\
-zRQezRQazRQWzRQUzRcUzRsUzSAUzSQUzSgUzS0UzTEUzTUUzToUzT4UzUIU\
-zUcUzUsUzU8UzVQUzVgUzVwUzWEUzWUUzWkUzW4UzXIUzXYUzXsUzX8UzYQU\
-zYgUzYwUzZEUzZUUzZkUzZ4UzaIUzaYUzasUza8UzbMUzbgUzbwUzcAUzcUU\
-zckUzc0Uyc0Uxc0UwM0UvM0UuM0Us80Ur80Uq80Ups0Uos0Uns0Umc0Ulc0U\
-kc0UjM0UiM0UhM0Uf80Ue80Uds0Ucs0Ubs0Uac0UZc0UYc0UXM0UWM0UVM0U\
-T80US80UR80UQs0UPs0UOs0UNc0UMc0ULc0UKM0UJM0UIM0UG80UF80WFM0a\
-FM0eFM0jFM0nFM0rFM0wFM00FM04FM09FM1BFM1FFM1KFM1OFM1SFM1XFM1b\
-FM1fFM1kFM1oFM1sFM1xFM11FM15FM1+FM2CFM2GFM2LFM2PFM2TFM2YFM2c\
-FM2gFM2lFM2pFM2tFM2yFM22FM27FM2/FM3DFM3IFM3MFM3NFMrNFMbNFMLN\
-FL3NFLnNFLXNFLDNFKzNFKjNFKPNFJ/NFJvNFJbNFJLNFI7NFInNFIXNFIHN\
-FHzNFHjNFHTNFG/NFGvNFGfNFGLNFF7NFFrNFFXNFFHNFE3NFEjNFETNFD/N\
-FDvNFDfNFDLNFC7NFCrNFCXNFCHNFB3NFBjUFRXUGRXUHhXUIhXUJxXUKxXU\
-MBXUNBXUORXUPRXUQhXURhXUSxXUTxXUVBXUWBXUXRXUYRXUZhXUahXUbxXU\
-cxXUeBXUfBXUgRXUhRXUihXUjhXUkxXUlxXUnBXUoBXUpRXUqRXUrhXUshXU\
-txXUuxXUwBXUxBXUyRXUzRXU0RXT1BXP1BXK1BXG1BXB1BW91BW41BW01BWv\
-1BWr1BWm1BWi1BWd1BWZ1BWU1BWQ1BWL1BWH1BWC1BV+1BV51BV11BVw1BVs\
-1BVn1BVj1BVe1BVa1BVV1BVR1BVM1BVI1BVD1BU/1BU61BU21BUx1BUt1BUo\
-1BUk1BUf1BUb1BUW1BUV1BgV1BwV1CEV1CUV1CoV1C4V1DMV1DcV1DwV1EAV\
-1EUV1EkV1E4V1FIV1FcV1FsV1GAV1GQV1GkV1G0V1HIV1HYV1HsV1H8V1IQV\
-1IgV1I0V1JEV1JYV1JoV1J8V1KMV1KgV1KwV1LEV1LUV1LoV1L4V1MMV1McV\
-1MwV1NAV1NQV0NQVzNQVx9QVw9QVvtQVutQVtdQVsdQVrNQVqNQVo9QVn9QV\
-mtQVltQVkdQVjdQViNQVhNQVf9QVe9QVdtQVctQVbdQVadQVZNQVYNQVW9QV\
-V9QVUtQVTtQVSdQVRdQVQNQVPNQVN9QVM9QVLtQVKtQVJdQVIdQVHNQVGNQW\
-FdQbFdQfFdQkFdQoFdQtFdQxFdQ2FdQ6FdQ/FdRDFdRIFdRMFdRRFdRVFdRa\
-FdReFdRjFdRnFdRsFdRwFdR1FdR5FdR+FdSCFdSHFdSLFdSQFdSUFdSZFdSd\
-FdSiFdSmFdSrFdSvFdS0FdS4FdS9FdTBFdTGFdTKFdTPFdTTFdTUFdHUFc3U\
-FcnUFcTUFcDUFbvUFbfUFbLUFa7UFanUFaXUFaDUFZzUFZfUFZPUFY7UFYrU\
-FYXUFYHUFXzUFXjUFXPUFW/UFWrUFWbUFWHUFV3UFVjUFVTUFU/UFUvUFUbU\
-FULUFT3UFTnUFTTUFTDUFSvUFSfUFSLUFR7UFRncFhbcGhbcHxbcIxbcKBbc\
-LRbcMRbcNhbcOxbcPxbcRBbcSRbcTRbcUhbcVxbcWxbcYBbcZBbcaRbcbhbc\
-chbcdxbcfBbcgBbchRbcihbcjhbckxbcmBbcnBbcoRbcpRbcqhbcrxbcsxbc\
-uBbcvRbcwRbcxhbcyxbczxbc1Bbc2Rba3BbV3BbR3BbM3BbI3BbD3Ba+3Ba6\
-3Ba13Baw3Bas3Ban3Bai3Bae3BaZ3BaU3BaQ3BaL3BaH3BaC3BZ93BZ53BZ0\
-3BZv3BZr3BZm3BZh3BZd3BZY3BZT3BZP3BZK3BZG3BZB3BY83BY43BYz3BYu\
-3BYq3BYl3BYg3BYc3BYX3BYW3BkW3B0W3CIW3CcW3CsW3DAW3DQW3DkW3D4W\
-3EIW3EcW3EwW3FAW3FUW3FoW3F4W3GMW3GgW3GwW3HEW3HUW3HoW3H8W3IMW\
-3IgW3I0W3JEW3JYW3JsW3J8W3KQW3KkW3K0W3LIW3LcW3LsW3MAW3MQW3MkW\
-3M4W3NIW3NcW3NwW19wW0twWztwWydwWxNwWwNwWu9wWt9wWstwWrdwWqdwW\
-pNwWn9wWm9wWltwWkdwWjdwWiNwWg9wWf9wWetwWddwWcdwWbNwWaNwWY9wW\
-XtwWWtwWVdwWUNwWTNwWR9wWQtwWPtwWOdwWNNwWMNwWK9wWJ9wWItwWHdwW\
-GdwXFtwcFtwgFtwlFtwqFtwuFtwzFtw4Ftw8FtxBFtxGFtxKFtxPFtxTFtxY\
-FtxdFtxhFtxmFtxrFtxvFtx0Ftx5Ftx9FtyCFtyHFtyLFtyQFtyUFtyZFtye\
-FtyiFtynFtysFtywFty1Fty6Fty+FtzDFtzIFtzMFtzRFtzVFtzaFtzcFtnc\
-FtTcFs/cFsvcFsbcFsHcFr3cFrjcFrPcFq/cFqrcFqXcFqHcFpzcFpjcFpPc\
-Fo7cForcFoXcFoDcFnzcFnfcFnLcFm7cFmncFmTcFmDcFlvcFlfcFlLcFk3c\
-FkncFkTcFj/cFjvcFjbcFjHcFi3cFijcFiPcFh/cFhrjFhbjGxbjIBbjJRbj\
-KRbjLhbjMxbjOBbjPRbjQRbjRhbjSxbjUBbjVRbjWRbjXhbjYxbjaBbjbRbj\
-cRbjdhbjexbjgBbjhRbjiRbjjhbjkxbjmBbjnBbjoRbjphbjqxbjsBbjtBbj\
-uRbjvhbjwxbjyBbjzBbj0Rbj1hbj2xbj4Bbh4xbc4xbY4xbT4xbO4xbJ4xbE\
-4xbA4xa74xa24xax4xas4xao4xaj4xae4xaZ4xaV4xaQ4xaL4xaG4xaB4xZ9\
-4xZ44xZz4xZu4xZp4xZl4xZg4xZb4xZW4xZR4xZN4xZI4xZD4xY+4xY54xY1\
-4xYw4xYr4xYm4xYh4xYd4xYY4xYW4xkW4x4W4yMW4ygW4y0W4zEW4zYW4zsW\
-40AW40UW40kW404W41MW41gW410W42EW42YW42sW43AW43UW43kW434W44MW\
-44gW440W45EW45YW45sW46AW46QW46kW464W47MW47gW47wW48EW48YW48sW\
-49AW49QW49kW494W4+MW3uMW2eMW1OMW0OMWy+MWxuMWweMWvOMWuOMWs+MW\
-ruMWqeMWpOMWoOMWm+MWluMWkeMWjeMWiOMWg+MWfuMWeeMWdeMWcOMWa+MW\
-ZuMWYeMWXeMWWOMWU+MWTuMWSeMWReMWQOMWO+MWNuMWMeMWLeMWKOMWI+MW\
-HuMWGeMYFuMdFuMhFuMmFuMrFuMwFuM1FuM5FuM+FuNDFuNIFuNNFuNRFuNW\
-FuNbFuNgFuNlFuNpFuNuFuNzFuN4FuN9FuOBFuOGFuOLFuOQFuOVFuOZFuOe\
-FuOjFuOoFuOsFuOxFuO2FuO7FuPAFuPEFuPJFuPOFuPTFuPYFuPcFuPhFuPj\
-FuDjFtvjFtbjFtHjFszjFsjjFsPjFr7jFrnjFrTjFrDjFqvjFqbjFqHjFpzj\
-FpjjFpPjFo7jFonjFoXjFoDjFnvjFnbjFnHjFm3jFmjjFmPjFl7jFlnjFlXj\
-FlDjFkvjFkbjFkHjFj3jFjjjFjPjFi7jFinjFiXjFiDjFhvqFxfqHBfqIRfq\
-JhfqKxfqMBfqNRfqOhfqPxfqQxfqSBfqTRfqUhfqVxfqXBfqYRfqZhfqaxfq\
-cBfqdRfqehfqfxfqhBfqiRfqjhfqkxfqmBfqnRfqoRfqphfqqxfqsBfqtRfq\
-uhfqvxfqxBfqyRfqzhfq0xfq2Bfq3Rfq4hfq5xfo6hfj6hfe6hfa6hfV6hfQ\
-6hfL6hfG6hfB6he86he36hey6het6heo6hej6hee6heZ6heU6heP6heK6heF\
-6heA6hd86hd36hdy6hdt6hdo6hdj6hde6hdZ6hdU6hdP6hdK6hdF6hdA6hc7\
-6hc26hcx6hcs6hcn6hci6hce6hcZ6hcX6hoX6h8X6iQX6ikX6i4X6jMX6jgX\
-6j0X6kIX6kcX6kwX6lEX6lYX6lsX6l8X6mQX6mkX6m4X6nMX6ngX6n0X6oIX\
-6ocX6owX6pEX6pYX6psX6qAX6qUX6qoX6q8X6rQX6rkX6r0X6sIX6scX6swX\
-6tEX6tYX6tsX6uAX6uUX6uoX5eoX4OoX2+oX1uoX0eoXzOoXx+oXwuoXveoX\
-ueoXtOoXr+oXquoXpeoXoOoXm+oXluoXkeoXjOoXh+oXguoXfeoXeOoXc+oX\
-buoXaeoXZOoXX+oXW+oXVuoXUeoXTOoXR+oXQuoXPeoXOOoXM+oXLuoXKeoX\
-JOoXH+oXGuoZF+oeF+oiF+onF+osF+oxF+o2F+o7F+pAF+pFF+pKF+pPF+pU\
-F+pZF+peF+pjF+poF+ptF+pyF+p3F+p8F+qAF+qFF+qKF+qPF+qUF+qZF+qe\
-F+qjF+qoF+qtF+qyF+q3F+q8F+rBF+rGF+rLF+rQF+rVF+raF+reF+rjF+ro\
-F+rqF+fqF+LqF93qF9jqF9PqF87qF8nqF8TqF7/qF7rqF7XqF7DqF6vqF6bq\
-F6HqF53qF5jqF5PqF47qF4nqF4TqF3/qF3rqF3XqF3DqF2vqF2bqF2HqF1zq\
-F1fqF1LqF03qF0jqF0PqFz/qFzrqFzXqFzDqFyvqFybqFyHqFxzxGBjxHRjx\
-IhjxJxjxLBjxMRjxNhjxOxjxQBjxRhjxSxjxUBjxVRjxWhjxXxjxZBjxaRjx\
-bhjxcxjxeRjxfhjxgxjxiBjxjRjxkhjxlxjxnBjxoRjxphjxqxjxsRjxthjx\
-uxjxwBjxxRjxyhjxzxjx1Bjx2Rjx3hjx5Bjx6Rjx7hjv8Rjq8Rjl8Rjg8Rjb\
-8RjW8RjR8RjM8RjH8RjC8Ri88Ri38Riy8Rit8Rio8Rij8Rie8RiZ8RiU8RiP\
-8RiK8RiE8Rh/8Rh68Rh18Rhw8Rhr8Rhm8Rhh8Rhc8RhX8RhR8RhM8RhH8RhC\
-8Rg98Rg48Rgz8Rgu8Rgp8Rgk8Rge8RgZ8RgY8RsY8SAY8SUY8SoY8S8Y8TUY\
-8ToY8T8Y8UQY8UkY8U4Y8VMY8VgY8V0Y8WIY8WgY8W0Y8XIY8XcY8XwY8YEY\
-8YYY8YsY8ZAY8ZUY8ZsY8aAY8aUY8aoY8a8Y8bQY8bkY8b4Y8cMY8cgY8c0Y\
-8dMY8dgY8d0Y8eIY8ecY8ewY8fEY7PEY5/EY4vEY3fEY2PEY0/EYzfEYyPEY\
-w/EYvvEYufEYtPEYr/EYqvEYpfEYoPEYm/EYlfEYkPEYi/EYhvEYgfEYfPEY\
-d/EYcvEYbfEYaPEYYvEYXfEYWPEYU/EYTvEYSfEYRPEYP/EYOvEYNfEYL/EY\
-KvEYJfEYIPEYG/EZGPEeGPEkGPEpGPEuGPEzGPE4GPE9GPFCGPFHGPFMGPFR\
-GPFXGPFcGPFhGPFmGPFrGPFwGPF1GPF6GPF/GPGEGPGKGPGPGPGUGPGZGPGe\
-GPGjGPGoGPGtGPGyGPG3GPG8GPHCGPHHGPHMGPHRGPHWGPHbGPHgGPHlGPHq\
-GPHvGPHxGO7xGOnxGOTxGN7xGNnxGNTxGM/xGMrxGMXxGMDxGLvxGLbxGLHx\
-GKvxGKbxGKHxGJzxGJfxGJLxGI3xGIjxGIPxGH7xGHnxGHPxGG7xGGnxGGTx\
-GF/xGFrxGFXxGFDxGEvxGEbxGEDxGDvxGDbxGDHxGCzxGCfxGCLxGB34GBj4\
-Hhj4Ixj4KBj4LRj4Mxj4OBj4PRj4Qhj4SBj4TRj4Uhj4Vxj4XRj4Yhj4Zxj4\
-bBj4chj4dxj4fBj4gRj4hxj4jBj4kRj4lhj4nBj4oRj4phj4qxj4sRj4thj4\
-uxj4wBj4xhj4yxj40Bj41Rj42xj44Bj45Rj46hj48Bj49Rj3+Bjx+Bjs+Bjn\
-+Bji+Bjc+BjX+BjS+BjN+BjH+BjC+Bi9+Bi4+Biy+Bit+Bio+Bij+Bid+BiY\
-+BiT+BiO+BiI+BiD+Bh++Bh5+Bhz+Bhu+Bhp+Bhk+Bhe+BhZ+BhU+BhP+BhJ\
-+BhE+Bg/+Bg6+Bg0+Bgv+Bgq+Bgl+Bgf+Bga+BgY+BwY+CEY+CYY+CwY+DEY\
-+DYY+DsY+EEY+EYY+EsY+FAY+FYY+FsY+GAY+GUY+GsY+HAY+HUY+HoY+IAY\
-+IUY+IoY+I8Y+JUY+JoY+J8Y+KQY+KoY+K8Y+LQY+LkY+L8Y+MQY+MkY+M4Y\
-+NQY+NkY+N4Y+OMY+OkY+O4Y+PMY+PgY8/gY7vgY6fgY4/gY3vgY2fgY1PgY\
-zvgYyfgYxPgYv/gYufgYtPgYr/gYqvgYpPgYn/gYmvgYlfgYj/gYivgYhfgY\
-gPgYevgYdfgYcPgYa/gYZfgYYPgYW/gYVvgYUPgYS/gYRvgYQfgYO/gYNvgY\
-MfgYLPgYJvgYIfgYHPgaGPgfGPglGPgqGPgvGPg0GPg6GPg/GPhEGPhJGPhP\
-GPhUGPhZGPheGPhkGPhpGPhuGPhzGPh5GPh+GPiDGPiIGPiOGPiTGPiYGPid\
-GPijGPioGPitGPiyGPi4GPi9GPjCGPjHGPjNGPjSGPjXGPjcGPjiGPjnGPjs\
-GPjxGPj3GPj4GPX4GPD4GOr4GOX4GOD4GNv4GNX4GND4GMv4GMb4GMD4GLv4\
-GLb4GLH4GKv4GKb4GKH4GJz4GJb4GJH4GIz4GIf4GIH4GHz4GHf4GHL4GGz4\
-GGf4GGL4GF34GFf4GFL4GE34GEj4GEL4GD34GDj4GDP4GC34GCj4GCP4GB74\
-GBj4Hhj4Ixj4KBj4LRj4Mxj4OBj4PRj4Qhj4SBj4TRj4Uhj4Vxj4XRj4Yhj4\
-Zxj4bBj4chj4dxj4fBj4gRj4hxj4jBj4kRj4lhj4nBj4oRj4phj4qxj4sRj4\
-thj4uxj4wBj4xhj4yxj40Bj41Rj42xj44Bj45Rj46hj48Bj49Rj3+Bjx+Bjs\
-+Bjn+Bji+Bjc+BjX+BjS+BjN+BjH+BjC+Bi9+Bi4+Biy+Bit+Bio+Bij+Bid\
-+BiY+BiT+BiO+BiI+BiD+Bh++Bh5+Bhz+Bhu+Bhp+Bhk+Bhe+BhZ+BhU+BhP\
-+BhJ+BhE+Bg/+Bg6+Bg0+Bgv+Bgq+Bgl+Bgf+Bga+BgY+BwY+CEY+CYY+CwY\
-+DEY+DYY+DsY+EEY+EYY+EsY+FAY+FYY+FsY+GAY+GUY+GsY+HAY+HUY+HoY\
-+IAY+IUY+IoY+I8Y+JUY+JoY+J8Y+KQY+KoY+K8Y+LQY+LkY+L8Y+MQY+MkY\
-+M4Y+NQY+NkY+N4Y+OMY+OkY+O4Y+PMY+PgY8/gY7vgY6fgY4/gY3vgY2fgY\
-1PgYzvgYyfgYxPgYv/gYufgYtPgYr/gYqvgYpPgYn/gYmvgYlfgYj/gYivgY\
-hfgYgPgYevgYdfgYcPgYa/gYZfgYYPgYW/gYVvgYUPgYS/gYRvgYQfgYO/gY\
-NvgYMfgYLPgYJvgYIfgYHPgaGPgfGPglGPgqGPgvGPg0GPg6GPg/GPhEGPhJ\
-GPhPGPhUGPhZGPheGPhkGPhpGPhuGPhzGPh5GPh+GPiDGPiIGPiOGPiTGPiY\
-GPidGPijGPioGPitGPiyGPi4GPi9GPjCGPjHGPjNGPjSGPjXGPjcGPjiGPjn\
-GPjsGPjxGPj3GPj4GPX4GPD4GOr4GOX4GOD4GNv4GNX4GND4GMv4GMb4GMD4\
-GLv4GLb4GLH4GKv4GKb4GKH4GJz4GJb4GJH4GIz4GIf4GIH4GHz4GHf4GHL4\
-GGz4GGf4GGL4GF34GFf4GFL4GE34GEj4GEL4GD34GDj4GDP4GC34GCj4GCP4\
-GB74ISH4JiH4KyH4MCH4NSH4OyH4QCH4RSH4SiH4TyH4VCH4WSH4XiH4YyH4\
-aCH4bSH4ciH4dyH4fCH4gSH4hiH4iyH4kCH4lSH4miH4nyH4pCH4qSH4riH4\
-syH4uSH4viH4wyH4yCH4zSH40iH41yH43CH44SH45iH46yH48CH49SH3+CHy\
-+CHt+CHo+CHi+CHd+CHY+CHT+CHO+CHJ+CHE+CG/+CG6+CG1+CGw+CGr+CGm\
-+CGh+CGc+CGX+CGS+CGN+CGI+CGD+CF++CF5+CF0+CFv+CFq+CFl+CFf+CFa\
-+CFV+CFQ+CFL+CFG+CFB+CE8+CE3+CEy+CEt+CEo+CEj+CEh+CUh+Coh+C8h\
-+DQh+Dkh+D4h+EMh+Egh+E0h+FIh+Fch+Fwh+GEh+GYh+Gsh+HAh+HUh+Hoh\
-+H8h+IQh+Ikh+I8h+JQh+Jkh+J4h+KMh+Kgh+K0h+LIh+Lch+Lwh+MEh+MYh\
-+Msh+NAh+NUh+Noh+N8h+OQh+Okh+O4h+PMh+Pgh8/gh7vgh6fgh5Pgh3/gh\
-2vgh1fgh0Pghy/ghxvghwfghvPght/ghsvghrfghqPgho/ghnvghmfghlPgh\
-j/ghifghhPghf/ghevghdfghcPgha/ghZvghYfghXPghV/ghUvghTfghSPgh\
-Q/ghPvghOfghNPghL/ghKvghJfgjIfgoIfgtIfgyIfg3Ifg8IfhBIfhGIfhL\
-IfhQIfhVIfhaIfhfIfhlIfhqIfhvIfh0Ifh5Ifh+IfiDIfiIIfiNIfiSIfiX\
-IficIfihIfimIfirIfiwIfi1Ifi6Ifi/IfjEIfjJIfjOIfjTIfjYIfjdIfji\
-IfjoIfjtIfjyIfj3Ifj4IfX4IfD4Iev4Ieb4IeH4Idz4Idf4IdL4Ic34Icj4\
-IcP4Ib74Ibn4IbP4Ia74Ian4IaT4IZ/4IZr4IZX4IZD4IYv4IYb4IYH4IXz4\
-IXf4IXL4IW34IWj4IWP4IV74IVn4IVT4IU/4IUr4IUX4IUD4ITv4ITX4ITD4\
-ISv4ISb4Kir4Lyr4NCr4OSr4Pir4Qir4Ryr4TCr4USr4Vir4Wyr4Xyr4ZCr4\
-aSr4bir4cyr4eCr4fCr4gSr4hir4iyr4kCr4lSr4mSr4nir4oyr4qCr4rSr4\
-sir4tir4uyr4wCr4xSr4yir4zir40yr42Cr43Sr44ir45yr46yr48Cr49Sr3\
-+Cry+Crt+Cro+Crj+Crf+Cra+CrV+CrQ+CrL+CrG+CrC+Cq9+Cq4+Cqz+Cqu\
-+Cqp+Cql+Cqg+Cqb+CqW+CqR+CqM+CqI+CqD+Cp++Cp5+Cp0+Cpw+Cpr+Cpm\
-+Cph+Cpc+CpX+CpT+CpO+CpJ+CpE+Co/+Co6+Co2+Cox+Cos+Coq+C4q+DIq\
-+Dcq+Dwq+EEq+EYq+Eoq+E8q+FQq+Fkq+F4q+GMq+Gcq+Gwq+HEq+HYq+Hsq\
-+IAq+IQq+Ikq+I4q+JMq+Jgq+J0q+KEq+KYq+Ksq+LAq+LUq+Loq+L4q+MMq\
-+Mgq+M0q+NIq+Ncq+Nsq+OAq+OUq+Ooq+O8q+PQq+Pgq9Pgq7/gq6vgq5fgq\
-4Pgq2/gq1/gq0vgqzfgqyPgqw/gqvvgquvgqtfgqsPgqq/gqpvgqofgqnfgq\
-mPgqk/gqjvgqifgqhPgqgPgqe/gqdvgqcfgqbPgqZ/gqY/gqXvgqWfgqVPgq\
-T/gqSvgqRvgqQfgqPPgqN/gqMvgqLvgsKvgxKvg2Kvg6Kvg/KvhEKvhJKvhO\
-KvhTKvhXKvhcKvhhKvhmKvhrKvhwKvh0Kvh5Kvh+KviDKviIKviMKviRKviW\
-KvibKvigKvilKvipKviuKvizKvi4Kvi9KvjCKvjGKvjLKvjQKvjVKvjaKvjf\
-KvjjKvjoKvjtKvjyKvj3Kvj4KvX4KvD4Kuv4Kuf4KuL4Kt34Ktj4KtP4Ks74\
-Ksr4KsX4KsD4Krv4Krb4KrL4Kq34Kqj4KqP4Kp74Kpn4KpX4KpD4Kov4Kob4\
-KoH4Knz4Knj4KnP4Km74Kmn4KmT4Kl/4Klv4Klb4KlH4Kkz4Kkf4KkL4Kj74\
-Kjn4KjT4Ki/4MzP4ODP4PDP4QTP4RjP4SjP4TzP4VDP4WDP4XTP4YTP4ZjP4\
-azP4bzP4dDP4eTP4fTP4gjP4hjP4izP4kDP4lDP4mTP4nTP4ojP4pzP4qzP4\
-sDP4tTP4uTP4vjP4wjP4xzP4zDP40DP41TP42jP43jP44zP45zP47DP48TP4\
-9TP3+DPy+DPu+DPp+DPk+DPg+DPb+DPW+DPS+DPN+DPJ+DPE+DO/+DO7+DO2\
-+DOy+DOt+DOo+DOk+DOf+DOa+DOW+DOR+DON+DOI+DOD+DN/+DN6+DN1+DNx\
-+DNs+DNo+DNj+DNe+DNa+DNV+DNR+DNM+DNH+DND+DM++DM5+DM1+DMz+DYz\
-+Dsz+EAz+EQz+Ekz+E0z+FIz+Fcz+Fsz+GAz+GUz+Gkz+G4z+HIz+Hcz+Hwz\
-+IAz+IUz+Ikz+I4z+JMz+Jcz+Jwz+KEz+KUz+Koz+K4z+LMz+Lgz+Lwz+MEz\
-+MYz+Moz+M8z+NMz+Ngz+N0z+OEz+OYz+Ooz+O8z+PQz+Pgz9Pgz7/gz6vgz\
-5vgz4fgz3fgz2Pgz0/gzz/gzyvgzxvgzwfgzvPgzuPgzs/gzrvgzqvgzpfgz\
-ofgznPgzl/gzk/gzjvgzifgzhfgzgPgzfPgzd/gzcvgzbvgzafgzZfgzYPgz\
-W/gzV/gzUvgzTfgzSfgzRPgzQPgzO/gzNvg1M/g5M/g+M/hDM/hHM/hMM/hR\
-M/hVM/haM/heM/hjM/hoM/hsM/hxM/h1M/h6M/h/M/iDM/iIM/iNM/iRM/iW\
-M/iaM/ifM/ikM/ioM/itM/iyM/i2M/i7M/i/M/jEM/jJM/jNM/jSM/jWM/jb\
-M/jgM/jkM/jpM/juM/jyM/j3M/j4M/X4M/H4M+z4M+f4M+P4M974M9r4M9X4\
-M9D4M8z4M8f4M8L4M774M7n4M7X4M7D4M6v4M6f4M6L4M534M5n4M5T4M5D4\
-M4v4M4b4M4L4M334M3n4M3T4M2/4M2v4M2b4M2H4M134M1j4M1T4M0/4M0r4\
-M0b4M0H4Mzz4Mzj4PDz4QTz4RTz4STz4Tjz4Ujz4Vzz4Wzz4Xzz4ZDz4aDz4\
-bTz4cTz4djz4ejz4fjz4gzz4hzz4jDz4kDz4lDz4mTz4nTz4ojz4pjz4qjz4\
-rzz4szz4uDz4vDz4wDz4xTz4yTz4zjz40jz41zz42zz43zz45Dz46Dz47Tz4\
-8Tz49Tz3+Dzy+Dzu+Dzq+Dzl+Dzh+Dzc+DzY+DzU+DzP+DzL+DzG+DzC+Dy+\
-+Dy5+Dy1+Dyw+Dys+Dyo+Dyj+Dyf+Dya+DyW+DyR+DyN+DyJ+DyE+DyA+Dx7\
-+Dx3+Dxz+Dxu+Dxq+Dxl+Dxh+Dxd+DxY+DxU+DxP+DxL+DxH+DxC+Dw++Dw8\
-+D88+EQ8+Eg8+Ew8+FE8+FU8+Fo8+F48+GI8+Gc8+Gs8+HA8+HQ8+Hg8+H08\
-+IE8+IY8+Io8+I88+JM8+Jc8+Jw8+KA8+KU8+Kk8+K08+LI8+LY8+Ls8+L88\
-+MM8+Mg8+Mw8+NE8+NU8+Nk8+N48+OI8+Oc8+Os8+PA8+PQ8+Pg89Pg88Pg8\
-6/g85/g84vg83vg82fg81fg80fg8zPg8yPg8w/g8v/g8u/g8tvg8svg8rfg8\
-qfg8pfg8oPg8nPg8l/g8k/g8j/g8ivg8hvg8gfg8ffg8ePg8dPg8cPg8a/g8\
-Z/g8Yvg8Xvg8Wvg8Vfg8Ufg8TPg8SPg8RPg8P/g+PPhCPPhHPPhLPPhPPPhU\
-PPhYPPhdPPhhPPhlPPhqPPhuPPhzPPh3PPh7PPiAPPiEPPiJPPiNPPiRPPiW\
-PPiaPPifPPijPPioPPisPPiwPPi1PPi5PPi+PPjCPPjGPPjLPPjPPPjUPPjY\
-PPjcPPjhPPjlPPjqPPjuPPjyPPj3PPj4PPX4PPH4PO34POj4POT4PN/4PNv4\
-PNf4PNL4PM74PMn4PMX4PMD4PLz4PLj4PLP4PK/4PKr4PKb4PKL4PJ34PJn4\
-PJT4PJD4PIz4PIf4PIP4PH74PHr4PHb4PHH4PG34PGj4PGT4PF/4PFv4PFf4\
-PFL4PE74PEn4PEX4PEH4RUX4SUX4TkX4UkX4VkX4WkX4XkX4Y0X4Z0X4a0X4\
-b0X4c0X4eEX4fEX4gEX4hEX4iEX4jUX4kUX4lUX4mUX4nUX4okX4pkX4qkX4\
-rkX4skX4t0X4u0X4v0X4w0X4x0X4zEX40EX41EX42EX43EX44UX45UX46UX4\
-7UX48UX49kX3+EXz+EXv+EXq+EXm+EXi+EXe+EXa+EXV+EXR+EXN+EXJ+EXF\
-+EXA+EW8+EW4+EW0+EWw+EWr+EWn+EWj+EWf+EWb+EWW+EWS+EWO+EWK+EWG\
-+EWB+EV9+EV5+EV1+EVx+EVs+EVo+EVk+EVg+EVc+EVX+EVT+EVP+EVL+EVH\
-+EVF+EhF+ExF+FBF+FVF+FlF+F1F+GFF+GVF+GpF+G5F+HJF+HZF+HpF+H9F\
-+INF+IdF+ItF+I9F+JRF+JhF+JxF+KBF+KRF+KlF+K1F+LFF+LVF+LlF+L5F\
-+MJF+MZF+MpF+M5F+NNF+NdF+NtF+N9F+ONF+OhF+OxF+PBF+PRF+PhF9PhF\
-8PhF7PhF6PhF4/hF3/hF2/hF1/hF0/hFzvhFyvhFxvhFwvhFvvhFufhFtfhF\
-sfhFrfhFqfhFpPhFoPhFnPhFmPhFlPhFj/hFi/hFh/hFg/hFf/hFevhFdvhF\
-cvhFbvhFavhFZfhFYfhFXfhFWfhFVfhFUPhFTPhFSPhHRfhLRfhPRfhTRfhX\
-RfhcRfhgRfhkRfhoRfhsRfhxRfh1Rfh5Rfh9RfiBRfiGRfiKRfiORfiSRfiW\
-RfibRfifRfijRfinRfirRfiwRfi0Rfi4Rfi8RfjARfjFRfjJRfjNRfjRRfjV\
-RfjaRfjeRfjiRfjmRfjqRfjvRfjzRfj3Rfj4Rfb4RfH4Re34Ren4ReX4ReH4\
-Rdz4Rdj4RdT4RdD4Rcz4Rcf4RcP4Rb/4Rbv4Rbf4RbL4Ra74Rar4Rab4RaL4\
-RZ34RZn4RZX4RZH4RY34RYj4RYT4RYD4RXz4RXj4RXP4RW/4RWv4RWf4RWP4\
-RV74RVr4RVb4RVL4RU74RUn4Tk74Uk74Vk74Wk74Xk74Yk74Zk74ak74bk74\
-ck74dk74ek74fk74gk74hk74ik74jk74kk74lk74mk74nk74ok74pk74qk74\
-rk74sk74tk74uk74vk74wk74xk74yk74zk740k741k742k743k744k745k74\
-6k747k748k749k73+E7z+E7v+E7r+E7n+E7j+E7f+E7b+E7X+E7T+E7P+E7L\
-+E7H+E7D+E6/+E67+E63+E6z+E6v+E6r+E6n+E6j+E6f+E6b+E6X+E6T+E6P\
-+E6L+E6H+E6D+E5/+E57+E53+E5z+E5v+E5r+E5n+E5j+E5f+E5b+E5X+E5T\
-+E5P+E5O+FFO+FVO+FlO+F1O+GFO+GVO+GlO+G1O+HFO+HVO+HlO+H1O+IFO\
-+IVO+IlO+I1O+JFO+JVO+JlO+J1O+KFO+KVO+KlO+K1O+LFO+LVO+LlO+LxO\
-+MBO+MRO+MhO+MxO+NBO+NRO+NhO+NxO+OBO+ORO+OhO+OxO+PBO+PRO+PhO\
-9PhO8PhO7PhO6PhO5PhO4PhO3PhO2PhO1PhO0PhOzPhOyPhOxPhOwPhOvPhO\
-ufhOtfhOsfhOrfhOqfhOpfhOofhOnfhOmfhOlfhOkfhOjfhOifhOhfhOgfhO\
-ffhOefhOdfhOcfhObfhOafhOZfhOYfhOXfhOWfhOVfhOUfhPTvhTTvhXTvhb\
-TvhfTvhjTvhnTvhrTvhvTvhzTvh3Tvh7Tvh/TviDTviHTviLTviPTviTTviX\
-TvibTvifTvijTvinTvirTvivTvizTvi3Tvi7Tvi/TvjDTvjHTvjLTvjPTvjT\
-TvjXTvjbTvjfTvjjTvjnTvjrTvjvTvjzTvj3Tvj4Tvb4TvL4Tu74Tur4Tub4\
-TuL4Tt74Ttr4Ttb4TtL4Ts74Tsr4Tsb4TsL4Tr74Trr4Trb4TrL4Tq74Tqr4\
-Tqb4TqL4Tp74Tpr4Tpb4TpL4To74Tor4Tob4ToL4Tn74Tnr4Tnb4TnL4Tm74\
-Tmr4Tmb4TmL4Tl74Tlr4Tlb4TlL4V1f4W1f4X1f4Ylf4Zlf4alf4blf4clf4\
-dVf4eVf4fVf4gVf4hFf4iFf4jFf4kFf4lFf4l1f4m1f4n1f4o1f4plf4qlf4\
-rlf4slf4tlf4uVf4vVf4wVf4xVf4yFf4zFf40Ff41Ff42Ff421f431f441f4\
-51f46lf47lf48lf49lf3+Ffz+Ffw+Ffs+Ffo+Ffk+Ffg+Ffd+FfZ+FfV+FfR\
-+FfO+FfK+FfG+FfC+Fe++Fe7+Fe3+Fez+Fev+Fer+Feo+Fek+Feg+Fec+FeZ\
-+FeV+FeR+FeN+FeJ+FeG+FeC+Fd++Fd6+Fd3+Fdz+Fdv+Fdr+Fdn+Fdk+Fdg\
-+Fdc+FdY+FdX+FpX+F1X+GFX+GVX+GlX+G1X+HBX+HRX+HhX+HxX+H9X+INX\
-+IdX+ItX+I9X+JJX+JZX+JpX+J5X+KFX+KVX+KlX+K1X+LFX+LRX+LhX+LxX\
-+MBX+MNX+MdX+MtX+M9X+NNX+NZX+NpX+N5X+OJX+OVX+OlX+O1X+PFX+PVX\
-+PhX9fhX8fhX7fhX6fhX5fhX4vhX3vhX2vhX1vhX0/hXz/hXy/hXx/hXw/hX\
-wPhXvPhXuPhXtPhXsfhXrfhXqfhXpfhXofhXnvhXmvhXlvhXkvhXj/hXi/hX\
-h/hXg/hXf/hXfPhXePhXdPhXcPhXbfhXafhXZfhXYfhXXfhXWvhYV/hcV/hg\
-V/hkV/hnV/hrV/hvV/hzV/h3V/h6V/h+V/iCV/iGV/iJV/iNV/iRV/iVV/iZ\
-V/icV/igV/ikV/ioV/irV/ivV/izV/i3V/i7V/i+V/jCV/jGV/jKV/jOV/jR\
-V/jVV/jZV/jdV/jgV/jkV/joV/jsV/jwV/jzV/j3V/j4V/b4V/L4V+74V+r4\
-V+f4V+P4V9/4V9v4V9j4V9T4V9D4V8z4V8j4V8X4V8H4V734V7n4V7b4V7L4\
-V674V6r4V6b4V6P4V5/4V5v4V5f4V5T4V5D4V4z4V4j4V4T4V4H4V334V3n4\
-V3X4V3L4V274V2r4V2b4V2L4V1/4V1v4YGD4ZGD4Z2D4a2D4bmD4cmD4dWD4\
-eWD4fWD4gGD4hGD4h2D4i2D4jmD4kmD4lmD4mWD4nWD4oGD4pGD4p2D4q2D4\
-r2D4smD4tmD4uWD4vWD4wGD4xGD4yGD4y2D4z2D40mD41mD42WD43WD44WD4\
-5GD46GD462D472D48mD49mD3+GD0+GDw+GDs+GDp+GDl+GDi+GDe+GDb+GDX\
-+GDT+GDQ+GDM+GDJ+GDF+GDC+GC++GC6+GC3+GCz+GCw+GCs+GCp+GCl+GCh\
-+GCe+GCa+GCX+GCT+GCQ+GCM+GCI+GCF+GCB+GB++GB6+GB3+GBz+GBw+GBs\
-+GBo+GBl+GBh+GBg+GJg+GZg+Gpg+G1g+HFg+HRg+Hhg+Htg+H9g+INg+IZg\
-+Ipg+I1g+JFg+JRg+Jhg+Jxg+J9g+KNg+KZg+Kpg+K1g+LFg+LVg+Lhg+Lxg\
-+L9g+MNg+MZg+Mpg+M5g+NFg+NVg+Nhg+Nxg+N9g+ONg+OZg+Opg+O5g+PFg\
-+PVg+Phg9fhg8fhg7vhg6vhg5vhg4/hg3/hg3Phg2Phg1fhg0fhgzvhgyvhg\
-xvhgw/hgv/hgvPhguPhgtfhgsfhgrfhgqvhgpvhgo/hgn/hgnPhgmPhglPhg\
-kfhgjfhgivhghvhgg/hgf/hge/hgePhgdPhgcfhgbfhgavhgZvhgYvhhYPhl\
-YPhoYPhsYPhwYPhzYPh3YPh6YPh+YPiBYPiFYPiIYPiMYPiQYPiTYPiXYPia\
-YPieYPihYPilYPipYPisYPiwYPizYPi3YPi6YPi+YPjCYPjFYPjJYPjMYPjQ\
-YPjTYPjXYPjbYPjeYPjiYPjlYPjpYPjsYPjwYPj0YPj3YPj4YPb4YPL4YO/4\
-YOv4YOj4YOT4YOH4YN34YNn4YNb4YNL4YM/4YMv4YMj4YMT4YMD4YL34YLn4\
-YLb4YLL4YK/4YKv4YKf4YKT4YKD4YJ34YJn4YJb4YJL4YI74YIv4YIf4YIT4\
-YID4YH34YHn4YHX4YHL4YG74YGv4YGf4YGT4aWn4bGn4cGn4c2n4dmn4emn4\
-fWn4gWn4hGn4h2n4i2n4jmn4kWn4lWn4mGn4m2n4n2n4omn4pWn4qWn4rGn4\
-sGn4s2n4tmn4umn4vWn4wGn4xGn4x2n4ymn4zmn40Wn41Wn42Gn422n432n4\
-4mn45Wn46Wn47Gn472n482n49mn3+Gn0+Gnw+Gnt+Gnq+Gnm+Gnj+Gng+Gnc\
-+GnZ+GnW+GnS+GnP+GnM+GnI+GnF+GnB+Gm++Gm7+Gm3+Gm0+Gmx+Gmt+Gmq\
-+Gmn+Gmj+Gmg+Gmd+GmZ+GmW+GmS+GmP+GmM+GmI+GmF+GmC+Gl++Gl7+Gl4\
-+Gl0+Glx+Glt+Glq+Glp+Gtp+G9p+HJp+HVp+Hlp+Hxp+H9p+INp+IZp+Ilp\
-+I1p+JBp+JRp+Jdp+Jpp+J5p+KFp+KRp+Khp+Ktp+K5p+LJp+LVp+Llp+Lxp\
-+L9p+MNp+MZp+Mlp+M1p+NBp+NNp+Ndp+Npp+N1p+OFp+ORp+Ohp+Otp+O5p\
-+PJp+PVp+Php9fhp8vhp7vhp6/hp6Php5Php4fhp3fhp2vhp1/hp0/hp0Php\
-zfhpyfhpxvhpw/hpv/hpvPhpufhptfhpsvhprvhpq/hpqPhppPhpofhpnvhp\
-mvhpl/hplPhpkPhpjfhpifhphvhpg/hpf/hpfPhpefhpdfhpcvhpb/hpa/hq\
-afhtafhxafh0afh4afh7afh+afiCafiFafiIafiMafiPafiSafiWafiZafid\
-afigafijafinafiqafitafixafi0afi3afi7afi+afjBafjFafjIafjMafjP\
-afjSafjWafjZafjcafjgafjjafjmafjqafjtafjwafj0afj3afj4afb4afP4\
-ae/4aez4aen4aeX4aeL4ad/4adv4adj4adX4adH4ac74acr4acf4acT4acD4\
-ab34abr4abb4abP4abD4aaz4aan4aaX4aaL4aZ/4aZv4aZj4aZX4aZH4aY74\
-aYv4aYf4aYT4aYH4aX34aXr4aXb4aXP4aXD4aWz4cnL4dXL4eHL4e3L4f3L4\
-gnL4hXL4iHL4i3L4jnL4kXL4lXL4mHL4m3L4nnL4oXL4pHL4qHL4q3L4rnL4\
-sXL4tHL4t3L4unL4vnL4wXL4xHL4x3L4ynL4zXL40HL41HL413L42nL43XL4\
-4HL443L45nL46nL47XL48HL483L49nL3+HL0+HLx+HLu+HLr+HLo+HLk+HLh\
-+HLe+HLb+HLY+HLV+HLR+HLO+HLL+HLI+HLF+HLC+HK/+HK7+HK4+HK1+HKy\
-+HKv+HKs+HKp+HKl+HKi+HKf+HKc+HKZ+HKW+HKT+HKP+HKM+HKJ+HKG+HKD\
-+HKA+HJ8+HJ5+HJ2+HJz+HJy+HRy+Hdy+Hpy+H5y+IFy+IRy+Idy+Ipy+I1y\
-+JBy+JRy+Jdy+Jpy+J1y+KBy+KNy+KZy+Kpy+K1y+LBy+LNy+LZy+Lly+Lxy\
-+MBy+MNy+MZy+Mly+Mxy+M9y+NNy+NZy+Nly+Nxy+N9y+OJy+OVy+Oly+Oxy\
-+O9y+PJy+PVy+Phy9fhy8vhy7/hy7Phy6fhy5fhy4vhy3/hy3Phy2fhy1vhy\
-0/hyz/hyzPhyyfhyxvhyw/hywPhyvPhyufhytvhys/hysPhyrfhyqvhypvhy\
-o/hyoPhynfhymvhyl/hylPhykPhyjfhyivhyh/hyhPhygfhyfvhyevhyd/hy\
-dPhzcvh2cvh5cvh8cviAcviDcviGcviJcviMcviPcviTcviWcviZcviccvif\
-cviicvilcvipcviscvivcviycvi1cvi4cvi7cvi/cvjCcvjFcvjIcvjLcvjO\
-cvjRcvjVcvjYcvjbcvjecvjhcvjkcvjocvjrcvjucvjxcvj0cvj3cvj4cvb4\
-cvP4cvD4cu34cur4cub4cuP4cuD4ct34ctr4ctf4ctT4ctD4cs34csr4csf4\
-csT4csH4cr74crr4crf4crT4crH4cq74cqv4cqj4cqT4cqH4cp74cpv4cpj4\
-cpX4cpH4co74cov4coj4coX4coL4cn/4cnv4cnj4cnX4e3v4fnv4gXv4hHv4\
-h3v4inv4jXv4j3v4knv4lXv4mHv4m3v4nnv4oXv4pHv4p3v4qnv4rXv4sHv4\
-s3v4tnv4uXv4vHv4v3v4wXv4xHv4x3v4ynv4zXv40Hv403v41nv42Xv43Hv4\
-33v44nv45Xv46Hv463v47nv48Hv483v49nv3+Hv0+Hvx+Hvv+Hvs+Hvp+Hvm\
-+Hvj+Hvg+Hvd+Hva+HvX+HvU+HvR+HvO+HvL+HvI+HvF+HvC+HvA+Hu9+Hu6\
-+Hu3+Hu0+Hux+Huu+Hur+Huo+Hul+Hui+Huf+Huc+HuZ+HuW+HuT+HuQ+HuO\
-+HuL+HuI+HuF+HuC+Ht/+Ht8+Ht7+H17+IB7+IN7+IZ7+Il7+Ix7+I97+JF7\
-+JR7+Jd7+Jp7+J17+KB7+KN7+KZ7+Kl7+Kx7+K97+LJ7+LV7+Lh7+Lt7+L57\
-+MB7+MN7+MZ7+Ml7+Mx7+M97+NJ7+NV7+Nh7+Nt7+N57+OF7+OR7+Od7+Op7\
-+O17+PB7+PJ7+PV7+Ph79fh78vh78Ph77fh76vh75/h75Ph74fh73vh72/h7\
-2Ph71fh70vh7z/h7zPh7yfh7xvh7w/h7wPh7vvh7u/h7uPh7tfh7svh7r/h7\
-rPh7qfh7pvh7o/h7oPh7nfh7mvh7l/h7lPh7kfh7j/h7jPh7ifh7hvh7g/h7\
-gPh7ffh8e/h/e/iCe/iFe/iIe/iLe/iOe/iQe/iTe/iWe/iZe/ice/ife/ii\
-e/ile/ioe/ire/iue/ixe/i0e/i3e/i6e/i9e/jAe/jCe/jFe/jIe/jLe/jO\
-e/jRe/jUe/jXe/jae/jde/jge/jje/jme/jpe/jse/jve/jxe/j0e/j3e/j4\
-e/b4e/P4e/D4e+74e+v4e+j4e+X4e+L4e9/4e9z4e9n4e9b4e9P4e9D4e834\
-e8r4e8f4e8T4e8H4e7/4e7z4e7n4e7b4e7P4e7D4e634e6r4e6f4e6T4e6H4\
-e574e5v4e5j4e5X4e5L4e4/4e434e4r4e4f4e4T4e4H4e374hIT4h4T4iYT4\
-jIT4j4T4koT4lIT4l4T4moT4nIT4n4T4ooT4pYT4p4T4qoT4rYT4sIT4soT4\
-tYT4uIT4uoT4vYT4wIT4w4T4xYT4yIT4y4T4zoT40IT404T41oT42IT424T4\
-3oT44YT444T45oT46YT47IT47oT48YT49IT494T3+IT1+ITy+ITv+ITt+ITq\
-+ITn+ITk+ITi+ITf+ITc+ITZ+ITX+ITU+ITR+ITO+ITM+ITJ+ITG+ITE+ITB\
-+IS++IS7+IS5+IS2+ISz+ISw+ISu+ISr+ISo+ISm+ISj+ISg+ISd+ISb+ISY\
-+ISV+ISS+ISQ+ISN+ISK+ISI+ISF+ISE+IaE+IiE+IuE+I6E+JGE+JOE+JaE\
-+JmE+JyE+J6E+KGE+KSE+KaE+KmE+KyE+K+E+LGE+LSE+LeE+LqE+LyE+L+E\
-+MKE+MSE+MeE+MqE+M2E+M+E+NKE+NWE+NiE+NqE+N2E+OCE+OKE+OWE+OiE\
-+OuE+O2E+PCE+POE+PaE+PiE9viE8/iE8PiE7fiE6/iE6PiE5fiE4viE4PiE\
-3fiE2viE2PiE1fiE0viEz/iEzfiEyviEx/iExPiEwviEv/iEvPiEuviEt/iE\
-tPiEsfiEr/iErPiEqfiEpviEpPiEofiEnviEnPiEmfiElviEk/iEkfiEjviE\
-i/iEiPiEhviFhPiIhPiKhPiNhPiQhPiShPiVhPiYhPibhPidhPighPijhPim\
-hPiohPirhPiuhPiwhPizhPi2hPi5hPi7hPi+hPjBhPjEhPjGhPjJhPjMhPjO\
-hPjRhPjUhPjXhPjZhPjchPjfhPjihPjkhPjnhPjqhPjthPjvhPjyhPj1hPj3\
-hPj4hPf4hPT4hPH4hO74hOz4hOn4hOb4hOP4hOH4hN74hNv4hNj4hNb4hNP4\
-hND4hM74hMv4hMj4hMX4hMP4hMD4hL34hLr4hLj4hLX4hLL4hLD4hK34hKr4\
-hKf4hKX4hKL4hJ/4hJz4hJr4hJf4hJT4hJL4hI/4hIz4hIn4hIf4jY34j434\
-ko34lI34l434mY34nI34no34oY34pI34po34qY34q434ro34sI34s434tY34\
-uI34uo34vY34v434wo34xI34x434yY34zI34zo340Y3404341o342I342434\
-3Y344I344o345Y346I346o347Y3474348o349I349433+I31+I3y+I3w+I3t\
-+I3r+I3o+I3m+I3j+I3h+I3e+I3c+I3Z+I3X+I3U+I3S+I3P+I3N+I3K+I3I\
-+I3F+I3D+I3A+I2++I27+I25+I22+I2z+I2x+I2u+I2s+I2p+I2n+I2k+I2i\
-+I2f+I2d+I2a+I2Y+I2V+I2T+I2Q+I2O+I2N+I+N+JGN+JSN+JaN+JmN+JuN\
-+J6N+KCN+KON+KWN+KiN+KqN+K2N+K+N+LKN+LSN+LeN+LmN+LyN+L6N+MGN\
-+MON+MaN+MiN+MuN+M6N+NCN+NON+NWN+NiN+NqN+N2N+N+N+OKN+OSN+OeN\
-+OmN+OyN+O6N+PGN+PON+PaN+PiN9viN8/iN8fiN7viN7PiN6fiN5/iN5PiN\
-4viN3/iN3fiN2viN2PiN1fiN0/iN0PiNzviNy/iNyPiNxviNw/iNwfiNvviN\
-vPiNufiNt/iNtPiNsviNr/iNrfiNqviNqPiNpfiNo/iNoPiNnviNm/iNmfiN\
-lviNlPiNkfiNj/iOjfiQjfiTjfiVjfiYjfiajfidjfifjfiijfikjfinjfip\
-jfisjfiujfixjfizjfi2jfi5jfi7jfi+jfjAjfjDjfjFjfjIjfjKjfjNjfjP\
-jfjSjfjUjfjXjfjZjfjcjfjejfjhjfjjjfjmjfjojfjrjfjtjfjwjfjyjfj1\
-jfj3jfj4jff4jfT4jfL4je/4je34jer4jej4jeX4jeL4jeD4jd34jdv4jdj4\
-jdb4jdP4jdH4jc74jcz4jcn4jcf4jcT4jcL4jb/4jb34jbr4jbj4jbX4jbP4\
-jbD4ja74jav4jan4jab4jaT4jaH4jZ74jZz4jZn4jZf4jZT4jZL4jY/4lpb4\
-mJb4mpb4nZb4n5b4oZb4pJb4ppb4qJb4q5b4rZb4r5b4spb4tJb4tpb4uJb4\
-u5b4vZb4v5b4wpb4xJb4xpb4yZb4y5b4zZb40Jb40pb41Jb41pb42Zb425b4\
-3Zb44Jb44pb45Jb455b46Zb465b47pb48Jb48pb49Jb495b4+Jb1+Jbz+Jbx\
-+Jbu+Jbs+Jbq+Jbn+Jbl+Jbj+Jbg+Jbe+Jbc+Jba+JbX+JbV+JbT+JbQ+JbO\
-+JbM+JbJ+JbH+JbF+JbC+JbA+Ja++Ja8+Ja5+Ja3+Ja1+Jay+Jaw+Jau+Jar\
-+Jap+Jan+Jak+Jai+Jag+Jad+Jab+JaZ+JaX+JaW+JeW+JqW+JyW+J6W+KGW\
-+KOW+KWW+KiW+KqW+KyW+K6W+LGW+LOW+LWW+LiW+LqW+LyW+L+W+MGW+MOW\
-+MaW+MiW+MqW+MyW+M+W+NGW+NOW+NaW+NiW+NqW+N2W+N+W+OGW+OSW+OaW\
-+OiW+OqW+O2W+O+W+PGW+PSW+PaW+PiW9viW9PiW8fiW7/iW7fiW6viW6PiW\
-5viW5PiW4fiW3/iW3fiW2viW2PiW1viW0/iW0fiWz/iWzPiWyviWyPiWxviW\
-w/iWwfiWv/iWvPiWuviWuPiWtfiWs/iWsfiWrviWrPiWqviWqPiWpfiWo/iW\
-ofiWnviWnPiWmviWl/iXlviZlviblvidlviglviilviklvinlviplvirlviu\
-lviwlviylvi1lvi3lvi5lvi8lvi+lvjAlvjClvjFlvjHlvjJlvjMlvjOlvjQ\
-lvjTlvjVlvjXlvjalvjclvjelvjglvjjlvjllvjnlvjqlvjslvjulvjxlvjz\
-lvj1lvj4lvj4lvf4lvT4lvL4lvD4lu74luv4lun4luf4luT4luL4luD4lt34\
-ltv4ltn4ltb4ltT4ltL4ltD4ls34lsv4lsn4lsb4lsT4lsL4lr/4lr34lrv4\
-lrj4lrb4lrT4lrL4lq/4lq34lqv4lqj4lqb4lqT4lqH4lp/4lp34lpr4lpj4\
-n5/4oZ/4o5/4pZ/4p5/4qZ/4q5/4rZ/4sJ/4sp/4tJ/4tp/4uJ/4up/4vJ/4\
-vp/4wJ/4wp/4xZ/4x5/4yZ/4y5/4zZ/4z5/40Z/405/41Z/415/42p/43J/4\
-3p/44J/44p/45J/45p/46J/46p/47J/475/48Z/485/49Z/495/4+J/2+J/z\
-+J/x+J/v+J/t+J/r+J/p+J/n+J/l+J/j+J/h+J/e+J/c+J/a+J/Y+J/W+J/U\
-+J/S+J/Q+J/O+J/M+J/J+J/H+J/F+J/D+J/B+J+/+J+9+J+7+J+5+J+3+J+0\
-+J+y+J+w+J+u+J+s+J+q+J+o+J+m+J+k+J+i+J+f+J+f+KCf+KKf+KSf+Kaf\
-+Kmf+Kuf+K2f+K+f+LGf+LOf+LWf+Lef+Lmf+Luf+L6f+MCf+MKf+MSf+Maf\
-+Mif+Mqf+Myf+M6f+NCf+NOf+NWf+Nef+Nmf+Nuf+N2f+N+f+OGf+OOf+OWf\
-+Oif+Oqf+Oyf+O6f+PCf+PKf+PSf+Paf+Pif9vif9Pif8vif8Pif7vif7Pif\
-6vif6Pif5fif4/if4fif3/if3fif2/if2fif1/if1fif0/if0PifzvifzPif\
-yvifyPifxvifxPifwvifwPifvvifu/ifufift/iftfifs/ifsfifr/ifrfif\
-q/ifqfifpvifpPifovifoPifn/iin/ikn/imn/ion/iqn/isn/iun/iwn/iy\
-n/i0n/i3n/i5n/i7n/i9n/i/n/jBn/jDn/jFn/jHn/jJn/jMn/jOn/jQn/jS\
-n/jUn/jWn/jYn/jan/jcn/jen/jhn/jjn/jln/jnn/jpn/jrn/jtn/jvn/jx\
-n/jzn/j2n/j4n/j4n/f4n/X4n/P4n/H4n+/4n+z4n+r4n+j4n+b4n+T4n+L4\
-n+D4n974n9z4n9r4n9f4n9X4n9P4n9H4n8/4n834n8v4n8n4n8f4n8X4n8L4\
-n8D4n774n7z4n7r4n7j4n7b4n7T4n7L4n7D4n634n6v4n6n4n6f4n6X4n6P4\
-n6H4qKj4qqj4q6j4raj4r6j4saj4s6j4taj4t6j4uaj4u6j4vKj4vqj4wKj4\
-wqj4xKj4xqj4yKj4yqj4zKj4zqj4z6j40aj406j41aj416j42aj426j43aj4\
-36j44Kj44qj45Kj45qj46Kj46qj47Kj47qj48Kj48aj486j49aj496j4+Kj2\
-+Kj0+Kjy+Kjw+Kju+Kjs+Kjq+Kjp+Kjn+Kjl+Kjj+Kjh+Kjf+Kjd+Kjb+KjZ\
-+KjY+KjW+KjU+KjS+KjQ+KjO+KjM+KjK+KjI+KjH+KjF+KjD+KjB+Ki/+Ki9\
-+Ki7+Ki5+Ki3+Ki2+Ki0+Kiy+Kiw+Kiu+Kis+Kiq+Kio+Kio+Kmo+Kuo+K2o\
-+K+o+LGo+LKo+LSo+Lao+Lio+Lqo+Lyo+L6o+MCo+MKo+MOo+MWo+Meo+Mmo\
-+Muo+M2o+M+o+NGo+NOo+NSo+Nao+Nio+Nqo+Nyo+N6o+OCo+OKo+OSo+OWo\
-+Oeo+Omo+Ouo+O2o+O+o+PGo+POo+PWo+Pao+Pio9vio9fio8/io8fio7/io\
-7fio6/io6fio5/io5fio5Pio4vio4Pio3vio3Pio2vio2Pio1vio1Pio0/io\
-0fioz/iozfioy/ioyfiox/ioxfiow/iowviowPiovviovPiouviouPiotvio\
-tPiosviosfior/iorfioq/ioqfioqPiqqPisqPiuqPiwqPiyqPi0qPi2qPi3\
-qPi5qPi7qPi9qPi/qPjBqPjDqPjFqPjHqPjIqPjKqPjMqPjOqPjQqPjSqPjU\
-qPjWqPjYqPjZqPjbqPjdqPjfqPjhqPjjqPjlqPjnqPjpqPjqqPjsqPjuqPjw\
-qPjyqPj0qPj2qPj4qPj4qPf4qPX4qPP4qPH4qPD4qO74qOz4qOr4qOj4qOb4\
-qOT4qOL4qOD4qN/4qN34qNv4qNn4qNf4qNX4qNP4qNH4qM/4qM74qMz4qMr4\
-qMj4qMb4qMT4qML4qMD4qL74qLz4qLv4qLn4qLf4qLX4qLP4qLH4qK/4qK34\
-qKv4qKr4sbH4srH4tLH4trH4t7H4ubH4u7H4vLH4vrH4wLH4wbH4w7H4xbH4\
-x7H4yLH4yrH4zLH4zbH4z7H40bH40rH41LH41rH417H42bH427H43LH43rH4\
-4LH44bH447H45bH45rH46LH46rH467H47bH477H48LH48rH49LH49rH497H4\
-+LH2+LH0+LHz+LHx+LHv+LHu+LHs+LHq+LHp+LHn+LHl+LHk+LHi+LHg+LHf\
-+LHd+LHb+LHa+LHY+LHW+LHV+LHT+LHR+LHP+LHO+LHM+LHK+LHJ+LHH+LHF\
-+LHE+LHC+LHA+LG/+LG9+LG7+LG6+LG4+LG2+LG1+LGz+LGx+LGx+LKx+LOx\
-+LWx+Lex+Lmx+Lqx+Lyx+L6x+L+x+MGx+MOx+MSx+Max+Mix+Mmx+Mux+M2x\
-+M6x+NCx+NKx+NOx+NWx+Nex+Nix+Nqx+Nyx+N2x+N+x+OGx+OKx+OSx+Oax\
-+Oix+Omx+Oux+O2x+O6x+PCx+PKx+POx+PWx+Pex+Pix9/ix9fix8/ix8vix\
-8Pix7vix7fix6/ix6fix6Pix5vix5Pix4vix4fix3/ix3fix3Pix2vix2Pix\
-1/ix1fix0/ix0vix0Pixzvixzfixy/ixyfixyPixxvixxPixw/ixwfixv/ix\
-vvixvPixuvixufixt/ixtfixs/ixsvixsfizsfi1sfi2sfi4sfi6sfi7sfi9\
-sfi/sfjAsfjCsfjEsfjFsfjHsfjJsfjKsfjMsfjOsfjPsfjRsfjTsfjVsfjW\
-sfjYsfjasfjbsfjdsfjfsfjgsfjisfjksfjlsfjnsfjpsfjqsfjssfjusfjv\
-sfjxsfjzsfj0sfj2sfj4sfj4sff4sfb4sfT4sfL4sfD4se/4se34sev4ser4\
-sej4seb4seX4seP4seH4seD4sd74sdz4sdv4sdn4sdf4sdb4sdT4sdL4sdH4\
-sc/4sc34scz4scr4scj4scf4scX4scP4scH4scD4sb74sbz4sbv4sbn4sbf4\
-sbb4sbT4sbL4urr4u7r4vbr4vrr4wLr4wbr4wrr4xLr4xbr4x7r4yLr4yrr4\
-y7r4zbr4zrr40Lr40br407r41Lr41rr417r42Lr42rr427r43br43rr44Lr4\
-4br447r45Lr45rr457r46br46rr47Lr47br477r48Lr48br487r49Lr49rr4\
-97r4+Lr2+Lr1+Lrz+Lry+Lrw+Lrv+Lru+Lrs+Lrr+Lrp+Lro+Lrm+Lrl+Lrj\
-+Lri+Lrg+Lrf+Lrd+Lrc+Lra+LrZ+LrY+LrW+LrV+LrT+LrS+LrQ+LrP+LrN\
-+LrM+LrK+LrJ+LrH+LrG+LrE+LrD+LrB+LrA+Lq/+Lq9+Lq8+Lq6+Lq6+Lu6\
-+Ly6+L66+L+6+MC6+MK6+MO6+MW6+Ma6+Mi6+Mm6+Mu6+My6+M66+M+6+NG6\
-+NK6+NS6+NW6+Ne6+Ni6+Nm6+Nu6+Ny6+N66+N+6+OG6+OK6+OS6+OW6+Oe6\
-+Oi6+Oq6+Ou6+O26+O66+PC6+PG6+PK6+PS6+PW6+Pe6+Pi69/i69fi69Pi6\
-8vi68fi68Pi67vi67fi66/i66vi66Pi65/i65fi65Pi64vi64fi63/i63vi6\
-3Pi62/i62fi62Pi61/i61fi61Pi60vi60fi6z/i6zvi6zPi6y/i6yfi6yPi6\
-xvi6xfi6w/i6wvi6wPi6v/i6vvi6vPi6u/i6uvi8uvi9uvi/uvjAuvjBuvjD\
-uvjEuvjGuvjHuvjJuvjKuvjMuvjNuvjPuvjQuvjSuvjTuvjVuvjWuvjYuvjZ\
-uvjauvjcuvjduvjfuvjguvjiuvjjuvjluvjmuvjouvjpuvjruvjsuvjuuvjv\
-uvjwuvjyuvjzuvj1uvj2uvj4uvj4uvf4uvb4uvT4uvP4uvH4uvD4uu/4uu34\
-uuz4uur4uun4uuf4uub4uuT4uuP4uuH4uuD4ut74ut34utv4utr4utj4utf4\
-utb4utT4utP4utH4utD4us74us34usv4usr4usj4usf4usX4usT4usL4usH4\
-usD4ur74ur34urv4w8P4xMP4xcP4xsP4yMP4ycP4ysP4y8P4zcP4zsP4z8P4\
-0MP40sP408P41MP41cP418P42MP42cP428P43MP43cP43sP44MP44cP44sP4\
-48P45cP45sP458P46MP46sP468P47MP47cP478P48MP48cP48sP49MP49cP4\
-9sP498P4+MP3+MP1+MP0+MPz+MPy+MPw+MPv+MPu+MPt+MPr+MPq+MPp+MPo\
-+MPm+MPl+MPk+MPi+MPh+MPg+MPf+MPd+MPc+MPb+MPa+MPY+MPX+MPW+MPV\
-+MPT+MPS+MPR+MPQ+MPO+MPN+MPM+MPL+MPJ+MPI+MPH+MPG+MPE+MPD+MPD\
-+MPD+MXD+MbD+MfD+MjD+MrD+MvD+MzD+M7D+M/D+NDD+NHD+NPD+NTD+NXD\
-+NbD+NjD+NnD+NrD+NvD+N3D+N7D+N/D+ODD+OLD+OPD+OTD+OXD+OfD+OjD\
-+OnD+OrD+OzD+O3D+O7D+PDD+PHD+PLD+PPD+PXD+PbD+PfD+PjD9/jD9vjD\
-9fjD8/jD8vjD8fjD8PjD7vjD7fjD7PjD6vjD6fjD6PjD5/jD5fjD5PjD4/jD\
-4vjD4PjD3/jD3vjD3fjD2/jD2vjD2fjD2PjD1vjD1fjD1PjD0/jD0fjD0PjD\
-z/jDzvjDzPjDy/jDyvjDyPjDx/jDxvjDxfjDw/jDw/jEw/jGw/jHw/jIw/jJ\
-w/jLw/jMw/jNw/jOw/jQw/jRw/jSw/jTw/jVw/jWw/jXw/jYw/jaw/jbw/jc\
-w/jdw/jfw/jgw/jhw/jiw/jkw/jlw/jmw/jow/jpw/jqw/jrw/jtw/juw/jv\
-w/jww/jyw/jzw/j0w/j1w/j3w/j4w/j4w/f4w/b4w/X4w/T4w/L4w/H4w/D4\
-w+/4w+34w+z4w+v4w+r4w+j4w+f4w+b4w+X4w+P4w+L4w+H4w+D4w974w934\
-w9z4w9v4w9n4w9j4w9f4w9X4w9T4w9P4w9L4w9D4w8/4w874w834w8v4w8r4\
-w8n4w8j4w8b4w8X4w8T4zMz4zcz4zsz4z8z40Mz40cz40sz408z41Mz41cz4\
-1sz418z42Mz42cz42sz428z43Mz43cz43sz438z44cz44sz448z45Mz45cz4\
-5sz458z46Mz46cz46sz468z47Mz47cz47sz478z48Mz48cz48sz488z49Mz4\
-9sz498z4+Mz4+Mz3+Mz2+Mz1+Mz0+Mzz+Mzy+Mzx+Mzw+Mzv+Mzt+Mzs+Mzr\
-+Mzq+Mzp+Mzo+Mzn+Mzm+Mzl+Mzk+Mzj+Mzi+Mzh+Mzg+Mzf+Mze+Mzd+Mzc\
-+Mzb+Mza+MzY+MzX+MzW+MzV+MzU+MzT+MzS+MzR+MzQ+MzP+MzO+MzN+MzM\
-+MzM+MzM+M3M+M7M+M/M+NDM+NHM+NPM+NTM+NXM+NbM+NfM+NjM+NnM+NrM\
-+NvM+NzM+N3M+N7M+N/M+ODM+OHM+OLM+OPM+OTM+OXM+ObM+OjM+OnM+OrM\
-+OvM+OzM+O3M+O7M+O/M+PDM+PHM+PLM+PPM+PTM+PXM+PbM+PfM+PjM9/jM\
-9vjM9fjM9PjM8/jM8vjM8fjM8PjM7/jM7vjM7fjM7PjM6/jM6vjM6fjM6PjM\
-5vjM5fjM5PjM4/jM4vjM4fjM4PjM3/jM3vjM3fjM3PjM2/jM2vjM2fjM2PjM\
-1/jM1vjM1fjM1PjM0/jM0fjM0PjMz/jMzvjMzfjMzPjMzPjNzPjOzPjPzPjQ\
-zPjRzPjSzPjTzPjUzPjVzPjWzPjXzPjYzPjazPjbzPjczPjdzPjezPjfzPjg\
-zPjhzPjizPjjzPjkzPjlzPjmzPjnzPjozPjpzPjqzPjrzPjszPjtzPjvzPjw\
-zPjxzPjyzPjzzPj0zPj1zPj2zPj3zPj4zPj4zPj4zPf4zPb4zPT4zPP4zPL4\
-zPH4zPD4zO/4zO74zO34zOz4zOv4zOr4zOn4zOj4zOf4zOb4zOX4zOT4zOP4\
-zOL4zOH4zN/4zN74zN34zNz4zNv4zNr4zNn4zNj4zNf4zNb4zNX4zNT4zNP4\
-zNL4zNH4zND4zM/4zM74zM341dX41dX41tX419X42NX42dX42tX42tX429X4\
-3NX43dX43tX439X439X44NX44dX44tX449X45NX45NX45dX45tX459X46NX4\
-6dX46dX46tX469X47NX47dX47tX479X479X48NX48dX48tX489X49NX49NX4\
-9dX49tX499X4+NX4+NX3+NX2+NX2+NX1+NX0+NXz+NXy+NXx+NXw+NXw+NXv\
-+NXu+NXt+NXs+NXr+NXr+NXq+NXp+NXo+NXn+NXm+NXm+NXl+NXk+NXj+NXi\
-+NXh+NXh+NXg+NXf+NXe+NXd+NXc+NXb+NXb+NXa+NXZ+NXY+NXX+NXW+NXW\
-+NXV+NXV+NXV+NbV+NfV+NjV+NjV+NnV+NrV+NvV+NzV+N3V+N3V+N7V+N/V\
-+ODV+OHV+OLV+OLV+OPV+OTV+OXV+ObV+OfV+OjV+OjV+OnV+OrV+OvV+OzV\
-+O3V+O3V+O7V+O/V+PDV+PHV+PLV+PLV+PPV+PTV+PXV+PbV+PfV+PfV+PjV\
-9/jV9/jV9vjV9fjV9PjV8/jV8vjV8vjV8fjV8PjV7/jV7vjV7fjV7fjV7PjV\
-6/jV6vjV6fjV6PjV6PjV5/jV5vjV5fjV5PjV4/jV4vjV4vjV4fjV4PjV3/jV\
-3vjV3fjV3fjV3PjV2/jV2vjV2fjV2PjV2PjV1/jV1vjV1fjV1fjW1fjW1fjX\
-1fjY1fjZ1fja1fjb1fjb1fjc1fjd1fje1fjf1fjg1fjh1fjh1fji1fjj1fjk\
-1fjl1fjm1fjm1fjn1fjo1fjp1fjq1fjr1fjr1fjs1fjt1fju1fjv1fjw1fjw\
-1fjx1fjy1fjz1fj01fj11fj21fj21fj31fj41fj41fj41ff41fb41fX41fT4\
-1fT41fP41fL41fH41fD41e/41e/41e741e341ez41ev41er41en41en41ej4\
-1ef41eb41eX41eT41eT41eP41eL41eH41eD41d/41d/41d741d341dz41dv4\
-1dr41dr41dn41dj41df41db41dX43d343t34393439344N344d344d344t34\
-4t3449345N345N345d345t345t3459346N346N346d346d346t3469346934\
-7N347d347d347t347t3479348N348N348d348t348t3489349N349N349d34\
-9d349t3499349934+N34+N33+N33+N32+N32+N31+N30+N30+N3z+N3y+N3y\
-+N3x+N3x+N3w+N3v+N3v+N3u+N3t+N3t+N3s+N3s+N3r+N3q+N3q+N3p+N3o\
-+N3o+N3n+N3m+N3m+N3l+N3l+N3k+N3j+N3j+N3i+N3h+N3h+N3g+N3g+N3f\
-+N3e+N3e+N3d+N7d+N/d+N/d+ODd+ODd+OHd+OLd+OLd+OPd+OTd+OTd+OXd\
-+OXd+Obd+Ofd+Ofd+Ojd+Ond+Ond+Ord+Ord+Ovd+Ozd+Ozd+O3d+O7d+O7d\
-+O/d+PDd+PDd+PHd+PHd+PLd+PPd+PPd+PTd+PXd+PXd+Pbd+Pbd+Pfd+Pjd\
-+Pjd+Pjd9/jd9vjd9vjd9fjd9fjd9Pjd8/jd8/jd8vjd8fjd8fjd8Pjd8Pjd\
-7/jd7vjd7vjd7fjd7Pjd7Pjd6/jd6vjd6vjd6fjd6fjd6Pjd5/jd5/jd5vjd\
-5fjd5fjd5Pjd5Pjd4/jd4vjd4vjd4fjd4Pjd4Pjd3/jd3/jd3vje3fje3fjf\
-3fjg3fjg3fjh3fjh3fji3fjj3fjj3fjk3fjl3fjl3fjm3fjm3fjn3fjo3fjo\
-3fjp3fjq3fjq3fjr3fjs3fjs3fjt3fjt3fju3fjv3fjv3fjw3fjx3fjx3fjy\
-3fjy3fjz3fj03fj03fj13fj23fj23fj33fj33fj43fj43fj43ff43ff43fb4\
-3fX43fX43fT43fT43fP43fL43fL43fH43fD43fD43e/43e743e743e343e34\
-3ez43ev43ev43er43en43en43ej43ej43ef43eb43eb43eX43eT43eT43eP4\
-3eL43eL43eH43eH43eD43d/43d/43d745ub45+b45+b46Ob46Ob46eb46eb4\
-6eb46ub46ub46+b46+b46+b47Ob47Ob47eb47eb47ub47ub47ub47+b47+b4\
-8Ob48Ob48Ob48eb48eb48ub48ub48+b48+b48+b49Ob49Ob49eb49eb49ub4\
-9ub49ub49+b49+b4+Ob4+Ob4+Ob4+Ob3+Ob3+Ob3+Ob2+Ob2+Ob1+Ob1+Ob0\
-+Ob0+Ob0+Obz+Obz+Oby+Oby+Obx+Obx+Obx+Obw+Obw+Obv+Obv+Obv+Obu\
-+Obu+Obt+Obt+Obs+Obs+Obs+Obr+Obr+Obq+Obq+Obp+Obp+Obp+Obo+Obo\
-+Obn+Obn+Obn+Obm+Ofm+Ofm+Ojm+Ojm+Ojm+Onm+Onm+Orm+Orm+Orm+Ovm\
-+Ovm+Ozm+Ozm+O3m+O3m+O3m+O7m+O7m+O/m+O/m+PDm+PDm+PDm+PHm+PHm\
-+PLm+PLm+PLm+PPm+PPm+PTm+PTm+PXm+PXm+PXm+Pbm+Pbm+Pfm+Pfm+Pfm\
-+Pjm+Pjm+Pjm9/jm9/jm9/jm9vjm9vjm9fjm9fjm9fjm9Pjm9Pjm8/jm8/jm\
-8vjm8vjm8vjm8fjm8fjm8Pjm8Pjm8Pjm7/jm7/jm7vjm7vjm7fjm7fjm7fjm\
-7Pjm7Pjm6/jm6/jm6vjm6vjm6vjm6fjm6fjm6Pjm6Pjm6Pjm5/jm5/jn5vjn\
-5vjn5vjo5vjo5vjp5vjp5vjp5vjq5vjq5vjr5vjr5vjs5vjs5vjs5vjt5vjt\
-5vju5vju5vjv5vjv5vjv5vjw5vjw5vjx5vjx5vjx5vjy5vjy5vjz5vjz5vj0\
-5vj05vj05vj15vj15vj25vj25vj35vj35vj35vj45vj45vj45vj45vj45vf4\
-5vf45vb45vb45vb45vX45vX45vT45vT45vP45vP45vP45vL45vL45vH45vH4\
-5vD45vD45vD45u/45u/45u745u745u745u345u345uz45uz45uv45uv45uv4\
-5ur45ur45un45un45un45uj45uj45uf45uf47+/48O/48O/48O/48O/48O/4\
-8e/48e/48e/48e/48e/48u/48u/48u/48u/48+/48+/48+/48+/48+/49O/4\
-9O/49O/49O/49O/49e/49e/49e/49e/49e/49u/49u/49u/49u/49+/49+/4\
-9+/49+/49+/4+O/4+O/4+O/4+O/4+O/4+O/4+O/4+O/3+O/3+O/3+O/3+O/3\
-+O/2+O/2+O/2+O/2+O/2+O/1+O/1+O/1+O/1+O/0+O/0+O/0+O/0+O/0+O/z\
-+O/z+O/z+O/z+O/z+O/y+O/y+O/y+O/y+O/y+O/x+O/x+O/x+O/x+O/w+O/w\
-+O/w+O/w+O/w+O/v+O/v+PDv+PDv+PDv+PDv+PDv+PHv+PHv+PHv+PHv+PHv\
-+PLv+PLv+PLv+PLv+PLv+PPv+PPv+PPv+PPv+PTv+PTv+PTv+PTv+PTv+PXv\
-+PXv+PXv+PXv+PXv+Pbv+Pbv+Pbv+Pbv+Pbv+Pfv+Pfv+Pfv+Pfv+Pfv+Pjv\
-+Pjv+Pjv+Pjv+Pjv+Pjv+Pjv9/jv9/jv9/jv9/jv9/jv9vjv9vjv9vjv9vjv\
-9vjv9fjv9fjv9fjv9fjv9fjv9Pjv9Pjv9Pjv9Pjv9Pjv8/jv8/jv8/jv8/jv\
-8vjv8vjv8vjv8vjv8vjv8fjv8fjv8fjv8fjv8fjv8Pjv8Pjv8Pjv8Pjv8Pjv\
-7/jw7/jw7/jw7/jw7/jw7/jx7/jx7/jx7/jx7/jy7/jy7/jy7/jy7/jy7/jz\
-7/jz7/jz7/jz7/jz7/j07/j07/j07/j07/j07/j17/j17/j17/j17/j27/j2\
-7/j27/j27/j27/j37/j37/j37/j37/j37/j47/j47/j47/j47/j47/j47/j4\
-7/j47/j47/f47/f47/f47/f47/f47/b47/b47/b47/b47/X47/X47/X47/X4\
-7/X47/T47/T47/T47/T47/T47/P47/P47/P47/P47/P47/L47/L47/L47/L4\
-7/H47/H47/H47/H47/H47/D47/D47/D47/D47/A=";
-
-
-    rtext_new(glist, (t_text *)x);
-    tagRoot = rtext_gettag(glist_findrtext(glist,(t_text *)x));
-
-    //post("%s",tagRoot);
-
-    COLORGRID_SYS_VGUI3("image create photo img%x -data [base64::decode {%s}]\n",x,fdata);
-    
-    COLORGRID_SYS_VGUI6(".x%x.c create image %d %d -image img%x -tags %sS\n", canvas,text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),x,tagRoot);
-    COLORGRID_SYS_VGUI5(".x%x.c coords %sS %d %d \n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix + 128, x->x_obj.te_ypix + 25);
-				  
-    COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -tags %so0\n",
-	     canvas, x->x_obj.te_xpix, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+7, x->x_obj.te_ypix + x->x_height+2,
-	     tagRoot);
-    COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -tags %so1\n",
-	     canvas, x->x_obj.te_xpix+x->x_width-7, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width, x->x_obj.te_ypix + x->x_height+2,
-	     tagRoot);
-    COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -tags %so2\n",
-	     canvas, x->x_obj.te_xpix+x->x_width-131, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width-126, x->x_obj.te_ypix + x->x_height+2,
-	     tagRoot);
-
-    if ( x->x_colorgrid ) 
-    {
-       int xlpos = x->x_obj.te_xpix+x->x_width/x->x_xlines;
-       int ylpos = x->x_obj.te_ypix+x->x_height/x->x_ylines;
-       int xcount = 1;
-       int ycount = 1;
-       while ( xlpos < x->x_obj.te_xpix+x->x_width )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c create line %d %d %d %d -fill #FFFFFF -tags %xLINE%d%d\n",
-	     canvas, xlpos, x->x_obj.te_ypix,
-	     xlpos, x->x_obj.te_ypix+x->x_height,
-	     x, xcount, 0 );
-         xlpos+=x->x_width/x->x_xlines;
-         xcount++;
-       }
-       while ( ylpos < x->x_obj.te_ypix+x->x_height )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c create line %d %d %d %d -fill #FFFFFF -tags %xLINE%d%d\n",
-	     canvas, x->x_obj.te_xpix, ylpos,
-	     x->x_obj.te_xpix+x->x_width, ylpos,
-	     x, 0, ycount);
-         ylpos+=x->x_height/x->x_ylines;
-         ycount++;
-       }
-    }
-    canvas_fixlinesfor( canvas, (t_text*)x );
-}
-
-static void colorgrid_draw_move(t_colorgrid *x, t_glist *glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    char *tagRoot;
-
-    tagRoot = rtext_gettag(glist_findrtext(glist,(t_text *)x)); 
-    COLORGRID_SYS_VGUI7(".x%x.c coords %xCOLORGRID %d %d %d %d\n",
-	     canvas, x,
-	     x->x_obj.te_xpix, x->x_obj.te_ypix,
-	     x->x_obj.te_xpix+x->x_width, x->x_obj.te_ypix+x->x_height);
-    COLORGRID_SYS_VGUI5(".x%x.c coords %sS %d %d \n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix + 128, x->x_obj.te_ypix + 25);
-    COLORGRID_SYS_VGUI7(".x%x.c coords %so0 %d %d %d %d\n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+7, x->x_obj.te_ypix + x->x_height+2 );
-    COLORGRID_SYS_VGUI7(".x%x.c coords %so1 %d %d %d %d\n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix+x->x_width-7, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width, x->x_obj.te_ypix + x->x_height+2 );
-    COLORGRID_SYS_VGUI7(".x%x.c coords %so2 %d %d %d %d\n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix+x->x_width-131, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width-126, x->x_obj.te_ypix + x->x_height+2 );
-    if ( x->x_point ) 
-    {
-       colorgrid_draw_update(x, glist);
-    }
-    if ( x->x_colorgrid ) 
-    {
-       int xlpos = x->x_obj.te_xpix+x->x_width/x->x_xlines;
-       int ylpos = x->x_obj.te_ypix+x->x_height/x->x_ylines;
-       int xcount = 1;
-       int ycount = 1;
-       while ( xlpos < x->x_obj.te_xpix+x->x_width )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c coords %xLINE%d%d %d %d %d %d\n",
-	     canvas, x, xcount, 0, xlpos, x->x_obj.te_ypix,
-	     xlpos, x->x_obj.te_ypix + x->x_height);
-         xlpos+=x->x_width/x->x_xlines;
-         xcount++;
-       }
-       while ( ylpos < x->x_obj.te_ypix+x->x_height )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c coords %xLINE%d%d %d %d %d %d\n",
-	     canvas, x, 0, ycount, x->x_obj.te_xpix, ylpos,
-	     x->x_obj.te_xpix + x->x_width, ylpos);
-         ylpos+=x->x_height/x->x_ylines;
-         ycount++;
-       }
-    }
-    canvas_fixlinesfor( canvas, (t_text*)x );
-}
-
-static void colorgrid_draw_erase(t_colorgrid* x,t_glist* glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    int i;
-    char *tagRoot;
-
-    tagRoot = rtext_gettag(glist_findrtext(glist,(t_text *)x));
-    COLORGRID_SYS_VGUI3(".x%x.c delete %xCOLORGRID\n", canvas, x);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %sS\n", canvas, tagRoot);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %so0\n", canvas, tagRoot);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %so1\n", canvas, tagRoot);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %so2\n", canvas, tagRoot);
-    if (x->x_colorgrid)  
-    {
-       for (i=1; i<x->x_xlines; i++ )
-       {
-           COLORGRID_SYS_VGUI4(".x%x.c delete %xLINE%d0\n", canvas, x, i);
-       }
-       for (i=1; i<x->x_ylines; i++ )
-       {
-           COLORGRID_SYS_VGUI4(".x%x.c delete %xLINE0%d\n", canvas, x, i);
-       }
-    }
-    if (x->x_point)  
-    {
-          COLORGRID_SYS_VGUI3(".x%x.c delete %xPOINT\n", canvas, x);
-          x->x_point = 0;
-    }
-    rtext_free(glist_findrtext(glist, (t_text *)x));
-}
-
-static void colorgrid_draw_select(t_colorgrid* x,t_glist* glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-
-    if(x->x_selected)
-    {
-	pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* sets the item in blue */
-	COLORGRID_SYS_VGUI3(".x%x.c itemconfigure %xCOLORGRID -outline #0000FF\n", canvas, x);
-    }
-    else
-    {
-	pd_unbind(&x->x_obj.ob_pd, x->x_name);
-	COLORGRID_SYS_VGUI3(".x%x.c itemconfigure %xCOLORGRID -outline #000000\n", canvas, x);
-    }
-}
-
-static void colorgrid_hsv2rgb(t_float hue, t_float saturation, t_float value, t_float *red, t_float *green, t_float *blue)
-{
-   t_float i=0, f=0, p=0, q=0, t=0;
-	
-   if (saturation == 0) {
-       *red = value;
-       *green = value;
-       *blue = value;
-   } else {
-   if (hue == 6) hue = 0;
-   i = (int)hue ;  /* the integer part of hue */
-   f = hue - i;
-   p = value * (1 - saturation);
-   q = value * (1 - (saturation * f));
-   t = value * (1 - (saturation * (1 - f)));
-   switch ((int)i) {
-           case 0:
-            *red = value;
-            *green = t;
-            *blue = p;
-            break;
-           case 1:
-            *red = q;
-            *green = value;
-            *blue = p;
-            break;
-           case 2:
-            *red = p;
-            *green = value;
-            *blue = t;
-            break;
-           case 3:
-            *red = p;
-            *green = q;
-            *blue = value;
-            break;
-           case 4:
-            *red = t;
-            *green = p;
-            *blue = value;
-	    break;
-	   case 5:
-	    *red = value;
-            *green = p;
-            *blue = q;
-            break;
-   } 
-   }
-}
-
-static void colorgrid_output_current(t_colorgrid* x)
-{
-  t_float ox=0, oy=0, hue, saturation, value, red=0, green=0, blue=0;
-
-/* These values need to be the same as those that produced the spectrum image:*/
-
-  t_float box_x = 256;
-  t_float box_y = 25;
-
-  t_float min_value = 0.3;
-  t_float max_value = 1.0;
-  t_float value_inc = (max_value - min_value) / box_y;
-
-  t_float min_hue = 0;
-  t_float max_hue = 6;
-  t_float hue_inc = (max_hue - min_hue) / box_x;
-
-  t_float max_saturation = 0.9;
-  t_float min_saturation = 0.0;
-  t_float saturation_inc = (max_saturation - min_saturation) / box_y;
-
-  t_float xvalue, yvalue, rvalue, gvalue, bvalue;
-  t_float xmodstep, ymodstep;
-
-  xvalue = x->x_min + (x->x_current - x->x_obj.te_xpix) * (x->x_max-x->x_min) / x->x_width ;
-  if (xvalue < x->x_min ) xvalue = x->x_min;
-  if (xvalue > x->x_max ) xvalue = x->x_max;
-  xmodstep = ((float)((int)(xvalue*10000) % (int)(x->x_xstep*10000))/10000.);
-  xvalue = xvalue - xmodstep;
-  yvalue = x->y_max - (x->y_current - x->x_obj.te_ypix ) * (x->y_max-x->y_min) / x->x_height ;
-  if (yvalue < x->y_min ) yvalue = x->y_min;
-  if (yvalue > x->y_max ) yvalue = x->y_max;
-  ymodstep = ((float)((int)(yvalue*10000) % (int)(x->x_ystep*10000))/10000.);
-  yvalue = yvalue - ymodstep;
-  yvalue = 50 - yvalue;
-
-  /* Use the coordinates only if they are non-zero: */
-
-  if ((xvalue >= 0) && (yvalue >= 0)) {
-    ox = xvalue;
-    oy = yvalue;
-  } else {
-    xvalue = ox;
-    yvalue = oy;
-  } 
-
-  if ((yvalue != 0)&&(yvalue!=50))
-  {
-   /* Calculate HSV based on given coordinates and convert to RGB: */
-   hue = hue_inc * xvalue;
-   if (yvalue <= box_y) {
-    saturation = max_saturation;
-    value = min_value + (value_inc * yvalue);
-   } else {
-    value = max_value - value_inc;
-    saturation = max_saturation - (saturation_inc * (yvalue - box_y));
-   } 
-
-   colorgrid_hsv2rgb(hue, saturation, value, &red, &green, &blue);
- } else {
-  if (yvalue == 0) {
-    red     = 0;
-    green   = 0;
-    blue    = 0;
-  } else {
-    red     = 1;
-    green   = 1;
-    blue    = 1;
-  }
- }
-  
- /* The RGB values are returned in the interval [0..1] so we
-    need to multiply by 256 to get "normal" color values.*/
-
-  red     = red * 256;
-  green   = green * 256;
-  blue    = blue * 256;
-
-    outlet_float( x->x_xoutlet, red );
-    outlet_float( x->x_youtlet, green );
-    outlet_float( x->x_zoutlet, blue );
-}
-
-/* ------------------------ colorgrid widgetbehaviour----------------------------- */
-
-
-static void colorgrid_getrect(t_gobj *z, t_glist *owner,
-			    int *xp1, int *yp1, int *xp2, int *yp2)
-{
-   t_colorgrid* x = (t_colorgrid*)z;
-
-   *xp1 = x->x_obj.te_xpix;
-   *yp1 = x->x_obj.te_ypix;
-   *xp2 = x->x_obj.te_xpix+x->x_width;
-   *yp2 = x->x_obj.te_ypix+x->x_height;
-}
-
-static void colorgrid_save(t_gobj *z, t_binbuf *b)
-{
-   t_colorgrid *x = (t_colorgrid *)z;
-
-   // post( "saving colorgrid : %s", x->x_name->s_name );
-   binbuf_addv(b, "ssiissiffiffiffiiff", gensym("#X"),gensym("obj"),
-		(t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,
-		gensym("colorgrid"), x->x_name, x->x_width, x->x_min,
-		x->x_max, x->x_height,
-                x->y_min, x->y_max,
-                x->x_colorgrid, x->x_xstep, 
-                x->x_ystep, x->x_xlines, x->x_ylines, 
-                x->x_current, x->y_current );
-   binbuf_addv(b, ";");
-}
-
-static void colorgrid_properties(t_gobj *z, t_glist *owner)
-{
-   char buf[800];
-   t_colorgrid *x=(t_colorgrid *)z;
-
-   sprintf(buf, "pdtk_colorgrid_dialog %%s %d %d %d\n",
-                 x->x_xlines, x->x_ylines, x->x_colorgrid );
-   // post("colorgrid_properties : %s", buf );
-   gfxstub_new(&x->x_obj.ob_pd, x, buf);
-}
-
-static void colorgrid_select(t_gobj *z, t_glist *glist, int selected)
-{
-   t_colorgrid *x = (t_colorgrid *)z;
-
-   x->x_selected = selected;
-   colorgrid_draw_select( x, glist );
-}
-
-static void colorgrid_vis(t_gobj *z, t_glist *glist, int vis)
-{
-   t_colorgrid *x = (t_colorgrid *)z;
-
-   if (vis)
-   {
-      colorgrid_draw_new( x, glist );
-      colorgrid_draw_update( x, glist );
-      colorgrid_output_current(x);
-   }
-   else
-   {
-      colorgrid_draw_erase( x, glist );
-   }
-}
-
-static void colorgrid_dialog(t_colorgrid *x, t_symbol *s, int argc, t_atom *argv)
-{
-   if ( !x ) {
-     post( "colorgrid : error :tried to set properties on an unexisting object" );
-   }
-   if ( argv[0].a_type != A_FLOAT || argv[1].a_type != A_FLOAT ||
-           argv[2].a_type != A_FLOAT ) 
-   { 
-      post( "colorgrid : wrong arguments" );
-      return;
-   }
-   x->x_xlines = argv[0].a_w.w_float;
-   x->x_ylines = argv[1].a_w.w_float;
-   x->x_colorgrid = argv[2].a_w.w_float;
-   colorgrid_draw_erase(x, x->x_glist);
-   colorgrid_draw_new(x, x->x_glist);
-}
-
-static void colorgrid_delete(t_gobj *z, t_glist *glist)
-{
-    canvas_deletelinesfor( glist_getcanvas(glist), (t_text *)z);
-}
-
-static void colorgrid_displace(t_gobj *z, t_glist *glist, int dx, int dy)
-{
-    t_colorgrid *x = (t_colorgrid *)z;
-    int xold = x->x_obj.te_xpix;
-    int yold = x->x_obj.te_ypix;
-
-    // post( "colorgrid_displace dx=%d dy=%d", dx, dy );
-
-    x->x_obj.te_xpix += dx;
-    x->x_current += dx;
-    x->x_obj.te_ypix += dy;
-    x->y_current += dy;
-    if(xold != x->x_obj.te_xpix || yold != x->x_obj.te_ypix)
-    {
-	colorgrid_draw_move(x, x->x_glist);
-    }
-}
-
-static void colorgrid_motion(t_colorgrid *x, t_floatarg dx, t_floatarg dy)
-{
-    int xold = x->x_current;
-    int yold = x->y_current;
-
-    // post( "colorgrid_motion dx=%f dy=%f", dx, dy );
-
-    x->x_current += dx;
-    x->y_current += dy;
-    if(xold != x->x_current || yold != x->y_current)
-    {
-        colorgrid_output_current(x);
-	colorgrid_draw_update(x, x->x_glist);
-    }
-}
-
-static int colorgrid_click(t_gobj *z, struct _glist *glist,
-			    int xpix, int ypix, int shift, int alt, int dbl, int doit)
-{
-    t_colorgrid* x = (t_colorgrid *)z;
-
-    // post( "colorgrid_click doit=%d x=%d y=%d", doit, xpix, ypix );
-    if ( doit) 
-    {
-      x->x_current = xpix;
-      x->y_current = ypix;
-      colorgrid_output_current(x);
-      colorgrid_draw_update(x, glist);
-      glist_grab(glist, &x->x_obj.te_g, (t_glistmotionfn)colorgrid_motion,
-	       0, xpix, ypix);
-    }
-    return (1);
-}
-
-static void colorgrid_goto(t_colorgrid *x, t_floatarg newx, t_floatarg newy)
-{
-    int xold = x->x_current;
-    int yold = x->y_current;
-
-    if ( newx > x->x_width-1 ) newx = x->x_width-1;
-    if ( newx < 0 ) newx = 0;
-    if ( newy > x->x_height-1 ) newy = x->x_height-1;
-    if ( newy < 0 ) newy = 0;
-
-    // post( "colorgrid_set x=%f y=%f", newx, newy );
-
-    x->x_current = newx + x->x_obj.te_xpix;
-    x->y_current = newy + x->x_obj.te_ypix;
-    if(xold != x->x_current || yold != x->y_current)
-    {
-        colorgrid_output_current(x);
-        colorgrid_draw_update(x, x->x_glist);
-    }
-}
-
-static void colorgrid_xgoto(t_colorgrid *x, t_floatarg newx, t_floatarg newy)
-{
-    int xold = x->x_current;
-    int yold = x->y_current;
-
-    if ( newx > x->x_width-1 ) newx = x->x_width-1;
-    if ( newx < 0 ) newx = 0;
-    if ( newy > x->x_height-1 ) newy = x->x_height-1;
-    if ( newy < 0 ) newy = 0;
-
-    // post( "colorgrid_set x=%f y=%f", newx, newy );
-
-    x->x_current = newx + x->x_obj.te_xpix;
-    x->y_current = newy + x->x_obj.te_ypix;
-    if(xold != x->x_current || yold != x->y_current)
-    {
-        colorgrid_draw_update(x, x->x_glist);
-    }
-}
-
-static void colorgrid_bang(t_colorgrid *x) {
-  colorgrid_output_current(x);
-}
-
-static t_colorgrid *colorgrid_new(t_symbol *s, int argc, t_atom *argv)
-{
-    int i, zz;
-    t_colorgrid *x;
-    t_pd *x2;
-    char *str;
- 
-    // post( "colorgrid_new : create : %s argc =%d", s->s_name, argc );
-
-    x = (t_colorgrid *)pd_new(colorgrid_class);
-    // new colorgrid created from the gui 
-    if ( argc != 0 )
-    {
-      if ( argc != 14 )
-      {
-        post( "colorgrid : error in the number of arguments ( %d instead of 14 )", argc );
-        return NULL;
-      }
-      if ( argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT ||
-        argv[2].a_type != A_FLOAT || argv[3].a_type != A_FLOAT ||
-        argv[4].a_type != A_FLOAT || argv[5].a_type != A_FLOAT ||
-        argv[6].a_type != A_FLOAT || argv[7].a_type != A_FLOAT || 
-        argv[8].a_type != A_FLOAT || argv[9].a_type != A_FLOAT || 
-        argv[10].a_type != A_FLOAT || argv[11].a_type != A_FLOAT || 
-        argv[12].a_type != A_FLOAT || argv[13].a_type != A_FLOAT ) {
-        post( "colorgrid : wrong arguments" );
-        return NULL;
-      }
-
-      // update colorgrid count
-      if (!strncmp((str = argv[0].a_w.w_symbol->s_name), "colorgrid", 5)
-    	 && (zz = atoi(str + 5)) > colorgridcount) 
-      {
-        colorgridcount = zz;
-      }
-      x->x_name = argv[0].a_w.w_symbol;
-      pd_bind(&x->x_obj.ob_pd, x->x_name);
-      x->x_width = argv[1].a_w.w_float;
-      x->x_min = argv[2].a_w.w_float;
-      x->x_max = argv[3].a_w.w_float;
-      x->x_height = argv[4].a_w.w_float;
-      x->y_min = argv[5].a_w.w_float;
-      x->y_max = argv[6].a_w.w_float;
-      x->x_colorgrid = argv[7].a_w.w_float;
-      x->x_xstep = argv[8].a_w.w_float;
-      x->x_ystep = argv[9].a_w.w_float;
-      x->x_xlines = argv[10].a_w.w_float;
-      x->x_ylines = argv[11].a_w.w_float;
-      x->x_current = argv[12].a_w.w_float;
-      x->y_current = argv[13].a_w.w_float;
-      x->x_point = 1;
-    }
-    else
-    {
-      char buf[40];
-
-      sprintf(buf, "colorgrid%d", ++colorgridcount);
-      s = gensym(buf);    	
-
-      x->x_name = s;
-      pd_bind(&x->x_obj.ob_pd, x->x_name);
-
-      x->x_width = DEFAULT_COLORGRID_WIDTH;
-      x->x_min = 0;
-      x->x_max = DEFAULT_COLORGRID_WIDTH;
-      x->x_height = DEFAULT_COLORGRID_HEIGHT;
-      x->y_min = 0;
-      x->y_max = DEFAULT_COLORGRID_HEIGHT;
-      x->x_colorgrid = 0;	
-      x->x_xstep = 1.0;	
-      x->x_ystep = 1.0;	
-      x->x_xlines = DEFAULT_COLORGRID_NBLINES;	
-      x->x_ylines = DEFAULT_COLORGRID_NBLINES;	
-      x->x_current = 0;
-      x->y_current = 0;	
-
-    }
-
-    // common fields for new and restored colorgrids
-    x->x_point = 0;	
-    x->x_selected = 0;	
-    x->x_glist = (t_glist *) canvas_getcurrent();
-    x->x_xoutlet = outlet_new(&x->x_obj, &s_float ); 
-    x->x_youtlet = outlet_new(&x->x_obj, &s_float ); 
-    x->x_zoutlet = outlet_new(&x->x_obj, &s_float ); 
-
-    // post( "colorgrid_new name : %s width: %d height : %d", x->x_name->s_name, x->x_width, x->x_height );
-
-    return (x);
-}
-
-static void colorgrid_free(t_colorgrid *x)
-{
-    post( "colorgrid~: freeing ressources [NULL]" );
-}
-
-void colorgrid_setup(void)
-{
-	// ########### colorgrid procedures -- ydegoyon@free.fr #########
-	// package require Img
-	sys_gui("package require base64\n");
-	sys_gui("proc colorgrid_apply {id} {\n");
-	// strip "." from the TK id to make a variable name suffix
-	sys_gui("set vid [string trimleft $id .]\n");
-	// for each variable, make a local variable to hold its name...
-	sys_gui("set var_graph_colorgrid [concat graph_colorgrid_$vid]\n");
-	sys_gui("global $var_graph_colorgrid\n");
-	sys_gui("set var_graph_xlines [concat graph_xlines_$vid]\n");
-	sys_gui("global $var_graph_xlines\n");
-	sys_gui("set var_graph_ylines [concat graph_ylines_$vid]\n");
-	sys_gui("global $var_graph_ylines\n");
-	sys_gui("set cmd [concat $id dialog [eval concat $$var_graph_xlines] [eval concat $$var_graph_ylines] [eval concat $$var_graph_colorgrid] \\;]\n");
-	// puts stderr $cmd
-	sys_gui("pd $cmd\n");
-	sys_gui("}\n");
-	sys_gui("proc colorgrid_cancel {id} {\n");
-	sys_gui("set cmd [concat $id cancel \\;]\n");
-	// puts stderr $cmd
-	sys_gui("pd $cmd\n");
-	sys_gui("}\n");
-	sys_gui("proc colorgrid_ok {id} {\n");
-	sys_gui("colorgrid_apply $id\n");
-	sys_gui("colorgrid_cancel $id\n");
-	sys_gui("}\n");
-	sys_gui("proc pdtk_colorgrid_dialog {id xlines ylines colorgrid} {\n");
-	sys_gui("set vid [string trimleft $id .]\n");
-	sys_gui("set var_graph_colorgrid [concat graph_colorgrid_$vid]\n");
-	sys_gui("global $var_graph_colorgrid\n");
-	sys_gui("set var_graph_xlines [concat graph_xlines_$vid]\n");
-	sys_gui("global $var_graph_xlines\n");
-	sys_gui("set var_graph_ylines [concat graph_ylines_$vid]\n");
-	sys_gui("global $var_graph_ylines\n");
-	sys_gui("set $var_graph_colorgrid $colorgrid\n");
-	sys_gui("set $var_graph_xlines $xlines\n");
-	sys_gui("set $var_graph_ylines $ylines\n");
-	sys_gui("toplevel $id -class [winfo class .]\n");
-	sys_gui("wm title $id {colorgrid}\n");
-	sys_gui("wm protocol $id WM_DELETE_WINDOW [concat colorgrid_cancel $id]\n");
-	sys_gui("label $id.label -text {COLORGRID PROPERTIES}\n");
-	sys_gui("pack $id.label -side top\n");
-	sys_gui("frame $id.buttonframe\n");
-	sys_gui("pack $id.buttonframe -side bottom -fill x -pady 2m\n");
-	sys_gui("button $id.buttonframe.cancel -text {Cancel} -command \"colorgrid_cancel $id\"\n");
-	sys_gui("button $id.buttonframe.apply -text {Apply} -command \"colorgrid_apply $id\"\n");
-	sys_gui("button $id.buttonframe.ok -text {OK} -command \"colorgrid_ok $id\"\n");
-	sys_gui("pack $id.buttonframe.cancel -side left -expand 1\n");
-	sys_gui("pack $id.buttonframe.apply -side left -expand 1\n");
-	sys_gui("pack $id.buttonframe.ok -side left -expand 1\n");
-	sys_gui("frame $id.42rangef\n");
-	sys_gui("pack $id.42rangef -side top\n");
-	sys_gui("label $id.42rangef.lxlines -text \"X sections :\"\n");
-	sys_gui("entry $id.42rangef.xlines -textvariable $var_graph_xlines -width 7\n");
-	sys_gui("pack $id.42rangef.lxlines $id.42rangef.xlines -side left\n");
-	sys_gui("frame $id.72rangef\n");
-	sys_gui("pack $id.72rangef -side top\n");
-	sys_gui("label $id.72rangef.lylines -text \"Y sections :\"\n");
-	sys_gui("entry $id.72rangef.ylines -textvariable $var_graph_ylines -width 7\n");
-	sys_gui("pack $id.72rangef.lylines $id.72rangef.ylines -side left\n");
-	sys_gui("checkbutton $id.showcolorgrid -text {Show Grid} -variable $var_graph_colorgrid -anchor w\n");
-	sys_gui("pack $id.showcolorgrid -side top\n");
-	sys_gui("bind $id.42rangef.xlines <KeyPress-Return> [concat colorgrid_ok $id]\n");
-	sys_gui("bind $id.72rangef.ylines <KeyPress-Return> [concat colorgrid_ok $id]\n");
-	sys_gui("focus $id.42rangef.xlines\n");
-	sys_gui("}\n");
-	// ########### colorgrid procedures END -- lluis@artefacte.org #########
-
-    post ( colorgrid_version );
-    colorgrid_class = class_new(gensym("colorgrid"), (t_newmethod)colorgrid_new,
-			      (t_method)colorgrid_free, sizeof(t_colorgrid), 0, A_GIMME, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_motion, gensym("motion"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_bang, gensym("bang"), 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_goto, gensym("goto"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_xgoto, gensym("xgoto"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_dialog, gensym("dialog"), A_GIMME, 0);
-    colorgrid_widgetbehavior.w_getrectfn =    colorgrid_getrect;
-    colorgrid_widgetbehavior.w_displacefn =   colorgrid_displace;
-    colorgrid_widgetbehavior.w_selectfn =     colorgrid_select;
-    colorgrid_widgetbehavior.w_activatefn =   NULL;
-    colorgrid_widgetbehavior.w_deletefn =     colorgrid_delete;
-    colorgrid_widgetbehavior.w_visfn =        colorgrid_vis;
-    colorgrid_widgetbehavior.w_clickfn =      colorgrid_click;
-    class_setwidget(colorgrid_class, &colorgrid_widgetbehavior);
-    class_setpropertiesfn(colorgrid_class, colorgrid_properties);
-    class_setsavefn(colorgrid_class, colorgrid_save);
-    class_sethelpsymbol(colorgrid_class, gensym("colorgrid-help.pd"));
-}
diff --git a/externals/pdvjtools/pdp_1394L/Makefile b/externals/pdvjtools/pdp_1394L/Makefile
deleted file mode 100644
index 71e207093a44ec8bde75a17314c5e85c3a7a325e..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_1394L/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-current: all
-
-include Makefile.config
-
-PDP_MOD = pdp_1394L.o 
-
-all: $(PDP_MOD)
-	$(CC) -Wl,--export-dynamic -shared -o pdp_1394L.pd_linux *.o $(PDP_LIBS)
-
-clean:
-	rm -f *~
-	rm -f *.o
-	rm -f *.pd_linux
-
diff --git a/externals/pdvjtools/pdp_1394L/Makefile.config b/externals/pdvjtools/pdp_1394L/Makefile.config
deleted file mode 100644
index 53a5f1174ef3cbfa83c694eb26739ecf2c918df2..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_1394L/Makefile.config
+++ /dev/null
@@ -1,21 +0,0 @@
-# if configure can't find the m_pd.h header         
-# specify pd's include path here and ignore the warning
-#
-PD_CPPFLAGS=-I/usr/src/pd-0.40-2/src
-PDP_CFLAGS=-I/usr/src/pdp-0.12.5-test-7/include -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -ffast-math -freg-struct-return -DLINUX 
-
-prefix=/usr/local
-PDPV4L2_VERSION = 0.1
-PDPV4L2_TARGET = linux
-PDPV4L2_LIBRARY_NAME = pdp_v4l2.pd_linux
-
-PDP_CPPFLAGS =  -I. -I/usr/X11R6/include  -I../include -I../../include -I/usr/include/libdv/ $(PD_CPPFLAGS)  
-
-PDP_CFLAGS += -DPDPV4L2_VERSION=\"$(PDPV4L2_VERSION)\"
-
-CC = gcc
-
-# build rules
-
-.c.o:
-	$(CC) $(PDP_CFLAGS) $(PDP_CPPFLAGS) -o $*.o -c $*.c
diff --git a/externals/pdvjtools/pdp_1394L/dv1394.h b/externals/pdvjtools/pdp_1394L/dv1394.h
deleted file mode 100755
index f928e4d570fb9ded08c41403491fdd13185ae93c..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_1394L/dv1394.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * dv1394.h - DV input/output over IEEE 1394 on OHCI chips
- *   Copyright (C)2001 Daniel Maas <dmaas@dcine.com>
- *     receive, proc_fs by Dan Dennedy <dan@dennedy.org>
- *
- * based on:
- *   video1394.h - driver for OHCI 1394 boards
- *   Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>
- *                          Peter Schlaile <udbz@rz.uni-karlsruhe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser Public License for more details.
- *
- * You should have received a copy of the GNU Lesser Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef _DV_1394_H
-#define _DV_1394_H
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-
-/* This is the public user-space interface. Try not to break it. */
-
-#define DV1394_API_VERSION 0x20011127
-
-/* ********************
-   **                **
-   **   DV1394 API   **
-   **                **
-   ********************
-
-   There are two methods of operating the DV1394 DV output device.
-
-   1)
-
-   The simplest is an interface based on write(): simply write
-   full DV frames of data to the device, and they will be transmitted
-   as quickly as possible. The FD may be set for non-blocking I/O,
-   in which case you can use select() or poll() to wait for output
-   buffer space.
-
-   To set the DV output parameters (e.g. whether you want NTSC or PAL
-   video), use the DV1394_INIT ioctl, passing in the parameters you
-   want in a struct dv1394_init.
- 
-   Example 1:
-         To play a raw .DV file:   cat foo.DV > /dev/dv1394
-	 (cat will use write() internally)
-
-   Example 2:
-           static struct dv1394_init init = {
-	      0x63,        (broadcast channel)
-              4,           (four-frame ringbuffer)
-	      DV1394_NTSC, (send NTSC video)
-	      0, 0         (default empty packet rate)
-           }
-
-	   ioctl(fd, DV1394_INIT, &init);
-
-	   while(1) {
-	          read( <a raw DV file>, buf, DV1394_NTSC_FRAME_SIZE );
-		  write( <the dv1394 FD>, buf, DV1394_NTSC_FRAME_SIZE );
-           }
-
-   2)
-
-   For more control over buffering, and to avoid unnecessary copies
-   of the DV data, you can use the more sophisticated the mmap() interface. 
-   First, call the DV1394_INIT ioctl to specify your parameters, 
-   including the number of frames in the ringbuffer. Then, calling mmap() 
-   on the dv1394 device will give you direct access to the ringbuffer
-   from which the DV card reads your frame data.
-
-   The ringbuffer is simply one large, contiguous region of memory
-   containing two or more frames of packed DV data. Each frame of DV data
-   is 120000 bytes (NTSC) or 144000 bytes (PAL).
-
-   Fill one or more frames in the ringbuffer, then use the DV1394_SUBMIT_FRAMES
-   ioctl to begin I/O. You can use either the DV1394_WAIT_FRAMES ioctl
-   or select()/poll() to wait until the frames are transmitted. Next, you'll
-   need to call the DV1394_GET_STATUS ioctl to determine which ringbuffer
-   frames are clear (ready to be filled with new DV data). Finally, use
-   DV1394_SUBMIT_FRAMES again to send the new data to the DV output.
-
-
-   Example: here is what a four-frame ringbuffer might look like
-            during DV transmission:
-
-
-         frame 0   frame 1   frame 2   frame 3
-
-        *--------------------------------------*
-        | CLEAR   | DV data | DV data | CLEAR  |
-        *--------------------------------------*
-                   <ACTIVE> 
-
-	transmission goes in this direction --->>>
-
-
-   The DV hardware is currently transmitting the data in frame 1.
-   Once frame 1 is finished, it will automatically transmit frame 2.
-   (if frame 2 finishes before frame 3 is submitted, the device
-   will continue to transmit frame 2, and will increase the dropped_frames
-   counter each time it repeats the transmission).
-
- 
-   If you called DV1394_GET_STATUS at this instant, you would
-   receive the following values:
-   
-          n_frames          = 4
-          active_frame      = 1
-          first_clear_frame = 3
-          n_clear_frames    = 2
-
-   At this point, you should write new DV data into frame 3 and optionally
-   frame 0. Then call DV1394_SUBMIT_FRAMES to inform the device that
-   it may transmit the new frames.
-
-*/
-
-
-/* maximum number of frames in the ringbuffer */
-#define DV1394_MAX_FRAMES 32
-
-/* number of *full* isochronous packets per DV frame */
-#define DV1394_NTSC_PACKETS_PER_FRAME 250
-#define DV1394_PAL_PACKETS_PER_FRAME  300
-
-/* size of one frame's worth of DV data, in bytes */
-#define DV1394_NTSC_FRAME_SIZE (480 * DV1394_NTSC_PACKETS_PER_FRAME)
-#define DV1394_PAL_FRAME_SIZE  (480 * DV1394_PAL_PACKETS_PER_FRAME)
-
-
-enum pal_or_ntsc {
-	DV1394_NTSC = 0,
-	DV1394_PAL
-};
-
-
-/* this is the argument to DV1394_INIT */
-struct dv1394_init {
-	/* DV1394_API_VERSION */
-	unsigned int api_version;
-	
-	/* isochronous transmission channel to use */
-	unsigned int channel;
-
-	/* number of frames in the ringbuffer. Must be at least 2
-	   and at most DV1394_MAX_FRAMES. */
-	unsigned int n_frames;
-
-	/* send/receive PAL or NTSC video format */
-	enum pal_or_ntsc format;
-
-	/* the following are used only for transmission */
- 
-	/* set these to zero unless you want a
-	   non-default empty packet rate (see below) */
-	unsigned long cip_n;
-	unsigned long cip_d;
-
-	/* set this to zero unless you want a
-	   non-default SYT cycle offset (default = 3 cycles) */
-	unsigned int syt_offset;
-};
-
-/* Q: What are cip_n and cip_d? */
-
-/*
-  A: DV video streams do not utilize 100% of the potential bandwidth offered
-  by IEEE 1394 (FireWire). To achieve the correct rate of data transmission,
-  DV devices must periodically insert empty packets into the 1394 data stream.
-  Typically there is one empty packet per 14-16 data-carrying packets.
-
-  Some DV devices will accept a wide range of empty packet rates, while others
-  require a precise rate. If the dv1394 driver produces empty packets at
-  a rate that your device does not accept, you may see ugly patterns on the
-  DV output, or even no output at all.
-
-  The default empty packet insertion rate seems to work for many people; if
-  your DV output is stable, you can simply ignore this discussion. However,
-  we have exposed the empty packet rate as a parameter to support devices that
-  do not work with the default rate. 
-
-  The decision to insert an empty packet is made with a numerator/denominator
-  algorithm. Empty packets are produced at an average rate of CIP_N / CIP_D.
-  You can alter the empty packet rate by passing non-zero values for cip_n
-  and cip_d to the INIT ioctl.
-  
- */
-
-struct dv1394_status {
-	/* this embedded init struct returns the current dv1394
-	   parameters in use */
-	struct dv1394_init init;
-
-	/* the ringbuffer frame that is currently being
-	   displayed. (-1 if the device is not transmitting anything) */
-	int active_frame;
-
-	/* index of the first buffer (ahead of active_frame) that
-	   is ready to be filled with data */
-	unsigned int first_clear_frame;
-
-	/* how many buffers, including first_clear_buffer, are
-	   ready to be filled with data */
-	unsigned int n_clear_frames;
-
-	/* how many times the DV output has underflowed
-	   since the last call to DV1394_GET_STATUS */
-	unsigned int dropped_frames;
-
-	/* N.B. The dropped_frames counter is only a lower bound on the actual
-	   number of dropped frames, with the special case that if dropped_frames
-	   is zero, then it is guaranteed that NO frames have been dropped
-	   since the last call to DV1394_GET_STATUS.
-	*/
-};
-
-/* Get the driver ready to transmit video.  pass a struct dv1394_init* as
- * the parameter (see below), or NULL to get default parameters */
-#define DV1394_INIT			_IOW('#', 0x06, struct dv1394_init)
-
-/* Stop transmitting video and free the ringbuffer */
-#define DV1394_SHUTDOWN		_IO ('#', 0x07)
-
-/* Submit N new frames to be transmitted, where the index of the first new
- * frame is first_clear_buffer, and the index of the last new frame is
- * (first_clear_buffer + N) % n_frames */
-#define DV1394_SUBMIT_FRAMES	_IO ('#', 0x08)
-
-/* Block until N buffers are clear (pass N as the parameter) Because we
- * re-transmit the last frame on underrun, there will at most be n_frames
- * - 1 clear frames at any time */
-#define DV1394_WAIT_FRAMES		_IO ('#', 0x09)
-
-/* Capture new frames that have been received, where the index of the
- * first new frame is first_clear_buffer, and the index of the last new
- * frame is (first_clear_buffer + N) % n_frames */
-#define DV1394_RECEIVE_FRAMES	_IO ('#', 0x0a)
-
-/* Tell card to start receiving DMA */
-#define DV1394_START_RECEIVE	_IO ('#', 0x0b)
-
-/* Pass a struct dv1394_status* as the parameter */
-#define DV1394_GET_STATUS		_IOR('#', 0x0c, struct dv1394_status)
-
-#endif /* _DV_1394_H */
diff --git a/externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd b/externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd
deleted file mode 100644
index a725e6c0abd814c50686787b58e20d00568c89f9..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 431 67 1247 665 10;
-#X obj 106 99 pdp_1394L;
-#X msg 163 -1 open /dev/dv1394/0;
-#X obj 104 217 pdp_xv;
-#X obj 54 -4 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
-;
-#X obj 54 23 metro 40;
-#X msg 206 65 norm PAL;
-#X msg 176 28 close;
-#X msg 129 170 destroy;
-#X obj 276 199 pdp_glx;
-#X connect 0 0 8 0;
-#X connect 1 0 0 0;
-#X connect 3 0 4 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 2 0;
diff --git a/externals/pdvjtools/pdp_1394L/pdp_1394L.c b/externals/pdvjtools/pdp_1394L/pdp_1394L.c
deleted file mode 100644
index cedfc3159db9c6bafff5d787797febd936cf94e9..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_1394L/pdp_1394L.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- *   Pure Data Packet module.
- *   Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-
-#include "pdp_config.h"
-#include "pdp.h"
-#include "pdp_llconv.h"
-#include "pdp_imageproc.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <string.h>
-#include <assert.h>
-#include <getopt.h>             /* getopt_long() */
-#include <ctype.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/mman.h>
-#include <linux/types.h>
-#include <sched.h>
-#include <pthread.h>
-
-#include "dv1394.h"
-#include <libdv/dv.h>
-
-#define N_BUF 2 /*DV1394_MAX_FRAMES/4*/
-#define PAL 0
-#define NTSC 1
-
-
-typedef struct pdp_1394L_struct
-{
-  t_object x_obj;
-  
-  t_outlet *x_outlet0;
-
-  int x_width;
-  int x_height;
-
-  int dvfd;
-  unsigned char *videobuf;
-  unsigned char *decodedbuf;
-  bool x_frame_ready;
-  int  x_frame, x_lastframe;
-  bool x_continue_thread;
-  pthread_t x_thread_id;
-
-  int x_framesize;
-  unsigned char *x_mmapbuf;
-
-  dv_decoder_t *x_decoder;
-
-  bool x_haveVideo;
-  bool x_capturing;
-  bool x_norm;
-  char* x_devicename;
-  int x_devicenum;
-
-} t_pdp_1394L;
-
-
-
-static void
-process_image                   (t_pdp_1394L *x)
-{
-	
-    unsigned int w,h;
-    int object,length,pos,i,encoding;
-    t_pdp* header;
-    t_image* image;
-    short int * data;
-	
-    //fputc ('.', stdout);
-    //fflush (stdout);
-	
-	
-	
-    /* create new packet */
-    w = x->x_width;
-    h = x->x_height;
-
-
-    object = pdp_packet_new_image(PDP_IMAGE_YV12, w, h);
-    header = pdp_packet_header(object);
-    image = pdp_packet_image_info(object);
-
-    if (!header){
-	post("pdp_v4l: ERROR: can't allocate packet");
-	return;
-    }
-
-    data = (short int *) pdp_packet_data(object);
-	
-    /* convert data to pdp packet */
-    //pdp_llconv(x->decodedbuf, RIF_YVYU_P____U8, data, RIF_YVU__P411_S16, w, h); 
-    pdp_llconv(x->decodedbuf, RIF_RGB__P____U8, data, RIF_YVU__P411_S16, w, h); //
-
-
-    pdp_packet_pass_if_valid(x->x_outlet0, &object);
-}
-
-static int pdp_1394L_read_frame(t_pdp_1394L *x)
-{
-
-  if (!x->x_decoder)return 0;
-  if (!x->x_frame_ready) {
-	//x->x_image.newimage = 0;
-  }
-  else {
-    dv_parse_header(x->x_decoder, x->videobuf);
-    dv_parse_packs (x->x_decoder, x->videobuf);
-    if(dv_frame_changed(x->x_decoder)) {
-      int pitches[3] = {0,0,0};
-      //      pitches[0]=x_decoder->width*3; // rgb
-      //      pitches[0]=x_decoder->width*((x_reqFormat==GL_RGBA)?3:2);
-      pitches[0]=x->x_decoder->width*3;
-      x->x_height=x->x_decoder->height;
-      x->x_width=x->x_decoder->width;
-      
-      /* decode the DV-data to something we can handle and that is similar to the wanted format */
-      //      dv_report_video_error(x_decoder, videobuf);  // do we need this ?
-      // gosh, this(e_dv_color_rgb) is expansive:: the decoding is done in software only...
-      //      dv_decode_full_frame(x_decoder, videobuf, ((x_reqFormat==GL_RGBA)?e_dv_color_rgb:e_dv_color_yuv), &decodedbuf, pitches);
-      dv_decode_full_frame(x->x_decoder, x->videobuf, e_dv_color_rgb, &x->decodedbuf, pitches);
-
-      //     post("sampling %d", x_decoder->sampling);
-
-      /* convert the colour-space to the one we want */
-      /*
-       * btw. shouldn't this be done in [pix_video] rather than here ?
-       * no because [pix_video] knows nothing about the possible colourspaces in here
-       */
-
-      // letting the library do the conversion to RGB and then doing the conversion to RGBA
-      // is really stupid.
-      // let's do it all ourselfes:
-      //      if (x_reqFormat==GL_RGBA)x_image.image.fromRGB(decodedbuf); else
-      //x_image.image.fromYVYU(decodedbuf);
-    	process_image (x);
-	
-    }
-
-    x->x_frame_ready = false;
-  }
-	
-  return 1;
-}
-
-
-static void *pdp_1394L_thread(void *voidx)
-{
-    t_pdp_1394L *x = ((t_pdp_1394L *)voidx);
-
-  int fd=x->dvfd;
-  int framesize = x->x_framesize;
-  struct dv1394_status dvst;
-  int n_frames = N_BUF;
-  unsigned char* mmapbuf = x->x_mmapbuf;
-
-  /* this will hang if no ieee1394-device is present, what to do about it ??? */
-  x->x_haveVideo=false;
-  if(ioctl(fd, DV1394_WAIT_FRAMES, 1)) {
-    perror("error: ioctl WAIT_FRAMES");
-    x->x_capturing=false; return NULL;
-  }
-  if (ioctl(fd, DV1394_GET_STATUS, &dvst))   {
-    perror("ioctl GET_STATUS");
-    x->x_capturing=false; return NULL;
-  }
-  x->x_haveVideo=true;
-  x->x_capturing=true;
-
-  //fprintf(stderr,"aqui1");
-  while(x->x_continue_thread){
-  //fprintf(stderr,"aqui2");
-    if(ioctl(fd, DV1394_WAIT_FRAMES, n_frames - 1)) {
-      perror("error: ioctl WAIT_FRAMES");
-      x->x_capturing=false; return NULL;
-    }
-    if (ioctl(fd, DV1394_GET_STATUS, &dvst))   {
-      perror("ioctl GET_STATUS");
-      x->x_capturing=false; return NULL;
-    }
-  //fprintf(stderr,"aqui3");
-    /*
-      dvst.init
-      dvst.active_frame
-      dvst.first_clear_frame
-      dvst.n_clear_frames
-      dvst.dropped_frames
-    */	
-    if (dvst.dropped_frames > 0) {
-      verbose(1,"dv1394: dropped at least %d frames", dvst.dropped_frames);
-    }
-    /*
-      memcpy( g_current_frame->data, 
-      (g_dv1394_map + (dvst.first_clear_frame * DV1394_PAL_FRAME_SIZE)),
-      DV1394_PAL_FRAME_SIZE );
-    */
-    x->videobuf = mmapbuf + (dvst.first_clear_frame * framesize);
-
-    //post("thread %d\t%x %x", me->frame, me->tvfd, me->vmmap);
-    if (ioctl(fd, DV1394_RECEIVE_FRAMES, 1) < 0)    {
-      perror("receiving...");
-    }
-    x->x_lastframe=x->x_frame;
-    x->x_frame++;
-    x->x_frame%=N_BUF;
-    x->x_frame_ready = true;
-  }
-  x->x_capturing=false;
-
-  //process_image  (x, x->videobuf);
-
-    return 0;
-}
-
-static void
-close_device                    (t_pdp_1394L *x)
-{
-  if(x->x_mmapbuf!=NULL)munmap(x->x_mmapbuf, N_BUF*x->x_framesize);
-  if(x->dvfd>=0)close(x->dvfd);
-  x->x_haveVideo=false;
-
-}
-
-
-static int
-startTransfer (t_pdp_1394L *x)
-{
-  //if ((x->dvfd=openDevice(format))<0){
-  //  verbose(1, "DV4L: closed");
-  //  return(0);
-  //}
-  //x->x_image.newimage=0;
-  //x->x_image.image.data=0;
-  //x->x_image.image.xsize=720;
-  //x->x_image.image.ysize=576;
-  //x->x_image.image.setCsizeByFormat(x->x_reqFormat);
-  //x->x_image.image.reallocate();
-  x->videobuf=NULL;
-
-  x->x_frame_ready = false; 
-
-  if(x->x_decoder!=NULL)dv_decoder_free(x->x_decoder);
-  if (!(x->x_decoder=dv_decoder_new(1, 1, 1))){
-    //error("DV4L: unable to create DV-decoder...closing");
-    close_device(x);
-    return(0);
-  }
-  //x->x_decoder->quality=x->x_quality;
-  x->x_decoder->quality = DV_QUALITY_BEST;
-  verbose(1, "DV4L: DV decoding quality %d ", x->x_decoder->quality);
-  //fprintf(stderr,"before");
-  x->x_continue_thread = true;
-  pthread_create(&x->x_thread_id, 0, pdp_1394L_thread, x);
-  return 1;
-}
-
-static int
-stopTransfer                   (t_pdp_1394L *x)
-{
-  /* close the dv4l device and dealloc buffer */
-  /* terminate thread if there is one */
-  x->x_continue_thread=false;
-  int i=0;
-  if(x->x_haveVideo){
-    while(x->x_capturing){
-      struct timeval sleep;
-      sleep.tv_sec=0;  sleep.tv_usec=10; /* 10us */
-      select(0,0,0,0,&sleep);
-      i++;
-    }
-    verbose(1, "DV4L: shutting down dv1394 after %d usec", i*10);
-    ioctl(x->dvfd, DV1394_SHUTDOWN);
-  }
-  close_device(x);
-  return(1);
-}
-
-
-static void pdp_1394L_close(t_pdp_1394L *x)
-{
-  /* close the v4l device and dealloc buffer */
-
-    void *dummy;
-    //x->x_initialized = false;
-    /* terminate thread if there is one */
-    if(x->x_continue_thread){
-	x->x_continue_thread = 0;
-	pthread_join (x->x_thread_id, &dummy);
-    }
-
-
-        //stop_capturing (x);
-
-        //uninit_device (x);
-
-        close_device (x);
-	
-	if (-1 == close (x->dvfd))
-	        post ("close");
-
-        x->dvfd = -1;
-}
-
-
-static int pdp_1394L_open(t_pdp_1394L *x, t_symbol *name)
-{
-  x->x_devicename = name->s_name;
-
-  if(x->x_haveVideo){
-    verbose(1, "Stream already going on. Doing some clean-up...");
-    stopTransfer(x);
-  }
-
-  /*
-  All of the errors in this method return -1 anyhow, so fd should be 0 to allow
-  successful open if everything goes ok.
-
-  Ico Bukvic ico@vt.edu 2-18-07
-  */
-  int fd = 0; 
-  struct dv1394_init init = {
-    DV1394_API_VERSION, // api version 
-    0x63,              // isochronous transmission channel
-    N_BUF,             // number of frames in ringbuffer
-    (x->x_norm==NTSC)?DV1394_NTSC:DV1394_PAL,         // PAL or NTSC
-    //DV1394_PAL,         // PAL or NTSC
-    0, 0 , 0                // default packet rate
-  };
-
-  x->x_framesize=(x->x_norm==NTSC)?DV1394_NTSC_FRAME_SIZE:DV1394_PAL_FRAME_SIZE;
-  //x->x_framesize=DV1394_PAL_FRAME_SIZE;
-
-  if(x->x_devicename){
-    if ((fd = open(x->x_devicename, O_RDWR)) < 0) {
-        perror(x->x_devicename);
-        return -1;
-    }
-  } else {
-    signed char devnum=(x->x_devicenum<0)?0:(signed char)x->x_devicenum;
-    char buf[256];
-    buf[255]=0;buf[32]=0;buf[33]=0;
-    if (devnum<0)devnum=0;
-    snprintf(buf, 32, "/dev/ieee1394/dv/host%d/%s/in", devnum, (x->x_norm==NTSC)?"NTSC":"PAL");
-    //snprintf(buf, 32, "/dev/ieee1394/dv/host%d/%s/in", devnum, "PAL");
-    if ((fd = open(buf, O_RDWR)) < 0)    {
-      snprintf(buf, 32, "/dev/dv1394/%d", devnum);
-      if ((fd = open(buf, O_RDWR)) < 0) {
-	if ((fd=open("/dev/dv1394", O_RDWR)) < 0)    {
-	  perror(buf);
-	  return -1;
-	}
-      }
-    }
-  }
-  if (ioctl(fd, DV1394_INIT, &init) < 0)    {
-    perror("initializing");
-    close(fd);
-    return -1;
-  }
-  
-  x->x_mmapbuf = (unsigned char *) mmap( NULL, N_BUF*x->x_framesize,
-				       PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-  if(x->x_mmapbuf == MAP_FAILED) {
-    perror("mmap frame buffers");
-    close(fd);
-    return -1;
-  }
-  
-  if(ioctl(fd, DV1394_START_RECEIVE, NULL)) {
-    perror("dv1394 START_RECEIVE ioctl");
-    close(fd);
-    return -1;
-  }
-  /*Extra verbosity never hurt anyone...
-
-  Ico Bukvic ico@vt.edu 2-18-07
-  */
-  post("DV4L: Successfully opened...");
-  startTransfer(x);
-  x->dvfd=fd;
-
-  return 1;
-	
-}
-
-
-static int pdp_1394L_norm(t_pdp_1394L *x, t_symbol *s)
-{
-  int inorm = x->x_norm;
-  char* norm=s->s_name;
-  switch(norm[0]){
-  case 'N': case 'n':
-    inorm=NTSC;
-    break;
-  case 'P': case 'p':
-    inorm=PAL;
-    break;
-  }
-  if (inorm==x->x_norm)return 0;
-  x->x_norm=inorm;
-  return 0;
-}
-
-
-static void pdp_1394L_bang(t_pdp_1394L *x)
-{
-   
-  /* if initialized, grab a frame and output it */
-
-
-
-    /* convert data to pdp packet */
-/*
-    switch(x->x_v4l_palette){
-    case  VIDEO_PALETTE_YUV420P:
-	pdp_llconv(newimage, RIF_YUV__P411_U8, data, RIF_YVU__P411_S16, w, h); 
-	break;*/
-	
-	/* long live standards. v4l's rgb is in fact ogl's bgr */
-/*    case  VIDEO_PALETTE_RGB24:
-	pdp_llconv(newimage, RIF_BGR__P____U8, data, RIF_YVU__P411_S16, w, h); 
-	break;
-
-    case  VIDEO_PALETTE_RGB32:
-	pdp_llconv(newimage, RIF_BGRA_P____U8, data, RIF_YVU__P411_S16, w, h); 
-	break;
-
-    case  VIDEO_PALETTE_YUV422:
-	pdp_llconv(newimage, RIF_YUYV_P____U8, data, RIF_YVU__P411_S16, w, h); 
-	break;*/
-
-
-    /*default:
-	post("pdp_1394L: unsupported palette");
-	break;
-    }*/
-
-/*
-    if (PDP_IMAGE_YV12 == x->x_pdp_image_type){
-	pixel_unpack_u8s16_y(&newimage[0], data, nbpixels>>3, x->x_state_data->gain);
-	pixel_unpack_u8s16_uv(&newimage[plane1], &data[plane2], nbpixels>>5, x->x_state_data->gain);
-	pixel_unpack_u8s16_uv(&newimage[plane2], &data[plane1], nbpixels>>5, x->x_state_data->gain);
-    }
-*/
-    //x->x_v4l_palette = VIDEO_PALETTE_YUV420P;
-    //x->x_v4l_palette = VIDEO_PALETTE_RGB24;
-
-/*
-
-    else if(PDP_IMAGE_GREY == x->x_pdp_image_type){
-	pixel_unpack_u8s16_y(&newimage[0], data, nbpixels>>3, x->x_state_data->gain);
-    }
-*/
-    //post("pdp_1394L: mark unused %d", object);
-
-    /*pdp_packet_pass_if_valid(x->x_outlet0, &object);*/
-
-}
-
-
-
-static void pdp_1394L_free(t_pdp_1394L *x)
-{
-  //pdp_1394L_close(x);
-  if(x->x_haveVideo)stopTransfer(x);
-  //if(x->decodedbuf)delete[]decodedbuf;
-  if(x->x_decoder!=NULL)dv_decoder_free(x->x_decoder);
-}
-
-t_class *pdp_1394L_class;
-
-
-
-void *pdp_1394L_new(t_symbol *vdef, t_symbol *format)
-{
-    t_pdp_1394L *x = (t_pdp_1394L *)pd_new(pdp_1394L_class);
-
-    x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
-    //x->x_channel = 0;//0x63;
-    x->x_devicenum  = 0;
-    x->x_norm = PAL;
-    x->x_decoder=NULL;
-    x->x_frame_ready=false;
-    x->x_width=720;
-    x->x_height=576;
-    x->x_framesize=DV1394_PAL_FRAME_SIZE;
-    //x->x_quality = DV_QUALITY_BEST;
-    //x->decodedbuf = new unsigned char[720*576*3];
-    x->decodedbuf = malloc (720*576*3*sizeof(unsigned char));
-    x->x_haveVideo=false;
-
-    return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_1394L_setup(void)
-{
-
-
-    pdp_1394L_class = class_new(gensym("pdp_1394L"), (t_newmethod)pdp_1394L_new,
-    	(t_method)pdp_1394L_free, sizeof(t_pdp_1394L), 0, A_DEFSYMBOL, A_DEFSYMBOL, A_NULL);
-
-
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_read_frame, gensym("bang"), A_NULL);
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_close, gensym("close"), A_NULL);
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_open, gensym("open"), A_SYMBOL, A_NULL);
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_norm, gensym("norm"), A_SYMBOL, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/externals/pdvjtools/pdp_freeframe/CHANGES.LOG b/externals/pdvjtools/pdp_freeframe/CHANGES.LOG
deleted file mode 100755
index 46f7ad7a8e4e58abb271f5264bc9f82d9a5f5ba1..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/CHANGES.LOG
+++ /dev/null
@@ -1,6 +0,0 @@
-0.3
-  added parameters details
-0.2
-  simplified RGB conversions
-0.1
-  initial release
diff --git a/externals/pdvjtools/pdp_freeframe/FreeFrame.h b/externals/pdvjtools/pdp_freeframe/FreeFrame.h
deleted file mode 100644
index 1536f4cbc5db4e96b6587704db9658e366c0cf65..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/FreeFrame.h
+++ /dev/null
@@ -1,228 +0,0 @@
-#ifndef __FREEFRAME_H__
-#define __FREEFRAME_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* 
- *  FreeFrame.h
- * 
- *  FreeFrame Open Video Plugin Prototype
- *  C Version
- * 
- *  www.freeframe.org
- *  marcus@freeframe.org
- * 
- * 	
- * 
- * Copyright (c) 2002, Marcus Clements www.freeframe.org
- * All rights reserved.
- * 
- * FreeFrame 1.0 upgrade by Pete Warden
- * www.petewarden.com
- * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- *    * Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *    * Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in
- *      the documentation and/or other materials provided with the
- *      distribution.
- *    * Neither the name of FreeFrame nor the names of its
- *      contributors may be used to endorse or promote products derived
- *      from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- *	includes
- */
-
-#ifdef _WIN32
-
-#if _MSC_VER > 1000
-#pragma once
-#endif /* _MSC_VER > 1000 */
-
-#define WIN32_LEAN_AND_MEAN		/* Exclude rarely-used stuff from Windows headers */
-#include <windows.h>
-
-#elif defined(__linux__) || defined(__APPLE__)
-
-    typedef unsigned int DWORD;
-    typedef void *LPVOID;
-    typedef unsigned char BYTE;
-
-#endif
-
-
-/*
- *	#defines
- */
-
-#define FF_EFFECT			0
-#define FF_SOURCE			1
-
-#define FF_FAIL				0xFFFFFFFF
-#define FF_SUCCESS			0
-#define FF_TRUE				1
-#define FF_FALSE			0
-#define FF_SUPPORTED			1
-#define FF_UNSUPPORTED			0
-
-#define FF_GETINFO			0
-#define FF_INITIALISE			1
-#define FF_DEINITIALISE			2
-#define FF_PROCESSFRAME			3
-#define FF_GETNUMPARAMETERS		4
-#define FF_GETPARAMETERNAME		5
-#define FF_GETPARAMETERDEFAULT		6
-#define FF_GETPARAMETERDISPLAY		7
-#define FF_SETPARAMETER			8
-#define FF_GETPARAMETER			9
-#define FF_GETPLUGINCAPS		10
-#define FF_INSTANTIATE			11
-#define FF_DEINSTANTIATE		12
-#define FF_GETEXTENDEDINFO		13
-#define FF_PROCESSFRAMECOPY		14
-#define FF_GETPARAMETERTYPE		15
-
-#define FF_CAP_16BITVIDEO		0
-#define FF_CAP_24BITVIDEO		1
-#define FF_CAP_32BITVIDEO		2
-#define FF_CAP_PROCESSFRAMECOPY		3
-#define FF_CAP_MINIMUMINPUTFRAMES	10
-#define FF_CAP_MAXIMUMINPUTFRAMES	11
-#define FF_CAP_COPYORINPLACE		15
-
-#define FF_CAP_PREFER_NONE		0
-#define FF_CAP_PREFER_INPLACE		1
-#define FF_CAP_PREFER_COPY		2
-#define	FF_CAP_PREFER_BOTH		3
-
-#define FF_TYPE_BOOLEAN			0    
-#define FF_TYPE_EVENT			1
-#define FF_TYPE_RED			2 
-#define FF_TYPE_GREEN			3
-#define FF_TYPE_BLUE			4
-#define FF_TYPE_XPOS			5
-#define FF_TYPE_YPOS			6
-#define FF_TYPE_STANDARD		10
-#define FF_TYPE_TEXT			100
-
-/*
- *	FreeFrame types
- */
-
-    typedef struct PlugInfoStructTag {
-        DWORD	APIMajorVersion;
-        DWORD	APIMinorVersion;
-        BYTE	uniqueID[4];			/* 4 chars uniqueID - not null terminated */
-        BYTE	pluginName[16];			/* 16 chars plugin friendly name - not null terminated */
-        DWORD	pluginType;			/* Effect or source */
-    } PlugInfoStruct;
-
-    typedef struct PlugExtendedInfoStructTag {
-        DWORD PluginMajorVersion;
-        DWORD PluginMinorVersion;
-        char* Description;
-        char* About;
-        DWORD FreeFrameExtendedDataSize;
-        void* FreeFrameExtendedDataBlock;
-    } PlugExtendedInfoStruct;
-
-    typedef struct VideoInfoStructTag {
-        DWORD frameWidth;			/* width of frame in pixels */
-        DWORD frameHeight;			/* height of frame in pixels */
-        DWORD bitDepth;				/* enumerated indicator of bit depth of video */
-        /* 0 = 16 bit 5-6-5   1 = 24bit packed   2 = 32bit */
-        DWORD orientation;			/* video frame orientation meaningful values:
-                                       1 = origin at top left 2 = origin at bottom left */
-	
-    } VideoInfoStruct;
-
-    typedef struct ProcessFrameCopyStructTag {
-        DWORD numInputFrames;
-        void** InputFrames;
-        void* OutputFrame;
-    } ProcessFrameCopyStruct;
-
-    typedef struct SetParameterStructTag {
-        DWORD index;
-        float value;
-    } SetParameterStruct;
-
-    typedef union {
-        DWORD ivalue;
-        float fvalue;
-        char *svalue;
-    } ParameterValue;
-
-    typedef union plugMainUnionTag {
-        DWORD ivalue;
-        float fvalue;
-        VideoInfoStruct *VISvalue;
-        PlugInfoStruct *PISvalue;
-        char *svalue;
-    } plugMainUnion;
-
-    typedef plugMainUnion plugMainType(DWORD, LPVOID, DWORD);
-
-/*
- *	Function prototypes
- */
-
-/*
- * plugMain - The one and only exposed function
- * parameters: 
- *	functionCode - tells the plugin which function is being called
- *  pParam - 32-bit parameter or 32-bit pointer to parameter structure
- *
- * PLUGIN DEVELOPERS:  you shouldn't need to change this function
- *
- * All parameters are cast as 32-bit untyped pointers and cast to appropriate
- * types here
- * 
- * All return values are cast to 32-bit untyped pointers here before return to 
- * the host
- *
- *
- */
-
-#ifdef _WIN32
-
-    BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, DWORD lpReserved );
-
-    __declspec(dllexport) LPVOID __stdcall plugMain(DWORD functionCode, LPVOID pParam, DWORD reserved);
-
-    typedef __declspec(dllimport) LPVOID (__stdcall *FF_Main_FuncPtr)(DWORD, LPVOID, DWORD);
-
-#elif __linux__
-
-    plugMainUnion plugMain(DWORD functionCode, LPVOID pParam, DWORD reserved);
-
-
-#elif __APPLE__
-
-    typedef LPVOID (*FF_Main_FuncPtr)(DWORD, LPVOID, DWORD);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/externals/pdvjtools/pdp_freeframe/INSTALL b/externals/pdvjtools/pdp_freeframe/INSTALL
deleted file mode 100644
index 74dc31e202b33ea471a7c05d9d29c5d178035b36..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/INSTALL
+++ /dev/null
@@ -1,21 +0,0 @@
-1. Download FreeFrame1.0-05.tar.gz from http://sourceforge.net/projects/freeframe/
-   
-   untar and cd to the FreeFrame1.0-05 directory
-   you have the binary plugins in the plugins_bin directory but you will need to compile the plugins to be sure that work.
-   compile the plugins::
-   cd to plugins_src/PetesPluginsLinux/ and type 'make'
-
-2. Download pdp_freeframe.tar.gz from http://www.artefacte.org/pd/pdp_freeframe.tar.gz
-   
-   untar the pdp_freeframe.tar.gz file
-   cd in to the pdp_freeframe directory
-   
-   edit the Makefile.config file and change the path to the pd and pdp sources i
-   and to the Free Frame plugins (*.so files)
-
-   type 'make'
-
-   to load the pdp_freeframe help file type 'pd -nrt -lib pdp:pdp_freeframe help_pdp_freeframe.pd'
-   
-
-
diff --git a/externals/pdvjtools/pdp_freeframe/Makefile b/externals/pdvjtools/pdp_freeframe/Makefile
deleted file mode 100644
index 188e54182bb18d6565c44ae5d90d7043cc683596..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-current: all
-
-include Makefile.config
-
-PDP_MOD = pdp_freeframe.o 
-
-
-# build basic image processing modules (derived from base class)
-all: $(PDP_MOD)
-	$(CC) -Wl,--export-dynamic -shared -o pdp_freeframe.pd_linux *.o $(PDP_LIBS)
-
-clean:
-	rm -f *~
-	rm -f *.o
-	rm -f *.pd_linux
-
diff --git a/externals/pdvjtools/pdp_freeframe/Makefile.config b/externals/pdvjtools/pdp_freeframe/Makefile.config
deleted file mode 100644
index 0ab269f4f9714324084f6d57613df176a9a0b31a..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/Makefile.config
+++ /dev/null
@@ -1,25 +0,0 @@
-# if configure can't find the m_pd.h header         
-# specify pd's include path here and ignore the warning
-#
-FF_PLUGIN_DIR=/usr/lib/FreeFrame
-PD_CPPFLAGS=-I../../../pd/src
-PDP_CFLAGS=-I../../pdp/include -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -ffast-math -freg-struct-return -DLINUX
-
-prefix=/usr
-PDP_VERSION = 0.0.1
-PDP_TARGET = linux
-PDP_LIBRARY_NAME = pdp_freeframe.pd_linux
-
-PDP_CPPFLAGS =  -fPIC -I. -I/usr/X11R6/include  -I/usr/include $(PD_CPPFLAGS)  $(PDP_CFLAGS)
-#--gstabs
-
-PDP_CFLAGS += -fPIC -DPDP_VERSION=\"$(PDP_VERSION)\" -DFF_PLUGIN_DIR=\"$(FF_PLUGIN_DIR)\"
-
-CC = gcc
-
-# build rules
-
-.c.o:
-	$(CC) $(PDP_CFLAGS) $(PDP_CPPFLAGS) -o $*.o -c $*.c
-.s.o:
-	$(AS) -o $*.o $*.s $(PDP_AFLAGS)
diff --git a/externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd b/externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd
deleted file mode 100644
index bb459e8c5c4dbc9131810a15b0a429fdb0f49caf..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd
+++ /dev/null
@@ -1,206 +0,0 @@
-#N canvas 0 0 996 665 10;
-#X obj 43 335 pdp_freeframe;
-#X floatatom 337 104 5 0 0 0 - - -;
-#X obj 46 115 pdp_qt;
-#X obj 46 45 metro 40;
-#X msg 46 -17 bang;
-#X msg 107 45 loop 1;
-#X obj 41 507 pdp_xv;
-#X obj 46 179 pdp_scale 320 240;
-#X obj 382 102 hradio 15 1 0 44 empty empty empty 0 -6 0 8 -262144
--1 -1 0;
-#X obj 391 228 hsl 128 15 0 1 0 0 empty vparam3 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 531 228 hsl 128 15 0 1 0 0 empty vparam4 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 671 228 hsl 128 15 0 1 0 0 empty vparam5 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 388 248 param 3 \$1;
-#X msg 528 247 param 4 \$1;
-#X msg 669 247 param 5 \$1;
-#X text 384 82 Select the plugin;
-#X text 388 129 Adjust plugin parameters.;
-#X msg 164 45 open \$1;
-#X obj 164 23 openpanel;
-#X text 95 -17 Load a mov file;
-#X symbolatom 96 488 20 0 0 0 - - -;
-#X text 249 488 <-- plugin name;
-#X floatatom 115 466 5 0 0 0 - - -;
-#X text 163 464 <-- number of parameters;
-#X obj 241 47 pdp_v4l;
-#X obj 241 20 metro 40;
-#X msg 241 -8 bang;
-#X text 214 438 <-- parameter name;
-#X text 241 410 <-- parameter type;
-#X text 257 381 <-- parameter default;
-#X obj 393 169 hsl 128 15 0 1 0 0 empty vparam0 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 531 169 hsl 128 15 0 1 0 0 empty vparam1 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 672 169 hsl 128 15 0 1 0 0 empty vparam2 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 391 291 hsl 128 15 0 1 0 0 empty vparam6 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 532 291 hsl 128 15 0 1 0 0 empty vparam7 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 674 291 hsl 128 15 0 1 0 0 empty vparam8 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 390 188 param 0 \$1;
-#X msg 528 188 param 1 \$1;
-#X msg 669 188 param 2 \$1;
-#X msg 390 311 param 6 \$1;
-#X msg 529 310 param 7 \$1;
-#X msg 671 310 param 8 \$1;
-#N canvas 0 0 996 665 pname 0;
-#X obj 51 119 l2s;
-#X obj 80 119 l2s;
-#X obj 111 119 l2s;
-#X obj 143 119 l2s;
-#X obj 207 120 l2s;
-#X obj 236 120 l2s;
-#X obj 267 120 l2s;
-#X obj 298 119 l2s;
-#X obj 97 86 route 0 1 2 3 4 5 6 7 8;
-#X obj 327 119 l2s;
-#X obj 97 51 inlet;
-#X obj 51 154 s ffparam0;
-#X obj 79 178 s ffparam1;
-#X obj 118 205 s ffparam2;
-#X obj 148 227 s ffparam3;
-#X obj 185 157 s ffparam4;
-#X obj 213 181 s ffparam5;
-#X obj 255 206 s ffparam6;
-#X obj 283 230 s ffparam7;
-#X obj 305 155 s ffparam8;
-#X obj 391 53 inlet;
-#X msg 390 79 symbol;
-#X connect 0 0 11 0;
-#X connect 1 0 12 0;
-#X connect 2 0 13 0;
-#X connect 3 0 14 0;
-#X connect 4 0 15 0;
-#X connect 5 0 16 0;
-#X connect 6 0 17 0;
-#X connect 7 0 18 0;
-#X connect 8 0 0 0;
-#X connect 8 1 1 0;
-#X connect 8 2 2 0;
-#X connect 8 3 3 0;
-#X connect 8 4 4 0;
-#X connect 8 5 5 0;
-#X connect 8 6 6 0;
-#X connect 8 7 7 0;
-#X connect 8 8 9 0;
-#X connect 9 0 19 0;
-#X connect 10 0 8 0;
-#X connect 20 0 21 0;
-#X connect 21 0 11 0;
-#X connect 21 0 12 0;
-#X connect 21 0 13 0;
-#X connect 21 0 14 0;
-#X connect 21 0 15 0;
-#X connect 21 0 16 0;
-#X connect 21 0 17 0;
-#X connect 21 0 18 0;
-#X connect 21 0 19 0;
-#X restore 146 438 pd pname;
-#X symbolatom 390 150 18 0 0 0 - ffparam0 -;
-#X symbolatom 529 149 18 0 0 0 - ffparam1 -;
-#X symbolatom 668 149 18 0 0 0 - ffparam2 -;
-#X symbolatom 391 211 18 0 0 0 - ffparam3 -;
-#X symbolatom 530 210 18 0 0 0 - ffparam4 -;
-#X symbolatom 669 210 18 0 0 0 - ffparam5 -;
-#X symbolatom 391 271 18 0 0 0 - ffparam6 -;
-#X symbolatom 530 270 18 0 0 0 - ffparam7 -;
-#X symbolatom 669 270 18 0 0 0 - ffparam8 -;
-#N canvas 0 0 996 665 default 0;
-#X obj 97 86 route 0 1 2 3 4 5 6 7 8;
-#X obj 97 51 inlet;
-#X obj 391 53 inlet;
-#X obj 51 154 s vparam0;
-#X obj 393 114 float 0;
-#X msg 392 88 bang;
-#X obj 79 178 s vparam1;
-#X obj 118 205 s vparam2;
-#X obj 148 227 s vparam3;
-#X obj 184 159 s vparam4;
-#X obj 213 181 s vparam5;
-#X obj 255 206 s vparam6;
-#X obj 283 230 s vparam7;
-#X obj 304 155 s vparam8;
-#X connect 0 0 3 0;
-#X connect 0 1 6 0;
-#X connect 0 2 7 0;
-#X connect 0 3 8 0;
-#X connect 0 4 9 0;
-#X connect 0 5 10 0;
-#X connect 0 6 11 0;
-#X connect 0 7 12 0;
-#X connect 0 8 13 0;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 4 0 3 0;
-#X connect 4 0 6 0;
-#X connect 4 0 7 0;
-#X connect 4 0 8 0;
-#X connect 4 0 9 0;
-#X connect 4 0 10 0;
-#X connect 4 0 11 0;
-#X connect 4 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 4 0;
-#X restore 180 380 pd default;
-#X text 493 440 FreeFrame host for Pure Data Packet version 0.3;
-#X text 495 455 by Lluis Gomez i Bigorda (lluis@artefacte.org);
-#X text 514 468 & Yves Degoyon (ydegoyon@free.fr);
-#X text 495 483 using GPL code from http://freeframe.sf.net;
-#X text 495 498 and Pete Warden http://petewarden.com;
-#X obj 164 410 print type;
-#X msg 344 46 pluginsdir /usr/lib/FreeFrame;
-#X text 341 -10 You need the FreeFrame plugins to use with this object.
-Install them from http://sourceforge.net/projects/freeframe/ And then
-use this message to load.;
-#X msg 551 46 pluginsdir /data/plugins_video/ubuntustudio/FreeFrame1.0-05/plugins_binary
-;
-#X connect 0 0 6 0;
-#X connect 0 1 20 0;
-#X connect 0 2 22 0;
-#X connect 0 3 42 0;
-#X connect 0 4 58 0;
-#X connect 0 5 52 0;
-#X connect 1 0 0 1;
-#X connect 2 0 7 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 4 0 5 0;
-#X connect 4 0 18 0;
-#X connect 5 0 2 0;
-#X connect 7 0 0 0;
-#X connect 8 0 1 0;
-#X connect 9 0 12 0;
-#X connect 10 0 13 0;
-#X connect 11 0 14 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 14 0 0 0;
-#X connect 17 0 2 0;
-#X connect 18 0 17 0;
-#X connect 22 0 42 1;
-#X connect 22 0 52 1;
-#X connect 24 0 7 0;
-#X connect 25 0 24 0;
-#X connect 26 0 25 0;
-#X connect 30 0 36 0;
-#X connect 31 0 37 0;
-#X connect 32 0 38 0;
-#X connect 33 0 39 0;
-#X connect 34 0 40 0;
-#X connect 35 0 41 0;
-#X connect 36 0 0 0;
-#X connect 37 0 0 0;
-#X connect 38 0 0 0;
-#X connect 39 0 0 0;
-#X connect 40 0 0 0;
-#X connect 41 0 0 0;
-#X connect 59 0 0 0;
-#X connect 61 0 0 0;
diff --git a/externals/pdvjtools/pdp_freeframe/pdp_freeframe.c b/externals/pdvjtools/pdp_freeframe/pdp_freeframe.c
deleted file mode 100644
index 717fd98f81b445a6b8abc43058ccf5f259d3e827..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_freeframe/pdp_freeframe.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- *   Pure Data Packet module.
- *   Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <dlfcn.h>
-
-#include "pdp.h"
-
-#include "FreeFrame.h"
-
-#define PLUGINDIR "plugins"
-#define FREEFRAME_PNAME_LENGTH 16
-#define FREEFRAME_ID_LENGTH 4
-#define FREEFRAME_PARAM_DETAILS_LENGTH 128
-
-#define FF_CAP_V_BITS_VIDEO	FF_CAP_24BITVIDEO
-
-typedef struct
-{
-    char	name[FREEFRAME_PNAME_LENGTH+1];
-    plugMainType *plugmain;
-    unsigned	instance;
-    unsigned	numparameters;
-} PLUGIN;
-
-typedef struct pdp_freeframe_struct
-{
-    t_object x_obj;
-    t_float x_f;
-
-    t_outlet *x_outlet0;
-    t_outlet *x_pname;
-    t_outlet *x_nparams;
-    t_outlet *x_parname;
-    t_outlet *x_partype;
-    t_outlet *x_pardefault;
-    int x_packet0;
-    int x_packet1;
-    int x_dropped;
-    int x_queue_id;
-
-    int x_width;
-    int x_height;
-    int x_size;
-
-    int x_plugin_count;
-    struct dirent **x_filename_list;
-    int x_filename_count;
-
-    int x_plugin; 
-    int x_infosok; 
-    char x_pdetails[FREEFRAME_PARAM_DETAILS_LENGTH]; 
-    t_symbol *plugindir;
-
-    PLUGIN *plugins;
-    
-} t_pdp_freeframe;
-
-
-void panic(const char *panicstr, ...)
-{
-    post("pdp_freeframe :: PANIC!! %s\n", panicstr);
-    exit(1);
-}
-
-static int selector(const struct dirent *dp)
-{    
-    return (strstr(dp->d_name, ".so") != NULL);
-}
-
-static void scan_plugins(t_pdp_freeframe *x, char *plugindir)
-{
-    x->x_filename_count = scandir(plugindir, &x->x_filename_list, selector, alphasort);
-    if (x->x_filename_count < 0)
-        x->x_filename_count = 0;
-}
-
-void ff_loadplugins(t_pdp_freeframe *x, t_symbol *plugindirsymbol)
-{
-    char* plugindir = plugindirsymbol->s_name;
-    char libname[PATH_MAX];
-    plugMainType *plugmain;
-    unsigned instance, numparameters;
-    int i;
-    char *pluginname;
-    void *plugin_handle;
-    
-    scan_plugins(x, plugindir);
-
-    x->x_plugin_count = 0;
-    x->plugins = (PLUGIN *)getbytes(x->x_filename_count*sizeof(PLUGIN));
-    if (x->plugins == NULL)
-    {
-        panic("no memory for loading plugins\n");
-    }  
-    else
-    {
-        post( "allocated plugins : %x", x->plugins );
-    }
-
-    for (i=0; i<x->x_filename_count; i++)
-    {
-        pluginname = x->x_filename_list[i]->d_name;
-	
-        snprintf(libname, PATH_MAX, "%s/%s", plugindir, pluginname);
-	
-        plugin_handle = dlopen(libname, RTLD_NOW);
-        dlerror();
-        plugmain = (plugMainType *)(unsigned)dlsym(plugin_handle, "plugMain");
-        if (plugmain == NULL)
-            panic("plugin %s: %s", x->x_filename_list[i]->d_name, dlerror());
-	
-        PlugInfoStruct *pis = (plugmain(FF_GETINFO, NULL, 0)).PISvalue;
-
-        if ((plugmain(FF_GETPLUGINCAPS, (LPVOID)FF_CAP_V_BITS_VIDEO, 0)).ivalue != FF_TRUE)
-            panic("plugin %s: no 24 bit support", pluginname);
-
-        if (pis->APIMajorVersion < 1)
-            panic("plugin %s: old api version", pluginname);
-	
-        if ((plugmain(FF_INITIALISE, NULL, 0)).ivalue == FF_FAIL)
-            panic("plugin %s: init failed", pluginname);
-	
-        VideoInfoStruct vidinfo;
-        vidinfo.frameWidth = x->x_width;
-        vidinfo.frameHeight = x->x_height;
-        vidinfo.orientation = 1;
-        vidinfo.bitDepth = FF_CAP_V_BITS_VIDEO;
-
-        instance = plugmain(FF_INSTANTIATE, &vidinfo, 0).ivalue;
-        if (instance == FF_FAIL)
-            panic("plugin %s: init failed",  pluginname);
-	
-        numparameters = plugmain(FF_GETNUMPARAMETERS, NULL, 0).ivalue;
-        if (numparameters == FF_FAIL)
-            panic("plugin %s: numparameters failed",  pluginname);
-	
-        x->plugins[x->x_plugin_count].plugmain = plugmain;
-	
-        strncpy(x->plugins[x->x_plugin_count].name, (char *)(pis->pluginName), 16);
-        x->plugins[x->x_plugin_count].name[16] = 0;
-	
-        x->plugins[x->x_plugin_count].instance = instance;
-        x->plugins[x->x_plugin_count].numparameters = numparameters;
-	
-        post("%s [%s] is loaded", x->plugins[x->x_plugin_count].name, pluginname);
-        x->x_plugin_count++;
-    }
-}
-
-void ff_processframe(t_pdp_freeframe *x, int plugin, void *buffer)
-{
-    x->plugins[plugin].plugmain(FF_PROCESSFRAME, buffer,  x->plugins[plugin].instance);
-}
-
-void ff_freeplugins(t_pdp_freeframe *x)
-{
-    t_int i;
-
-    for (i=0; i<x->x_plugin_count; i++)
-    {
-        plugMainType *plugmain = x->plugins[i].plugmain;
-    
-        plugmain(FF_DEINITIALISE, NULL, 0);
-        plugmain(FF_DEINSTANTIATE, NULL, x->plugins[i].instance);
-    }
-    post("freeing plugin resources : %x", x->plugins);
-    freebytes( x->plugins, x->x_filename_count*sizeof(PLUGIN) );
-    x->plugins = NULL;
-}
-
-static void pdp_freeframe_plugindir(t_pdp_freeframe *x, t_symbol *s)
-{
-    x->plugindir = s;
-    if( s != &s_)
-        ff_loadplugins(x, x->plugindir);
-}
-
-static void pdp_freeframe_process_rgb(t_pdp_freeframe *x)
-{
-    t_pdp     *header = pdp_packet_header(x->x_packet0);
-    short int *data   = (short int *)pdp_packet_data(x->x_packet0);
-    t_pdp     *newheader = pdp_packet_header(x->x_packet1);
-    short int *newdata = (short int *)pdp_packet_data(x->x_packet1); 
-      
-    if ( x->x_plugin_count <= 0 )
-    {
-        return;
-    }
-
-    if ((x->x_width != (t_int)header->info.image.width) || 
-        (x->x_height != (t_int)header->info.image.height)) 
-    {
-
-    	post("pdp_freeframe :: resizing plugins");
-	
-    	ff_freeplugins(x);
-
-    	x->x_width = header->info.image.width;
-    	x->x_height = header->info.image.height;
-    	x->x_size = x->x_width*x->x_height;
-    
-    	//load the plugins
-        ff_loadplugins(x, x->plugindir);
-    }
-    
-    newheader->info.image.encoding = header->info.image.encoding;
-    newheader->info.image.width = x->x_width;
-    newheader->info.image.height = x->x_height;
-
-    memcpy( newdata, data, x->x_size*3 );
-
-    ff_processframe(x, x->x_plugin, newdata);
-   
-    return;
-}
-
-static void pdp_freeframe_param(t_pdp_freeframe *x, t_floatarg f1, t_floatarg f2)
-{
-    int i=0;
-    plugMainType *plugmain = x->plugins[x->x_plugin].plugmain;
-    unsigned instance = x->plugins[x->x_plugin].instance;
-    unsigned numparameters = x->plugins[x->x_plugin].numparameters;
-
-    SetParameterStruct sps;
-    
-    //for (i=0; i<numparameters; i++)
-    //{
-	//if (plugmain(FF_GETPARAMETERTYPE, (LPVOID)i, 0).ivalue == FF_TYPE_TEXT)
-	//    continue;
-
-	//sps.value = plugmain(FF_GETPARAMETER, (LPVOID)i, instance).fvalue;
-
-	//post ("%d param.value %d", i, sps.value);
-	
-    //if((f2<=1)&&(f2>=0))
-    sps.value = f2;
-    //sps.value += .01;
-	//if (sps.value > 1.0) sps.value = 1.0;
-	//else
-	//if (sps.value < 0.0) sps.value = 0.0;
-	    
-	sps.index = f1;
-	plugmain(FF_SETPARAMETER, &sps, instance);
-    //}
-}
-
-static void pdp_freeframe_plugin(t_pdp_freeframe *x, t_floatarg f)
-{
-    unsigned pi;
-    char *parname;
-    int partype;
-    float pardefault;
-    t_atom plist[2];
-    t_atom tlist[2];
-    t_atom vlist[2];
-
-    if ( x->x_plugin_count <= 0 )
-    {
-        post( "freeframe : no plugins loaded, check your plugin directory setup" );
-        return;
-    }
-    if((f<x->x_plugin_count)&&(f>-1)) 
-    {
-        x->x_plugin = f;
-    }
-    else
-    {
-        post( "freeframe : plugin out of range : %d", (t_int)f );
-        return;
-    }
-    post ("pdp_freeframe :: %s selected, %d parameters", x->plugins[x->x_plugin].name, x->plugins[x->x_plugin].numparameters);
-    outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-    outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-    for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-    {
-        parname = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERNAME, (LPVOID)pi, 0)).svalue;
-        SETFLOAT(&plist[0], pi);
-        SETSYMBOL(&plist[1], gensym(parname) );
-        outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-    }  
-    for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-    {
-        partype = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERTYPE, (LPVOID)pi, 0)).ivalue;
-        SETFLOAT(&tlist[0], pi);
-        SETFLOAT(&tlist[1], partype );
-        outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-        if ( ( partype != FF_TYPE_TEXT ) &&  ( partype > 0 ) ) 
-        {
-            pardefault = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERDEFAULT, (LPVOID)pi, 0)).fvalue;
-            SETFLOAT(&vlist[0], pi);
-            SETFLOAT(&vlist[1], pardefault );
-            outlet_list( x->x_pardefault, &s_list, 2, &vlist[0] );
-        }
-    }  
-}
-
-static void pdp_freeframe_sendpacket(t_pdp_freeframe *x)
-{
-    /* release the packet */
-    pdp_packet_mark_unused(x->x_packet0);
-    x->x_packet0 = -1;
-
-    /* unregister and propagate if valid dest packet */
-    pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet1);
-}
-
-static void pdp_freeframe_process(t_pdp_freeframe *x)
-{
-    int encoding;
-    t_pdp *header = 0;
-    char *parname;
-    unsigned pi;
-    int partype;
-    float pardefault;
-    t_atom plist[2];
-    t_atom tlist[2];
-    t_atom vlist[2];
-
-    /* check if image data packets are compatible */
-    if ( (header = pdp_packet_header(x->x_packet0))
-         && (PDP_BITMAP == header->type)){
-    
-        /* pdp_freeframe_process inputs and write into active inlet */
-        switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
-
-        case PDP_BITMAP_RGB:
-            x->x_packet1 = pdp_packet_clone_rw(x->x_packet0);
-            pdp_queue_add(x, pdp_freeframe_process_rgb, pdp_freeframe_sendpacket, &x->x_queue_id);
-            break;
-
-        default:
-            /* don't know the type, so dont pdp_freeframe_process */
-            break;
-	    
-        }
-    }
-
-    // hack to display infos of first loaded plugin
-    if ( (x->x_plugin_count > 0) && (!x->x_infosok) )
-    {
-        x->x_infosok = 1;
-        outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-        outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-        for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-        {
-            parname = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERNAME, (LPVOID)pi, 0)).svalue;
-            SETFLOAT(&plist[0], pi);
-            SETSYMBOL(&plist[1], gensym(parname) );
-            outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-        }  
-        for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-        {
-            partype = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERTYPE, (LPVOID)pi, 0)).ivalue;
-            SETFLOAT(&tlist[0], pi);
-            SETFLOAT(&tlist[1], partype );
-            outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-            if ( ( partype != FF_TYPE_TEXT ) &&  ( partype > 0 ) ) 
-            {
-                pardefault = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERDEFAULT, (LPVOID)pi, 0)).fvalue;
-                SETFLOAT(&vlist[0], pi);
-                SETFLOAT(&vlist[1], pardefault );
-                outlet_list( x->x_pardefault, &s_list, 2, &vlist[0] );
-            }
-        }  
-    }
-}
-
-static void pdp_freeframe_input_0(t_pdp_freeframe *x, t_symbol *s, t_floatarg f)
-{
-    /* if this is a register_ro message or register_rw message, register with packet factory */
-
-    if (s == gensym("register_rw")) 
-        x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("bitmap/rgb/*") );
-
-    if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped))
-    {
-        /* add the process method and callback to the process queue */
-        pdp_freeframe_process(x);
-    }
-}
-
-static void pdp_freeframe_free(t_pdp_freeframe *x)
-{
-    int i;
-
-    pdp_queue_finish(x->x_queue_id);
-    pdp_packet_mark_unused(x->x_packet0);
-    ff_freeplugins(x);
-}
-
-t_class *pdp_freeframe_class;
-
-
-void *pdp_freeframe_new(t_floatarg f)
-{
-    int i;
-
-    t_pdp_freeframe *x = (t_pdp_freeframe *)pd_new(pdp_freeframe_class);
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("plugin"));
-
-    x->x_outlet0 = outlet_new(&x->x_obj, &s_anything); 
-    x->x_pname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_nparams = outlet_new(&x->x_obj, &s_anything); 
-    x->x_parname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_partype = outlet_new(&x->x_obj, &s_anything); 
-    x->x_pardefault = outlet_new(&x->x_obj, &s_anything); 
-
-    x->x_packet0 = -1;
-    x->x_packet1 = -1;
-    x->x_queue_id = -1;
-
-    x->x_width  = 320;
-    x->x_height = 240;
-    x->x_size   = x->x_width * x->x_height;
-
-    //load the plugins
-    x->x_plugin_count = 0;
-    x->x_infosok = 0;
-
-    char ff_plugin_dir[FILENAME_MAX];
-    char *home = getenv("HOME");
-    int home_len;
-    if(home != NULL)
-    {
-        home_len = strlen(home);
-        if(home_len >= FILENAME_MAX)
-            home_len = FILENAME_MAX - 1;
-        memcpy(ff_plugin_dir, home, home_len);
-        ff_plugin_dir[home_len] = '\0';
-        strncpy(ff_plugin_dir, "/.frf", FILENAME_MAX - home_len);
-        pdp_freeframe_plugindir(x, gensym(ff_plugin_dir));
-    }
-    pdp_freeframe_plugin(x, f);
-
-    return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-    void pdp_freeframe_setup(void)
-    {
-
-        post( "pdp_freeframe :: FreeFrame host for Pure Data Packet version 0.3\n                 by Lluis Gomez i Bigorda (lluis@artefacte.org) \n                 & Yves Degoyon (ydegoyon@free.fr)\n                 using GPL code from http://freeframe.sf.net\n                 and Pete Warden http://petewarden.com" );
-        pdp_freeframe_class = class_new(gensym("pdp_freeframe"), (t_newmethod)pdp_freeframe_new,
-                                        (t_method)pdp_freeframe_free, sizeof(t_pdp_freeframe), 0, A_DEFFLOAT, A_NULL);
-
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_input_0, gensym("pdp"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_plugin, gensym("plugin"),  A_FLOAT, A_NULL);   
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_param, gensym("param"),  A_FLOAT, A_FLOAT, A_NULL);   
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_plugindir, gensym("plugindir"),  A_SYMBOL, A_NULL);   
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_plugindir, gensym("pluginsdir"),  A_SYMBOL, A_NULL);   
-
-
-    }
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/externals/pdvjtools/pdp_frei0r/CHANGES.LOG b/externals/pdvjtools/pdp_frei0r/CHANGES.LOG
deleted file mode 100644
index a273448a8d4472359fbe26bd881557b9bd624469..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/CHANGES.LOG
+++ /dev/null
@@ -1,2 +0,0 @@
-0.1
-  initial release
diff --git a/externals/pdvjtools/pdp_frei0r/INSTALL b/externals/pdvjtools/pdp_frei0r/INSTALL
deleted file mode 100644
index 551090b87cd9f10cd0a562694dcd1c93b49fbfa0..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/INSTALL
+++ /dev/null
@@ -1,20 +0,0 @@
-1. Download Frei0r specs and plugins, here: http://www.piksel.org/frei0r
-   
-   darcs get http://darcs.gephex.org/frei0r/frei0r--main--1.1
-   cd to the frei0r-plugins-x.y.z directory
-   compile the plugins::
-   cd to plugins and type 'scons'
-   install the plugins::
-   type 'scons install'
-
-2. Download pdp_frei0r-0.1.tar.gz from http://www.artefacte.org/pd/pdp_frei0r-0.1.tar.gz
-   
-   untar the pdp_frei0r-0.1.tar.gz file
-   cd in to the pdp_frei0r-0.1 directory
-   
-   edit the Makefile.config file and change the path to the pd (m_pd.h), pdp (pdp.h) sources 
-   and frei0r plugin directory (.so) if needed.
-
-   type 'make'
-
-   to load the pdp_frei0r help file type 'pd -nrt -lib pdp:pdp_frei0r help_pdp_frei0r.pd'
diff --git a/externals/pdvjtools/pdp_frei0r/Makefile b/externals/pdvjtools/pdp_frei0r/Makefile
deleted file mode 100644
index 3282768ce160888b13fe8463cde912f872eb28d9..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-current: all
-
-include Makefile.config
-
-PDP_MOD = pdp_frei0r.o 
-
-all: $(PDP_MOD)
-	$(CC) --export-dynamic -shared -o pdp_frei0r.pd_linux *.o $(PDP_LIBS)
-
-clean:
-	rm -f *~
-	rm -f *.o
-	rm -f *.pd_linux
-
diff --git a/externals/pdvjtools/pdp_frei0r/Makefile.config b/externals/pdvjtools/pdp_frei0r/Makefile.config
deleted file mode 100644
index d1a4bd66f815055535a1693a22cdcf09cef3fcf4..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/Makefile.config
+++ /dev/null
@@ -1,22 +0,0 @@
-# if configure can't find the m_pd.h header         
-# specify pd's include path here and ignore the warning
-#
-FR_PLUGIN_DIR=/usr/local/lib/frei0r-1/
-PD_CPPFLAGS=-I../../../pd/src
-PDP_CFLAGS=-I../../pdp/include -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -ffast-math -freg-struct-return -DLINUX
-
-prefix=/usr/local
-PDPF_VERSION = 0.1
-PDPF_TARGET = linux
-PDPF_LIBRARY_NAME = pdp_frei0r.pd_linux
-
-PDP_CPPFLAGS =  -fPIC -I. -I/usr/X11R6/include  -I/usr/include $(PD_CPPFLAGS)  $(PDP_CFLAGS)
-
-PDP_CFLAGS += -fPIC -DPDPF_VERSION=\"$(PDPF_VERSION)\" -DFR_PLUGIN_DIR=\"$(FR_PLUGIN_DIR)\"
-
-CC = gcc
-
-# build rules
-
-.c.o:
-	$(CC) $(PDP_CFLAGS) $(PDP_CPPFLAGS) -o $*.o -c $*.c
diff --git a/externals/pdvjtools/pdp_frei0r/frei0r.h b/externals/pdvjtools/pdp_frei0r/frei0r.h
deleted file mode 100644
index 2e091133007b63a5a4a65e6d812efecdc7a65505..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/frei0r.h
+++ /dev/null
@@ -1,567 +0,0 @@
-/** @mainpage frei0r - a minimalistic plugin API for video effects
- *
- * @section sec_intro Introduction
- *
- * This is frei0r - a minimalistic plugin API for video effects.
- *
- * The main emphasis is on simplicity - there are many different applications
- * that use video effects, and they all have different requirements regarding
- * their internal plugin API. And that's why frei0r does not try to be a
- * one-in-all general video plugin API, but instead an API for the most
- * common video effects: simple filters, sources and mixers that can be
- * controlled by parameters.
- *
- * It's our hope that this way these simple effects can be shared between
- * many applications, avoiding their reimplementation by different
- * projects.
- *
- * On the other hand, this is not meant as a competing standard to
- * more ambitious efforts that try to satisfy the needs of many different
- * applications and more complex effects.
- *
- *
- * @section sec_overview Overview
- *
- * If you are new to frei0r, the best thing is probably to have
- * a look at the <a href="frei0r_8h-source.html">frei0r header</a>,
- * which is quite simple.
- *
- * After that, you might want to look at the 
- * <a href="frei0r_8h.html">frei0r functions</a> in more detail.
- *
- * When developing a new frei0r effect, you have to choose
- *  - which effect type to use (\ref PLUGIN_TYPE),
- *  - which color model to use (\ref COLOR_MODEL), and
- *  - which parameter types (\ref PARAM_TYPE) your effect will support.
- *
- * To round things up, you should decide whether your effect should have
- * an associated icon (\ref icons), and where it will be installed
- * (\ref pluglocations).
- *
- * @section sec_changes Changes
- *
- * @subsection sec_changes_1_0_1_1 From frei0r 1.0 to frei0r 1.1
- *
- *   - added specifications for plugin locations
- *   - added specifications for frei0r icons
- *   - added RGBA8888 color model
- *   - added packed32 color model
- *   - added better specification of color models
- *   - added string type
- *   - added bounds to resolution (8 <= width, height <= 2048)
- *   - width and height must be an integer multiple of 8
- *   - frame data must be 16 byte aligned
- *   - improved update specification (must not change parameters,
- *      must restore fpu state)
- *   - added note for applications to ignore effects with unknown fields
- *   - added new plugin types mixer2 and mixer3
- *   - added section about \ref concurrency
- */
-
-
-/**
- * \addtogroup pluglocations Plugin Locations
- * @section sec_pluglocations Plugin Locations
- *
- * For Unix platforms there are rules for the location of frei0r plugins.
- *
- * frei0r 1.x plugin files should be located in
- *
- * - (1) /usr/lib/frei0r-1/\<vendor\>
- * - (2) /usr/local/lib/frei0r-1/\<vendor\>
- * - (3) $HOME/.frei0r-1/lib/\<vendor\>
- *
- * Examples:
- *
- * - /usr/lib/frei0r-1/mob/flippo.so
- * - /usr/lib/frei0r-1/drone/flippo.so
- * - /usr/local/lib/frei0r-1/gephex/coma/invert0r.so
- * - /home/martin/.frei0r-1/lib/martin/test.so
- *
- * Like in these examples plugins should be placed in "vendor" subdirs
- * to reduce name clashes.
- *
- * @subsection sec_order Plugin Loading Order
- *
- * The application shall load plugins in the following order: 3, 2, 1.
- * If a name clash occurs (two or more frei0r plugins with identical
- * effect name), the plugins in directory 3 have precedence over plugins
- * in directory 2, and those in directory 2 have precedence over plugins
- * in directory 1.
- *
- * This makes it possible for users to "override" effects that are
- * installed in system wide directories by placing plugins in their
- * home directory.
- *
- * The order of loading plugins inside each of the directories 
- * 1, 2, and 3 is not defined.
- */
-
-/**
- *\addtogroup icons Icons for frei0r effects
- * @section sec_icons Icons for frei0r effects
- *
- * Each frei0r effect can have an associated icon.
- *
- * @subsection sec_icon_format Icon Format
- *
- * The format of frei0r icons must be png.
- * Recommended resolution is 64x64.
- * The icon filename of an effect with effect name "frei0r"
- * must be "frei0r.png".
- *
- * @subsection sec_icon_location Icon location
- *
- * The exact location where the application should look for the
- * plugin is platform dependant.
- *
- * For Windows platforms, the icon should be at the same place as
- * the plugin containing the effect.
- *
- * For Unix platforms, the following mapping from plugin location
- * to icon location must be used:
- *
- * Let \<plugin_path\>/\<plugin\> be a frei0r plugin with name \<effect_name\>.
- * Then the corresponding icon (if any) shall be located in
- * \<icon_path\>/\<effect_name\>.png.
- * \<icon_path\> can be obtained in the following way:
- *
- * @verbatim
-  <plugin_path>                   |     <icon_path>                   
- ----------------------------------------------------------------------------
- $HOME/.frei0r-1/lib/<vendor>     | $HOME/.frei0r-1/icons/<vendor>    
- /usr/local/lib/frei0r-1/<vendor> | /usr/local/share/frei0r-1/icons/<vendor>
- /usr/lib/frei0r-1/<vendor>       | /usr/share/frei0r-1/icons/<vendor>
-          *                       | <plugin_path>
- @endverbatim
- *
- * (The wildcard '*' stands for any other plugin_path)
- *
- * For other platforms, no location is defined. We recommend to use the
- * plugin path where possible.
- */
-
-/**
- * \addtogroup concurrency Concurrency
- * @section sec_concurrency Concurrency
- *
- * - \ref f0r_init
- * - \ref f0r_deinit
- *
- * These methods must not be called more than once. It is obvious that no
- * concurrent calls are allowed.
- *
- *
- * - \ref f0r_get_plugin_info
- * - \ref f0r_get_param_info
- * - \ref f0r_construct
- * - \ref f0r_destruct
- *
- * Concurrent calls of these functions are allowed.
- *
- *
- * - \ref f0r_set_param_value
- * - \ref f0r_get_param_value
- * - \ref f0r_update
- * - \ref f0r_update2
- *
- * If a thread is in one of these methods its allowed for another thread to
- * enter one of theses methods for a different effect instance. But for one
- * effect instance only one thread is allowed to execute any of these methods. 
- */
-
-
-
-/** \file
- * \brief This file defines the frei0r api, version 1.1.
- *
- * A conforming plugin must implement and export all functions declared in
- * this header.
- *
- * A conforming application must accept only those plugins which use
- * allowed values for the described fields.
- */
-
-#ifndef INCLUDED_FREI0R_H
-#define INCLUDED_FREI0R_H
-
-#include <inttypes.h>
-
-/**
- * The frei0r API major version
- */
-#define FREI0R_MAJOR_VERSION 1
-
-/**
- * The frei0r API minor version
- */
-#define FREI0R_MINOR_VERSION 1
-
-//---------------------------------------------------------------------------
-
-/**
- * f0r_init() is called once when the plugin is loaded by the application.
- * \see f0r_deinit
- */
-int f0r_init(void);
-
-/**
- * f0r_deinit is called once when the plugin is unloaded by the application.
- * \see f0r_init
- */
-void f0r_deinit(void);
-
-//---------------------------------------------------------------------------
-
-/** \addtogroup PLUGIN_TYPE Type of the Plugin
- * These defines determine whether the plugin is a
- * source, a filter or one of the two mixer types
- *  @{
- */
-
-/** one input and one output */
-#define F0R_PLUGIN_TYPE_FILTER 0
-/** just one output */
-#define F0R_PLUGIN_TYPE_SOURCE 1
-/** two inputs and one output */
-#define F0R_PLUGIN_TYPE_MIXER2 2
-/** three inputs and one output */
-#define F0R_PLUGIN_TYPE_MIXER3 3
-
-/** @} */
-
-//---------------------------------------------------------------------------
-
-/** \addtogroup COLOR_MODEL Color Models
- * List of supported color models.
- *
- * Note: the color models are endian independent, because the
- * color components are defined by their positon in memory, not
- * by their significance in an uint32_t value.
- * 
- * For effects that work on the color components,
- * RGBA8888 is the recommended color model for frei0r-1.1 effects.
- * For effects that only work on pixels, PACKED32 is the recommended
- * color model since it helps the application to avoid unnecessary
- * color conversions.
- *
- * Effects can choose an appropriate color model, applications must support
- * all color models and do conversions if necessary. Source effects
- * must not use the PACKED32 color model because the application must know
- * in which color model the created framebuffers are represented.
- *
- * For each color model, a frame consists of width*height pixels which
- * are stored row-wise and consecutively in memory. The size of a pixel is
- * 4 bytes. There is no extra pitch parameter
- * (i.e. the pitch is simply width*4).
- *
- * The following additional constraints must be honored:
- *   - The top-most line of a frame is stored first in memory.
- *   - A frame must be aligned to a 16 byte border in memory.
- *   - The width and height of a frame must be positive
- *   - The width and height of a frame must be integer multiples of 8
- *
- * These constraints make sure that each line is stored at an address aligned
- * to 16 byte.
- */
-/*@{*/
-/**
- * In BGRA8888, each pixel is represented by 4 consecutive
- * unsigned bytes, where the first byte value represents
- * the blue, the second the green, and the third the red color
- * component of the pixel. The last value represents the
- * alpha value.
- */
-#define F0R_COLOR_MODEL_BGRA8888 0
-
-/**
- * In RGBA8888, each pixel is represented by 4 consecutive
- * unsigned bytes, where the first byte value represents
- * the red, the second the green, and the third the blue color
- * component of the pixel. The last value represents the
- * alpha value.
- */
-#define F0R_COLOR_MODEL_RGBA8888 1
-
-/**
- * In PACKED32, each pixel is represented by 4 consecutive
- * bytes, but it is not defined how the color componets are
- * stored. The true color format could be RGBA8888,
- * BGRA8888, a packed 32 bit YUV format, or any other
- * color format that stores pixels in 32 bit.
- *
- * This is useful for effects that don't work on color but
- * only on pixels (for example a mirror effect).
- *
- * Note that source effects must not use this color model.
- */
-#define F0R_COLOR_MODEL_PACKED32 2
-/*@}*/
-
-/**
- * The f0r_plugin_info_t structure is filled in by the plugin
- * to tell the application about its name, type, number of parameters,
- * and version. 
- *
- * An application should ignore (i.e. not use) frei0r effects that
- * have unknown values in the plugin_type or color_model field.
- * It should also ignore effects with a too high frei0r_version.
- *
- * This is necessary to be able to extend the frei0r spec (e.g.
- * by adding new color models or plugin types) in a way that does not
- * result in crashes when loading effects that make use of these
- * extensions into an older application.
- *
- * All strings are unicode, 0-terminated, and the encoding is utf-8.
- */
-typedef struct f0r_plugin_info
-{
-  const char* name;    /**< The (short) name of the plugin                   */
-  const char* author;  /**< The plugin author                                */
-  /** The plugin type
-   * \see PLUGIN_TYPE
-   */
-  int plugin_type;    
-  int color_model;     /**< The color model used                             */
-  int frei0r_version;  /**< The frei0r major version this plugin is built for*/
-  int major_version;   /**< The major version of the plugin                  */
-  int minor_version;   /**< The minor version of the plugin                  */
-  int num_params;      /**< The number of parameters of the plugin           */
-  const char* explanation; /**< An optional explanation string               */
-} f0r_plugin_info_t;
-
-
-/**
- * Is called once after init. The plugin has to fill in the values in info.
- *
- * \param info Pointer to an info struct allocated by the application.
- */
-void f0r_get_plugin_info(f0r_plugin_info_t* info);
-
-//---------------------------------------------------------------------------
-
-/** \addtogroup PARAM_TYPE Parameter Types
- *
- *  @{
- */
-
-
-/**
- * Parameter type for boolean values
- * \see f0r_param_bool
- */
-#define F0R_PARAM_BOOL      0
-
-/**
- * Parameter type for doubles
- * \see f0r_param_double
- */
-#define F0R_PARAM_DOUBLE    1
-
-/**
- * Parameter type for color
- * \see f0r_param_color
- */
-#define F0R_PARAM_COLOR     2
-/**
- * Parameter type for position
- * \see f0r_param_position
- */
-#define F0R_PARAM_POSITION  3
-
-/**
- * Parameter type for string
- * \see f0r_param_string
- */
-#define F0R_PARAM_STRING  4
-
-/**
- * The boolean type. The allowed range of values is [0, 1].
- * [0, 0.5[ is mapped to false and [0.5, 1] is mapped to true.
- */
-typedef double f0r_param_bool;
-
-/**
- * The double type. The allowed range of values is [0, 1].
- */
-typedef double f0r_param_double;
-
-/**
- * The color type. All three color components are in the range [0, 1].
- */
-typedef struct f0r_param_color
-{
-  float r; /**< red color component */
-  float g; /**< green color component */
-  float b; /**< blue color component */
-} f0r_param_color_t;
-
-/**
- * The position type. Both position coordinates are in the range [0, 1].
- */
-typedef struct f0r_param_position
-{
-  double x; /**< x coordinate */
-  double y; /**< y coordinate */
-} f0r_param_position_t;
-
-
-/**
- * The string type. 
- * Zero terminated array of 8-bit values in utf-8 encoding
- */
-typedef char f0r_param_string;
-
-/**  @} */
-
-
-/**
- * Similar to f0r_plugin_info_t, this structure is filled by the plugin
- * for every parameter.
- *
- * All strings are unicode, 0-terminated, and the encoding is utf-8.
- */
-typedef struct f0r_param_info
-{
-  const char* name;         /**<The (short) name of the param */
-  int type;                 /**<The type (see the F0R_PARAM_* defines) */
-  const char* explanation;  /**<Optional explanation (can be 0) */
-} f0r_param_info_t;
-
-/**
- * f0r_get_param_info is called by the application to query the type of
- * each parameter.
- *
- * \param info is allocated by the application and filled by the plugin
- * \param param_index the index of the parameter to be queried (from 0 to
- *   num_params-1)
- */
-void f0r_get_param_info(f0r_param_info_t* info, int param_index);
-
-//---------------------------------------------------------------------------
-
-/**
- * Transparent instance pointer of the frei0r effect.
- */
-typedef void* f0r_instance_t;
-
-/**
- * Constructor for effect instances. The plugin returns a pointer to
- * its internal instance structure.
- *
- * The resolution has to be an integer multiple of 8,
- * must be greater than 0 and be at most 2048 in both dimensions.
- *
- * \param width The x-resolution of the processed video frames
- * \param height The y-resolution of the processed video frames
- * \returns 0 on failure or a pointer != 0 on success
- *
- * \see f0r_destruct
- */
-f0r_instance_t f0r_construct(unsigned int width, unsigned int height);
-
-/**
- * Destroys an effect instance.
- *
- * \param instance The pointer to the plugins internal instance structure.
- *
- * \see f0r_construct
- */
-void f0r_destruct(f0r_instance_t instance);
-
-//---------------------------------------------------------------------------
-
-/**
- * Transparent parameter handle.
- */
-typedef void* f0r_param_t;
-
-/**
- * This function allows the application to set the parameter values of an
- * effect instance. Validity of the parameter pointer is handled by the
- * application thus the data must be copied by the effect.
- *
- * \param instance the effect instance
- * \param param pointer to the parameter value
- * \param param_index index of the parameter
- *
- * \see f0r_get_param_value
- */
-void f0r_set_param_value(f0r_instance_t instance, 
-			 f0r_param_t param, int param_index);
-
-/**
- * This function allows the application to query the parameter values of an
- * effect instance.
- *
- * \param instance the effect instance
- * \param param pointer to the parameter value
- * \param param_index index of the parameter
- *
-  * \see f0r_set_param_value
- */
-void f0r_get_param_value(f0r_instance_t instance,
-			 f0r_param_t param, int param_index);
-
-//---------------------------------------------------------------------------
-
-/**
- * This is where the core effect processing happens. The application calls it
- * after it has set the necessary parameter values.
- * inframe and outframe must be aligned to an integer multiple of 16 bytes
- * in memory.
- *
- * This funcition should not alter the parameters of the effect in any
- * way (\ref f0r_get_param_value should return the same values after a call
- * to \ref f0r_update as before the call).
- *
- * The function is responsible to restore the fpu state (e.g. rounding mode)
- * and mmx state if applicable before it returns to the caller.
- *
- * The host mustn't call \ref f0r_update for effects of type
- * \ref F0R_PLUGIN_TYPE_MIXER2 and \ref F0R_PLUGIN_TYPE_MIXER3.
- *
- * \param instance the effect instance
- * \param time the application time in seconds but with subsecond resolution
- *        (e.g. milli-second resolution). The resolution should be at least
- *        the inter-frame period of the application.
- * \param inframe the incoming video frame (can be zero for sources)
- * \param outframe the resulting video frame
- *
- * \see f0r_update2
- */
-void f0r_update(f0r_instance_t instance, 
-		double time, const uint32_t* inframe, uint32_t* outframe);
-
-//---------------------------------------------------------------------------
-
-/**
- * For effects of type \ref F0R_PLUGIN_TYPE_SOURCE or
- * \ref F0R_PLUGIN_TYPE_FILTER this method is optional. The \ref f0r_update
- * method must still be exported for these two effect types. If both are
- * provided the behavior of them must be the same.
- *
- * Effects of type \ref F0R_PLUGIN_TYPE_MIXER2 or \ref F0R_PLUGIN_TYPE_MIXER3 must provide the new \ref f0r_update2 method.
-
- * \param instance the effect instance
- * \param time the application time in seconds but with subsecond resolution
- *        (e.g. milli-second resolution). The resolution should be at least
- *        the inter-frame period of the application.
- * \param inframe1 the first incoming video frame (can be zero for sources)
- * \param inframe2 the second incoming video frame
-          (can be zero for sources and filters)
- * \param inframe3 the third incoming video frame
-          (can be zero for sources, filters and mixer3) 
- * \param outframe the resulting video frame
- *
- * \see f0r_update
- */
-void f0r_update2(f0r_instance_t instance,
-		 double time,
-		 const uint32_t* inframe1,
-		 const uint32_t* inframe2,
-		 const uint32_t* inframe3,
-		 uint32_t* outframe);
-//---------------------------------------------------------------------------
-
-#endif
diff --git a/externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd b/externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd
deleted file mode 100644
index 6483397853136417641d22a09ff576f417299cc8..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd
+++ /dev/null
@@ -1,330 +0,0 @@
-#N canvas 528 22 996 665 10;
-#X floatatom 151 379 5 0 0 0 - - -;
-#X obj 196 377 hradio 15 1 0 49 empty empty empty 0 -6 0 8 -262144
--1 -1 0;
-#X obj 261 171 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 401 171 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 541 171 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 258 191 param 3 \$1;
-#X msg 398 190 param 4 \$1;
-#X msg 539 190 param 5 \$1;
-#X text 197 358 Select the plugin;
-#X text 258 72 Adjust plugin parameters.;
-#X symbolatom 87 501 20 0 0 0 - - -;
-#X text 240 501 <-- plugin name;
-#X floatatom 106 479 5 0 0 0 - - -;
-#X text 154 477 <-- number of parameters;
-#X text 205 451 <-- parameter name;
-#X text 232 423 <-- parameter type;
-#X obj 263 112 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 401 112 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 542 112 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 261 234 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 402 234 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 544 234 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 260 131 param 0 \$1;
-#X msg 398 131 param 1 \$1;
-#X msg 539 131 param 2 \$1;
-#X msg 260 254 param 6 \$1;
-#X msg 399 253 param 7 \$1;
-#X msg 541 253 param 8 \$1;
-#N canvas 0 22 996 665 pname 0;
-#X obj 51 119 l2s;
-#X obj 80 119 l2s;
-#X obj 111 119 l2s;
-#X obj 143 119 l2s;
-#X obj 207 120 l2s;
-#X obj 236 120 l2s;
-#X obj 267 120 l2s;
-#X obj 298 119 l2s;
-#X obj 327 119 l2s;
-#X obj 97 51 inlet;
-#X obj 51 154 s ffparam0;
-#X obj 79 178 s ffparam1;
-#X obj 118 205 s ffparam2;
-#X obj 148 227 s ffparam3;
-#X obj 185 157 s ffparam4;
-#X obj 213 181 s ffparam5;
-#X obj 255 206 s ffparam6;
-#X obj 283 230 s ffparam7;
-#X obj 305 155 s ffparam8;
-#X obj 391 53 inlet;
-#X msg 390 79 symbol;
-#X obj 359 118 l2s;
-#X obj 391 118 l2s;
-#X obj 97 79 route 0 1 2 3 4 5 6 7 8 9 10;
-#X obj 357 178 s ffparam9;
-#X obj 414 202 s ffparam10;
-#X connect 0 0 10 0;
-#X connect 1 0 11 0;
-#X connect 2 0 12 0;
-#X connect 3 0 13 0;
-#X connect 4 0 14 0;
-#X connect 5 0 15 0;
-#X connect 6 0 16 0;
-#X connect 7 0 17 0;
-#X connect 8 0 18 0;
-#X connect 9 0 23 0;
-#X connect 19 0 20 0;
-#X connect 20 0 10 0;
-#X connect 20 0 11 0;
-#X connect 20 0 12 0;
-#X connect 20 0 13 0;
-#X connect 20 0 14 0;
-#X connect 20 0 15 0;
-#X connect 20 0 16 0;
-#X connect 20 0 17 0;
-#X connect 20 0 18 0;
-#X connect 20 0 24 0;
-#X connect 20 0 25 0;
-#X connect 21 0 24 0;
-#X connect 22 0 25 0;
-#X connect 23 0 0 0;
-#X connect 23 1 1 0;
-#X connect 23 2 2 0;
-#X connect 23 3 3 0;
-#X connect 23 4 4 0;
-#X connect 23 5 5 0;
-#X connect 23 6 6 0;
-#X connect 23 7 7 0;
-#X connect 23 8 8 0;
-#X connect 23 9 21 0;
-#X connect 23 10 22 0;
-#X restore 137 451 pd pname;
-#X symbolatom 260 93 18 0 0 0 - ffparam0 -;
-#X symbolatom 399 92 18 0 0 0 - ffparam1 -;
-#X symbolatom 538 92 18 0 0 0 - ffparam2 -;
-#X symbolatom 261 154 18 0 0 0 - ffparam3 -;
-#X symbolatom 400 153 18 0 0 0 - ffparam4 -;
-#X symbolatom 539 153 18 0 0 0 - ffparam5 -;
-#X symbolatom 261 214 18 0 0 0 - ffparam6 -;
-#X symbolatom 400 213 18 0 0 0 - ffparam7 -;
-#X symbolatom 539 213 18 0 0 0 - ffparam8 -;
-#X text 489 424 frei0r host for Pure Data Packet version 0.1;
-#X text 491 439 by Lluis Gomez i Bigorda (lluis@artefacte.org);
-#X text 510 452 & Yves Degoyon (ydegoyon@free.fr);
-#X text 491 495 made at piksel yearly gathering : http://www.piksel.no
-;
-#X obj 155 423 print type;
-#X text 491 467 using frei0r specification 1.1 by Georg Seidel \, Phillip
-Promesberger and Martin Bayer;
-#X obj 261 304 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 404 304 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X symbolatom 261 283 18 0 0 0 - ffparam9 -;
-#X symbolatom 400 283 18 0 0 0 - ffparam10 -;
-#X msg 259 323 param 9 \$1;
-#X msg 401 323 param 10 \$1;
-#X obj 46 545 pdp_xv;
-#N canvas 222 59 450 300 input1 0;
-#X obj 49 181 pdp_qt;
-#X msg 49 49 bang;
-#X msg 110 111 loop 1;
-#X obj 50 214 pdp_scale 320 240;
-#X msg 167 111 open \$1;
-#X obj 167 89 openpanel;
-#X text 98 49 Load a mov file;
-#X obj 244 113 pdp_v4l;
-#X msg 244 58 bang;
-#X obj 49 250 outlet;
-#X obj 49 5 inlet;
-#X obj 251 7 inlet;
-#X obj 247 33 route 0;
-#X msg 298 59 stop;
-#X obj 50 28 route 0;
-#X msg 14 79 stop;
-#X obj 49 111 metro 80;
-#X obj 244 86 metro 80;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 16 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 17 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 8 0;
-#X connect 13 0 17 0;
-#X connect 14 0 15 0;
-#X connect 14 1 1 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 17 0 7 0;
-#X restore 44 44 pd input1;
-#X text 49 24 .mov;
-#X text 115 24 cam;
-#X obj 102 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 44 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X text 85 89 .mov;
-#X text 151 89 cam;
-#X obj 138 75 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 80 75 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#N canvas 222 59 450 300 input2 0;
-#X obj 49 181 pdp_qt;
-#X msg 49 49 bang;
-#X msg 110 111 loop 1;
-#X obj 50 214 pdp_scale 320 240;
-#X msg 167 111 open \$1;
-#X obj 167 89 openpanel;
-#X text 98 49 Load a mov file;
-#X obj 244 113 pdp_v4l;
-#X msg 244 58 bang;
-#X obj 49 250 outlet;
-#X obj 49 5 inlet;
-#X obj 251 7 inlet;
-#X obj 247 33 route 0;
-#X msg 298 59 stop;
-#X obj 50 28 route 0;
-#X msg 14 79 stop;
-#X obj 49 111 metro 80;
-#X obj 244 86 metro 80;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 16 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 17 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 8 0;
-#X connect 13 0 17 0;
-#X connect 14 0 15 0;
-#X connect 14 1 1 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 17 0 7 0;
-#X restore 80 109 pd input2;
-#X text 116 148 .mov;
-#X text 182 148 cam;
-#X obj 169 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 111 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#N canvas 222 59 450 300 input3 0;
-#X obj 49 181 pdp_qt;
-#X msg 49 49 bang;
-#X msg 110 111 loop 1;
-#X obj 50 214 pdp_scale 320 240;
-#X msg 167 111 open \$1;
-#X obj 167 89 openpanel;
-#X text 98 49 Load a mov file;
-#X obj 244 113 pdp_v4l;
-#X msg 244 58 bang;
-#X obj 49 250 outlet;
-#X obj 49 5 inlet;
-#X obj 251 7 inlet;
-#X obj 247 33 route 0;
-#X msg 298 59 stop;
-#X obj 50 28 route 0;
-#X msg 14 79 stop;
-#X obj 49 111 metro 80;
-#X obj 244 86 metro 80;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 16 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 17 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 8 0;
-#X connect 13 0 17 0;
-#X connect 14 0 15 0;
-#X connect 14 1 1 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 17 0 7 0;
-#X restore 111 168 pd input3;
-#X obj 43 202 pdp_scale 320 240;
-#X obj 69 232 pdp_scale 320 240;
-#X obj 93 262 pdp_scale 320 240;
-#X obj 905 409 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 905 461 pdp_control;
-#X msg 905 434 thread \$1;
-#X floatatom 905 522 5 0 0 0 - - -;
-#X obj 905 493 route pdp_drop;
-#X text 498 547 constructor : pdp_frei0r <index>;
-#X obj 46 376 pdp_frei0r 16;
-#X text 499 562 you can get the index from the list of loaded plugins
-;
-#X text 498 575 at startup ( check pd window );
-#X text 13 290 WARNING : sizes of inputs;
-#X text 12 302 _must_ be the same;
-#X msg 290 18 plugindir /usr/local/lib/frei0r-1;
-#X connect 0 0 75 3;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 7 0;
-#X connect 5 0 75 0;
-#X connect 6 0 75 0;
-#X connect 7 0 75 0;
-#X connect 12 0 28 1;
-#X connect 16 0 22 0;
-#X connect 17 0 23 0;
-#X connect 18 0 24 0;
-#X connect 19 0 25 0;
-#X connect 20 0 26 0;
-#X connect 21 0 27 0;
-#X connect 22 0 75 0;
-#X connect 23 0 75 0;
-#X connect 24 0 75 0;
-#X connect 25 0 75 0;
-#X connect 26 0 75 0;
-#X connect 27 0 75 0;
-#X connect 44 0 48 0;
-#X connect 45 0 49 0;
-#X connect 48 0 75 0;
-#X connect 49 0 75 0;
-#X connect 51 0 66 0;
-#X connect 54 0 51 1;
-#X connect 55 0 51 0;
-#X connect 58 0 60 1;
-#X connect 59 0 60 0;
-#X connect 60 0 67 0;
-#X connect 63 0 65 1;
-#X connect 64 0 65 0;
-#X connect 65 0 68 0;
-#X connect 66 0 75 0;
-#X connect 67 0 75 1;
-#X connect 68 0 75 2;
-#X connect 69 0 71 0;
-#X connect 70 0 73 0;
-#X connect 71 0 70 0;
-#X connect 73 0 72 0;
-#X connect 75 0 50 0;
-#X connect 75 1 10 0;
-#X connect 75 2 12 0;
-#X connect 75 3 28 0;
-#X connect 75 4 42 0;
-#X connect 80 0 75 0;
diff --git a/externals/pdvjtools/pdp_frei0r/pdp_frei0r.c b/externals/pdvjtools/pdp_frei0r/pdp_frei0r.c
deleted file mode 100644
index 7e6c176472649db3bcb4871dd63c276d37e71a57..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pdp_frei0r/pdp_frei0r.c
+++ /dev/null
@@ -1,660 +0,0 @@
-/*
- *   Pure Data Packet module.
- *   Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <dlfcn.h>
-
-#include "pdp.h"
-#include "frei0r.h"
-
-#define FREI0R_PNAME_LENGTH 128
-
-typedef struct
-{
-    char name[FREI0R_PNAME_LENGTH+1];
-    unsigned numparameters;
-    int plugin_type;
-    f0r_instance_t instance;
-    f0r_plugin_info_t plugin_info;
-    int (*f0r_init)(void);
-    void (*f0r_get_plugin_info)(f0r_plugin_info_t* pluginInfo);
-    void (*f0r_get_param_info)(f0r_param_info_t* info, int param_index);
-    f0r_instance_t (*f0r_construct)(unsigned int width, unsigned int height);
-    void (*f0r_destruct)(f0r_instance_t instance);
-    void (*f0r_set_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index);
-    void (*f0r_get_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index);
-    void (*f0r_update)(f0r_instance_t instance, double time, const uint32_t* inframe, uint32_t* outframe);
-    void (*f0r_update2)(f0r_instance_t instance, double time,
-                      const uint32_t* inframe1, const uint32_t* inframe2, const uint32_t* inframe3, uint32_t* outframe);
-    int (*f0r_deinit)(void);
-} PLUGIN;
-
-typedef struct pdp_frei0r_struct
-{
-    t_object x_obj;
-    t_float x_f;
-
-    t_outlet *x_outlet0;
-    t_outlet *x_pname;
-    t_outlet *x_nparams;
-    t_outlet *x_parname;
-    t_outlet *x_partype;
-    int x_packet0;
-    int x_packet1;
-    int x_packet2;
-    int x_packet3;
-
-    // middle input packets
-    int x_packetm0;
-    int x_packetm1;
-
-    // right input packets
-    int x_packetr0;
-    int x_packetr1;
-
-    int x_dropped;
-    int x_queue_id;
-
-    int x_width;
-    int x_height;
-    int x_size;
-
-    int x_plugin_count;
-    struct dirent **x_filename_list;
-    int x_filename_count;
-
-    int x_plugin; 
-    int x_infosok; 
-
-    t_symbol *plugindir;
-
-    PLUGIN *plugins;
-    
-} t_pdp_frei0r;
-
-void panic(const char *panicstr, ...)
-{
-    post("pdp_frei0r :: PANIC!! %s\n", panicstr);
-    exit(1);
-}
-
-static int selector(const struct dirent *dp)
-{    
-    return (strstr(dp->d_name, ".so") != NULL);
-}
-
-static void scan_plugins(t_pdp_frei0r *x, char *plugindir)
-{
-    x->x_filename_count = scandir(plugindir, &x->x_filename_list, selector, alphasort);
-    if (x->x_filename_count < 0)
-    {
-       x->x_filename_count = 0;
-    }
-}
-
-void fr_loadplugins(t_pdp_frei0r *x, t_symbol *plugindirsymbol)
-{
-    char* plugindir = plugindirsymbol->s_name;
-    char libname[PATH_MAX];
-    int i;
-    char *pluginname;
-    void *plugin_handle;
-    
-    scan_plugins(x, plugindir);
-
-    x->x_plugin_count = 0;
-    x->plugins = (PLUGIN *)getbytes(x->x_filename_count*sizeof(PLUGIN));
-    if (x->plugins == NULL)
-    {
-	panic("no memory for loading plugins\n");
-    }  
-    else
-    {
-        post( "allocated plugins : %x", x->plugins );
-    }
-
-    for (i=0; i<x->x_filename_count; i++)
-    {
-	pluginname = x->x_filename_list[i]->d_name;
-	
-	snprintf(libname, PATH_MAX, "%s/%s", plugindir, pluginname);
-	
-        post( "pdp_frei0r : opening : %s", pluginname );
-
-	plugin_handle = dlopen(libname, RTLD_NOW);
-	dlerror();
-
-        // get functions pointers
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_init) = dlsym(plugin_handle, "f0r_init");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_get_plugin_info) = dlsym(plugin_handle, "f0r_get_plugin_info");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_get_param_info) = dlsym(plugin_handle, "f0r_get_param_info");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_construct) = dlsym(plugin_handle, "f0r_construct");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_destruct) = dlsym(plugin_handle, "f0r_destruct");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_set_param_value) = dlsym(plugin_handle, "f0r_set_param_value");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_get_param_value) = dlsym(plugin_handle, "f0r_get_param_value");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_update) = dlsym(plugin_handle, "f0r_update");
-	dlerror();
-
-        // check for special function update2
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_update2) = dlsym(plugin_handle, "f0r_update2");
-        if (!dlerror())
-        {
-           // continue;
-        }
-
-        // init plugin
-        (*x->plugins[x->x_plugin_count].f0r_init)();
-
-        // instantiate
-        x->plugins[x->x_plugin_count].instance = (*x->plugins[x->x_plugin_count].f0r_construct)(x->x_width, x->x_height);
-
-        // get plugin infos
-        (*x->plugins[x->x_plugin_count].f0r_get_plugin_info)(&x->plugins[x->x_plugin_count].plugin_info); 
-        strcpy( x->plugins[x->x_plugin_count].name, x->plugins[x->x_plugin_count].plugin_info.name );
-        x->plugins[x->x_plugin_count].numparameters=x->plugins[x->x_plugin_count].plugin_info.num_params;
-        x->plugins[x->x_plugin_count].plugin_type=x->plugins[x->x_plugin_count].plugin_info.plugin_type;
-
-        if ( ( x->plugins[x->x_plugin_count].plugin_info.color_model != F0R_COLOR_MODEL_RGBA8888 ) &&
-             ( x->plugins[x->x_plugin_count].plugin_info.color_model != F0R_COLOR_MODEL_BGRA8888 ) &&
-             ( x->plugins[x->x_plugin_count].plugin_info.color_model != F0R_COLOR_MODEL_PACKED32 ) )
-        {
-           post( "pdp_frei0r : warning : plugin : %s use unsupported color model (%d) : ignored ...", 
-                              pluginname, x->plugins[x->x_plugin_count].plugin_info.color_model );
-           continue;
-        }
- 
-        x->x_plugin_count++;
-    }
-}
-
-void fr_processframe(t_pdp_frei0r *x, int plugin, void *ibuffer, void *imbuffer, void *irbuffer, void *obuffer)
-{
-   double time = 0.0;
-
-      if ( x->x_plugin_count <= 0 )
-      {
-           return;
-      }
-
-      if ( ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_FILTER ) ||
-           ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_SOURCE ) )
-      {
-         // process frame
-         (*x->plugins[x->x_plugin].f0r_update)(x->plugins[x->x_plugin].instance, time, ibuffer, obuffer);
-      }
-      if ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_MIXER2 )
-      {
-         if ( ( x->x_packet1 != -1 ) && ( x->x_packet2 != -1 ) && ( x->x_packetm1 != -1 ) )
-         {
-           // process frame
-           (*x->plugins[x->x_plugin].f0r_update2)(x->plugins[x->x_plugin].instance, time, ibuffer, imbuffer, irbuffer, obuffer);
-         }
-      }
-      if ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_MIXER3 )
-      {
-         if ( ( x->x_packet1 != -1 ) && ( x->x_packet2 != -1 ) && ( x->x_packetm1 != -1 ) && ( x->x_packetr1 != -1 ) )
-         {
-           // process frame
-           (*x->plugins[x->x_plugin].f0r_update2)(x->plugins[x->x_plugin].instance, time, ibuffer, imbuffer, irbuffer, obuffer);
-         }
-      }
-}
-
-void fr_freeplugins(t_pdp_frei0r *x)
-{
-  t_int i;
-
-    for (i=0; i<x->x_plugin_count; i++)
-    {
-       // destroy plugin
-       (*x->plugins[i].f0r_destruct)(x->plugins[i].instance);
-    }
-    post("freeing plugin resources : %x", x->plugins);
-    freebytes( x->plugins, x->x_filename_count*sizeof(PLUGIN) );
-    x->plugins = NULL;
-}
-
-static void pdp_frei0r_plugindir(t_pdp_frei0r *x, t_symbol *s)
-{
-    x->plugindir = s;
-    if( s != &s_)
-        fr_loadplugins(x, x->plugindir);
-}
-
-static void pdp_frei0r_process_rgba(t_pdp_frei0r *x)
-{
-    t_pdp     *newheader = pdp_packet_header(x->x_packet2);
-    char *newdata = (char *)pdp_packet_data(x->x_packet2); 
-    t_pdp     *lheader = pdp_packet_header(x->x_packet1);
-    char *ldata   = (char *)pdp_packet_data(x->x_packet1);
-    t_pdp     *mheader = pdp_packet_header(x->x_packetm1);
-    char *mdata = (char *)pdp_packet_data(x->x_packetm1); 
-    t_pdp     *rheader = pdp_packet_header(x->x_packetr1);
-    char *rdata = (char *)pdp_packet_data(x->x_packetr1); 
-
-    if ((x->x_width != (t_int)lheader->info.image.width) || 
-        (x->x_height != (t_int)lheader->info.image.height)) 
-    {
-
-    	post("pdp_frei0r :: resizing plugins");
-	
-    	fr_freeplugins(x);
-
-    	x->x_width = lheader->info.image.width;
-    	x->x_height = lheader->info.image.height;
-    	x->x_size = x->x_width*x->x_height;
-
-    	//load the plugins
-    	fr_loadplugins(x, x->plugindir);
-    }
-    
-    newheader->info.image.encoding = lheader->info.image.encoding;
-    newheader->info.image.width = x->x_width;
-    newheader->info.image.height = x->x_height;
-
-    memcpy( newdata, ldata, x->x_size*sizeof(uint32_t) );
-
-    fr_processframe(x, x->x_plugin, ldata, mdata, rdata, newdata);
-   
-
-}
-
-static void pdp_frei0r_param(t_pdp_frei0r *x, t_symbol *s, int argc, t_atom *argv)
-{
-  int pnumber;
-  f0r_param_info_t param_infos;
- 
-      if ( x->x_plugin_count <= 0 )
-      {
-        post( "frei0r : set parameter : no plugins loaded, check your plugin directory setup" );
-        return;
-      }
-
-      if ( argc < 2 )
-      {
-         post("pdp_frei0r : set parameter : insufficient parameters (%d)", argc );
-         return;
-      }
-
-      if ( argv[0].a_type != A_FLOAT )
-      {
-         post("pdp_frei0r : set parameter : wrong parameter number" );
-         return;
-      }
-      pnumber = (int)argv[0].a_w.w_float;
-      // post("pdp_frei0r : setting parameter : %d", pnumber );
-
-      if ( (pnumber<0) || (pnumber>=(int)x->plugins[x->x_plugin].numparameters) )
-      {
-         post("pdp_frei0r : set parameter : wrong parameter number : %d : max : %d", pnumber, x->plugins[x->x_plugin].numparameters );
-         return;
-      }
-
-      (*x->plugins[x->x_plugin].f0r_get_param_info)(&param_infos, pnumber);
-
-      // set parameter
-      switch (param_infos.type)
-      {
-        case F0R_PARAM_BOOL:
-          {
-           f0r_param_bool fvalue;
- 
-            if ( argc != 2 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for boolean", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            if ( argv[1].a_w.w_float != 0. && argv[1].a_w.w_float != 1. )
-            {
-               // post("pdp_frei0r : wrong parameter value for boolean" );
-               return;
-            }
-            fvalue=argv[1].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &fvalue, pnumber);
-          }
-          break;
-        case F0R_PARAM_DOUBLE:
-          {
-           f0r_param_double fvalue;
-
-            if ( argc != 2 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for double", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            fvalue=argv[1].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &fvalue, pnumber);
-          }
-          break;
-        case F0R_PARAM_COLOR:
-          {
-           struct f0r_param_color color;
-
-            if ( argc != 4 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for color", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT ||
-                 argv[2].a_type != A_FLOAT ||
-                 argv[3].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            color.r = argv[1].a_w.w_float;
-            color.g = argv[2].a_w.w_float;
-            color.b = argv[3].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &color, pnumber);
-          }
-          break;
-        case F0R_PARAM_POSITION:
-          {
-           struct f0r_param_position position;
-
-            if ( argc != 3 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for position", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT ||
-                 argv[2].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            position.x = argv[1].a_w.w_float;
-            position.y = argv[2].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &position, pnumber);
-          }
-          break;
-        default:
-          post("pdp_frei0r : unsupported parameter type (%d)", param_infos.type );
-          return;
-      }
-}
-
-static void pdp_frei0r_plugin(t_pdp_frei0r *x, t_floatarg f)
-{
-  unsigned pi;
-  char *parname;
-  int partype;
-  t_atom plist[2];
-  t_atom tlist[2];
-  t_atom vlist[2];
-  f0r_param_info_t param_infos;
-
-    if ( x->x_plugin_count <= 0 )
-    {
-      post( "frei0r : no plugins loaded, check your plugin directory setup" );
-      return;
-    }
-    if((f<x->x_plugin_count)&&(f>-1)) 
-    {
-      x->x_plugin = f;
-    }
-    else
-    {
-      post( "frei0r : plugin out of range : %d", (t_int)f );
-      return;
-    }
-    post ("pdp_frei0r :: %s selected, %d parameters", x->plugins[x->x_plugin].name, x->plugins[x->x_plugin].numparameters);
-    outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-    outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-    for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-    {
-      (*x->plugins[x->x_plugin].f0r_get_param_info)(&param_infos, pi);
-      SETFLOAT(&plist[0], pi);
-      SETSYMBOL(&plist[1], gensym(param_infos.name) );
-      outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-      SETFLOAT(&tlist[0], pi);
-      SETFLOAT(&tlist[1], param_infos.type );
-      outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-    }
-}
-
-static void pdp_frei0r_sendpacket(t_pdp_frei0r *x)
-{
-    /* release the incoming packets */
-    pdp_packet_mark_unused(x->x_packet0);
-    x->x_packet0 = -1;
-    pdp_packet_mark_unused(x->x_packet1);
-    x->x_packet1 = -1;
-    pdp_packet_mark_unused(x->x_packetr0);
-    x->x_packetr0 = -1;
-    pdp_packet_mark_unused(x->x_packetr1);
-    x->x_packetr1 = -1;
-    pdp_packet_mark_unused(x->x_packetm0);
-    x->x_packetm0 = -1;
-    pdp_packet_mark_unused(x->x_packetm1);
-    x->x_packetm1 = -1;
-
-    x->x_packet3=-1;
-    x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet3, x->x_packet2, pdp_gensym("bitmap/rgb/*") );
-    pdp_packet_mark_unused(x->x_packet2);
-    x->x_packet2 = -1;
-
-    /* unregister and propagate if valid dest packet */
-    pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet3);
-}
-
-static void pdp_frei0r_process(t_pdp_frei0r *x)
-{
-   int encoding;
-   t_pdp *header = 0;
-   char *parname;
-   unsigned pi;
-   int partype;
-   t_atom plist[2];
-   t_atom tlist[2];
-   t_atom vlist[2];
-   f0r_param_info_t param_infos;
-
-   /* check if image data packets are compatible */
-   if ( (header = pdp_packet_header(x->x_packet1))
-	&& (PDP_BITMAP == header->type)){
-    
-	/* pdp_frei0r_process inputs and write into active inlet */
-	switch(pdp_packet_header(x->x_packet1)->info.image.encoding){
-
-	case PDP_BITMAP_RGBA:
-            x->x_packet2 = pdp_packet_clone_rw(x->x_packet1);
-            pdp_queue_add(x, pdp_frei0r_process_rgba, pdp_frei0r_sendpacket, &x->x_queue_id);
-	    break;
-
-	default:
-	    /* don't know the type, so dont pdp_frei0r_process */
-	    break;
-	    
-	}
-    }
-
-    // hack to display infos of first loaded plugin
-    if ( ( x->x_plugin_count>0 ) && ( !x->x_infosok ) )
-    {
-       outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-       outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-       for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-       {
-         (*x->plugins[x->x_plugin].f0r_get_param_info)(&param_infos, pi);
-         SETFLOAT(&plist[0], pi);
-         SETSYMBOL(&plist[1], gensym(param_infos.name) );
-         outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-         SETFLOAT(&tlist[0], pi);
-         SETFLOAT(&tlist[1], param_infos.type );
-         outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-       }
-       x->x_infosok = 1;
-    }
-}
-
-static void pdp_frei0r_input_0(t_pdp_frei0r *x, t_symbol *s, t_floatarg f)
-{
-    if (s == gensym("register_rw")) 
-    {
-       x->x_packet0=-1;
-       x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("bitmap/rgb/*") );
-       // post("pdp_freiOr : drop 1 : %d", x->x_dropped );
-       x->x_packet1=-1;
-       x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet1, x->x_packet0, pdp_gensym("bitmap/rgba/*") );
-       // post("pdp_freiOr : drop 2 : %d", x->x_dropped );
-    }
-
-    if ((s == gensym("process")) && (-1 != x->x_packet1) && (!x->x_dropped))
-    {
-        /* add the process method and callback to the process queue */
-        pdp_frei0r_process(x);
-    }
-}
-
-static void pdp_frei0r_input_1(t_pdp_frei0r *x, t_symbol *s, t_floatarg f)
-{
-  char *ddata;
-  char *sdata;
-
-    if ( x->x_packetm0 != -1 )
-    {
-       return;
-    }
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetm0, (int)f, pdp_gensym("bitmap/rgb/*") );
-    // post("pdp_freiOr : middle drop 1 : %d", x->x_dropped );
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetm1, x->x_packetm0, pdp_gensym("bitmap/rgba/*") );
-    // post("pdp_freiOr : middle drop 2 : %d", x->x_dropped );
-}
-
-static void pdp_frei0r_input_2(t_pdp_frei0r *x, t_symbol *s, t_floatarg f)
-{
-  char *ddata;
-  char *sdata;
-
-    if ( x->x_packetr0 != -1 )
-    {
-       return;
-    }
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetr0, (int)f, pdp_gensym("bitmap/rgb/*") );
-    // post("pdp_freiOr : right drop 1 : %d", x->x_dropped );
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetr1, x->x_packetr0, pdp_gensym("bitmap/rgba/*") );
-    // post("pdp_freiOr : right drop 2 : %d", x->x_dropped );
-}
-
-static void pdp_frei0r_free(t_pdp_frei0r *x)
-{
-  int i;
-
-    pdp_queue_finish(x->x_queue_id);
-    pdp_packet_mark_unused(x->x_packet0);
-    fr_freeplugins(x);
-}
-
-t_class *pdp_frei0r_class;
-
-void *pdp_frei0r_new(t_floatarg f)
-{
-    int i;
-
-    t_pdp_frei0r *x = (t_pdp_frei0r *)pd_new(pdp_frei0r_class);
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("pdp"), gensym("pdp1") );
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("pdp"), gensym("pdp2") );
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("plugin"));
-
-    x->x_outlet0 = outlet_new(&x->x_obj, &s_anything); 
-    x->x_pname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_nparams = outlet_new(&x->x_obj, &s_anything); 
-    x->x_parname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_partype = outlet_new(&x->x_obj, &s_anything); 
-
-    x->x_packet0 = -1;
-    x->x_packet1 = -1;
-    x->x_packet2 = -1;
-    x->x_packet3 = -1;
-    x->x_packetm0 = -1;
-    x->x_packetm1 = -1;
-    x->x_packetr0 = -1;
-    x->x_packetr1 = -1;
-    x->x_queue_id = -1;
-
-    x->x_width  = 320;
-    x->x_height = 240;
-    x->x_size   = x->x_width * x->x_height;
-
-    //load the plugins
-    x->x_plugin_count = 0;
-    x->x_infosok = 0;
-    
-    char fr_plugin_dir[FILENAME_MAX];
-    char *home = getenv("HOME");
-    int home_len;
-    if(home != NULL)
-    {
-        home_len = strlen(home);
-        if(home_len >= FILENAME_MAX)
-            home_len = FILENAME_MAX - 1;
-        memcpy(fr_plugin_dir, home, home_len);
-        fr_plugin_dir[home_len] = '\0';
-        strncpy(fr_plugin_dir, "/.frf", FILENAME_MAX - home_len);
-        pdp_frei0r_plugindir(x, gensym(fr_plugin_dir));
-    }
-
-    //select plugin
-    pdp_frei0r_plugin(x, f);
-
-    return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_frei0r_setup(void)
-{
-
-    post( "pdp_frei0r :: frei0r host for Pure Data Packet version 0.1\n                 by Lluis Gomez i Bigorda (lluis@artefacte.org) \n                 & Yves Degoyon (ydegoyon@free.fr)\n                 using frei0r specification 1.1 by Georg Seidel,\n		 Phillip Promesberger and Martin Bayer\n                 made at piksel yearly gathering : http://www.piksel.no" );
-    pdp_frei0r_class = class_new(gensym("pdp_frei0r"), (t_newmethod)pdp_frei0r_new,
-    	(t_method)pdp_frei0r_free, sizeof(t_pdp_frei0r), 0, A_DEFFLOAT, A_NULL);
-
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_input_0, gensym("pdp"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_input_1, gensym("pdp1"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_input_2, gensym("pdp2"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_plugin, gensym("plugin"),  A_FLOAT, A_NULL);   
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_param, gensym("param"),  A_GIMME, A_NULL);   
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_plugindir, gensym("plugindir"),  A_SYMBOL, A_NULL);   
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/externals/pdvjtools/pix_preview/.pix_2pnm.cpp.swp b/externals/pdvjtools/pix_preview/.pix_2pnm.cpp.swp
deleted file mode 100644
index 86fde9756871f681c76c1699c4a0a33735715729..0000000000000000000000000000000000000000
Binary files a/externals/pdvjtools/pix_preview/.pix_2pnm.cpp.swp and /dev/null differ
diff --git a/externals/pdvjtools/pix_preview/.pix_2pnm.h.swp b/externals/pdvjtools/pix_preview/.pix_2pnm.h.swp
deleted file mode 100644
index 32ddb97af67bc1d29680e57bf4bf015d3d9145cc..0000000000000000000000000000000000000000
Binary files a/externals/pdvjtools/pix_preview/.pix_2pnm.h.swp and /dev/null differ
diff --git a/externals/pdvjtools/pix_preview/.tm_project.cache b/externals/pdvjtools/pix_preview/.tm_project.cache
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/externals/pdvjtools/pix_preview/BUGS b/externals/pdvjtools/pix_preview/BUGS
deleted file mode 100644
index c25246af5e655151e8178fb2821eb42539caf99b..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/BUGS
+++ /dev/null
@@ -1,3 +0,0 @@
-if you open a patch with two pix_preview objects pd crashes
-if you click in the 0,0 coordinate of a pix_preview pd crashes
-
diff --git a/externals/pdvjtools/pix_preview/Makefile b/externals/pdvjtools/pix_preview/Makefile
deleted file mode 100644
index e45384909250d8ac49c68419d27d2f93be0aeeef..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-PD_DIR = ../../../pd
-GEM_DIR = ../../../Gem
-
-LIBS =  -lm
-GEM2PNM_VERSION = 0.6
-
-GEM2PNM_DISTRO = /mnt/c/ydegoyon.free.fr/gem2pdp-$(GEM2PNM_VERSION)
-GEM2PNM_TARBALL = $(GEM2PNM_DISTRO).tar.gz
-# build flags
-
-GEM2PNM_INCLUDE =  -I$(PD_DIR)/src -I.  -I$(GEM_DIR)/src -I$(PD_DIR)/src
-GEM2PNM_CPPFLAGS  = -fPIC -DPD -O2 -funroll-loops -fomit-frame-pointer  -ffast-math \
-    -Wall -W -Wno-unused -Wno-parentheses -Wno-switch \
-    -DGEM2PNM_VERSION=\"$(GEM2PNM_VERSION)\" -g
-
-all: pix_preview.pd_linux
-
-
-pix_preview.pd_linux: pix_preview.o 
-	rm -f pix_preview.pd_linux
-	gcc -Wl,--export-dynamic -shared -o pix_preview.pd_linux pix_preview.o $(LIBS)
-
-clean:
-	rm -f *.o
-	rm -f pix_preview.pd_linux
-
-distro: clean all
-	rm *.o
-
-.cc.o:
-	g++ $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.cc
-
-.c.o:
-	gcc $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.c
-
-install:
-	cp -f --remove-destination *.pd $(PD_DIR)/doc/5.reference
diff --git a/externals/pdvjtools/pix_preview/Makefile.in b/externals/pdvjtools/pix_preview/Makefile.in
deleted file mode 100755
index 9faf2d230ef6395de81882f83449ea9440a3a4a0..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/Makefile.in
+++ /dev/null
@@ -1,37 +0,0 @@
-PD_DIR = @PD_DIR@
-GEM_DIR = @GEM_DIR@
-
-LIBS = @LIBS@
-GEM2PNM_VERSION = @GEM2PNM_VERSION@
-
-GEM2PNM_DISTRO = /mnt/c/ydegoyon.free.fr/gem2pdp-$(GEM2PNM_VERSION)
-GEM2PNM_TARBALL = $(GEM2PNM_DISTRO).tar.gz
-# build flags
-
-GEM2PNM_INCLUDE =  -I$(PD_DIR)/src -I.  -I$(GEM_DIR)/src -I$(PD_DIR)/src
-GEM2PNM_CPPFLAGS  = -DPD -O2 -funroll-loops -fomit-frame-pointer  -ffast-math \
-    -Wall -W -Wno-unused -Wno-parentheses -Wno-switch \
-    -DGEM2PNM_VERSION=\"$(GEM2PNM_VERSION)\" -g
-
-all: pix_preview.pd_linux
-
-
-pix_preview.pd_linux: pix_preview.o 
-	rm -f pix_preview.pd_linux
-	gcc -Wl,--export-dynamic -shared -o pix_preview.pd_linux pix_preview.o $(LIBS)
-
-clean:
-	rm -f *.o
-	rm -f pix_preview.pd_linux
-
-distro: clean all
-	rm *.o
-
-.cpp.o:
-	g++ $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.cpp
-
-.c.o:
-	gcc $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.c
-
-install:
-	cp -f --remove-destination *.pd $(PD_DIR)/doc/5.reference
diff --git a/externals/pdvjtools/pix_preview/configure b/externals/pdvjtools/pix_preview/configure
deleted file mode 100755
index fe2c0e00ebb66856eb4b6b34fdcde4f840011006..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/configure
+++ /dev/null
@@ -1,4735 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GEM2PNM_VERSION GEM_DIR PD_DIR LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_ACEOF
-
-  cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-maintainer-mode enable make rules and dependencies not useful
-                          (and sometimes confusing) to the casual installer
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-dmalloc          use dmalloc, as in
-                          ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz
-  --with-pddir=<dir>      specify an alternate pd source tree
-  --with-gemdir=<dir>     specify an alternate gem source tree
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd "$ac_popdir"
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h | sort
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-GEM2PNM_VERSION=0.6
-
-if test -d /usr/local/pd;
-then
-	PD_DIR=/usr/local/pd
-elif test -d ../../pd;
-then
-	PD_DIR=../../pd
-else
-   echo "Pd sources not found"
-fi
-
-
-if test -d /win/Georg/pd-cvs/gem/Gem;
-then
-   GEM_DIR=/win/Georg/pd-cvs/gem/Gem
-elif test -d ../../gem/Gem;
-then
-	GEM_DIR=../../gem/Gem
-elif  test -d ../../gem/Gem;
-then
-	GEM_DIR=../../gem/Gem
-else
-   echo "Gem sources not found"
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
-	break;;
-    * )
-	break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-        echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
-echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
-if test "${ac_cv_lib_cposix_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char strerror ();
-int
-main ()
-{
-strerror ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_cposix_strerror=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_cposix_strerror=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6
-if test $ac_cv_lib_cposix_strerror = yes; then
-  LIBS="$LIBS -lcposix"
-fi
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5
-echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6
-if test "${am_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  am_cv_prog_cc_stdc=no
-ac_save_CC="$CC"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX			-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-
-int
-main ()
-{
-
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  am_cv_prog_cc_stdc="$ac_arg"; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-CC="$ac_save_CC"
-
-fi
-
-if test -z "$am_cv_prog_cc_stdc"; then
-  echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6
-else
-  echo "$as_me:$LINENO: result: $am_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$am_cv_prog_cc_stdc" >&6
-fi
-case "x$am_cv_prog_cc_stdc" in
-  x|xno) ;;
-  *) CC="$CC $am_cv_prog_cc_stdc" ;;
-esac
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f $ac_dir/shtool; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-done
-
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL=$ac_install_sh
-  fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.make <<\_ACEOF
-all:
-	@echo 'ac_maketemp="$(MAKE)"'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
-  eval ac_cv_prog_make_${ac_make}_set=yes
-else
-  eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-  SET_MAKE=
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftestfile`
-   fi
-   if test "$*" != "X $srcdir/configure conftestfile" \
-      && test "$*" != "X conftestfile $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
-   fi
-
-   test "$2" = conftestfile
-   )
-then
-   # Ok.
-   :
-else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-rm -f conftest*
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
-    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
-  enableval="$enable_maintainer_mode"
-  USE_MAINTAINER_MODE=$enableval
-else
-  USE_MAINTAINER_MODE=no
-fi;
-  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
-
-
-if test $USE_MAINTAINER_MODE = yes; then
-  MAINTAINER_MODE_TRUE=
-  MAINTAINER_MODE_FALSE='#'
-else
-  MAINTAINER_MODE_TRUE='#'
-  MAINTAINER_MODE_FALSE=
-fi
-  MAINT=$MAINTAINER_MODE_TRUE
-
-
-echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5
-echo $ECHO_N "checking if malloc debugging is wanted... $ECHO_C" >&6
-
-# Check whether --with-dmalloc or --without-dmalloc was given.
-if test "${with_dmalloc+set}" = set; then
-  withval="$with_dmalloc"
-  if test "$withval" = yes; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define WITH_DMALLOC 1
-_ACEOF
-
-  LIBS="$LIBS -ldmalloc"
-  LDFLAGS="$LDFLAGS -g"
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi;
-
-
-
-
-
-# Check whether --with-pddir or --without-pddir was given.
-if test "${with_pddir+set}" = set; then
-  withval="$with_pddir"
-
-fi;
-
-if test "$with_pddir" != ""
-then
- PD_DIR=$with_pddir
-fi
-
-# Check whether --with-gemdir or --without-gemdir was given.
-if test "${with_gemdir+set}" = set; then
-  withval="$with_gemdir"
-
-fi;
-
-if test "$with_gemdir" != ""
-then
- GEM_DIR=$with_gemdir
-fi
-
-
-echo -n "looking for gem sources (required) ... "
-if test -f $GEM_DIR/src/Base/GemMan.h
-then
-
-  echo "ok."
-else
-  echo "gem source tree not found... use ./configure --with-gemdir= option"
-  exit -1
-fi
-
-echo -n "looking for pd sources (required) ... "
-if test -f $PD_DIR/src/m_imp.h
-then
-  echo "ok." 
-else
-  echo "pd source tree not found... use ./configure --with-pddir= option"
-  exit -1
-fi
-
-
-
-LIBS="$LIBS -lm"
-CFLAGS="$CFLAGS -Wall"
-
-          ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section.  Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\_ACEOF
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\),-D\1=\2,g
-t quote
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[	 `~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-_ACEOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output.  A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-s,@MAINT@,$MAINT,;t t
-s,@GEM2PNM_VERSION@,$GEM2PNM_VERSION,;t t
-s,@GEM_DIR@,$GEM_DIR,;t t
-s,@PD_DIR@,$PD_DIR,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-  esac
-
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/externals/pdvjtools/pix_preview/configure.ac b/externals/pdvjtools/pix_preview/configure.ac
deleted file mode 100755
index 22cb86a6a98fef7f2b1643f22f079d7fafd0a9b1..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/configure.ac
+++ /dev/null
@@ -1,83 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT
-GEM2PNM_VERSION=0.6
-
-if test -d /usr/local/pd; 
-then
-	PD_DIR=/usr/local/pd
-elif test -d ../../pd; 
-then
-	PD_DIR=../../pd
-else
-   echo "Pd sources not found"
-fi
-
-
-if test -d /win/Georg/pd-cvs/gem/Gem; 
-then
-   GEM_DIR=/win/Georg/pd-cvs/gem/Gem
-elif test -d ../../gem/Gem; 
-then
-	GEM_DIR=../../gem/Gem
-elif  test -d ../../gem/Gem; 
-then
-	GEM_DIR=../../gem/Gem
-else
-   echo "Gem sources not found"
-fi
-
-AC_ISC_POSIX
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_HEADER_STDC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-AM_SANITY_CHECK
-
-AM_MAINTAINER_MODE
-AM_WITH_DMALLOC
-
-AC_SUBST(GEM2PNM_VERSION)
-
-AC_ARG_WITH(pddir,       [  --with-pddir=<dir>      specify an alternate pd source tree])
-AC_ARG_WITH(gemdir,      [  --with-gemdir=<dir>     specify an alternate gem source tree])
-
-if test "$with_gemdir" != ""
-then
- GEM_DIR=$with_gemdir
-fi
-
-if test "$with_pddir" != ""
-then
- PD_DIR=$with_pddir
-fi
-
-echo -n "looking for gem sources (required) ... "
-if test -f $GEM_DIR/src/Base/GemMan.h
-then
-  AC_SUBST(GEM_DIR)
-  echo "ok." 
-else
-  echo "gem source tree not found... use ./configure --with-gemdir= option"
-  exit -1
-fi
-
-
-echo -n "looking for pd sources (required) ... "
-if test -f $PD_DIR/src/m_imp.h
-then
-  AC_SUBST(PD_DIR)
-  echo "ok." 
-else
-  echo "pd source tree not found... use ./configure --with-pddir= option"
-  exit -1
-fi
-
-LIBS="$LIBS -lm"
-CFLAGS="$CFLAGS -Wall"
-
-AC_CONFIG_FILES([
-Makefile
-])
-AC_OUTPUT
diff --git a/externals/pdvjtools/pix_preview/install b/externals/pdvjtools/pix_preview/install
deleted file mode 100755
index 3999a4a2c984fcfed334b09e428ad504f1e0f484..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/install
+++ /dev/null
@@ -1,18 +0,0 @@
-first, install gem and pd sources (if you don't have them)
-
-you will need libtk-img also 
-
-Use the configure script and specify the directories:
-e.g.: ./configure --with-pddir=../../pd --with-gemdir=../../gem/Gem 
-
-make clean 
-
-make
-
-pix_preview requires the loading of gem library, of course.
-
-Enjoy!!
-
-Thanx for getting here.
-lluis/
-comments and bugs @ lluis@hangar.org
diff --git a/externals/pdvjtools/pix_preview/install-sh b/externals/pdvjtools/pix_preview/install-sh
deleted file mode 100755
index e9de23842dcd44d2953129c866b1ad25f7e1f1d9..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/install-sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
-
-	-d) dir_arg=true
-	    shift
-	    continue;;
-
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
-
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
-
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
-
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
-
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-		chmodcmd=""
-	else
-		instcmd=mkdir
-	fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
-	shift
-
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
-
-	pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
-
-# don't allow the sed command to completely eliminate the filename
-
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
-
-# Make a temp file name in the proper directory.
-
-	dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-	$doit $instcmd $src $dsttmp &&
-
-	trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0
diff --git a/externals/pdvjtools/pix_preview/pix_preview-help.pd b/externals/pdvjtools/pix_preview/pix_preview-help.pd
deleted file mode 100644
index ae88f7ce3cac346401384520424812e103125df8..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/pix_preview-help.pd
+++ /dev/null
@@ -1,81 +0,0 @@
-#N canvas 33 25 727 665 10;
-#N canvas 0 0 450 300 gemwin 0;
-#X obj 132 136 gemwin;
-#X obj 67 89 outlet;
-#X obj 67 10 inlet;
-#X msg 67 70 set destroy;
-#X msg 132 112 create \, 1;
-#X msg 198 112 destroy;
-#X msg 156 71 set create;
-#X obj 67 41 route create;
-#X connect 2 0 7 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 1 0;
-#X connect 7 0 3 0;
-#X connect 7 0 4 0;
-#X connect 7 1 6 0;
-#X connect 7 1 5 0;
-#X restore 186 -300 pd gemwin;
-#X msg 186 -319 create;
-#X obj 126 -262 gemhead;
-#X obj 22 -61 pix_texture;
-#X obj 224 -264 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144
--1 -1;
-#X obj 195 -122 bng 15 250 50 0 empty empty empty 20 7 0 10 -262144
--1 -1;
-#X floatatom 187 -142 5 0 10000 1 - - -;
-#X obj 181 -235 openpanel;
-#X msg 181 -215 open \$1;
-#X obj 22 -39 rectangle 4 3;
-#X obj 126 -139 pix_film;
-#X obj 126 126 pix_preview;
-#X obj 175 -185 loadbang;
-#X obj 213 2 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
-;
-#X msg 215 87 connect;
-#X obj 126 -63 pix_resize 168 128;
-#X obj 213 23 metro 80;
-#X floatatom 234 3 5 0 0 0 - - -;
-#X obj 126 -91 pix_separator;
-#X obj 22 -89 pix_separator;
-#X text 233 -15 fps;
-#X obj 170 -24 loadbang;
-#X obj 215 54 del 250;
-#X msg 175 -165 auto 1;
-#X text 252 -321 <<<---- 1 :: First of all create the Gem window;
-#X text 344 -305 pix_preview doues not work if Gem is not rendering
-;
-#X text 256 -259 <<<---- 2 :: Load a video file;
-#X text 355 -48 big previews are too much CPU expensives;
-#X text 278 2 <<<---- :: You can change the framerate of the preview
-;
-#X text 270 -62 <<<---- :: Resize your pix to a preview size;
-#X text 357 16 hi framerates are too much CPU expensives;
-#X text 276 87 <<<---- 3 :: You must connect to tcl with a socket.
-;
-#X connect 0 0 1 0;
-#X connect 1 0 0 0;
-#X connect 2 0 10 0;
-#X connect 3 0 9 0;
-#X connect 4 0 7 0;
-#X connect 5 0 6 0;
-#X connect 6 0 10 1;
-#X connect 7 0 8 0;
-#X connect 8 0 10 0;
-#X connect 10 0 18 0;
-#X connect 10 0 19 0;
-#X connect 10 2 5 0;
-#X connect 12 0 23 0;
-#X connect 13 0 16 0;
-#X connect 14 0 11 0;
-#X connect 15 0 11 0;
-#X connect 16 0 11 0;
-#X connect 17 0 16 1;
-#X connect 18 0 15 0;
-#X connect 19 0 3 0;
-#X connect 21 0 13 0;
-#X connect 21 0 22 0;
-#X connect 22 0 14 0;
-#X connect 23 0 10 0;
diff --git a/externals/pdvjtools/pix_preview/pix_preview.cc b/externals/pdvjtools/pix_preview/pix_preview.cc
deleted file mode 100644
index 82ab42799f1185b191549f2901dae2f9f4fffe10..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/pix_preview.cc
+++ /dev/null
@@ -1,478 +0,0 @@
-
-/////////////////////////////////////////////////////////
-//
-//  pix_preview
-//
-//  Lluis Gomez i Bigorda
-//  mailto:lluis@artefacte.org
-//
-/////////////////////////////////////////////////////////
-
-#include <iostream>
-#include <string>
-#include <sstream>
-using namespace std;
-#include "stdio.h"
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <errno.h>
-
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-
-
-#include "pix_preview.h"
-
-#define initialport 1234
-
-int guidebug=1;
-
-char *fdata="R0lGODlhHAAcAIABAAAAAP///ywAAAAAHAAcAAACGoSPqcvtD6OctNqLs968+w+G4kiW5omm6ooUADs=";
-
-int pix_preview::counter;
-
-/* base64 conversion*/
-static const std::string base64_chars = 
-             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-             "abcdefghijklmnopqrstuvwxyz"
-             "0123456789+/";
-
-std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
-  std::string ret;
-  int i = 0;
-  int j = 0;
-  unsigned char char_array_3[3];
-  unsigned char char_array_4[4];
-
-  while (in_len--) {
-    char_array_3[i++] = *(bytes_to_encode++);
-    if (i == 3) {
-      char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
-      char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
-      char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
-      char_array_4[3] = char_array_3[2] & 0x3f;
-
-      for(i = 0; (i <4) ; i++)
-        ret += base64_chars[char_array_4[i]];
-      i = 0;
-    }
-  }
-
-  if (i)
-  {
-    for(j = i; j < 3; j++)
-      char_array_3[j] = '\0';
-
-    char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
-    char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
-    char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
-    char_array_4[3] = char_array_3[2] & 0x3f;
-
-    for (j = 0; (j < i + 1); j++)
-      ret += base64_chars[char_array_4[j]];
-
-    while((i++ < 3))
-      ret += '=';
-
-  }
-
-  return ret;
-
-}
-
-
-CPPEXTERN_NEW_WITH_TWO_ARGS(pix_preview, t_floatarg, A_DEFFLOAT, t_floatarg, A_DEFFLOAT)
-
-
-  /////////////////////////////////////////////////////////
-  //
-  // pix_preview
-  //
-  /////////////////////////////////////////////////////////
-  // Constructor
-  //
-  /////////////////////////////////////////////////////////
-  pix_preview :: pix_preview(t_floatarg fx, t_floatarg fy)
-{ 
-    counter++;
-    whoami = counter;
-  #include "pix_preview.tk2c"
-  sys_vgui("Echo_Server%d %d\n",whoami, 1233+whoami);
-  xsize = (int)fx;
-  ysize = (int)fy;
-  m_csize = 3;
-
-
-    image_widgetbehavior.w_getrectfn =     image_getrect;
-    image_widgetbehavior.w_displacefn =    image_displace;
-    image_widgetbehavior.w_selectfn =   image_select;
-    image_widgetbehavior.w_activatefn =   image_activate;
-    image_widgetbehavior.w_deletefn =   image_delete;
-    image_widgetbehavior.w_visfn =   image_vis;
-#if (PD_VERSION_MINOR > 31) 
-    image_widgetbehavior.w_clickfn = NULL;
-    image_widgetbehavior.w_propertiesfn = NULL; 
-#endif
-#if PD_MINOR_VERSION < 37
-    image_widgetbehavior.w_savefn =   image_save;
-#endif
-    
-
-  class_setwidget(pix_preview_class,&image_widgetbehavior);
-
-  if (xsize < 0) xsize = 0;
-  if (ysize < 0) ysize = 0;
-
-  m_xsize = xsize;
-  m_ysize = ysize;
-
-  oldimagex = xsize;
-  oldimagey = ysize;
-
-  m_bufsize = m_xsize * m_ysize * m_csize;
-
-  m_buffer = new t_atom[m_bufsize];
-
-    widgetwidth = 0;
-    widgetheight = 0;
-
-  //m_dataOut = outlet_new(this->x_obj, &s_list);
-
-  // Try to connect (not working now , using connectMes)
-  memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_STREAM;
-
-    std::ostringstream ostr;
-    ostr << 1233+whoami;
-    std::string str;
-    str = ostr.str();
-    
-    getaddrinfo("localhost", reinterpret_cast<const char*>(str.c_str()), &hints, &res); 
-
-	fprintf(stderr,"trying to connect...\n");
-  	s = socket(res->ai_family, res->ai_socktype, 0);
-  	connect(s, res->ai_addr, res->ai_addrlen);
-
-    //fprintf(stderr,"We have %d pixpreviews\n",counter);
-}
-
-/////////////////////////////////////////////////////////
-// Destructor
-//
-/////////////////////////////////////////////////////////
-pix_preview :: ~pix_preview()
-{
-}
-
-/////////////////////////////////////////////////////////
-// processImage
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: connectMess() 
-{
-  memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_STREAM;
-
-    std::ostringstream ostr;
-    ostr << 1233+whoami;
-    std::string str;
-    str = ostr.str();
-    
-    getaddrinfo("localhost", reinterpret_cast<const char*>(str.c_str()), &hints, &res); 
-
-	fprintf(stderr,"trying to connect...\n");
-  	s = socket(res->ai_family, res->ai_socktype, 0);
-  	connect(s, res->ai_addr, res->ai_addrlen);
-}
-
-void pix_preview :: processImage(imageStruct &image)
-{
-  int x = m_xsize, y = m_ysize, c = m_csize;
-
-  if (image.xsize != oldimagex) {
-    oldimagex = image.xsize;
-    m_xsize = ((!xsize) || (xsize > oldimagex))?oldimagex:xsize;
-  }
-  if (image.ysize != oldimagey) {
-    oldimagey = image.ysize;
-    m_ysize = ((!ysize) || (ysize > oldimagey))?oldimagey:ysize;
-  }
-
-  if (image.csize != m_csize) m_csize = image.csize;
-
-  if ( (m_xsize != x) || (m_ysize != y) || (m_csize != c) ) {
-    // resize the image buffer
-    if(m_buffer)delete [] m_buffer;
-    m_bufsize = m_xsize * m_ysize * m_csize;
-    m_buffer = new t_atom[m_bufsize];
-
-    m_xstep = m_csize * ((float)image.xsize/(float)m_xsize);
-    m_ystep = m_csize * ((float)image.ysize/(float)m_ysize) * image.xsize;
-  }
-
-  m_data = image.data;
-}
-
-/////////////////////////////////////////////////////////
-// processYUVImage
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: processYUVImage(imageStruct &image)
-{
-    int x = m_xsize, y = m_ysize, c = m_csize;
-
-  if (image.xsize != oldimagex) {
-    oldimagex = image.xsize;
-    m_xsize = ((!xsize) || (xsize > oldimagex))?oldimagex:xsize;
-  }
-  if (image.ysize != oldimagey) {
-    oldimagey = image.ysize;
-    m_ysize = ((!ysize) || (ysize > oldimagey))?oldimagey:ysize;
-  }
-
-  if (image.csize != m_csize) m_csize = image.csize;
-
-  if ( (m_xsize != x) || (m_ysize != y) || (m_csize != c) ) {
-    // resize the image buffer
-    if(m_buffer)delete [] m_buffer;
-    m_bufsize = m_xsize * m_ysize * m_csize;
-    m_buffer = new t_atom[m_bufsize];
-
-    m_xstep = m_csize * ((float)image.xsize/(float)m_xsize);
-    m_ystep = m_csize * ((float)image.ysize/(float)m_ysize) * image.xsize;
-  }
-
-  m_data = image.data;
-}
-
-/////////////////////////////////////////////////////////
-// trigger
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: trigger()
-{
-  if (!m_data) return;
-
-  
-  int n = m_ysize, m = 0;
-  int i = 0;
-
-  unsigned char *data, *line;
-  stringstream sx,sy;
-
-	//fprintf (stderr,"%d %d %d %d %d %d \n",xsize, ysize,m_xsize,  m_ysize,oldimagex,oldimagey);
-
-	std::string pnm;
-	std::string pnm64;
-	pnm += "P6\n";
-		sx << m_xsize;
-	pnm += sx.str();
-	pnm += " ";
-		sy << m_ysize;
-	pnm += sy.str();
-	pnm += "\n255\n";
-
-  data = line = m_data;
-  switch(m_csize){
-  case 4:
-    while (n > 0) {
-      while (m < m_xsize) {
-	int r, g, b, a;
-	r = (int)data[chRed];
-                pnm += (char)r;
-	i++;
-	g = (int)data[chGreen];
-                pnm += (char)g;
-	i++;
-	b = (int)data[chBlue];
-                pnm += (char)b;
-	i++;
-	a = (int)data[chAlpha];
-	i++;
-	m++;
-	data = line + (int)(m_xstep * (float)m);
-      }
-      m = 0;
-      n--;
-      line = m_data + (int)(m_ystep*n);
-      data = line;
-    }
-
-	
-	//std::cout << "NOT encoded: " << pnm << std::endl;
-
-	pnm64 = base64_encode(reinterpret_cast<const unsigned char*>(pnm.c_str()), pnm.length());
-	//std::cout << "encoded: " << pnm64 << std::endl;
-	
-	pnm64 += "\n";
-
-	send(s, reinterpret_cast<const unsigned char*>(pnm64.c_str()), pnm64.length(), 0);
-		
-	//m_glist = (t_glist *) canvas_getcurrent();
-
-	sys_vgui(".x%x.c coords %xS %d %d\n",
-		   this->getCanvas(), this->x_obj,
-		   text_xpix(this->x_obj, (t_glist *)this->getCanvas()) + (m_xsize/2), text_ypix(this->x_obj, (t_glist *)this->getCanvas()) + (m_ysize/2));
-	
-    break;
-  case 2:
-    while (n < m_ysize) {
-      while (m < m_xsize/2) {
-	float y,u,y1,v;
-	u = (float)data[0] / 255.f;
-	SETFLOAT(&m_buffer[i], u);
-	i++;
-	y = (float)data[1] / 255.f;
-	SETFLOAT(&m_buffer[i], y);
-	i++;
-	v = (float)data[2] / 255.f;
-	SETFLOAT(&m_buffer[i], v);
-	i++;
-	y1 = (float)data[3] / 255.f;
-	SETFLOAT(&m_buffer[i], y1);
-	i++;
-	m++;
-	data = line + (int)(m_xstep * (float)m);
-      }
-      m = 0;
-      n++;
-      line = m_data + (int)(m_ystep*n);
-      data = line;
-    }
-  case 1:  default:
-    int datasize=m_xsize*m_ysize*m_csize/4;
-      while (datasize--) {
-	float v;
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i], v);
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i+1], v);
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i+2], v);
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i+3], v);
-	i+=4;
-      }
-  }
-  //outlet_list(m_dataOut, gensym("list"), i, m_buffer);
-}
-
-/////////////////////////////////////////////////////////
-// static member function
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: obj_setupCallback(t_class *classPtr)
-{
-  class_addbang(classPtr, (t_method)&pix_preview::triggerMessCallback);
-  class_addmethod(classPtr, (t_method)&pix_preview::connectMessCallback, gensym("connect"), A_NULL);
-}
-
-void pix_preview :: triggerMessCallback(void *data)
-{
-  GetMyClass(data)->trigger();
-}
-
-void pix_preview :: connectMessCallback(void *data)
-{
-  GetMyClass(data)->connectMess();
-}
-
-
-
-
-/* widget helper functions */
-void pix_preview :: image_drawme(pix_preview *x, t_glist *glist, int firsttime, int m_xsize, int m_ysize)
-{
-       if (firsttime) {
-	  sys_vgui("image create photo imgPREVIEW%d -data {%s}\n",x->counter,fdata);
-	  fprintf(stderr,"image create photo imgPREVIEW%d -data {%s}\n",x->counter,fdata);
-	  sys_vgui(".x%x.c create image %d %d -image imgPREVIEW%d -tags %xS\n", glist_getcanvas(glist),text_xpix((t_object*)x, glist)+14, text_ypix((t_object*)x, glist)+14,x->counter,x);
-     }     
-}
-
-void pix_preview :: image_erase(pix_preview* x,t_glist* glist)
-{
-     int n;
-     sys_vgui(".x%x.c delete %xS\n",
-	      glist_getcanvas(glist), x);
-}
-	
-
-/* ------------------------ image widgetbehaviour----------------------------- */
-
-
-void pix_preview :: image_getrect(t_gobj *z, t_glist *glist,
-    int *xp1, int *yp1, int *xp2, int *yp2)
-{    
-    int width, height;
-    pix_preview *x = (pix_preview *)z;
-
-
-    *xp1 = text_xpix((t_object*)x, glist);
-    *yp1 = text_ypix((t_object*)x, glist);
-    *xp2 = text_xpix((t_object*)x, glist) + x->widgetwidth;
-    *yp2 = text_ypix((t_object*)x, glist) + x->widgetheight;
-}
-
-void pix_preview :: image_displace(t_gobj *z, t_glist *glist,
-    int dx, int dy)
-{
-    t_object *x = (t_object *)z;
-    x->te_xpix += dx;
-    x->te_ypix += dy;
-    sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n",
-		   glist_getcanvas(glist), x,
-		   text_xpix(x, glist), text_ypix(x, glist),
-		   text_xpix(x, glist) + 25, text_ypix(x, glist) + 25);
-
-    //image_drawme((pix_preview *)x, glist, 0);
-    canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-}
-
-void pix_preview :: image_select(t_gobj *z, t_glist *glist, int state)
- {   
-     t_object *x = (t_object *)z;
-     pix_preview *s = (pix_preview *)z;
-     if (state) {
-	  sys_vgui(".x%x.c create rectangle \
-%d %d %d %d -tags %xSEL -outline blue\n",
-		   glist_getcanvas(glist),
-		   text_xpix(x, glist), text_ypix(x, glist),
-		   text_xpix(x, glist) + 25, text_ypix(x, glist) + 25,
-		   x);
-    	s->widgetwidth = 28;
-    	s->widgetheight = 28;
-     }
-     else {
-	  sys_vgui(".x%x.c delete %xSEL\n",
-		   glist_getcanvas(glist), x);
-    	s->widgetwidth = 0;
-    	s->widgetheight = 0;
-     }
-}
-
-
-void pix_preview :: image_activate(t_gobj *z, t_glist *glist, int state)
-{
-}
-
-void pix_preview :: image_delete(t_gobj *z, t_glist *glist)
-{
-
-    t_text *x = (t_text *)z;
-    pix_preview* s = (pix_preview*)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-    image_erase(s, glist);
-}
-
-       
-void pix_preview :: image_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    pix_preview* s = (pix_preview*)z;
-    if (vis)
-	 image_drawme(s, glist, 1, 28, 28);
-  
-}
-
diff --git a/externals/pdvjtools/pix_preview/pix_preview.h b/externals/pdvjtools/pix_preview/pix_preview.h
deleted file mode 100644
index 4e2a8517aa5b1a40ee8327671121bbcf8e3b927f..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/pix_preview.h
+++ /dev/null
@@ -1,142 +0,0 @@
-
-/*-----------------------------------------------------------------
-pix_preview
-
------------------------------------------------------------------*/
-
-#ifndef INCLUDE_PIX_DUMP_H_
-#define INCLUDE_PIX_DUMP_H_
-
-#include "Base/GemPixObj.h"
-
-/*needed for base64 conversion*/
-#include <string>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-std::string base64_encode(unsigned char const* , unsigned int len);
-
-
-/*-----------------------------------------------------------------
--------------------------------------------------------------------
-CLASS
-
- pix_preview
- 
-  Get pixel information
-  
-   KEYWORDS
-   pix
-   
-	DESCRIPTION
-	
-	 dumps the pix-data as a float-package
-	 
------------------------------------------------------------------*/
-class GEM_EXTERN pix_preview : public GemPixObj
-{
-	CPPEXTERN_HEADER(pix_preview, GemPixObj)
-		
-public:
-	
-	//////////
-	// Constructor
-	pix_preview(t_floatarg fx, t_floatarg fy);
-	int x_width, x_height;
-	static int counter;
-	
-protected:
-	
-	//////////
-	// Destructor
-	virtual ~pix_preview();
-	
-	//////////
-	// All we want is the pixel information, so this is a complete override.
-	virtual void 	processImage(imageStruct &image);
-	
-	//////////
-	virtual void 	processYUVImage(imageStruct &image);
-	
-	//////////
-	void			trigger();
-	int getx();
-	int gety();
-    	void	    	connectMess();
-
-	//////////
-	// The color outlet
-	t_outlet    	*m_dataOut;
-	
-	//////////
-	// the buffer
-	int           xsize, ysize;      // proposed x/y-sizes
-	int           m_xsize,  m_ysize;
-	int           m_csize;
-	t_atom       *m_buffer;
-	int           m_bufsize;
-	
-	int           oldimagex;
-	int           oldimagey;
-	int           widgetwidth;
-	int           widgetheight;
-	
-	//////////
-	// navigation
-	float         m_xstep;
-	float         m_ystep;
-	
-	/////////
-	// pointer to the image data
-	unsigned char *m_data;
-	
-	/////////
-	// LLUO :: widget tk list pointer
-    	t_glist *m_glist;
-	
-	t_widgetbehavior   image_widgetbehavior;
-
-	int s;
-	int connected;
-	struct addrinfo *res;
-	struct addrinfo hints;
-	int 		whoami;
-
-
-private:
-	
-	//////////
-	// Static member callbacks
-	static void		triggerMessCallback(void *dump);
-	static void		GREYMessCallback(void *dump);
-	static void		RGBAMessCallback(void *dump);
-	static void		RGBMessCallback(void *dump);
-    	static void 		connectMessCallback(void *dump);
-
-
-	static void image_drawme(pix_preview *x, t_glist *glist, int firsttime, int m_xsize, int m_ysize);
-
-	static void image_erase(pix_preview* x,t_glist* glist);
-	
-
-/* ------------------------ image widgetbehaviour----------------------------- */
-
-
-	static void image_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int *xp2, int *yp2);
-
-	static void image_displace(t_gobj *z, t_glist *glist, int dx, int dy);
-
-	static void image_select(t_gobj *z, t_glist *glist, int state);
-
-	static void image_activate(t_gobj *z, t_glist *glist, int state);
-
-	static void image_delete(t_gobj *z, t_glist *glist);
-       
-	static void image_vis(t_gobj *z, t_glist *glist, int vis);
-
-};
-
-#endif	// for header file
diff --git a/externals/pdvjtools/pix_preview/pix_preview.tk2c b/externals/pdvjtools/pix_preview/pix_preview.tk2c
deleted file mode 100755
index 5dede3a4e17c8f397a8ad39b338cc344358f6214..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/pix_preview/pix_preview.tk2c
+++ /dev/null
@@ -1,34 +0,0 @@
-sys_vgui("package require Img\n");
-sys_vgui("proc Echo_Server%d {port} {\n", whoami);
-sys_vgui("    set s [socket -server EchoAccept%d $port]\n", whoami);
-sys_vgui("    puts \"server%d socket created on port $port\"\n", whoami);
-sys_vgui("}\n");
-sys_vgui("proc EchoAccept%d {sock addr port} {\n", whoami);
-sys_vgui("    global echo\n");
-sys_vgui("    # Record the client's information\n");
-sys_vgui("    puts \"Accept $sock from $addr port $port\"\n");
-sys_vgui("    set echo(addr,$sock) [list $addr $port]\n");
-sys_vgui("    # Ensure that each \"puts\" by the server\n");
-sys_vgui("    # results in a network transmission\n");
-sys_vgui("    fconfigure $sock -buffering line\n");
-sys_vgui("    # Set up a callback for when the client sends data\n");
-sys_vgui("    fileevent $sock readable [list Echo%d $sock]\n", whoami);
-sys_vgui("}\n");
-sys_vgui("# Echo --\n");
-sys_vgui("#	This procedure is called when the server\n");
-sys_vgui("#	can read data from the client\n");
-sys_vgui("# Arguments:\n");
-sys_vgui("#	sock	The socket connection to the client\n");
-sys_vgui("proc Echo%d {sock} {\n", whoami);
-sys_vgui("    global echo\n");
-sys_vgui("    # Check end of file or abnormal connection drop,\n");
-sys_vgui("    # then echo data back to the client.\n");
-sys_vgui("    if {[eof $sock] || [catch {gets $sock line}]} {\n");
-sys_vgui("	close $sock\n");
-sys_vgui("	puts \"Close $echo(addr,$sock)\"\n");
-sys_vgui("	unset echo(addr,$sock)\n");
-sys_vgui("    } else {\n");
-sys_vgui("	#puts $sock $line\n");
-sys_vgui("	imgPREVIEW%d put $line\n", whoami);
-sys_vgui("    }\n");
-sys_vgui("}\n");
diff --git a/externals/pdvjtools/videogrid/INSTALL_videogrid b/externals/pdvjtools/videogrid/INSTALL_videogrid
deleted file mode 100755
index 1733d708005d769524751cc0d61add846fce4d46..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/INSTALL_videogrid
+++ /dev/null
@@ -1,48 +0,0 @@
-
-VIDEOGRID INSTALL
-
-[ENG]
-
-In order to compile this source it must have the library QuickTime and the source code of Puredata.
-
-tar xzvf videogrid[-version].tar.gz in folder pd/extra/ o edit file Makefile modifying the value of PD_SRC whit the correct path location of the pd/src/. If you don't have ir, download and copy the src/ folder into pd/ folder.
-
-$ cd videogrid[-version]
-
-# make clean
-
-# make
-
-# make install
-
-now you can open example: help-videogrid.pd
-
-$ pd help-videogrid.pd
-
-Thanks.
-
-Sergi Lario
-slario(at)gmail.com
-
-[CAT]
-
-Per compilar el codi font cal disposar de la biblioteca QuickTime i el codi font de Puredata.
-
-tar xzvf videogrid[-versio].tar.gz en el directori pd/extra/ o bé edita el fitxer Makefile modificant el valor de la variable PD_SRC amb el path correcte del codi font de pd/src/. Si no el tens el pots descarregar i copiar la carpeta src/ dins el directori pd/
-
-$ cd videogrid[-versio]
-
-# make clean 
-
-# make
-
-# make install
-
-ara ja pots obrir l'exemple help-videogrid.pd
-
-$ pd help-videogrid.pd
-
-Gràcies.
-
-Sergi Lario
-slario(at)gmail.com
diff --git a/externals/pdvjtools/videogrid/LICENSE b/externals/pdvjtools/videogrid/LICENSE
deleted file mode 100644
index 94a9ed024d3859793618152ea559a168bbcbb5e2..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/externals/pdvjtools/videogrid/Makefile b/externals/pdvjtools/videogrid/Makefile
deleted file mode 100755
index fcded8de2aba6fe80329e38afe340c626f13820b..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-PD_SRC=../../../pd/src
-FFMPEG_HEADERS=-I/usr/include/ffmpeg
-
-NAME=videogrid
-CSYM=videogrid
-
-current: pd_linux
-
-# ----------------------- LINUX -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -fPIC -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-
-LINUXINCLUDE =  -I$(PD_SRC) -I/usr/include/
-
-.cc.pd_linux:
-	g++  $(FFMPEG_HEADERS) -I$(PD_SRC) -fPIC -c -O -o videogrid.o videogrid.cc
-# 	./tk2c.bash < $*.tk > $*.tk2c
-	g++ $(FFMPEG_HEADERS) -Wl,--export-dynamic  -shared -o videogrid.pd_linux videogrid.o -lavformat -lavcodec -lavutil -lswscale -lquicktime
-	rm -f $*.o 
-
-# ----------------------------------------------------------
-
-install:
-	cp *-help.pd ../../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
-
diff --git a/externals/pdvjtools/videogrid/videogrid-help.pd b/externals/pdvjtools/videogrid/videogrid-help.pd
deleted file mode 100644
index f7f50b414e1cabaf560df148edd19796a23b04d5..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/videogrid-help.pd
+++ /dev/null
@@ -1,35 +0,0 @@
-#N canvas 0 26 1910 1087 10;
-#X symbolatom 116 322 60 0 0 0 - - -;
-#X obj 26 85 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X text 24 13 VIDEOGRID;
-#X text 164 73 ADD VIDEO;
-#X text 164 106 ADD VIDEOS FROM FOLDER;
-#X text 25 29 Object to select the path location of a video quiktime
-added in the grid \, in form of image of its first frame.;
-#X text 74 349 LOCATION OF THE SELECTED VIDEO;
-#X text 24 68 LIST STDOUT;
-#X obj 116 154 videogrid videogrid1 3 5 #F0F0F0 gray #F1882B mov:mpg
-60 40 /data/video/vjloops/karosta/dscn0248.mov|/data/video/vjloops/karosta/dscn0230.mov|/data/video/vjloops/karosta/dscn0217.mov|/data/video/vjloops/karosta/dscn0242.mov|
-;
-#X msg 166 87 putvideo \$1;
-#X obj 278 70 openpanel;
-#X obj 255 58 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X msg 26 137 clear;
-#X msg 102 98 seek \$1;
-#X floatatom 102 71 5 0 0 0 - - -;
-#X msg 166 120 putvideodir /data/video/vjloops/karosta;
-#X msg 447 137 cols 5;
-#X msg 497 137 rows 3;
-#X connect 1 0 8 0;
-#X connect 8 0 0 0;
-#X connect 9 0 8 0;
-#X connect 10 0 9 0;
-#X connect 11 0 10 0;
-#X connect 12 0 8 0;
-#X connect 13 0 8 0;
-#X connect 14 0 13 0;
-#X connect 15 0 8 0;
-#X connect 16 0 8 0;
-#X connect 17 0 8 0;
diff --git a/externals/pdvjtools/videogrid/videogrid.cc b/externals/pdvjtools/videogrid/videogrid.cc
deleted file mode 100644
index 327b24c5966db5e033963a85175b2ac383e92889..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/videogrid.cc
+++ /dev/null
@@ -1,1830 +0,0 @@
-
-extern "C"
-{
-    /*
-    videogrid external for Puredata
-    Lluis Gomez i Bigorda :: lluis-at-hangar.org
-    Sergi Lario Loyo      :: slario-at-gmail.com
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    */
-
-    #include <stdio.h>
-    #include <stdlib.h>
-    #include <dirent.h>
-    #include <string.h>
-    #include <unistd.h>
-    #include <math.h>
-
-    /*
-     * incloure les definicions de variables i prototipus de dades i de funcions de puredata
-    */
-    #include "m_pd.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions gàfiques bàsiques de pd
-    */
-    #include "g_canvas.h"
-    #include "s_stuff.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions per traballar amb threads
-    */
-    #include "pthread.h"
-
-    /* some linux distros need this to compile ffmpeg correctly as cpp */
-    #define __STDC_CONSTANT_MACROS 1
-
-    /* ffmpeg includes */
-
-    #include <ffmpeg/avcodec.h>
-    #include <ffmpeg/avformat.h>
-    #include <ffmpeg/avutil.h>
-    #include <ffmpeg/swscale.h>
-
-
-    /* may be your ffmpeg headers are here, at least from jaunty to karmic */
-    /*
-    #include <libavcodec/avcodec.h>
-    #include <libavformat/avformat.h>
-    #include <libavutil/avutil.h>
-    #include <libswscale/swscale.h>
-    */
-
-    /* libquicktime includes */
-    // #include <quicktime/lqt.h>
-    // #include <quicktime/colormodels.h>
-    #include <lqt/lqt.h>
-    #include <lqt/colormodels.h>
-
-    /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&& VIDEOGRID &&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
-    /* definició del gruix en pixels del marc del tauler */
-    #define GRUIX 2
-
-    /* nombre de caracters per el nom del path del fitxer */
-    #define BYTESNOMFITXER 512
-
-    /* 8bits clamp rgb values */
-    #define CLAMP8(x) (((x)<0) ? 0 : ((x>255)? 255 : (x)))
-
-    #define BYTESNOMFITXERIMATGE 512
-    #define BYTESTIPUSFROMAT 4
-
-    #define FORMAT_MINIATURA "ppm"
-    #define PATH_TEMPORAL "/tmp/vigrid_"
-    #define BYTES_NUM_TEMP 4
-
-    typedef char pathimage[BYTESNOMFITXERIMATGE];
-
-    typedef char tipus_format[BYTESTIPUSFROMAT];
-
-    t_namelist *loaded_libs = NULL;
-
-
-    /* ----------------------------------- FFmpeg functions ----------------------------------- */
-    int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi);
-
-    void SaveFrame(AVFrame *pFrame, int width, int height, int W, int H, int posi)
-    {
-        FILE *pFile;
-        char szFilename[32];
-        int nN = posi;
-
-        char nNstr[BYTES_NUM_TEMP];
-        pathimage  ig_path = PATH_TEMPORAL;
-
-        sprintf(nNstr, "%d", nN);
-        strcat(ig_path,nNstr);
-        strcat(ig_path,".");
-        strcat(ig_path,FORMAT_MINIATURA);
-
-        // Open file
-        sprintf(szFilename, ig_path);
-        pFile=fopen(szFilename, "wb");
-        if(pFile==NULL)
-            return;
-
-        // Write header
-        fprintf(pFile, "P6\n%d %d\n255\n", W, H);
-
-        int w = width;
-        int h = height;
-        float k = (width/W);
-        float l = (height/H);
-        int i,j,y,x,realx;
-
-        // Write pixel data
-        for(y=0; y<H; y=y++) {
-            for(x=0; x<W; x=x++) {
-                realx = ((x*k)+(3-((int)(x*k)%3)))*3;
-                fwrite((pFrame->data[0]+(int)(y*l)*pFrame->linesize[0])+realx, 1, 3, pFile);
-            }
-        }
-
-        // Close file
-        fclose(pFile);
-    }
-
-    int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-    {
-        AVFormatContext *pFormatCtx;
-        int             i, videoStream;
-        AVCodecContext  *pCodecCtx;
-        AVCodec         *pCodec;
-        AVFrame         *pFrame;
-        AVFrame         *pFrameRGB;
-        AVPacket        packet;
-        int             frameFinished;
-        int             numBytes;
-        uint8_t         *buffer;
-        static int sws_flags = SWS_BICUBIC;
-        struct SwsContext *img_convert_ctx;
-
-        int nN = posi;
-
-        // Register all formats and codecs
-        av_register_all();
-
-        // Open video file
-        if(av_open_input_file(&pFormatCtx, pathFitxer, NULL, 0, NULL)!=0)
-            return -1; // Couldn't open file
-
-        // Retrieve stream information
-        if(av_find_stream_info(pFormatCtx)<0)
-            return -1;  // Couldn't find stream information
-
-        // Dump information about file onto standard error
-        dump_format(pFormatCtx, 0, pathFitxer, false);
-
-        // Find the first video stream
-        videoStream=-1;
-        for(i=0; i<pFormatCtx->nb_streams; i++)
-            if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
-            {
-                videoStream=i;
-                break;
-            }
-        if(videoStream==-1)
-            return -1; // Didn't find a video stream
-
-        // Get a pointer to the codec context for the video stream
-        pCodecCtx=pFormatCtx->streams[videoStream]->codec;
-
-        // Find the decoder for the video stream
-        pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
-        if(pCodec==NULL)
-            return -1; // Codec not found
-
-        // Open codec
-        if(avcodec_open(pCodecCtx, pCodec)<0)
-            return -1; // Could not open codec
-
-        // Hack to correct wrong frame rates that seem to be generated by some
-        // codecs
-        // if(pCodecCtx->frame_rate>1000 && pCodecCtx->frame_rate_base==1)
-        //    pCodecCtx->frame_rate_base=1000;
-
-        // Allocate video frame
-        pFrame=avcodec_alloc_frame();
-
-        // Allocate an AVFrame structure
-        pFrameRGB=avcodec_alloc_frame();
-        if(pFrameRGB==NULL)
-            return -1;
-
-        // Determine required buffer size and allocate buffer
-        numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
-            pCodecCtx->height);
-        buffer=new uint8_t[numBytes];
-
-        // Assign appropriate parts of buffer to image planes in pFrameRGB
-        avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
-            pCodecCtx->width, pCodecCtx->height);
-
-        // Read frames and save first five frames to disk
-        av_read_frame(pFormatCtx, &packet);
-
-        // Is this a packet from the video stream?
-        if(packet.stream_index==videoStream)
-        {
-            // Decode video frame
-            avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, packet.data, packet.size);
-
-            // Did we get a video frame?
-            if(frameFinished)
-            {
-                // Convert the image from its native format to RGB
-                //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                //    pCodecCtx->height);
-                img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
-                                    pCodecCtx->pix_fmt,
-                                    pCodecCtx->width, pCodecCtx->height,
-                                    PIX_FMT_RGB24,
-                                    sws_flags, NULL, NULL, NULL);
-
-                sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                            0, pCodecCtx->height,
-                            pFrameRGB->data, pFrameRGB->linesize);
-                sws_freeContext(img_convert_ctx);
-
-                // Save the frame to disk
-                SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-            }
-        }
-
-        // Free the packet that was allocated by av_read_frame
-        av_free_packet(&packet);
-        // Read frames and save first five frames to disk
-        av_read_frame(pFormatCtx, &packet);
-        // Is this a packet from the video stream?
-        if(packet.stream_index==videoStream)
-        {
-            // Decode video frame
-            avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
-                packet.data, packet.size);
-
-            // Did we get a video frame?
-            if(frameFinished)
-            {
-                // Convert the image from its native format to RGB
-                //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                //    pCodecCtx->height);
-                img_convert_ctx = sws_getContext(    pCodecCtx->width, pCodecCtx->height,
-                                    pCodecCtx->pix_fmt,
-                                    pCodecCtx->width, pCodecCtx->height,
-                                    PIX_FMT_RGB24,
-                                    sws_flags, NULL, NULL, NULL);
-
-                sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                            0, pCodecCtx->height,
-                            pFrameRGB->data, pFrameRGB->linesize);
-                sws_freeContext(img_convert_ctx);
-
-                // Save the frame to disk
-                SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-            }
-        }
-
-        // Free the packet that was allocated by av_read_frame
-        av_free_packet(&packet);
-
-        // Free the RGB image
-        delete [] buffer;
-        av_free(pFrameRGB);
-
-        // Free the YUV frame
-        av_free(pFrame);
-
-        // Close the codec
-        avcodec_close(pCodecCtx);
-
-        // Close the video file
-        av_close_input_file(pFormatCtx);
-
-        return 0;
-    }
-
-    /* ----------------------------------- Quicktime functions ----------------------------------- */
-    int convertir_img(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-    {
-        /*
-        Quicktime per les conversions
-        */
-
-        /* RGB vectors */
-        unsigned char * qt_rows[3];
-        /* YUV vesctor frame */
-        unsigned char *qt_frame = NULL;
-        /* quicktime decoder */
-        quicktime_t *qt;
-        /* quicktime color model */
-        int qt_cmodel;
-
-        int nN = posi;
-        int x_vwidth = 0;
-        int x_vheight = 0;
-        qt = quicktime_open(pathFitxer, 1, 0);
-
-        if (!(qt)){
-            /* post("videogrid: error opening qt file"); */
-            return -1;
-        }
-
-        if (!quicktime_has_video(qt)) {
-            /* post("videogrid: no video stream"); */
-            quicktime_close(qt);
-            return -1;
-
-        }
-        else if (!quicktime_supported_video(qt,0)) {
-            /* post("videogrid: unsupported video codec\n"); */
-            quicktime_close(qt);
-            return -1;
-        }
-        else
-        {
-            qt_cmodel = BC_YUV420P;
-            x_vwidth  = quicktime_video_width(qt,0);
-            x_vheight = quicktime_video_height(qt,0);
-
-            free(qt_frame);
-            qt_frame = (unsigned char*)malloc(x_vwidth*x_vheight*4);
-
-            int size = x_vwidth * x_vheight;
-            qt_rows[0] = &qt_frame[0];
-            qt_rows[2] = &qt_frame[size];
-            qt_rows[1] = &qt_frame[size + (size>>2)];
-
-            quicktime_set_cmodel(qt, qt_cmodel);
-        }
-
-        /* int length = quicktime_video_length(qt,0); */
-        /* int Vpos = quicktime_video_position(qt,0); */
-        lqt_decode_video(qt, qt_rows, 0);
-
-        switch(qt_cmodel){
-            case BC_YUV420P:
-                /* printf(" "); */
-                /* post("videogrid: qt colormodel : BC_YUV420P"); */
-
-                /* per a fer la miniatura
-                   cada k colomnes pillem una
-                   cada l files pillem una */
-                int w = x_vwidth;
-                int h = x_vheight;
-                int k = (w/W);
-                int l = (h/H);
-
-                char nNstr[BYTES_NUM_TEMP];
-                pathimage  ig_path = PATH_TEMPORAL;
-
-                sprintf(nNstr, "%d", nN);
-                strcat(ig_path,nNstr);
-                strcat(ig_path,".");
-                strcat(ig_path,FORMAT_MINIATURA);
-                /* printf("Creacio de la imatge %s ...",ig_path); */
-                /* escriu el contingut de data a un arxiu. */
-                FILE *fp = fopen(ig_path, "w");
-                fprintf (fp, "P6\n%d %d\n255\n", W, H);
-
-                int i,j,y,u,v,r,g,b;
-
-                for (i=0;i<(l*H);i=i+l) {
-                    for (j=0;j<(k*W);j=j+k) {
-                        y=qt_rows[0][(w*i+j)];
-                        u=qt_rows[1][(w/2)*(i/2)+(j/2)];
-                        v=qt_rows[2][(w/2)*(i/2)+(j/2)];
-                        r = CLAMP8(y + 1.402 *(v-128));
-                        g = CLAMP8(y - 0.34414 *(u-128) - 0.71414 *(v-128));
-                        b = CLAMP8(y + 1.772 *(u-128));
-                        fprintf (fp, "%c%c%c", r,g,b);
-                    }
-                }
-                /* escriu el contingut de data a un arxiu.*/
-                fclose (fp);
-        }
-        return 0;
-    }
-
-    /* ----------------------------------- Cue > rounded list ----------------------------------- */
-    typedef char path[BYTESNOMFITXER];
-
-    /* estructura de dades: un node de la cua */
-    struct node
-    {
-        /* nom del path de la imatge */
-        path pathFitxer;
-        /* apuntador al següent node en cua */
-        struct node *seguent;
-    };
-
-    /* definició del tipus node */
-    typedef struct node Node;
-
-    /* estructures i tipus de dades de la cua */
-    /* definició del tipus de cua */
-    typedef struct
-    {
-        Node *davanter;
-        Node *final;
-    }Cua;
-
-    /* declaracions de les funcions */
-
-    /* crea una cua */
-    void crearCua(Cua *cua);
-    /* encuara un element al final de la cua */
-    void encuar (Cua *cua, path x);
-    /* elimina un element de la cua */
-    int desencuar (Cua *cua);
-    /* retorna si la cua és buida */
-    int cuaBuida(Cua *cua);
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua);
-    /* retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua);
-    /* escriu el contingut de la cua */
-    void escriuCua(Cua *cua);
-
-    /* implementació de les funcions */
-    void crearCua(Cua *cua)
-    {
-        cua->davanter=cua->final=NULL;
-    }
-
-    /* funció que encua el node al final de la cua */
-    void encuar (Cua *cua, path x)
-    {
-        Node *nou;
-        nou=(Node*)malloc(sizeof(Node));
-        strcpy(nou->pathFitxer,x);
-        nou->seguent=NULL;
-        if(cuaBuida(cua))
-        {
-            cua->davanter=nou;
-        }
-        else
-            cua->final->seguent=nou;
-        cua->final=nou;
-    }
-
-    /* elimina l'element del principi de la cua */
-    int desencuar (Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *nou;
-            nou=cua->davanter;
-            cua->davanter=cua->davanter->seguent;
-            free(nou);
-            return 1;
-        }
-        else
-        {
-            /* printf("Cua buida\a\n"); */
-            return 0;
-        }
-    }
-
-    /* funció que retorna si la cua és buida */
-    int cuaBuida(Cua *cua)
-    {
-        return (cua->davanter==NULL);
-    }
-
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua)
-    {
-        while (!cuaBuida(cua)) desencuar(cua);
-        /* printf("Cua eliminada\n"); */
-    }
-
-    /* funció que retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua)
-    {
-        int contador=0;
-        Node *actual;
-        actual=cua->davanter;
-        if(actual) contador=1;
-        while((actual)&&(actual != cua->final)){
-             contador ++;
-             actual = actual->seguent;
-        }
-        return (contador);
-    }
-
-    /* funció que escriu la cua de nodes */
-    void escriuCua(Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *actual;
-            actual=cua->davanter;
-            post("THUMBS INSIDE\n[");
-            do{
-                post("#%s#",actual->pathFitxer);
-                actual = actual->seguent;
-            }while(actual);
-            post("]\n");
-        }
-        else
-            post("EMPTY: NO THUMBS INSIDE\n");
-    }
-
-    /* ----------------------------------- videogrid gui-videogrid ----------------------------------- */
-
-    t_widgetbehavior   videogrid_widgetbehavior;
-    /* crear un apuntador al nou objecte */
-    static t_class *videogrid_class;
-    /* indica el nombre de videogrid creats - utilitzat per diferenciar el nom d'instàncies d'objectes del mateix tipus */
-    static int videogridcount = 0;
-
-    /* definició de la classe i la seva estructura de dades */
-
-    typedef struct _videogrid {
-        t_object  x_obj;
-        /* declaració de la sortida de l'objecte */
-        t_outlet *x_sortida;
-        /* llista d'objectes gràfics */
-        t_glist *x_glist;
-        /* nombre de files */
-        int x_num_fil;
-        /* nombre de columnes */
-        int x_num_col;
-        /* width del thumbnail  */
-        int x_w_cell;
-        /* height del thumbnail */
-        int x_h_cell;
-        /* posició de la última imatge en el tauler */
-        int x_ultima_img;
-        /* path del directori actual */
-        path x_dir_actual;
-        /* path del directori a canviar */
-        path x_dir_canvi;
-        /* posicio ultim al directori actual */
-        int x_dir_pos;
-        /* apuntador al primer element posicionat al tauler */
-        Node *x_tauler_primer;
-        /* cua d'imatges */
-        Cua x_cua;
-        /* nom de l'objecte */
-        t_symbol *x_name;
-        /* color de fons */
-        t_symbol *x_color_fons;
-        /* color del marge */
-        t_symbol *x_color_marc;
-        /* mutex per evitar concurrencia sobre la cua al accedir diferents threads*/
-        pthread_mutex_t x_lock;
-        /* v 0.2 -- posicó de la cel·la seleccionada */
-        int x_pos_selected;
-        /* v 0.2 -- color de seleccio */
-        t_symbol *x_color_grasp;
-        /* v 0.2.1 -- llista de formats */
-        t_symbol *x_format_list;
-    } t_videogrid;
-
-    /* ---------------- control functions ------------ */
-
-    /* v 0.2 -- mètode de la classe que desmarca la cel·la seleccionada */
-    /* calcula la posició x del tauler a partir de la posició de l'element de la cua (d'esquerra a dreta) */
-    int getX(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int xpos = (posCua % c) * x->x_w_cell + ((posCua % c) + 1) * GRUIX;
-        return(xpos + 1);
-    }
-
-    /* calcula la posició y del tauler a partir de la posició de l'element de la cua (de dalt a baix) */
-    int getY(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int ypos = (posCua / c) * x->x_h_cell + ((posCua / c) + 1) * GRUIX;
-        return(ypos + 1);
-    }
-
-    static void videogrid_ungrasp_selected(t_videogrid *x)
-    {
-        /* post("Ungrasp selected thumb %d", x->x_pos_selected); */
-        if(x->x_pos_selected > -1) {
-            sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(x->x_glist), x);
-            x->x_pos_selected = -1;
-        }
-    }
-
-    /* elimina les imatges temporals */
-    void eliminar_imatges_temporals(int maxim){
-        FILE *fitxer;
-        path path_total;
-        int contador = 0;
-        char contador_str[BYTES_NUM_TEMP];
-        while(contador < maxim){
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            /* elimina el fitxer si no hi ha cap problema */
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-        /* post("Videogrid: Imatges temporals eliminades\n",path_total); */
-    }
-
-    int format_adequat_v(path nomF, t_symbol *format_list){
-        int retorn = 0;
-        path  ig_path = "";
-        strcat(ig_path,nomF);
-        path fl;
-        strcpy(fl,format_list->s_name);
-        char *t1;
-        char *ext;
-        path extensio = "";
-        for ( t1 = strtok(ig_path,".");
-              t1 != NULL;
-              t1 = strtok(NULL,".") )
-            strcpy(extensio,t1);
-
-        for ( ext = strtok(fl,":");
-          ext != NULL;
-              ext = strtok(NULL,":") ) {
-            if(strcmp(extensio,ext)==0) {
-                retorn = 1;
-                ext = NULL;
-            }
-        }
-        return (retorn);
-    }
-
-    /* afegir una imatge al grid */
-    void videogrid_afegir_imatge(t_videogrid *x, path entrada)
-    {
-        int maxim;
-        char nNstr[BYTES_NUM_TEMP];
-        int pos = 0;
-        maxim = x->x_num_fil * x->x_num_col;
-        path  ig_path = PATH_TEMPORAL;
-        /* si hi ha tants nodes a la cua com el maxim */
-        if((numNodes(&x->x_cua)) >=  maxim){
-            /* desencua */
-            int extret;
-            extret = desencuar(&x->x_cua);
-            /* obtenir la posició en la cua del nou node */
-            if(x->x_ultima_img == maxim - 1) {
-                pos = 0;
-            }else{
-                pos = x->x_ultima_img + 1;
-            }
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, x->x_ultima_img);
-        }
-
-        /* FFMPEG o Quicktime per les conversions */
-        int fferror=0;
-        int nN = x->x_ultima_img;
-        /*
-        if (format_adequat_v(entrada, x->x_format_list) == 0) {
-            // convertir_img(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-            fferror = -1;
-
-        } else {
-        */
-        fferror=convertir_img_ff(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-        /* } */
-        /* post ("%d",fferror); */
-        if (fferror>=0) {
-            /* encua el nou node */
-            encuar(&x->x_cua, entrada);
-            /* si no és el primer element a encuar incrementem la posicio de la última imatge insertada */
-            if(numNodes(&x->x_cua) != 0) x->x_ultima_img ++;
-            /*
-             * si assoleix el maxim torna a començar,
-             * inicialitzant la posició en el tauler de la última imatge insertada
-             */
-            if(x->x_ultima_img == maxim) x->x_ultima_img = 0;
-
-            sprintf(nNstr, "%d", nN);
-            strcat(ig_path,nNstr);
-            strcat(ig_path,".");
-            strcat(ig_path,FORMAT_MINIATURA);
-
-            sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-            sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                glist_getcanvas(x->x_glist),
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2),
-                text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),
-                x,nN,x,nN);
-            if(nN == 0){
-                x->x_tauler_primer = x->x_cua.final;
-            }
-        }
-    }
-
-    /* v 0.2 -- mètode de la classe que marca la cel·la seleccionada */
-    static void videogrid_grasp_selected(t_videogrid *x, int pos)
-    {
-        /*printf("Grasp selected thumb %d", pos);*/
-        if(pos != x->x_pos_selected) {
-            videogrid_ungrasp_selected(x);
-            /* post("Grasp selected thumb %d", pos); */
-            x->x_pos_selected = pos;
-            /* nem per aqui ---- */
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill {} -tags %xGRASP -outline %s -width %d\n",
-                    glist_getcanvas(x->x_glist),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell,
-                    x,x->x_color_grasp->s_name, GRUIX + 1);
-            canvas_fixlinesfor(glist_getcanvas(x->x_glist), (t_text*)x);
-        }
-    }
-
-    /*  widget helper functions  */
-
-    /* dibuixa videogrid */
-    void videogrid_drawme(t_videogrid *x, t_glist *glist, int firsttime)
-    {
-        /* post("Entra a drawme amb firsttime: %d", firsttime); */
-        if (firsttime) {
-            char name[MAXPDSTRING];
-            canvas_makefilename(glist_getcanvas(x->x_glist), x->x_name->s_name, name, MAXPDSTRING);
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill %s -tags %xGRID -outline %s\n",
-                glist_getcanvas(glist),
-                text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                text_xpix(&x->x_obj, glist) + (x->x_num_col * x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil * x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX,
-                x->x_color_fons->s_name, x,x->x_color_marc->s_name);
-
-            canvas_fixlinesfor(glist_getcanvas(glist), (t_text*)x);
-            /* si hi elements a la cua els afegeix (redimensió) */
-            if(!cuaBuida(&x->x_cua))
-            {
-                path  ig_path;
-                int nN = 0;
-                char nNstr[BYTES_NUM_TEMP];
-                Node *actual;
-                actual=x->x_cua.davanter;
-                do{
-                    strcpy(ig_path,PATH_TEMPORAL);
-                    sprintf(nNstr, "%d", nN);
-                    strcat(ig_path,nNstr);
-                    strcat(ig_path,".");
-                    strcat(ig_path,FORMAT_MINIATURA);
-                    /* post("reestablint la imatge %s", actual->pathFitxer); */
-                    convertir_img_ff(actual->pathFitxer,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-                    sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-                    sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                             glist_getcanvas(x->x_glist),text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),x,nN,x,nN);
-                    actual = actual->seguent;
-                    nN++;
-                }while(actual);
-            }
-        }
-        else {
-            sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-            if(!cuaBuida(&x->x_cua))
-            {
-                int contador = 0;
-                while(contador < numNodes(&x->x_cua)){
-                    sys_vgui(".x%x.c coords %xS%d \
-                            %d %d\n",
-                    glist_getcanvas(glist), x, contador,
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,contador) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,contador) + (x->x_h_cell/2));
-                    contador++;
-                }
-
-               /* char buf[800];
-                sprintf(buf, "pdtk_videogrid_table %%s %s %d %d\n", x->x_name->s_name, x->x_num_fil, x->x_num_col);
-                gfxstub_new(&x->x_obj.ob_pd, x, buf); */
-            }
-            if (x->x_pos_selected > -1){
-                sys_vgui(".x%x.c coords %xGRASP %d %d %d %d\n", glist_getcanvas(glist), x,
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell);
-            }
-            sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        int xI = text_xpix(&x->x_obj, glist);
-        int yI = text_ypix(&x->x_obj, glist);
-        int xF = xI + (x->x_num_col * x->x_w_cell) + ((x->x_num_col + 1) * GRUIX);
-        int yF = yI + (x->x_num_fil * x->x_h_cell) + ((x->x_num_fil + 1) * GRUIX);
-        int vlines = 0;
-        int xi = 0;
-        while(vlines < x->x_num_col){
-            xi = xI + getX(x,vlines) - GRUIX + 1;
-            sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-            vlines++;
-        }
-        xi = xi + x->x_w_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-        int hlines = 0;
-        int yi = 0;
-        while(hlines < x->x_num_fil){
-            yi = yI + ((x->x_h_cell + GRUIX) * hlines) + 2;
-            sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-            hlines++;
-        }
-        yi = yi + x->x_h_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-    }
-
-    static void videogrid_delete(t_gobj *z, t_glist *glist)
-    {
-        /* post("Entra a delete"); */
-        t_text *x = (t_text *)z;
-        canvas_deletelinesfor(glist_getcanvas(glist), x);
-    }
-
-    static void videogrid_displace(t_gobj *z, t_glist *glist,int dx, int dy)
-    {
-        /* post("Entra a displace amb dx %d i dy %d", dx, dy); */
-        t_videogrid *x = (t_videogrid *)z;
-        x->x_obj.te_xpix += dx;
-        x->x_obj.te_ypix += dy;
-        sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n",
-                 glist_getcanvas(glist), x,
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                 text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-        videogrid_drawme(x, glist, 0);
-        canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-    }
-
-    /* borra videogrid v 0.2 -- int toclear */
-    void videogrid_erase(t_videogrid* x,t_glist* glist, int toclear)
-    {
-        int maxim = x->x_num_fil * x->x_num_col;
-        path path_total;
-        char contador_str[BYTES_NUM_TEMP];
-        /* post("Entra a erase"); */
-        /* elimina les imatges */
-        int contador = 0;
-        while(contador < numNodes(&x->x_cua)){
-
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, contador);
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-
-        /* elimina el grid v 0.2 -- excepte quan es fa un clear */
-        if(toclear == 0){
-            sys_vgui(".x%x.c delete %xGRID\n", glist_getcanvas(glist), x);
-            sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        /* v 0.2 -- elimina el marc de la casella seleccionada */
-        if(x->x_pos_selected > -1){
-            sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(glist), x);
-            x->x_pos_selected = -1;
-        }
-        eliminar_imatges_temporals(maxim);
-    }
-
-    static void videogrid_vis(t_gobj *z, t_glist *glist, int vis)
-    {
-        /* post("Entra a vist amb vis %d", vis); */
-        t_videogrid* s = (t_videogrid*)z;
-        if (vis)
-            videogrid_drawme(s, glist, 1);
-        else
-           videogrid_erase(s,glist,0);
-    }
-
-    static void videogrid_select(t_gobj *z, t_glist *glist, int state)
-    {
-        /* post("Entra select amb state %d", state); */
-        t_videogrid *x = (t_videogrid *)z;
-        if (state) {
-            /* post("Videogrid seleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline #0000FF\n", glist_getcanvas(glist), x);
-        }
-        else {
-            /* post("Videogrid deseleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline %s\n", glist_getcanvas(glist), x, x->x_color_marc->s_name);
-        }
-    }
-
-    static void videogrid_getrect(t_gobj *z, t_glist *glist,int *xp1, int *yp1, int *xp2, int *yp2)
-    {
-        int cols, fils;
-        t_videogrid* x = (t_videogrid*)z;
-        cols = x->x_num_col;
-        fils = x->x_num_fil;
-        *xp1 = text_xpix(&x->x_obj, glist);
-        *yp1 = text_ypix(&x->x_obj, glist);
-        *xp2 = text_xpix(&x->x_obj, glist) + (cols*x->x_w_cell) + ((cols + 1) * GRUIX);
-        *yp2 = text_ypix(&x->x_obj, glist) + (fils*x->x_h_cell) + ((fils + 1) * GRUIX);
-        /* post("Esta amb el ratoli en el punt %d %d %d %d o son els vetexs de la caixa... es/bd", xp1, yp1, xp2, yp2); */
-    }
-
-
-    static void videogrid_save(t_gobj *z, t_binbuf *b)
-    {
-        /* post("Entra a save"); */
-        t_videogrid *x = (t_videogrid *)z;
-        /* crea la cadena de paths per desar */
-        /* 100 possibles paths com a màxim a 512 cada path*/
-        /* char cadenaPaths[51200];*/
-        char *cadenaPaths, *cadenaPathsInicials;
-        path ultimPath = "";
-        cadenaPaths = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPaths,"");
-        cadenaPathsInicials = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPathsInicials,"");
-        /*strcpy(cadenaPaths,(char *)argv[5].a_w.w_symbol->s_name);*/
-        if(!cuaBuida(&x->x_cua))
-        {
-            Node *actual;
-            int maxim = x->x_num_fil * x->x_num_col;
-            int contador = x->x_ultima_img + 1;
-
-            if (contador > maxim) {
-                   contador = 0;
-            }
-            /* printf("\n contador %d i maxim %d i laultimaPOS %d \n", contador, maxim, x->x_ultima_img); */
-            /*
-            strcat(cadenaPaths, actual->pathFitxer);
-            strcat(cadenaPaths, "1|\n");
-            contador ++;
-            */
-            /* prenem el davanter de la cua */
-            actual=x->x_cua.davanter;
-
-            while(contador < numNodes(&x->x_cua)){
-                /* afegim els paths del davanter fins a l'ultim node al tauler */
-                strcat(cadenaPaths, actual->pathFitxer);
-                strcat(cadenaPaths, "|");
-                actual = actual->seguent;
-                contador ++;
-            }
-            if(actual != x->x_cua.final){
-                /* ara resten els de de l'inici del tauler fins al final de la cua */
-                while(actual != x->x_cua.final){
-                    strcat(cadenaPathsInicials, actual->pathFitxer);
-                    strcat(cadenaPathsInicials, "|");
-                    actual = actual->seguent;
-                }
-                /* afegeix l'últim */
-                strcat(ultimPath, actual->pathFitxer);
-                strcat(ultimPath, "|");
-                /* afegeix l'ultim de la cua */
-                strcat(cadenaPathsInicials, ultimPath);
-            }else{
-                if(x->x_ultima_img == 0){
-                    strcat(ultimPath, actual->pathFitxer);
-                    strcat(ultimPath, "|");
-                    strcat(cadenaPathsInicials, ultimPath);
-                }
-            }
-            /* ordena el paths segons aparicio en el tauler */
-            strcat(cadenaPathsInicials, cadenaPaths);
-            /* DE MOMENT NO DESA ELS PATHS */
-            strcat(cadenaPathsInicials, "");
-            /* printf("%s",cadenaPathsInicials); */
-        }
-
-        binbuf_addv(b, "ssiissiissssiis", gensym("#X"),gensym("obj"),
-        x->x_obj.te_xpix, x->x_obj.te_ypix,
-        atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-        x->x_name,x->x_num_fil,x->x_num_col,x->x_color_fons,x->x_color_marc,x->x_color_grasp,x->x_format_list,x->x_w_cell,x->x_h_cell,gensym(cadenaPathsInicials));
-        binbuf_addv(b, ";");
-    }
-
-    static void videogrid_properties(t_gobj *z, t_glist *owner)
-    {
-        char buf[900];
-        t_videogrid *x=(t_videogrid *)z;
-
-        /* post("Es crida a pdtk_videogrid dialog passant nom = %s\n fils = %d \t cols = %d \t color fons = %s \t color marc = %s\n", x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name); */
-        sprintf(buf, "pdtk_videogrid_dialog %%s %s %d %d %s %s %s %s %i %i\n",
-                x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name, x->x_color_grasp->s_name, x->x_format_list->s_name, x->x_w_cell,x->x_h_cell);
-        /* post("videogrid_properties : %s", buf ); */
-        gfxstub_new(&x->x_obj.ob_pd, x, buf);
-    }
-
-    static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv)
-    {
-        int maxim, maxdigit;
-        int nfil = 0;
-        int ncol = 0;
-        if ( !x ) {
-            post("Videogrid: error_ Attempt to alter the properties of an object that does not exist.\n");
-        }
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-        break;
-        case 5:
-            /* versio 0.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 6:
-            /* versio 0.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL || argv[7].a_type != A_FLOAT || argv[8].a_type != A_FLOAT)
-            {
-                    post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                    return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)argv[7].a_w.w_float;
-            x->x_h_cell = (int)argv[8].a_w.w_float;
-        break;
-
-        default:
-            /* no fa res */
-        break;
-        }
-        /* amb aquest nom es prepara per poder rebre dades */
-        pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        // x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        x->x_ultima_img = numNodes(&x->x_cua);
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* v 0.2 -- mètode de la classe que dispara l'element del taules en la posicio N [seek N( */
-    void videogrid_seek(t_videogrid *x, t_floatarg postauler)
-    {
-        /* post("seek a %d\n",postauler); */
-        path pathSortida;
-        Node *actual;
-        int contador = 0;
-        int maxim = x->x_num_fil * x->x_num_col;
-        /* obtenir el path per enviar a la sortida */
-        if((!cuaBuida(&x->x_cua))&&(postauler < numNodes(&x->x_cua))&&(postauler >= 0 )){
-            if(x->x_tauler_primer){
-                actual = x->x_tauler_primer;
-                while(contador <= postauler){
-                    if(contador == postauler){
-                        strcpy(pathSortida,actual->pathFitxer);
-                    }
-                    if(actual->seguent == NULL){
-                        actual = x->x_cua.davanter;
-                    }else{
-                        actual = actual->seguent;
-                    }
-                    contador++;
-                }
-                outlet_symbol(x->x_sortida, gensym(pathSortida));
-                /* post("Esta a videogrid_click amb %d %d a la posicio %d\n", x_pos, y_pos, postauler);*/
-                /* v 0.2 -- marcar casella */
-                videogrid_grasp_selected(x, postauler);
-            }
-        }
-    }
-
-    static int videogrid_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit)
-    {
-        t_videogrid* x = (t_videogrid *)z;
-        int x_pos = xpix - text_xpix(&x->x_obj, x->x_glist);
-        int y_pos = ypix - text_ypix(&x->x_obj, x->x_glist);
-        int xa, ya, postauler;
-        if (doit)
-        {
-            /* obtenir la posicio en el tauler */
-            // -- v 0.2 -- midoficacio pel gruix del marc //
-            xa = ((x_pos) / (x->x_w_cell + GRUIX + 1));
-            ya = ((y_pos) / (x->x_h_cell + GRUIX + 1)) * x->x_num_col;
-            postauler = ya + xa;
-            // -- v 0.2 -- seleciona la casella disparant el path //
-            videogrid_seek(x, postauler);
-        }
-        return (1);
-    }
-
-    /* --------- videogrid functions ---------- */
-
-    /* v 0.2 -- mètode de la classe que buida el tauler amb el missatge [clear ( */
-    void videogrid_clear(t_videogrid *x)
-    {
-        videogrid_erase(x, x->x_glist,1);
-        eliminarCua(&x->x_cua);
-        x->x_ultima_img = 0;
-        x->x_dir_pos = 0;
-        x->x_tauler_primer = NULL;
-        videogrid_drawme(x, x->x_glist, 0);
-    }
-
-    /* mètode de la clase que escriu un missatge al rebre un bang */
-    void videogrid_bang(t_videogrid *x)
-    {
-        /* post("Hello videogrid !!"); */
-        escriuCua(&x->x_cua);
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideo +string( com a paràmetre */
-    void videogrid_putvideo(t_videogrid *x, t_symbol *entrada)
-    {
-        /* comprova que existeixi el fitxer */
-        FILE *fitxer;
-        path e;
-        strcpy(e,entrada->s_name);
-        fitxer = fopen(e,"r");
-        if (!fitxer) {
-            post("Videogrid: Problem opening file %s.\n",e);
-        }
-        else {
-            if (format_adequat_v(e, x->x_format_list) != 0) {
-                videogrid_afegir_imatge(x,e);
-            }
-        }
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideodir +string( com a paràmetre */
-    void *videogrid_putvideodir_thread(void *z)
-    {
-        t_videogrid *x = (t_videogrid *)z;
-        DIR *dirp;
-        struct dirent * direntp;
-        path nomImatge, directoriAnterior, pathActual;
-        int numEncuats = 0, numPosDir = 0;
-        int maxim;
-        if ((dirp = opendir(x->x_dir_canvi)) == NULL)
-        {
-            post("Videogrid: Can not open folder %s.\n", x->x_dir_canvi);
-        }else{
-            maxim = x->x_num_fil * x->x_num_col;
-            strcpy(directoriAnterior, x->x_dir_actual);
-            strcpy(x->x_dir_actual, x->x_dir_canvi);
-            /*
-             * si es el mateix directori entrat l'ultim busca la ultima imatge afegida
-             * per a seguir a encuant a partir d'ella en endavant
-             */
-            if(strcmp(directoriAnterior, x->x_dir_actual) == 0){
-                /* post("Videogrid: Repeteix directori %s\n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* assolir la posició anterior en el directori */
-                        if(numPosDir > x->x_dir_pos){
-                            /* si el nombre de nodes encuats per aquest directori no supera el màxim encua el nou node */
-                            if(numEncuats < maxim){
-                                /* post("s'encua la imatge %s\n", direntp->d_name); */
-                                /* concatena el path i el nom de la imatge */
-                                strcpy(nomImatge,direntp->d_name);
-                                strcpy(pathActual,x->x_dir_actual);
-                                strcat(pathActual,"/");
-                                strcat(pathActual,nomImatge);
-                                if (format_adequat_v(pathActual, x->x_format_list) != 0) {
-                                    pthread_mutex_lock(&x->x_lock);
-                                    videogrid_afegir_imatge(x, pathActual);
-                                    pthread_mutex_unlock(&x->x_lock);
-                                    /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                                    numEncuats++;
-                                }
-                                /* es desa la posició en el directori de l'últim node encuat */
-                                x->x_dir_pos = numPosDir;
-                            }
-                        }
-                    }
-                }
-            }else{
-                /* directori diferent omple la cua començant pel primer fitxer */
-                /* post("Videogrid: Nou directori %s \n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* si el nombre de nodes encuats per aquest directori no supera el màxim enca el nou node */
-                        if(numEncuats < maxim){
-                            /* post("s'encua la imatge %s\n", direntp->d_name); */
-                            /* concatena el path i el nom de la imatge */
-                            strcpy(nomImatge,direntp->d_name);
-                            strcpy(pathActual,x->x_dir_actual);
-                            strcat(pathActual,"/");
-                            strcat(pathActual,nomImatge);
-                            if (format_adequat_v(pathActual, x->x_format_list) != 0) {
-                                pthread_mutex_lock(&x->x_lock);
-                                videogrid_afegir_imatge(x, pathActual);
-                                pthread_mutex_unlock(&x->x_lock);
-                                /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                                numEncuats++;
-                            }
-                            /* es desa la posició en el directori de l'últim node encuat */
-                            x->x_dir_pos = numPosDir;
-                        }
-                    }
-                }
-            }
-            /* si la posicio de l'actual es la de l'utim fitxer del directori, inicialitza la posició */
-            if(x->x_dir_pos >= numPosDir) x->x_dir_pos = 0;
-            closedir(dirp);
-        }
-        /* escriu l'argument entrat */
-        /* post("Obtenint imatges del directori: %s ...",x->x_dir_canvi); */
-        /* envia a la sorida l'argument entrat */
-        /* outlet_symbol(x->x_sortida, entrada); */
-        pthread_exit(NULL);
-    }
-
-    void videogrid_putvideodir(t_videogrid *x, t_symbol *entrada)
-    {
-
-        pthread_t unthread;
-        pthread_attr_t unatribut;
-        pthread_attr_init( &unatribut );
-
-        strcpy(x->x_dir_canvi,entrada->s_name);
-
-        // ----------------      THREAD CREAT -------------------------
-        pthread_mutex_init(&x->x_lock, NULL);
-        // int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
-        pthread_create(&unthread, &unatribut, videogrid_putvideodir_thread, (void *)x);
-        pthread_mutex_destroy(&x->x_lock);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de files del tauler [rows N( */
-    void videogrid_rows(t_videogrid *x, t_floatarg nfil)
-    {
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, ncol;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        ncol = x->x_num_col;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                /* x->x_num_col = ncol; */
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de columnes del tauler [cols N( */
-    void videogrid_cols(t_videogrid *x, t_floatarg ncol)
-    {
-        /* post("rows a %d\n",postauler); */
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, nfil;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        nfil = x->x_num_fil;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                /* x->x_num_fil = nfil; */
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* tk help windows */
-
-    void load_tk_procs_videogrid () {
-        // ########### procediments per videogrid -- slario(at)gmail.com [a partir del codi del grid de l'Ives: ydegoyon(at)free.fr] #########
-        sys_gui("proc videogrid_apply {id} {\n");
-        // strip "." from the TK id to make a variable name suffix
-        sys_gui("set vid [string trimleft $id .]\n");
-        // for each variable, make a local variable to hold its name...
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set cmd [concat $id dialog [eval concat $$var_graph_name] [eval concat $$var_graph_num_fil] [eval concat $$var_graph_num_col] [eval concat $$var_graph_color_fons] [eval concat $$var_graph_color_marc] [eval concat $$var_graph_color_grasp] [eval concat $$var_graph_format_list] [eval concat $$var_graph_w_cell] [eval concat $$var_graph_h_cell]\\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_cancel {id} {\n");
-        sys_gui("set cmd [concat $id cancel \\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_ok {id} {\n");
-        sys_gui("videogrid_apply $id\n");
-        sys_gui("videogrid_cancel $id\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_dialog {id name num_fil num_col color_fons color_marc color_grasp format_list w_cell h_cell } {\n");
-        sys_gui("set vid [string trimleft $id .]\n");
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set $var_graph_name $name\n");
-        sys_gui("set $var_graph_num_fil $num_fil\n");
-        sys_gui("set $var_graph_num_col $num_col\n");
-        sys_gui("set $var_graph_color_fons $color_fons\n");
-        sys_gui("set $var_graph_color_marc $color_marc\n");
-        sys_gui("set $var_graph_color_grasp $color_grasp\n");
-        sys_gui("set $var_graph_format_list $format_list\n");
-        sys_gui("set $var_graph_w_cell $w_cell\n");
-        sys_gui("set $var_graph_h_cell $h_cell\n");
-        sys_gui("toplevel $id -class [winfo class .]\n");
-        sys_gui("wm title $id {** videogrid **}\n");
-        sys_gui("wm resizable $id 0 0\n");
-        sys_gui("wm protocol $id WM_DELETE_WINDOW [concat videogrid_cancel $id]\n");
-
-        /* sys_gui("label $id.label -text {VIDEOGRID PROPERTIES}\n"); */
-        /* sys_gui("pack $id.label -side top\n"); */
-
-        sys_gui("label $id.label -text { properties }\n");
-        sys_gui("pack $id.label -side top\n");
-
-        sys_gui("frame $id.buttonframe\n");
-        sys_gui("pack $id.buttonframe -side bottom -fill x -pady 2m\n");
-        sys_gui("button $id.buttonframe.cancel -text {Cancel} -command \"videogrid_cancel $id\"\n");
-        sys_gui("button $id.buttonframe.apply -text {Apply} -command \"videogrid_apply $id\"\n");
-        sys_gui("button $id.buttonframe.ok -text {OK} -command \"videogrid_ok $id\"\n");
-        sys_gui("pack $id.buttonframe.cancel -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.apply -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.ok -side left -expand 1\n");
-
-        sys_gui("frame $id.1rangef\n");
-        sys_gui("pack $id.1rangef -side top\n");
-        sys_gui("label $id.1rangef.lname -text \"Name :\" -anchor nw\n");
-        sys_gui("entry $id.1rangef.name -textvariable $var_graph_name -width 20\n");
-        sys_gui("pack $id.1rangef.lname $id.1rangef.name -side left\n");
-
-        sys_gui("frame $id.2rangef\n");
-        sys_gui("pack $id.2rangef -side top\n");
-        sys_gui("label $id.2rangef.lnum_fil -text \"Rows :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.2rangef.num_fil -textvariable $var_graph_num_fil -width 10\n");
-        sys_gui("pack $id.2rangef.lnum_fil $id.2rangef.num_fil -side left\n");
-
-        sys_gui("frame $id.3rangef\n");
-        sys_gui("pack $id.3rangef -side top\n");
-        sys_gui("label $id.3rangef.lnum_col -text \"Cols :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.3rangef.num_col -textvariable $var_graph_num_col -width 10\n");
-        sys_gui("pack $id.3rangef.lnum_col $id.3rangef.num_col -side left\n");
-
-        sys_gui("frame $id.4rangef\n");
-        sys_gui("pack $id.4rangef -side top\n");
-        sys_gui("label $id.4rangef.lcolor_fons -text \"Bg Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.4rangef.color_fons -textvariable $var_graph_color_fons -width 10\n");
-        sys_gui("pack $id.4rangef.lcolor_fons $id.4rangef.color_fons -side left\n");
-
-        sys_gui("frame $id.5rangef\n");
-        sys_gui("pack $id.5rangef -side top\n");
-        sys_gui("label $id.5rangef.lcolor_marc -text \"Border Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.5rangef.color_marc -textvariable $var_graph_color_marc -width 10\n");
-        sys_gui("pack $id.5rangef.lcolor_marc $id.5rangef.color_marc -side left\n");
-
-        sys_gui("frame $id.6rangef\n");
-        sys_gui("pack $id.6rangef -side top\n");
-        sys_gui("label $id.6rangef.lcolor_grasp -text \"Sel Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.6rangef.color_grasp -textvariable $var_graph_color_grasp -width 10\n");
-        sys_gui("pack $id.6rangef.lcolor_grasp $id.6rangef.color_grasp -side left\n");
-
-        sys_gui("frame $id.7rangef\n");
-        sys_gui("pack $id.7rangef -side top\n");
-        sys_gui("label $id.7rangef.lformat_list -text \"Format list ':' separated :\" -width 32 -anchor nw\n");
-        sys_gui("entry $id.7rangef.format_list -textvariable $var_graph_format_list -width 30\n");
-        sys_gui("pack $id.7rangef.lformat_list -fill x\n");
-        sys_gui("pack $id.7rangef.format_list -fill x\n");
-
-        sys_gui("frame $id.8rangef\n");
-        sys_gui("pack $id.8rangef -side top\n");
-        sys_gui("label $id.8rangef.lw_cell -text \"Thumb W :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.8rangef.w_cell -textvariable $var_graph_w_cell -width 10\n");
-        sys_gui("pack $id.8rangef.lw_cell $id.8rangef.w_cell -side left\n");
-
-        sys_gui("frame $id.9rangef\n");
-        sys_gui("pack $id.9rangef -side top\n");
-        sys_gui("label $id.9rangef.lh_cell -text \"Thumb H :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.9rangef.h_cell -textvariable $var_graph_h_cell -width 10\n");
-        sys_gui("pack $id.9rangef.lh_cell $id.9rangef.h_cell -side left\n");
-
-        sys_gui("bind $id.1rangef.name <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.2rangef.num_fil <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.3rangef.num_col <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.4rangef.color_fons <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.5rangef.color_marc <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.6rangef.color_grasp <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.7rangef.format_list <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.8rangef.w_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.9rangef.h_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("focus $id.1rangef.name\n");
-        sys_gui("}\n");
-
-        /*
-        sys_gui("proc table {w content args} {\n");
-        sys_gui("frame $w -bg black\n");
-        sys_gui("set r 0\n");
-        sys_gui("foreach row $content {\n");
-        sys_gui("set fields {}\n");
-        sys_gui("set c 0\n");
-        sys_gui("foreach col $row {\n");
-        // lappend fields [label $w.$r/$c -text $col]
-        sys_gui("set img [image create photo -file $col]\n");
-        sys_gui("lappend fields [label $w.$r/$c -image $img]\n");
-        sys_gui("incr c\n");
-        sys_gui("}\n");
-        sys_gui("eval grid $fields -sticky news -padx 1 -pady 1\n");
-        sys_gui("incr r\n");
-        sys_gui("}\n");
-        sys_gui("set w\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_table {id name num_fil num_col} {\n");
-        sys_gui("table .tauler {\n");
-        sys_gui("{sll80x60.gif 3160x120.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.gif sll80x60.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.ppm sll80x60.gif 3160x120.gif}\n");
-        sys_gui("}\n");
-        sys_gui("pack .tauler\n");
-        sys_gui("}\n");
-        */
-    }
-
-    /* widget properties */
-    static void videogrid_setwidget(void)
-    {
-        /* post("Entra a setwidget"); */
-        videogrid_widgetbehavior.w_getrectfn = videogrid_getrect;
-        videogrid_widgetbehavior.w_displacefn = videogrid_displace;
-        videogrid_widgetbehavior.w_selectfn = videogrid_select;
-        videogrid_widgetbehavior.w_activatefn = NULL;
-        videogrid_widgetbehavior.w_deletefn = videogrid_delete;
-        videogrid_widgetbehavior.w_visfn = videogrid_vis;
-        /* clic del ratoli */
-        videogrid_widgetbehavior.w_clickfn = videogrid_click;
-    }
-
-    /* el constructor de la classe*/
-    static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
-    {
-        /* instanciació del nou objecte */
-        t_videogrid *x = (t_videogrid *)pd_new(videogrid_class);
-        /* crea una sortida per l'objecte*/
-        x->x_sortida = outlet_new(&x->x_obj,&s_symbol);
-        /* s'obté el canvas de pd */
-        x->x_glist = (t_glist*) canvas_getcurrent();
-        /* posició en el tauler de la última imatge afegida */
-        x->x_ultima_img = 0;
-        /* posició de l'últim fitxer del directori encuat */
-        x->x_dir_pos = 0;
-        /* apuntador al primer element en el tauler */
-        x->x_tauler_primer = NULL;
-        x->x_pos_selected = -1;
-        /* fixa el nom de l'objecte */
-        char nom[15];
-        sprintf(nom, "videogrid%d", ++videogridcount);
-        name = gensym(nom);
-        x->x_name = name;
-        /* amb aquest nom es prepara per poder rebre dades */
-        pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* crea la cua de nodes */
-        crearCua(&x->x_cua);
-        post("NEW videogrid: created with %d parameters.\n", argc);
-
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 5:
-            /* versio 0.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 6:
-            /* versio 0.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)atom_getintarg(7, argc, argv);
-            x->x_h_cell = (int)atom_getintarg(8, argc, argv);
-        break;
-
-        case 10:
-            /* versio 0.1 - paths dels  elsements del tauler */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-            /*
-            // -- llegir la cadena de paths | afegir els paths a la cua //
-            // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-            char *cadenaPaths;
-            cadenaPaths = (char *)malloc(51200*sizeof(char));
-            strcpy(cadenaPaths,(char *)argv[6].a_w.w_symbol->s_name);
-            // -- printf("Es carreguen els paths %s --- %s **** %s\n", cadenaPaths, argv[5].a_w.w_symbol->s_name,argv[3].a_w.w_symbol->s_name); //
-            // -- split //
-            char *token;
-            t_symbol *tt;
-            for ( token = strtok(argv[6].a_w.w_symbol->s_name,"|");
-                token != NULL;
-                token = strtok(NULL,"|") ){
-                        tt = gensym(token);
-                        // -- printf("AFEGINT CARREGANT %s\n",tt->s_name); //
-                        // -- imagegrid_putimg(x,tt); //
-                        // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-                        // -- imagegrid_afegir_imatge(x,tt->s_name); //
-            }
-
-            token = strtok(cadenaPaths,"|");
-            while(token){
-                tt = gensym(token);
-                // printf("AFEGINT CARREGANT %s\n",tt->s_name);
-                imagegrid_putimg(x,tt);
-                token = strtok(NULL,"|");
-            }
-            free(cadenaPaths);
-            */
-        break;
-
-        default:
-            /* crea un objecte nou per defecte */
-            /* post("NEW imagegrid created.\n"); */
-            /* fixa el nombre de files */
-            x->x_num_fil = 3;
-            /* fixa el nombre de columnes */
-            x->x_num_col = 5;
-            /* colors de fons i de marc*/
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-           x->x_h_cell = 40;
-        break;
-        }
-        /*
-         * printf("S'ha instanciat un videogrid anomenat %s amb les caracteristiques seguents:",x->x_name->s_name);
-         * printf("Nombre de files %d - Nombre de columnes: %d", x->x_num_fil, x->x_num_col);
-        */
-        /* a Karmic es detecta que videogrid fa crash al pd al insertar un video, nomes en el cas que es carregui despres de Gem */
-
-
-        char *lliibbGem = "Gem";
-        char *lliibbVideogrid = "videogrid";
-        /*
-        if(sys_load_lib(glist_getcanvas(x->x_glist), lliibb)){
-            post("SLL diu Gem already loaded");
-        } else{
-            post("SLL diu Gem not loaded");
-        }*/
-
-        int i, posGem = 0, posVideogrid = 0;
-        t_namelist *nl;
-
-        for (i=0, nl = sys_externlist; nl; i++, nl = nl->nl_next) {
-            if(strcmp(nl->nl_string,lliibbGem)==0) {
-                posGem = i;
-            } else {
-                if(strcmp(nl->nl_string,lliibbVideogrid)==0) {
-                    posVideogrid = i;
-                }
-            }
-        }
-        if(posGem < posVideogrid) {
-            post("NOTE videogrid: Recomended load before Gem.\n");
-        }
-        return (x);
-    }
-
-    static void videogrid_destroy(t_videogrid *x){
-        /* allibera el nom */
-        pd_unbind(&x->x_obj.ob_pd, x->x_name);
-        /* elimina el contingut de la cua */
-        eliminarCua(&x->x_cua);
-        post("Videogrid destroyed.\n");
-    }
-
-    /* generacio d'una nova classe */
-    /* al carregar la nova llibreria my_lib pd intenta cridar la funció my_lib_setup */
-    /* aquesta crea la nova classe i les seves propietats només un sol cop */
-
-    void videogrid_setup(void)
-    {
-        load_tk_procs_videogrid();
-        post("videogrid: version 0.2.1");
-        post("written by Sergi Lario (slario@gmail.com) & Lluis Gomez i Bigorda (lluis@artefacte.org)");
-
-
-        videogrid_class = class_new(gensym("videogrid"),
-            (t_newmethod)videogrid_new,
-            (t_method)videogrid_destroy,
-            sizeof(t_videogrid),
-            CLASS_DEFAULT,
-            A_GIMME,
-            0);
-
-        /*
-         *  class_new crea la nova classe retornant un punter al seu prototipus,
-         *  el primer argument es el nom simbolic de la classe,
-         *  el segon i tercer corresponen al constructor i destructor de la classe respectivament,
-         *  (el constructor instancia un objecte i inicialitza les seves dades cada cop que es crea un objecte
-         *  el destructor allibera la memoria reservada al destruir l'objecte per qualsevol causa)
-         *  el quart correspon a la mida de l'estructura de dades, per tal de poder reservar la memoria necessària,
-         *  el cinquè influeix en el mòde de representació gràfica del objectes. Per defecte CLASS_DEFAULT o '0',
-         *  la resta d'arguments defineixen els arguments de l'objecte i el seu tipus, la llista acaba  amb 0
-        */
-
-        class_addbang(videogrid_class, videogrid_bang);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideo,gensym("putvideo"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideodir,gensym("putvideodir"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_dialog, gensym("dialog"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_clear, gensym("clear"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_seek, gensym("seek"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_rows, gensym("rows"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_cols, gensym("cols"), A_FLOAT, 0);
-
-        /* inicia el comportament de videogrid */
-
-        videogrid_setwidget();
-
-        class_setwidget(videogrid_class, &videogrid_widgetbehavior);
-        class_sethelpsymbol(videogrid_class, gensym("videogrid.pd"));
-        class_setsavefn(videogrid_class, &videogrid_save);
-        class_setpropertiesfn(videogrid_class, videogrid_properties);
-    }
-}
diff --git a/externals/pdvjtools/videogrid/videogrid.cc.bk b/externals/pdvjtools/videogrid/videogrid.cc.bk
deleted file mode 100644
index 6a336844c4e0977951c48419db941c2598bf1fc3..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/videogrid.cc.bk
+++ /dev/null
@@ -1,1804 +0,0 @@
-
-extern "C"
-{
-    /*
-    videogrid external for Puredata
-    Lluis Gomez i Bigorda :: lluis-at-hangar.org
-    Sergi Lario Loyo      :: slario-at-gmail.com
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    */
-
-    #include <stdio.h>
-    #include <stdlib.h>
-    #include <dirent.h>
-    #include <string.h>
-    #include <unistd.h>
-    #include <math.h>
-
-    /*
-     * incloure les definicions de variables i prototipus de dades i de funcions de puredata
-    */
-    #include "m_pd.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions gàfiques bàsiques de pd
-    */
-    #include "g_canvas.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions per traballar amb threads
-    */
-    #include "pthread.h"
-
-    /* some linux distros need this to compile ffmpeg correctly as cpp */
-    #define __STDC_CONSTANT_MACROS 1
-
-    /* ffmpeg includes */
-    #include <ffmpeg/avcodec.h>
-    #include <ffmpeg/avformat.h>
-    #include <ffmpeg/avutil.h>
-    #include <ffmpeg/swscale.h>
-
-    /* libquicktime includes */
-    // #include <quicktime/lqt.h>
-    // #include <quicktime/colormodels.h>
-    #include <lqt/lqt.h>
-    #include <lqt/colormodels.h>
-
-
-    /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&& VIDEOGRID &&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
-    /* definició de l'amplada i l'alçada d'una casella */
-    /*
-    #define w_cell 60
-    #define h_cell 40
-    //v 0.2.1 -- passen a ser propietats de l'objecte
-    */
-
-    /* definició del gruix en pixels del marc del tauler */
-    #define GRUIX 2
-
-    /* nombre de caracters per el nom del path del fitxer */
-    #define BYTESNOMFITXER 512
-
-    /* 8bits clamp rgb values */
-    #define CLAMP8(x) (((x)<0) ? 0 : ((x>255)? 255 : (x)))
-
-    #define BYTESNOMFITXERIMATGE 512
-    #define BYTESTIPUSFROMAT 4
-
-    #define FORMAT_MINIATURA "ppm"
-    #define PATH_TEMPORAL "/tmp/vigrid_"
-    #define BYTES_NUM_TEMP 4
-
-
-    typedef char pathimage[BYTESNOMFITXERIMATGE];
-
-    typedef char tipus_format[BYTESTIPUSFROMAT];
-
-    /* ----------------------------------- FFmpeg functions ----------------------------------- */
-    int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi);
-
-    void SaveFrame(AVFrame *pFrame, int width, int height, int W, int H, int posi)
-    {
-        FILE *pFile;
-        char szFilename[32];
-        int nN = posi;
-
-        char nNstr[BYTES_NUM_TEMP];
-        pathimage  ig_path = PATH_TEMPORAL;
-
-        sprintf(nNstr, "%d", nN);
-        strcat(ig_path,nNstr);
-        strcat(ig_path,".");
-        strcat(ig_path,FORMAT_MINIATURA);
-
-        // Open file
-        sprintf(szFilename, ig_path);
-        pFile=fopen(szFilename, "wb");
-        if(pFile==NULL)
-            return;
-
-        // Write header
-        fprintf(pFile, "P6\n%d %d\n255\n", W, H);
-
-        int w = width;
-        int h = height;
-        float k = (width/W);
-        float l = (height/H);
-        int i,j,y,x,realx;
-
-        // Write pixel data
-        for(y=0; y<H; y=y++) {
-            for(x=0; x<W; x=x++) {
-                realx = ((x*k)+(3-((int)(x*k)%3)))*3;
-                fwrite((pFrame->data[0]+(int)(y*l)*pFrame->linesize[0])+realx, 1, 3, pFile);
-            }
-        }
-
-        //        for (i=0;i<(l*H);i=i+l) {
-        //            for (j=0;j<(k*W);j=j+k) {
-        //                fwrite(pFrame->data[0]+(i*pFrame->linesize[0]+j), 1, 3, pFile);
-        //            }
-        //       }
-        // Close file
-        fclose(pFile);
-    }
-
-    //extern "C"
-    //{
-        int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-        {
-            AVFormatContext *pFormatCtx;
-            int             i, videoStream;
-            AVCodecContext  *pCodecCtx;
-            AVCodec         *pCodec;
-            AVFrame         *pFrame;
-            AVFrame         *pFrameRGB;
-            AVPacket        packet;
-            int             frameFinished;
-            int             numBytes;
-            uint8_t         *buffer;
-            static int sws_flags = SWS_BICUBIC;
-            struct SwsContext *img_convert_ctx;
-
-            int nN = posi;
-
-            // Register all formats and codecs
-            av_register_all();
-
-            // Open video file
-            if(av_open_input_file(&pFormatCtx, pathFitxer, NULL, 0, NULL)!=0)
-                return -1; // Couldn't open file
-
-            // Retrieve stream information
-            if(av_find_stream_info(pFormatCtx)<0)
-                return -1;  // Couldn't find stream information
-
-            // Dump information about file onto standard error
-            dump_format(pFormatCtx, 0, pathFitxer, false);
-
-            // Find the first video stream
-            videoStream=-1;
-            for(i=0; i<pFormatCtx->nb_streams; i++)
-                if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
-                {
-                    videoStream=i;
-                    break;
-                }
-            if(videoStream==-1)
-                return -1; // Didn't find a video stream
-
-            // Get a pointer to the codec context for the video stream
-            pCodecCtx=pFormatCtx->streams[videoStream]->codec;
-
-            // Find the decoder for the video stream
-            pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
-            if(pCodec==NULL)
-                return -1; // Codec not found
-
-            // Open codec
-            if(avcodec_open(pCodecCtx, pCodec)<0)
-                return -1; // Could not open codec
-
-            // Hack to correct wrong frame rates that seem to be generated by some
-            // codecs
-            // if(pCodecCtx->frame_rate>1000 && pCodecCtx->frame_rate_base==1)
-            //    pCodecCtx->frame_rate_base=1000;
-
-            // Allocate video frame
-            pFrame=avcodec_alloc_frame();
-
-            // Allocate an AVFrame structure
-            pFrameRGB=avcodec_alloc_frame();
-            if(pFrameRGB==NULL)
-                return -1;
-
-            // Determine required buffer size and allocate buffer
-            numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
-                pCodecCtx->height);
-            buffer=new uint8_t[numBytes];
-
-            // Assign appropriate parts of buffer to image planes in pFrameRGB
-            avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
-                pCodecCtx->width, pCodecCtx->height);
-
-            // Read frames and save first five frames to disk
-            av_read_frame(pFormatCtx, &packet);
-
-            // Is this a packet from the video stream?
-            if(packet.stream_index==videoStream)
-            {
-                // Decode video frame
-                avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, packet.data, packet.size);
-
-                // Did we get a video frame?
-                if(frameFinished)
-                {
-                    // Convert the image from its native format to RGB
-                    //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                    //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                    //    pCodecCtx->height);
-                    img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
-                                        pCodecCtx->pix_fmt,
-                                        pCodecCtx->width, pCodecCtx->height,
-                                        PIX_FMT_RGB24,
-                                        sws_flags, NULL, NULL, NULL);
-
-                    sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                                0, pCodecCtx->height,
-                                pFrameRGB->data, pFrameRGB->linesize);
-                    sws_freeContext(img_convert_ctx);
-
-                    // Save the frame to disk
-                    SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-                }
-            }
-
-            // Free the packet that was allocated by av_read_frame
-            av_free_packet(&packet);
-            // Read frames and save first five frames to disk
-            av_read_frame(pFormatCtx, &packet);
-            // Is this a packet from the video stream?
-            if(packet.stream_index==videoStream)
-            {
-                // Decode video frame
-                avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
-                    packet.data, packet.size);
-
-                // Did we get a video frame?
-                if(frameFinished)
-                {
-                    // Convert the image from its native format to RGB
-                    //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                    //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                    //    pCodecCtx->height);
-                    img_convert_ctx = sws_getContext(    pCodecCtx->width, pCodecCtx->height,
-                                        pCodecCtx->pix_fmt,
-                                        pCodecCtx->width, pCodecCtx->height,
-                                        PIX_FMT_RGB24,
-                                        sws_flags, NULL, NULL, NULL);
-
-                    sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                                0, pCodecCtx->height,
-                                pFrameRGB->data, pFrameRGB->linesize);
-                    sws_freeContext(img_convert_ctx);
-
-                    // Save the frame to disk
-                    SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-                }
-            }
-
-            // Free the packet that was allocated by av_read_frame
-            av_free_packet(&packet);
-            //}
-
-            // Free the RGB image
-            delete [] buffer;
-            av_free(pFrameRGB);
-
-            // Free the YUV frame
-            av_free(pFrame);
-
-            // Close the codec
-            avcodec_close(pCodecCtx);
-
-            // Close the video file
-            av_close_input_file(pFormatCtx);
-
-            return 0;
-        //} extern c
-    }
-
-    /* ----------------------------------- Quicktime functions ----------------------------------- */
-    int convertir_img(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-    {
-        /*
-        Quicktime per les conversions
-        */
-
-        /* RGB vectors */
-        unsigned char * qt_rows[3];
-        /* YUV vesctor frame */
-        unsigned char *qt_frame = NULL;
-        /* quicktime decoder */
-        quicktime_t *qt;
-        /* quicktime color model */
-        int qt_cmodel;
-
-        int nN = posi;
-        int x_vwidth = 0;
-        int x_vheight = 0;
-        qt = quicktime_open(pathFitxer, 1, 0);
-
-        if (!(qt)){
-            /* post("videogrid: error opening qt file"); */
-            return -1;
-        }
-
-        if (!quicktime_has_video(qt)) {
-            /* post("videogrid: no video stream"); */
-            quicktime_close(qt);
-            return -1;
-
-        }
-        else if (!quicktime_supported_video(qt,0)) {
-            /* post("videogrid: unsupported video codec\n"); */
-            quicktime_close(qt);
-            return -1;
-        }
-        else
-        {
-            qt_cmodel = BC_YUV420P;
-            x_vwidth  = quicktime_video_width(qt,0);
-            x_vheight = quicktime_video_height(qt,0);
-
-            free(qt_frame);
-            qt_frame = (unsigned char*)malloc(x_vwidth*x_vheight*4);
-
-            int size = x_vwidth * x_vheight;
-            qt_rows[0] = &qt_frame[0];
-            qt_rows[2] = &qt_frame[size];
-            qt_rows[1] = &qt_frame[size + (size>>2)];
-
-            quicktime_set_cmodel(qt, qt_cmodel);
-        }
-
-        /* int length = quicktime_video_length(qt,0); */
-        /* int Vpos = quicktime_video_position(qt,0); */
-        lqt_decode_video(qt, qt_rows, 0);
-
-        switch(qt_cmodel){
-            case BC_YUV420P:
-                /* printf(" "); */
-                /* post("videogrid: qt colormodel : BC_YUV420P"); */
-
-            /* per a fer la miniatura
-               cada k colomnes pillem una
-               cada l files pillem una */
-                int w = x_vwidth;
-                int h = x_vheight;
-                int k = (w/W);
-                int l = (h/H);
-
-                char nNstr[BYTES_NUM_TEMP];
-                pathimage  ig_path = PATH_TEMPORAL;
-
-                sprintf(nNstr, "%d", nN);
-                strcat(ig_path,nNstr);
-                strcat(ig_path,".");
-                strcat(ig_path,FORMAT_MINIATURA);
-                /* printf("Creacio de la imatge %s ...",ig_path); */
-            /* escriu el contingut de data a un arxiu. */
-                FILE *fp = fopen(ig_path, "w");
-                fprintf (fp, "P6\n%d %d\n255\n", W, H);
-
-                int i,j,y,u,v,r,g,b;
-
-                for (i=0;i<(l*H);i=i+l) {
-                    for (j=0;j<(k*W);j=j+k) {
-                        y=qt_rows[0][(w*i+j)];
-                        u=qt_rows[1][(w/2)*(i/2)+(j/2)];
-                        v=qt_rows[2][(w/2)*(i/2)+(j/2)];
-                        r = CLAMP8(y + 1.402 *(v-128));
-                        g = CLAMP8(y - 0.34414 *(u-128) - 0.71414 *(v-128));
-                        b = CLAMP8(y + 1.772 *(u-128));
-                        fprintf (fp, "%c%c%c", r,g,b);
-                    }
-                }
-
-            /* escriu el contingut de data a un arxiu.*/
-                fclose (fp);
-        }
-        return 0;
-    }
-
-
-    /* ----------------------------------- Cue > rounded list ----------------------------------- */
-    typedef char path[BYTESNOMFITXER];
-
-    /* estructura de dades: un node de la cua */
-    struct node
-    {
-        /* nom del path de la imatge */
-        path pathFitxer;
-        /* apuntador al següent node en cua */
-        struct node *seguent;
-    };
-
-    /* definició del tipus node */
-    typedef struct node Node;
-
-    /* estructures i tipus de dades de la cua */
-    /* definició del tipus de cua */
-    typedef struct
-    {
-        Node *davanter;
-        Node *final;
-    }Cua;
-
-    /* declaracions de les funcions */
-
-    /* crea una cua */
-    void crearCua(Cua *cua);
-    /* encuara un element al final de la cua */
-    void encuar (Cua *cua, path x);
-    /* elimina un element de la cua */
-    int desencuar (Cua *cua);
-    /* retorna si la cua és buida */
-    int cuaBuida(Cua *cua);
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua);
-    /* retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua);
-    /* escriu el contingut de la cua */
-    void escriuCua(Cua *cua);
-
-
-    /* implementació de les funcions */
-    void crearCua(Cua *cua)
-    {
-        cua->davanter=cua->final=NULL;
-    }
-
-    /* funció que encua el node al final de la cua */
-    void encuar (Cua *cua, path x)
-    {
-        Node *nou;
-        nou=(Node*)malloc(sizeof(Node));
-        strcpy(nou->pathFitxer,x);
-        nou->seguent=NULL;
-        if(cuaBuida(cua))
-        {
-            cua->davanter=nou;
-        }
-        else
-            cua->final->seguent=nou;
-        cua->final=nou;
-    }
-
-    /* elimina l'element del principi de la cua */
-    int desencuar (Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *nou;
-            nou=cua->davanter;
-            cua->davanter=cua->davanter->seguent;
-            free(nou);
-            return 1;
-        }
-        else
-        {
-            /* printf("Cua buida\a\n"); */
-            return 0;
-        }
-
-    }
-
-    /* funció que retorna si la cua és buida */
-    int cuaBuida(Cua *cua)
-    {
-        return (cua->davanter==NULL);
-    }
-
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua)
-    {
-        while (!cuaBuida(cua)) desencuar(cua);
-        /* printf("Cua eliminada\n"); */
-    }
-
-    /* funció que retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua)
-    {
-        int contador=0;
-        Node *actual;
-        actual=cua->davanter;
-        if(actual) contador=1;
-        while((actual)&&(actual != cua->final)){
-             contador ++;
-             actual = actual->seguent;
-        }
-        return (contador);
-    }
-
-    /* funció que escriu la cua de nodes */
-    void escriuCua(Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *actual;
-            actual=cua->davanter;
-            post("THUMBS INSIDE\n[");
-            do{
-                post("#%s#",actual->pathFitxer);
-                actual = actual->seguent;
-            }while(actual);
-            post("]\n");
-        }
-        else
-            post("EMPTY: NO THUMBS INSIDE\n");
-    }
-
-    /* ----------------------------------- videogrid gui-videogrid ----------------------------------- */
-
-    t_widgetbehavior   videogrid_widgetbehavior;
-    /* crear un apuntador al nou objecte */
-    static t_class *videogrid_class;
-    /* indica el nombre de videogrid creats - utilitzat per diferenciar el nom d'instàncies d'objectes del mateix tipus */
-    static int videogridcount = 0;
-
-    /* definició de la classe i la seva estructura de dades */
-
-    typedef struct _videogrid {
-        t_object  x_obj;
-        /* declaració de la sortida de l'objecte */
-        t_outlet *x_sortida;
-        /* llista d'objectes gràfics */
-        t_glist *x_glist;
-        /* nombre de files */
-        int x_num_fil;
-        /* nombre de columnes */
-        int x_num_col;
-        /* width del thumbnail  */
-        int x_w_cell;
-        /* height del thumbnail */
-        int x_h_cell;
-        /* posició de la última imatge en el tauler */
-        int x_ultima_img;
-        /* path del directori actual */
-        path x_dir_actual;
-        /* path del directori a canviar */
-        path x_dir_canvi;
-        /* posicio ultim al directori actual */
-        int x_dir_pos;
-        /* apuntador al primer element posicionat al tauler */
-        Node *x_tauler_primer;
-        /* cua d'imatges */
-        Cua x_cua;
-        /* nom de l'objecte */
-        t_symbol *x_name;
-        /* color de fons */
-        t_symbol *x_color_fons;
-        /* color del marge */
-        t_symbol *x_color_marc;
-        /* mutex per evitar concurrencia sobre la cua al accedir diferents threads*/
-        pthread_mutex_t x_lock;
-        /* v 0.2 -- posicó de la cel·la seleccionada */
-        int x_pos_selected;
-        /* v 0.2 -- color de seleccio */
-        t_symbol *x_color_grasp;
-        /* v 0.2.1 -- llista de formats */
-        t_symbol *x_format_list;
-
-    } t_videogrid;
-
-    /* ---------------- control functions ------------ */
-
-    /* v 0.2 -- mètode de la classe que desmarca la cel·la seleccionada */
-    /* calcula la posició x del tauler a partir de la posició de l'element de la cua (d'esquerra a dreta) */
-    int getX(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int xpos = (posCua % c) * x->x_w_cell + ((posCua % c) + 1) * GRUIX;
-        return(xpos + 1);
-    }
-
-    /* calcula la posició y del tauler a partir de la posició de l'element de la cua (de dalt a baix) */
-    int getY(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int ypos = (posCua / c) * x->x_h_cell + ((posCua / c) + 1) * GRUIX;
-        return(ypos + 1);
-    }
-
-    static void videogrid_ungrasp_selected(t_videogrid *x)
-    {
-        /* post("Ungrasp selected thumb %d", x->x_pos_selected); */
-        if(x->x_pos_selected > -1) {
-            sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(x->x_glist), x);
-            x->x_pos_selected = -1;
-        }
-    }
-
-    /* elimina les imatges temporals */
-    void eliminar_imatges_temporals(int maxim){
-        FILE *fitxer;
-        path path_total;
-        int contador = 0;
-        char contador_str[BYTES_NUM_TEMP];
-        while(contador < maxim){
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            /* elimina el fitxer si no hi ha cap problema */
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-        /* post("Videogrid: Imatges temporals eliminades\n",path_total); */
-    }
-
-    int format_adequat_v(path nomF, t_symbol *format_list){
-        int retorn = 0;
-        path  ig_path = "";
-        strcat(ig_path,nomF);
-        path fl;
-        strcpy(fl,format_list->s_name);
-        char *t1;
-        char *ext;
-        path extensio = "";
-        for ( t1 = strtok(ig_path,".");
-              t1 != NULL;
-              t1 = strtok(NULL,".") )
-            strcpy(extensio,t1);
-
-        for ( ext = strtok(fl,":");
-          ext != NULL;
-              ext = strtok(NULL,":") ) {
-            if(strcmp(extensio,ext)==0) {
-                retorn = 1;
-                ext = NULL;
-            }
-        }
-        return (retorn);
-    }
-
-    /* afegir una imatge al grid */
-    void videogrid_afegir_imatge(t_videogrid *x, path entrada)
-    {
-        int maxim;
-        char nNstr[BYTES_NUM_TEMP];
-        int pos = 0;
-        maxim = x->x_num_fil * x->x_num_col;
-        path  ig_path = PATH_TEMPORAL;
-        /* si hi ha tants nodes a la cua com el maxim */
-        if((numNodes(&x->x_cua)) >=  maxim){
-            /* desencua */
-            int extret;
-            extret = desencuar(&x->x_cua);
-            /* obtenir la posició en la cua del nou node */
-            if(x->x_ultima_img == maxim - 1) {
-                pos = 0;
-            }else{
-                pos = x->x_ultima_img + 1;
-            }
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, x->x_ultima_img);
-        }
-
-        /* FFMPEG o Quicktime per les conversions */
-        int fferror=0;
-        int nN = x->x_ultima_img;
-        if (format_adequat_v(entrada, x->x_format_list) == 0) {
-            /* ara no entra: format_adequat_v = 0 sempre */
-            /* convertir_img(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN); */
-            fferror = 0;
-
-        } else {
-            fferror=convertir_img_ff(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-        }
-        /* post ("%d",fferror); */
-        if (fferror>=0) {
-            /* encua el nou node */
-            encuar(&x->x_cua, entrada);
-            /* si no és el primer element a encuar incrementem la posicio de la última imatge insertada */
-            if(numNodes(&x->x_cua) != 0) x->x_ultima_img ++;
-            /*
-                 * si assoleix el maxim torna a començar,
-                 * inicialitzant la posició en el tauler de la última imatge insertada
-                */
-            if(x->x_ultima_img == maxim) x->x_ultima_img = 0;
-
-            sprintf(nNstr, "%d", nN);
-            strcat(ig_path,nNstr);
-            strcat(ig_path,".");
-            strcat(ig_path,FORMAT_MINIATURA);
-
-            sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-            sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                glist_getcanvas(x->x_glist),
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2),
-                text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),
-                x,nN,x,nN);
-            if(nN == 0){
-                x->x_tauler_primer = x->x_cua.final;
-            }
-        }
-    }
-
-    /* v 0.2 -- mètode de la classe que marca la cel·la seleccionada */
-    static void videogrid_grasp_selected(t_videogrid *x, int pos)
-    {
-        /*printf("Grasp selected thumb %d", pos);*/
-        if(pos != x->x_pos_selected) {
-            videogrid_ungrasp_selected(x);
-            /* post("Grasp selected thumb %d", pos); */
-            x->x_pos_selected = pos;
-            /* nem per aqui ---- */
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill {} -tags %xGRASP -outline %s -width %d\n",
-                    glist_getcanvas(x->x_glist),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell,
-                    x,x->x_color_grasp->s_name, GRUIX + 1);
-            canvas_fixlinesfor(glist_getcanvas(x->x_glist), (t_text*)x);
-        }
-    }
-
-    /*  widget helper functions  */
-
-    /* dibuixa videogrid */
-    void videogrid_drawme(t_videogrid *x, t_glist *glist, int firsttime)
-    {
-        /* post("Entra a drawme amb firsttime: %d", firsttime); */
-        if (firsttime) {
-            char name[MAXPDSTRING];
-            canvas_makefilename(glist_getcanvas(x->x_glist), x->x_name->s_name, name, MAXPDSTRING);
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill %s -tags %xGRID -outline %s\n",
-                glist_getcanvas(glist),
-                text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                text_xpix(&x->x_obj, glist) + (x->x_num_col * x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil * x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX,
-                x->x_color_fons->s_name, x,x->x_color_marc->s_name);
-
-            canvas_fixlinesfor(glist_getcanvas(glist), (t_text*)x);
-            /* si hi elements a la cua els afegeix (redimensió) */
-            if(!cuaBuida(&x->x_cua))
-            {
-                path  ig_path;
-                int nN = 0;
-                char nNstr[BYTES_NUM_TEMP];
-                Node *actual;
-                actual=x->x_cua.davanter;
-                do{
-                    strcpy(ig_path,PATH_TEMPORAL);
-                    sprintf(nNstr, "%d", nN);
-                    strcat(ig_path,nNstr);
-                    strcat(ig_path,".");
-                    strcat(ig_path,FORMAT_MINIATURA);
-                    /* post("reestablint la imatge %s", actual->pathFitxer); */
-                    // videogrid_afegir_imatge(x,actual->pathFitxer);
-                    convertir_img_ff(actual->pathFitxer,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-                    sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-                    sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                             glist_getcanvas(x->x_glist),text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),x,nN,x,nN);
-                    actual = actual->seguent;
-                    nN++;
-                }while(actual);
-            }
-        }
-        else {
-            sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-            if(!cuaBuida(&x->x_cua))
-            {
-                int contador = 0;
-                while(contador < numNodes(&x->x_cua)){
-                    sys_vgui(".x%x.c coords %xS%d \
-                            %d %d\n",
-                    glist_getcanvas(glist), x, contador,
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,contador) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,contador) + (x->x_h_cell/2));
-                    contador++;
-                }
-
-               /* char buf[800];
-                sprintf(buf, "pdtk_videogrid_table %%s %s %d %d\n", x->x_name->s_name, x->x_num_fil, x->x_num_col);
-                gfxstub_new(&x->x_obj.ob_pd, x, buf); */
-            }
-        if (x->x_pos_selected > -1){
-            sys_vgui(".x%x.c coords %xGRASP %d %d %d %d\n", glist_getcanvas(glist), x,
-            text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-            text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell);
-        }
-        sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        int xI = text_xpix(&x->x_obj, glist);
-        int yI = text_ypix(&x->x_obj, glist);
-        int xF = xI + (x->x_num_col * x->x_w_cell) + ((x->x_num_col + 1) * GRUIX);
-        int yF = yI + (x->x_num_fil * x->x_h_cell) + ((x->x_num_fil + 1) * GRUIX);
-        int vlines = 0;
-        int xi = 0;
-        while(vlines < x->x_num_col){
-        xi = xI + getX(x,vlines) - GRUIX + 1;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-        vlines++;
-        }
-        xi = xi + x->x_w_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-        int hlines = 0;
-        int yi = 0;
-        while(hlines < x->x_num_fil){
-        yi = yI + ((x->x_h_cell + GRUIX) * hlines) + 2;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-        hlines++;
-        }
-        yi = yi + x->x_h_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-    }
-
-    static void videogrid_delete(t_gobj *z, t_glist *glist)
-    {
-        /* post("Entra a delete"); */
-        t_text *x = (t_text *)z;
-        canvas_deletelinesfor(glist_getcanvas(glist), x);
-    }
-
-    static void videogrid_displace(t_gobj *z, t_glist *glist,int dx, int dy)
-    {
-        /* post("Entra a displace amb dx %d i dy %d", dx, dy); */
-        t_videogrid *x = (t_videogrid *)z;
-        x->x_obj.te_xpix += dx;
-        x->x_obj.te_ypix += dy;
-        sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n",
-                 glist_getcanvas(glist), x,
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                 text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-        videogrid_drawme(x, glist, 0);
-        canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-    }
-
-    /* borra videogrid v 0.2 -- int toclear */
-    void videogrid_erase(t_videogrid* x,t_glist* glist, int toclear)
-    {
-        int maxim = x->x_num_fil * x->x_num_col;
-        path path_total;
-        char contador_str[BYTES_NUM_TEMP];
-        /* post("Entra a erase"); */
-        /* elimina les imatges */
-        int contador = 0;
-        while(contador < numNodes(&x->x_cua)){
-
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, contador);
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-
-        /* elimina el grid v 0.2 -- excepte quan es fa un clear */
-        if(toclear == 0){
-            sys_vgui(".x%x.c delete %xGRID\n", glist_getcanvas(glist), x);
-        sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        /* v 0.2 -- elimina el marc de la casella seleccionada */
-        if(x->x_pos_selected > -1){
-        sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(glist), x);
-            x->x_pos_selected = -1;
-        }
-        eliminar_imatges_temporals(maxim);
-    }
-
-    static void videogrid_vis(t_gobj *z, t_glist *glist, int vis)
-    {
-        /* post("Entra a vist amb vis %d", vis); */
-        t_videogrid* s = (t_videogrid*)z;
-        if (vis)
-            videogrid_drawme(s, glist, 1);
-        else
-           videogrid_erase(s,glist,0);
-    }
-
-    static void videogrid_select(t_gobj *z, t_glist *glist, int state)
-    {
-        /* post("Entra select amb state %d", state); */
-        t_videogrid *x = (t_videogrid *)z;
-        if (state) {
-            /* post("Videogrid seleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline #0000FF\n", glist_getcanvas(glist), x);
-        }
-        else {
-            /* post("Videogrid deseleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline %s\n", glist_getcanvas(glist), x, x->x_color_marc->s_name);
-        }
-    }
-
-    static void videogrid_getrect(t_gobj *z, t_glist *glist,int *xp1, int *yp1, int *xp2, int *yp2)
-    {
-        int cols, fils;
-        t_videogrid* x = (t_videogrid*)z;
-        cols = x->x_num_col;
-        fils = x->x_num_fil;
-        *xp1 = text_xpix(&x->x_obj, glist);
-        *yp1 = text_ypix(&x->x_obj, glist);
-        *xp2 = text_xpix(&x->x_obj, glist) + (cols*x->x_w_cell) + ((cols + 1) * GRUIX);
-        *yp2 = text_ypix(&x->x_obj, glist) + (fils*x->x_h_cell) + ((fils + 1) * GRUIX);
-        /* post("Esta amb el ratoli en el punt %d %d %d %d o son els vetexs de la caixa... es/bd", xp1, yp1, xp2, yp2); */
-    }
-
-
-    static void videogrid_save(t_gobj *z, t_binbuf *b)
-    {
-        /* post("Entra a save"); */
-        t_videogrid *x = (t_videogrid *)z;
-        /* crea la cadena de paths per desar */
-        /* 100 possibles paths com a màxim a 512 cada path*/
-        /* char cadenaPaths[51200];*/
-        char *cadenaPaths, *cadenaPathsInicials;
-        path ultimPath = "";
-        cadenaPaths = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPaths,"");
-        cadenaPathsInicials = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPathsInicials,"");
-        /*strcpy(cadenaPaths,(char *)argv[5].a_w.w_symbol->s_name);*/
-        if(!cuaBuida(&x->x_cua))
-        {
-            Node *actual;
-            int maxim = x->x_num_fil * x->x_num_col;
-            int contador = x->x_ultima_img + 1;
-
-            if (contador > maxim) {
-                   contador = 0;
-            }
-            /* printf("\n contador %d i maxim %d i laultimaPOS %d \n", contador, maxim, x->x_ultima_img); */
-            /*
-            strcat(cadenaPaths, actual->pathFitxer);
-            strcat(cadenaPaths, "1|\n");
-            contador ++;
-            */
-            /* prenem el davanter de la cua */
-            actual=x->x_cua.davanter;
-
-            while(contador < numNodes(&x->x_cua)){
-                /* afegim els paths del davanter fins a l'ultim node al tauler */
-                strcat(cadenaPaths, actual->pathFitxer);
-                strcat(cadenaPaths, "|");
-                actual = actual->seguent;
-                contador ++;
-            }
-            if(actual != x->x_cua.final){
-                    /* ara resten els de de l'inici del tauler fins al final de la cua */
-                    while(actual != x->x_cua.final){
-                        strcat(cadenaPathsInicials, actual->pathFitxer);
-                        strcat(cadenaPathsInicials, "|");
-                        actual = actual->seguent;
-                    }
-                    /* afegeix l'últim */
-                    strcat(ultimPath, actual->pathFitxer);
-                    strcat(ultimPath, "|");
-                    /* afegeix l'ultim de la cua */
-                    strcat(cadenaPathsInicials, ultimPath);
-            }else{
-                if(x->x_ultima_img == 0){
-                    strcat(ultimPath, actual->pathFitxer);
-                    strcat(ultimPath, "|");
-                    strcat(cadenaPathsInicials, ultimPath);
-                }
-            }
-            /* ordena el paths segons aparicio en el tauler */
-            strcat(cadenaPathsInicials, cadenaPaths);
-            /* DE MOMENT NO DESA ELS PATHS */
-            strcat(cadenaPathsInicials, "");
-            /* printf("%s",cadenaPathsInicials); */
-        }
-
-        binbuf_addv(b, "ssiissiissssiis", gensym("#X"),gensym("obj"),
-        x->x_obj.te_xpix, x->x_obj.te_ypix,
-        atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-        x->x_name,x->x_num_fil,x->x_num_col,x->x_color_fons,x->x_color_marc,x->x_color_grasp,x->x_format_list,x->x_w_cell,x->x_h_cell,gensym(cadenaPathsInicials));
-        binbuf_addv(b, ";");
-    }
-
-    static void videogrid_properties(t_gobj *z, t_glist *owner)
-    {
-        char buf[900];
-        t_videogrid *x=(t_videogrid *)z;
-
-        /* post("Es crida a pdtk_videogrid dialog passant nom = %s\n fils = %d \t cols = %d \t color fons = %s \t color marc = %s\n", x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name); */
-        sprintf(buf, "pdtk_videogrid_dialog %%s %s %d %d %s %s %s %s %i %i\n",
-                x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name, x->x_color_grasp->s_name, x->x_format_list->s_name, x->x_w_cell,x->x_h_cell);
-        /* post("videogrid_properties : %s", buf ); */
-        gfxstub_new(&x->x_obj.ob_pd, x, buf);
-    }
-
-    static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv)
-    {
-        int maxim, maxdigit;
-        int nfil = 0;
-        int ncol = 0;
-        if ( !x ) {
-            post("Videogrid: error_ Attempt to alter the properties of an object that does not exist.\n");
-        }
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-        break;
-        case 5:
-            /* versio 0.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 6:
-            /* versio 0.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL || argv[7].a_type != A_FLOAT || argv[8].a_type != A_FLOAT)
-            {
-                    post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                    return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)argv[7].a_w.w_float;
-            x->x_h_cell = (int)argv[8].a_w.w_float;
-        break;
-
-        default:
-            /* no fa res */
-        break;
-        }
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-
-    /* v 0.2 -- mètode de la classe que dispara l'element del taules en la posicio N [seek N( */
-    void videogrid_seek(t_videogrid *x, t_floatarg postauler)
-    {
-        /* post("seek a %d\n",postauler); */
-        path pathSortida;
-        Node *actual;
-        int contador = 0;
-        int maxim = x->x_num_fil * x->x_num_col;
-        /* obtenir el path per enviar a la sortida */
-        if((!cuaBuida(&x->x_cua))&&(postauler < numNodes(&x->x_cua))&&(postauler >= 0 )){
-            if(x->x_tauler_primer){
-                actual = x->x_tauler_primer;
-                while(contador <= postauler){
-                    if(contador == postauler){
-                        strcpy(pathSortida,actual->pathFitxer);
-                    }
-                    if(actual->seguent == NULL){
-                        actual = x->x_cua.davanter;
-                    }else{
-                        actual = actual->seguent;
-                    }
-                    contador++;
-                }
-                outlet_symbol(x->x_sortida, gensym(pathSortida));
-                /* post("Esta a videogrid_click amb %d %d a la posicio %d\n", x_pos, y_pos, postauler);*/
-                /* v 0.2 -- marcar casella */
-                videogrid_grasp_selected(x, postauler);
-            }
-        }
-    }
-
-    static int videogrid_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit)
-    {
-        t_videogrid* x = (t_videogrid *)z;
-        int x_pos = xpix - text_xpix(&x->x_obj, x->x_glist);
-        int y_pos = ypix - text_ypix(&x->x_obj, x->x_glist);
-        int xa, ya, postauler;
-        if (doit)
-        {
-            /* obtenir la posicio en el tauler */
-        // -- v 0.2 -- midoficacio pel gruix del marc //
-        xa = ((x_pos) / (x->x_w_cell + GRUIX + 1));
-            ya = ((y_pos) / (x->x_h_cell + GRUIX + 1)) * x->x_num_col;
-            postauler = ya + xa;
-        // -- v 0.2 -- seleciona la casella disparant el path //
-            videogrid_seek(x, postauler);
-        }
-        return (1);
-    }
-
-
-
-    /* --------- videogrid functions ---------- */
-
-    /* v 0.2 -- mètode de la classe que buida el tauler amb el missatge [clear ( */
-    void videogrid_clear(t_videogrid *x)
-    {
-        videogrid_erase(x, x->x_glist,1);
-        eliminarCua(&x->x_cua);
-        x->x_ultima_img = 0;
-        x->x_dir_pos = 0;
-        x->x_tauler_primer = NULL;
-        videogrid_drawme(x, x->x_glist, 0);
-    }
-
-    /* mètode de la clase que escriu un missatge al rebre un bang */
-    void videogrid_bang(t_videogrid *x)
-    {
-        /* post("Hello videogrid !!"); */
-        escriuCua(&x->x_cua);
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideo +string( com a paràmetre */
-    void videogrid_putvideo(t_videogrid *x, t_symbol *entrada)
-    {
-        /* comprova que existeixi el fitxer */
-        FILE *fitxer;
-        path e;
-        strcpy(e,entrada->s_name);
-        fitxer = fopen(e,"r");
-        if (!fitxer) {
-            post("Videogrid: Problem opening file %s.\n",e);
-        }
-        else {
-            videogrid_afegir_imatge(x,e);
-        }
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideodir +string( com a paràmetre */
-    void *videogrid_putvideodir_thread(void *z)
-    {
-        t_videogrid *x = (t_videogrid *)z;
-        DIR *dirp;
-        struct dirent * direntp;
-        path nomImatge, directoriAnterior, pathActual;
-        int numEncuats = 0, numPosDir = 0;
-        int maxim;
-        if ((dirp = opendir(x->x_dir_canvi)) == NULL)
-        {
-            post("Videogrid: Can not open folder %s.\n", x->x_dir_canvi);
-        }else{
-            maxim = x->x_num_fil * x->x_num_col;
-            strcpy(directoriAnterior, x->x_dir_actual);
-            strcpy(x->x_dir_actual, x->x_dir_canvi);
-         /*
-          * si es el mateix directori entrat l'ultim busca la ultima imatge afegida
-          * per a seguir a encuant a partir d'ella en endavant
-         */
-            if(strcmp(directoriAnterior, x->x_dir_actual) == 0){
-                /* post("Videogrid: Repeteix directori %s\n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* assolir la posició anterior en el directori */
-                        if(numPosDir > x->x_dir_pos){
-                            /* si el nombre de nodes encuats per aquest directori no supera el màxim encua el nou node */
-                            if(numEncuats < maxim){
-                                /* post("s'encua la imatge %s\n", direntp->d_name); */
-                                /* concatena el path i el nom de la imatge */
-                                strcpy(nomImatge,direntp->d_name);
-                                strcpy(pathActual,x->x_dir_actual);
-                                strcat(pathActual,"/");
-                                strcat(pathActual,nomImatge);
-                    pthread_mutex_lock(&x->x_lock);
-                                videogrid_afegir_imatge(x, pathActual);
-                    pthread_mutex_unlock(&x->x_lock);
-                                /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                                numEncuats++;
-                                /* es desa la posició en el directori de l'últim node encuat */
-                                x->x_dir_pos = numPosDir;
-                            }
-                        }
-                    }
-                }
-            }else{
-                /* directori diferent omple la cua començant pel primer fitxer */
-                /* post("Videogrid: Nou directori %s \n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* si el nombre de nodes encuats per aquest directori no supera el màxim enca el nou node */
-                        if(numEncuats < maxim){
-                            /* post("s'encua la imatge %s\n", direntp->d_name); */
-                            /* concatena el path i el nom de la imatge */
-                            strcpy(nomImatge,direntp->d_name);
-                            strcpy(pathActual,x->x_dir_actual);
-                            strcat(pathActual,"/");
-                            strcat(pathActual,nomImatge);
-                pthread_mutex_lock(&x->x_lock);
-                            videogrid_afegir_imatge(x, pathActual);
-                pthread_mutex_unlock(&x->x_lock);
-                            /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                            numEncuats++;
-                            /* es desa la posició en el directori de l'últim node encuat */
-                            x->x_dir_pos = numPosDir;
-                        }
-                    }
-                }
-            }
-            /* si la posicio de l'actual es la de l'utim fitxer del directori, inicialitza la posició */
-            if(x->x_dir_pos >= numPosDir) x->x_dir_pos = 0;
-            closedir(dirp);
-        }
-        /* escriu l'argument entrat */
-        /* post("Obtenint imatges del directori: %s ...",x->x_dir_canvi); */
-        /* envia a la sorida l'argument entrat */
-        /* outlet_symbol(x->x_sortida, entrada); */
-        pthread_exit(NULL);
-    }
-
-    void videogrid_putvideodir(t_videogrid *x, t_symbol *entrada)
-    {
-
-        pthread_t unthread;
-        pthread_attr_t unatribut;
-        pthread_attr_init( &unatribut );
-
-        strcpy(x->x_dir_canvi,entrada->s_name);
-
-        // ----------------      THREAD CREAT -------------------------
-        pthread_mutex_init(&x->x_lock, NULL);
-        // int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
-        pthread_create(&unthread,                     &unatribut,              videogrid_putvideodir_thread, (void *)x);
-        pthread_mutex_destroy(&x->x_lock);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de files del tauler [rows N( */
-    void videogrid_rows(t_videogrid *x, t_floatarg nfil)
-    {
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, ncol;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        ncol = x->x_num_col;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                /* x->x_num_col = ncol; */
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de columnes del tauler [cols N( */
-    void videogrid_cols(t_videogrid *x, t_floatarg ncol)
-    {
-        /* post("rows a %d\n",postauler); */
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, nfil;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        nfil = x->x_num_fil;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                /* x->x_num_fil = nfil; */
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* tk help windows */
-
-
-    void load_tk_procs_videogrid () {
-        // ########### procediments per videogrid -- slario(at)gmail.com [a partir del codi del grid de l'Ives: ydegoyon(at)free.fr] #########
-        sys_gui("proc videogrid_apply {id} {\n");
-        // strip "." from the TK id to make a variable name suffix
-        sys_gui("set vid [string trimleft $id .]\n");
-        // for each variable, make a local variable to hold its name...
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set cmd [concat $id dialog [eval concat $$var_graph_name] [eval concat $$var_graph_num_fil] [eval concat $$var_graph_num_col] [eval concat $$var_graph_color_fons] [eval concat $$var_graph_color_marc] [eval concat $$var_graph_color_grasp] [eval concat $$var_graph_format_list] [eval concat $$var_graph_w_cell] [eval concat $$var_graph_h_cell]\\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_cancel {id} {\n");
-        sys_gui("set cmd [concat $id cancel \\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_ok {id} {\n");
-        sys_gui("videogrid_apply $id\n");
-        sys_gui("videogrid_cancel $id\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_dialog {id name num_fil num_col color_fons color_marc color_grasp format_list w_cell h_cell } {\n");
-        sys_gui("set vid [string trimleft $id .]\n");
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set $var_graph_name $name\n");
-        sys_gui("set $var_graph_num_fil $num_fil\n");
-        sys_gui("set $var_graph_num_col $num_col\n");
-        sys_gui("set $var_graph_color_fons $color_fons\n");
-        sys_gui("set $var_graph_color_marc $color_marc\n");
-        sys_gui("set $var_graph_color_grasp $color_grasp\n");
-        sys_gui("set $var_graph_format_list $format_list\n");
-        sys_gui("set $var_graph_w_cell $w_cell\n");
-        sys_gui("set $var_graph_h_cell $h_cell\n");
-        sys_gui("toplevel $id -class [winfo class .]\n");
-        sys_gui("wm title $id {** videogrid **}\n");
-        sys_gui("wm resizable $id 0 0\n");
-        sys_gui("wm protocol $id WM_DELETE_WINDOW [concat videogrid_cancel $id]\n");
-
-        /* sys_gui("label $id.label -text {VIDEOGRID PROPERTIES}\n"); */
-        /* sys_gui("pack $id.label -side top\n"); */
-
-        sys_gui("label $id.label -text { properties }\n");
-        sys_gui("pack $id.label -side top\n");
-
-        sys_gui("frame $id.buttonframe\n");
-        sys_gui("pack $id.buttonframe -side bottom -fill x -pady 2m\n");
-        sys_gui("button $id.buttonframe.cancel -text {Cancel} -command \"videogrid_cancel $id\"\n");
-        sys_gui("button $id.buttonframe.apply -text {Apply} -command \"videogrid_apply $id\"\n");
-        sys_gui("button $id.buttonframe.ok -text {OK} -command \"videogrid_ok $id\"\n");
-        sys_gui("pack $id.buttonframe.cancel -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.apply -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.ok -side left -expand 1\n");
-
-        sys_gui("frame $id.1rangef\n");
-        sys_gui("pack $id.1rangef -side top\n");
-        sys_gui("label $id.1rangef.lname -text \"Name :\" -anchor nw\n");
-        sys_gui("entry $id.1rangef.name -textvariable $var_graph_name -width 20\n");
-        sys_gui("pack $id.1rangef.lname $id.1rangef.name -side left\n");
-
-        sys_gui("frame $id.2rangef\n");
-        sys_gui("pack $id.2rangef -side top\n");
-        sys_gui("label $id.2rangef.lnum_fil -text \"Rows :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.2rangef.num_fil -textvariable $var_graph_num_fil -width 10\n");
-        sys_gui("pack $id.2rangef.lnum_fil $id.2rangef.num_fil -side left\n");
-
-        sys_gui("frame $id.3rangef\n");
-        sys_gui("pack $id.3rangef -side top\n");
-        sys_gui("label $id.3rangef.lnum_col -text \"Cols :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.3rangef.num_col -textvariable $var_graph_num_col -width 10\n");
-        sys_gui("pack $id.3rangef.lnum_col $id.3rangef.num_col -side left\n");
-
-        sys_gui("frame $id.4rangef\n");
-        sys_gui("pack $id.4rangef -side top\n");
-        sys_gui("label $id.4rangef.lcolor_fons -text \"Bg Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.4rangef.color_fons -textvariable $var_graph_color_fons -width 10\n");
-        sys_gui("pack $id.4rangef.lcolor_fons $id.4rangef.color_fons -side left\n");
-
-        sys_gui("frame $id.5rangef\n");
-        sys_gui("pack $id.5rangef -side top\n");
-        sys_gui("label $id.5rangef.lcolor_marc -text \"Border Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.5rangef.color_marc -textvariable $var_graph_color_marc -width 10\n");
-        sys_gui("pack $id.5rangef.lcolor_marc $id.5rangef.color_marc -side left\n");
-
-        sys_gui("frame $id.6rangef\n");
-        sys_gui("pack $id.6rangef -side top\n");
-        sys_gui("label $id.6rangef.lcolor_grasp -text \"Sel Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.6rangef.color_grasp -textvariable $var_graph_color_grasp -width 10\n");
-        sys_gui("pack $id.6rangef.lcolor_grasp $id.6rangef.color_grasp -side left\n");
-
-        sys_gui("frame $id.7rangef\n");
-        sys_gui("pack $id.7rangef -side top\n");
-        sys_gui("label $id.7rangef.lformat_list -text \"Format list ':' separated :\" -width 32 -anchor nw\n");
-        sys_gui("entry $id.7rangef.format_list -textvariable $var_graph_format_list -width 30\n");
-        sys_gui("pack $id.7rangef.lformat_list -fill x\n");
-        sys_gui("pack $id.7rangef.format_list -fill x\n");
-
-        sys_gui("frame $id.8rangef\n");
-        sys_gui("pack $id.8rangef -side top\n");
-        sys_gui("label $id.8rangef.lw_cell -text \"Thumb W :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.8rangef.w_cell -textvariable $var_graph_w_cell -width 10\n");
-        sys_gui("pack $id.8rangef.lw_cell $id.8rangef.w_cell -side left\n");
-
-        sys_gui("frame $id.9rangef\n");
-        sys_gui("pack $id.9rangef -side top\n");
-        sys_gui("label $id.9rangef.lh_cell -text \"Thumb H :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.9rangef.h_cell -textvariable $var_graph_h_cell -width 10\n");
-        sys_gui("pack $id.9rangef.lh_cell $id.9rangef.h_cell -side left\n");
-
-        sys_gui("bind $id.1rangef.name <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.2rangef.num_fil <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.3rangef.num_col <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.4rangef.color_fons <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.5rangef.color_marc <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.6rangef.color_grasp <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.7rangef.format_list <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.8rangef.w_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.9rangef.h_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("focus $id.1rangef.name\n");
-        sys_gui("}\n");
-
-        /*
-        sys_gui("proc table {w content args} {\n");
-        sys_gui("frame $w -bg black\n");
-        sys_gui("set r 0\n");
-        sys_gui("foreach row $content {\n");
-        sys_gui("set fields {}\n");
-        sys_gui("set c 0\n");
-        sys_gui("foreach col $row {\n");
-        // lappend fields [label $w.$r/$c -text $col]
-        sys_gui("set img [image create photo -file $col]\n");
-        sys_gui("lappend fields [label $w.$r/$c -image $img]\n");
-        sys_gui("incr c\n");
-        sys_gui("}\n");
-        sys_gui("eval grid $fields -sticky news -padx 1 -pady 1\n");
-        sys_gui("incr r\n");
-        sys_gui("}\n");
-        sys_gui("set w\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_table {id name num_fil num_col} {\n");
-        sys_gui("table .tauler {\n");
-        sys_gui("{sll80x60.gif 3160x120.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.gif sll80x60.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.ppm sll80x60.gif 3160x120.gif}\n");
-        sys_gui("}\n");
-        sys_gui("pack .tauler\n");
-        sys_gui("}\n");
-        */
-    }
-
-    /* widget properties */
-    static void videogrid_setwidget(void)
-    {
-        /* post("Entra a setwidget"); */
-        videogrid_widgetbehavior.w_getrectfn = videogrid_getrect;
-        videogrid_widgetbehavior.w_displacefn = videogrid_displace;
-        videogrid_widgetbehavior.w_selectfn = videogrid_select;
-        videogrid_widgetbehavior.w_activatefn = NULL;
-        videogrid_widgetbehavior.w_deletefn = videogrid_delete;
-        videogrid_widgetbehavior.w_visfn = videogrid_vis;
-        /* clic del ratoli */
-        videogrid_widgetbehavior.w_clickfn = videogrid_click;
-    }
-
-    /* el constructor de la classe*/
-    static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
-    {
-        /* instanciació del nou objecte */
-        t_videogrid *x = (t_videogrid *)pd_new(videogrid_class);
-        /* crea una sortida per l'objecte*/
-        x->x_sortida = outlet_new(&x->x_obj,&s_symbol);
-        /* s'obté el canvas de pd */
-        x->x_glist = (t_glist*) canvas_getcurrent();
-        /* posició en el tauler de la última imatge afegida */
-        x->x_ultima_img = 0;
-        /* posició de l'últim fitxer del directori encuat */
-        x->x_dir_pos = 0;
-        /* apuntador al primer element en el tauler */
-        x->x_tauler_primer = NULL;
-        x->x_pos_selected = -1;
-        /* fixa el nom de l'objecte */
-        char nom[15];
-        sprintf(nom, "videogrid%d", ++videogridcount);
-        name = gensym(nom);
-        x->x_name = name;
-        /* amb aquest nom es prepara per poder rebre dades */
-        pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* crea la cua de nodes */
-        crearCua(&x->x_cua);
-        post("NEW videogrid: created with %d parameters.\n", argc);
-
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 5:
-            /* versio 0.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 6:
-            /* versio 0.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)atom_getintarg(7, argc, argv);
-            x->x_h_cell = (int)atom_getintarg(8, argc, argv);
-        break;
-
-        case 10:
-            /* versio 0.1 - paths dels  elsements del tauler */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-            /*
-            // -- llegir la cadena de paths | afegir els paths a la cua //
-            // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-                    char *cadenaPaths;
-                    cadenaPaths = (char *)malloc(51200*sizeof(char));
-                    strcpy(cadenaPaths,(char *)argv[6].a_w.w_symbol->s_name);
-                    // -- printf("Es carreguen els paths %s --- %s **** %s\n", cadenaPaths, argv[5].a_w.w_symbol->s_name,argv[3].a_w.w_symbol->s_name); //
-                    // -- split //
-                    char *token;
-                    t_symbol *tt;
-                    for ( token = strtok(argv[6].a_w.w_symbol->s_name,"|");
-                        token != NULL;
-                        token = strtok(NULL,"|") ){
-                                tt = gensym(token);
-                                // -- printf("AFEGINT CARREGANT %s\n",tt->s_name); //
-                                // -- imagegrid_putimg(x,tt); //
-                                // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-                                // -- imagegrid_afegir_imatge(x,tt->s_name); //
-                    }
-
-                    token = strtok(cadenaPaths,"|");
-                    while(token){
-                        tt = gensym(token);
-                        // printf("AFEGINT CARREGANT %s\n",tt->s_name);
-                        imagegrid_putimg(x,tt);
-                        token = strtok(NULL,"|");
-                    }
-                    free(cadenaPaths);
-                    */
-        break;
-
-        default:
-            /* crea un objecte nou per defecte */
-            /* post("NEW imagegrid created.\n"); */
-            /* fixa el nombre de files */
-            x->x_num_fil = 3;
-            /* fixa el nombre de columnes */
-            x->x_num_col = 5;
-            /* colors de fons i de marc*/
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-           x->x_h_cell = 40;
-        break;
-        }
-        /*
-         * printf("S'ha instanciat un videogrid anomenat %s amb les caracteristiques seguents:",x->x_name->s_name);
-         * printf("Nombre de files %d - Nombre de columnes: %d", x->x_num_fil, x->x_num_col);
-        */
-        return (x);
-    }
-
-    static void videogrid_destroy(t_videogrid *x){
-        /* elimina el contingut de la cua */
-        eliminarCua(&x->x_cua);
-        post("Videogrid destroyed.\n");
-    }
-
-    /* generacio d'una nova classe */
-    /* al carregar la nova llibreria my_lib pd intenta cridar la funció my_lib_setup */
-    /* aquesta crea la nova classe i les seves propietats només un sol cop */
-
-    void videogrid_setup(void)
-    {
-        load_tk_procs_videogrid();
-        post("videogrid: version 0.2.1");
-        post("written by Sergi Lario (slario@gmail.com) & Lluis Gomez i Bigorda (lluis@artefacte.org)");
-
-        videogrid_class = class_new(gensym("videogrid"),
-            (t_newmethod)videogrid_new,
-            (t_method)videogrid_destroy,
-            sizeof(t_videogrid),
-            CLASS_DEFAULT,
-            A_GIMME,
-            0);
-
-        /*
-         *  class_new crea la nova classe retornant un punter al seu prototipus,
-         *  el primer argument es el nom simbolic de la classe,
-         *  el segon i tercer corresponen al constructor i destructor de la classe respectivament,
-         *  (el constructor instancia un objecte i inicialitza les seves dades cada cop que es crea un objecte
-         *  el destructor allibera la memoria reservada al destruir l'objecte per qualsevol causa)
-         *  el quart correspon a la mida de l'estructura de dades, per tal de poder reservar la memoria necessària,
-         *  el cinquè influeix en el mòde de representació gràfica del objectes. Per defecte CLASS_DEFAULT o '0',
-         *  la resta d'arguments defineixen els arguments de l'objecte i el seu tipus, la llista acaba  amb 0
-        */
-
-        class_addbang(videogrid_class, videogrid_bang);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideo,gensym("putvideo"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideodir,gensym("putvideodir"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_dialog, gensym("dialog"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_clear, gensym("clear"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_seek, gensym("seek"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_rows, gensym("rows"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_cols, gensym("cols"), A_FLOAT, 0);
-
-        /* inicia el comportament de videogrid */
-
-        videogrid_setwidget();
-
-        class_setwidget(videogrid_class, &videogrid_widgetbehavior);
-        class_sethelpsymbol(videogrid_class, gensym("videogrid.pd"));
-        class_setsavefn(videogrid_class, &videogrid_save);
-        class_setpropertiesfn(videogrid_class, videogrid_properties);
-    }
-}
diff --git a/externals/pdvjtools/videogrid/videogrid.libs b/externals/pdvjtools/videogrid/videogrid.libs
deleted file mode 100644
index be01538661910b879af4f78d9e892c73c9d2efa0..0000000000000000000000000000000000000000
--- a/externals/pdvjtools/videogrid/videogrid.libs
+++ /dev/null
@@ -1 +0,0 @@
--lavcodec -lavformat -lavutil -lswscale -lquicktime
diff --git a/externals/reakin/sdiflists/GnuGPL.txt b/externals/reakin/sdiflists/GnuGPL.txt
deleted file mode 100644
index d60c31a97a544b53039088d14fe9114583c0efc3..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/GnuGPL.txt
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/externals/reakin/sdiflists/README b/externals/reakin/sdiflists/README
deleted file mode 100644
index a12fe420035c1fd4eedfbe224540e0c00f9cb57b..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/README
+++ /dev/null
@@ -1,61 +0,0 @@
-~~~~~~~~~~~~~~~~~ [sdiflists] v0.1 - ~~~~~~~~~~~~~~~~~~~~~
-date: Jan 17, 2008
-author: Richie Eakin
-email: reakinator@gmail.com
-homepage: www.teafordragons.com/rte
-
-PURPOSE:
-This is an external for the computer music application Pure Data.
-Its purpose is to allow the use of SDIF analysis data within pd. 
-SDIF is a file format for data exchange between programs, you 
-can find more info about it at http://www.ircam.fr/sdif or
-http://archive.cnmat.berkeley.edu/SDIF/ .  I specifically use it 
-for resynthesizing sinusoidal tracks in pd... look for Trax on my
-webpage to get all the components for that.  
-
-INSTALL:
-You first need to download and install Ircam's SDIF library.  There are 
-many different versions to be found on the net, I am using the latest
-Sourceforge version found at http://sourceforge.net/projects/sdif. Last
-time I tried, I could not get it to compile on windows, so if you want this
-on that platform you have to get it to compile and adjust the makefile.
-
-in this directory do
-     (for linux)
-  make pd_linux 
-or (for mac)
-  make pd_darwin
-
-HOW TO USE:
-[sdiflists] will only handle one stream per sdif file; if you do not declare
-which stream you want you will get the first in the file by default.  All
-matrices within that frame will be available for output.  The number of
-outlets is declared as an argument to the externals, e.g. [sdiflists 6] 
-would make 6 outlets that output analysis data, one for each column.
-So if you have 2 matrices of 4 columns each, you will get all of the first
-matrix and the first 2 columns of the second.  There is also an outlet 
-for time and for info such as 1NVT tables and other useful things.
-For syntax detais, see sdiflists-help.pd.
-
-BUGS or SUGGESTIONS:
-There are a couple known bugs (you may notice warnings of the 
-wrong frametype in the terminal, haven't figured out why yet) and
-a couple work-arounds in the code.  But please let me know what
-you find when using this external, if you can fix it then great.  As I
-mentioned above, so far I only use this external for sinusoidal
-synthesis so I do not know if frametypes other than 1TRC or
-1STF will cause problems. I have tried to check, but.. you know.
-
-TODO:
-- make an external for writing sdif files.. hopefully people have
-suggestions for doing this because it is a little trickier than
-outputting lists like [sdiflists]
-
-THANKYOUS:
-Thanks to Tom Erbe for all the programming tips throughout my
-stay at UCSD.  Thanks to Miller Puckette for helping me figure
-out the odds and ends of Pd.  Thanks to Shlomo Dubnov for
-introducing me to and sharing knowledge about Sound Descr-
-tors.  Finally thanks to those on the SDIF and Pd mailing lists
-for helping cure me of ignorance.  Sorry though, still a long way
-to go!
\ No newline at end of file
diff --git a/externals/reakin/sdiflists/loris.STYP b/externals/reakin/sdiflists/loris.STYP
deleted file mode 100644
index 22bee49076f7591a80cbdc5c7c08ec4aeb1ab078..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/loris.STYP
+++ /dev/null
@@ -1,107 +0,0 @@
-
-SDIF
-
-1NVT
-{
-  GenerationDate	Thu_22_Jun_2006;
-  GenerationUser	Richie_Eakin;
-  Generator		modified_from_SdifTypes.STYP;
-  SourceFile		SdifTypes.STYP
-  Application		Loris_Sound_Modeling_Package
-  Author		Kelly_Fitz
-}
-
-1TYP
-{
-1MTD 1NVT { NVTText }
-1MTD 1TYP { TYPText }
-1MTD 1IDS { IDSText }
-1FTD 1NVT { 1NVT NameValueTable;  }
-1FTD 1TYP { 1TYP TypeDefinitions;  }
-1FTD 1IDS { 1IDS StreamInfo;  }
-
-1MTD 1GAI { Gain }
-1FTD 1GAI { 1GAI Gain;  }
-1MTD IWIN { WindowIdentifier, WindowSize }
-1MTD 1WIN { Samples }
-1FTD 1WIN { IWIN WindowInfo; 1WIN Window;  }
-1MTD 1CHA { Channel1, Channel2 }
-
-1MTD 1FQ0 { Frequency, Confidence, Score, RealAmplitude }
-1FTD 1FQ0 { 1FQ0 FundamentalFrequencyEstimate;  }
-
-1MTD 1PIC { Frequency, Amplitude, Phase, Confidence }
-1MTD 1TRC { Index, Frequency, Amplitude, Phase }
-1MTD 1HRM { Index, Frequency, Amplitude, Phase }
-1FTD 1PIC { 1PIC PickedPeaks;  }
-1FTD 1TRC { 1TRC SinusoidalTracks;  }
-1FTD 1HRM { 1HRM HarmonicPartials;  }
-1MTD 1HRE { MeanDeltaFrequency, Harmonicity, WeightedHarmonicity }
-1FTD 1HRE { 1HRE HarmonicityEstimate;  }
-
-1MTD IENV { HighestBinFrequency, ScaleType, BreakFrequency }
-1MTD 1ENV { Env }
-1FTD 1ENV { IENV SpectralEnvelopeInfo; 1ENV SpectralEnvelope; 1GAI Gain;  }
-1MTD ITFC { SamplingRate, Order }
-1MTD 1CEC { CepstralCoefficients }
-1FTD 1CEC { 1CEC CepstralCoefs;  }
-1MTD 1ARA { AutoRegressiveCoefficients }
-1MTD 1ARK { ReflectionCoefficients }
-1MTD 1ARR { AutoCorrelationCoefficients }
-1FTD 1ARA { 1GAI Gain; 1ARA ARACoefs;  }
-1FTD 1ARK { 1GAI Gain; 1ARK ARKCoefs;  }
-1FTD 1ARR { 1ARR ARRCoefs;  }
-
-1MTD 1FOF { Frequency, Amplitude, BandWidth, Tex, DebAtt, Atten, Phase }
-1MTD 2RES { Frequency, Amplitude, DecayRate, Phase }
-1MTD 1RES { Frequency, Amplitude, BandWidth, Saliance, Correction }
-1MTD 1DIS { Distribution, Amplitude }
-1FTD 1NOI { 1DIS NoiseDistribution;  }
-1FTD 1FOB { 1FQ0 FundamentalFrequencyEstimate; 1FOF Formants; 1CHA Channels;  }
-1FTD 1REB { 1RES Filters; 1CHA Channels;  }
-
-1MTD ISTF { DFTPeriod, WindowDuration, FFTSize }
-1MTD 1STF { Real, Imaginary }
-1FTD ISTF { ISTF FourierTransformInfo;  }
-1FTD 1STF { ISTF FourierTransformInfo; 1STF FourierTransform; 1WIN Window;  }
-
-1MTD INRG { Scale, NormalisationFactor }
-1MTD 1NRG { Energy }
-1FTD 1NRG { INRG ScaleAndFactor; 1NRG Energy; IWIN WindowInfo; 1WIN Window;  }
-1MTD 1BND { LowerFrequencyLimit, UpperFrequencyLimit }
-1FTD 1BND { 1BND Bands;  }
-
-1MTD ITDS { SamplingRate }
-1MTD 1TDS { Sample }
-
-1MTD 1PEM { Identifier, Parameter1, Parameter2, Parameter3 }
-1MTD ITMR { Index, Frequency, Amplitude, Phase }
-1MTD ITMI { Index }
-1MTD 1BEG { Id }
-1MTD 1END { Id }
-1MTD 1SEG { Confidence }
-1FTD 1SEG { 1SEG Segmentation;  }
-1MTD 1LAB { Chars }
-1FTD 1MRK { 1BEG SegmentStart; 1END SegmentEnd; 1SEG Segmentation; 1LAB Label; 1PEM PeriodMarker; ITMR TransientMarkerRepresentation; ITMI TransientMarkerIdentifier;  }
-
-1MTD 1VUN { VoicingCoefficient }
-1MTD 1VUF { CuttingFrequency }
-1FTD 1VUV { 1VUN VoicedUnvoicedNorm; 1VUF VoicedUnvoicedFreq;  }
-
-1MTD 1MID { Status, Data1, Data2 }
-1MTD 1SYX { Data }
-1FTD 1MID { 1MID MIDIEvent; 1SYX MIDISystemExclusive;  }
-
-1MTD EMPM { Value, Index }
-1MTD EMJR { Record }
-1FTD EFPM { EMPM Tableau; EMJR EndRecording;  }
-
-1MTD RBEP { Index, frequency, amplitude, phase, noise, timeOffset }
-1FTD RBEP { RBEP Reassigned_Bandwidth_Enhanced_Partials; }
-1MTD RBEL { Index, label }
-1FTD RBEL { RBEL Reassigned_Bandwidth_Enhanced_Labels; }
-1MTD RBET { marker_times }
-1MTD RBEN { marker_names }	
-1FTD RBEM { RBET marker_times; RBEN marker_names; }
-}
-
diff --git a/externals/reakin/sdiflists/makefile b/externals/reakin/sdiflists/makefile
deleted file mode 100644
index 340660a37db11ae23f70085e6304b74b2cb6e3f2..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-# ----------Pd-Sdif makefile, using the makefile--------------
-# ---------from example Pd externals--------------------------
-# *** Make sure the pd header files and sdif library can
-# *** be found by including the right directory
-# - this external will probably work on windows if you can
-#   get the SDIF IRCAM library installed, but I couldn't
-#   use the pd/doc/6.extern/makefile and link with -lsdif
-
-current:
-	echo make pd_linux
-
-clean: ; rm -f *.pd_linux *.o
-
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: sdiflists.pd_linux
-
-
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-LINUXINCLUDE = -I /usr/local/include
-
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld -lsdif --export-dynamic  -shared -o $*.pd_linux $*.o -lc -lm 
-	strip --strip-unneeded $*.pd_linux
-	rm $*.o
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin:  sdiflists.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-DARWIN_INCLUDE = -I /usr/local/include
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWIN_INCLUDE) -o $*.o -c $*.c
-	cc -bundle -undefined suppress -lsdif -flat_namespace -o $*.pd_darwin $*.o
-	rm -f $*.o
-
diff --git a/externals/reakin/sdiflists/sdiflists-help.pd b/externals/reakin/sdiflists/sdiflists-help.pd
deleted file mode 100644
index 7e326e270268080db3a10ff416c71f7d44f8c612..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/sdiflists-help.pd
+++ /dev/null
@@ -1,96 +0,0 @@
-#N canvas 33 413 1015 502 10;
-#X floatatom 389 469 8 0 0 0 - - -;
-#X floatatom 486 314 5 0 0 0 - - -;
-#X obj 450 443 list trim;
-#X msg 486 161 info;
-#X msg 486 195 types loris.STYP;
-#X obj 332 420 sdiflists 4;
-#X obj 487 291 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X msg 486 351 time \$1;
-#X floatatom 487 334 5 0 0 0 - - -;
-#N canvas 0 0 450 300 printcols 0;
-#X obj 38 46 inlet;
-#X obj 38 120 spigot;
-#X obj 38 142 print COLUMN-1;
-#X obj 98 96 inlet;
-#X obj 98 170 spigot;
-#X obj 168 46 inlet;
-#X obj 168 120 spigot;
-#X obj 228 96 inlet;
-#X obj 228 170 spigot;
-#X obj 98 192 print COLUMN-2;
-#X obj 168 142 print COLUMN-3;
-#X obj 228 192 print COLUMN-4;
-#X obj 324 42 inlet;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 4 0 9 0;
-#X connect 5 0 6 0;
-#X connect 6 0 10 0;
-#X connect 7 0 8 0;
-#X connect 8 0 11 0;
-#X connect 12 0 1 1;
-#X connect 12 0 4 1;
-#X connect 12 0 6 1;
-#X connect 12 0 8 1;
-#X restore 296 467 pd printcols;
-#X obj 375 449 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X msg 486 255 about;
-#X text 609 191 Specify a custom types definition file;
-#X text 647 206 (ex. Loris's RBEP format);
-#X text 524 156 sends info out the rightmost outlet in list tuples
-;
-#X text 524 168 Info also sends out 1NVT and 1IDS data;
-#X obj 450 467 print INFO_OUTLET;
-#X msg 486 113 open 2 test/richiepooSMS.sdif;
-#X msg 486 375 timerange 0.009;
-#X text 488 396 default timerange = 0.01;
-#X text 532 255 nothing really important here;
-#X obj 19 27 cnv 15 204 45 empty empty [sdiflists] 20 22 0 14 -62784
--241291 0;
-#X text 226 30 v.01;
-#X text 226 50 Author: Richie Eakin;
-#X text 16 99 this external uses the SDIF IRCAM library to read sdif
-files and output the matrices in the form of one lists per column.
-Only one stream can be read per external \, use more if you need to.
-The number of columns of all the combines matrices should be specified
-at creation time. The SDIF specification is very open \, but you have
-to use frame and matrix types that are declared in the standard library
-(found at www.ircam.fr/sdif) or with the inclusion of you own *.STYP
-file. I have included one that defines Loris' RBEP filetype \, along
-with the rest of the standard definitions.;
-#X msg 486 54 open test/pianoSpear.sdif;
-#X text 485 77 If you don't want the first stream in the file \, specify
-the number of the stream you want BEFORE the filename.;
-#X text 485 31 open a .sdif file first.;
-#X msg 486 138 open test/orgue.sdif;
-#X text 635 137 (this file has a 1NVT table);
-#X msg 486 229 open 1 test/meowLoris.sdif;
-#X text 677 232 RBEP is in stream 1;
-#X text 518 287 bang outputs the next frame in time;
-#X text 533 312 float outputs a specific frame;
-#X text 546 349 use timestamp instead of frame number;
-#X text 601 375 specify the time range (use with time message);
-#X connect 1 0 5 0;
-#X connect 2 0 16 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 9 0;
-#X connect 5 1 9 1;
-#X connect 5 2 9 2;
-#X connect 5 3 9 3;
-#X connect 5 4 0 0;
-#X connect 5 5 2 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 8 0 7 0;
-#X connect 10 0 9 4;
-#X connect 11 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 5 0;
-#X connect 25 0 5 0;
-#X connect 28 0 5 0;
-#X connect 30 0 5 0;
diff --git a/externals/reakin/sdiflists/sdiflists.c b/externals/reakin/sdiflists/sdiflists.c
deleted file mode 100644
index cb713561bd3a9ea6ab73516f1a279a0547c51924..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/sdiflists.c
+++ /dev/null
@@ -1,748 +0,0 @@
-
-/*------------------------------sdiflists-----------------------------/
-  ---------------------------------------------------------------------
-  An external object for Pure Data that reads SDIF files, with the help
-  of IRCAM's SDIF library.  
-  -written by Richie Eakin.. See the readme for more documentation.
-  reakinator@gmail.com
-*/
-
-#define IFRAMES 1000
-#define MAX_STREAMS 1000
-#define DATE "17/1/08"
-#define DEBUG 0
-#define DEBUG_MEM 0
-
-#include "m_pd.h"
-#include "sdiftostring.h"
-#include <sdif.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-static t_class *sdiflists_class;
-
-//a structure of outlets, decided by an init parameter.
-//taken from Pd's trigger object in x_connective.c 
-typedef struct colout
-{
-    t_symbol  u_type;        //outlet type from STYP (todo)?
-    t_outlet  *out;         
-    t_atom    *outvec;      
-} t_colout;
-
-// file markers, info for frame positions and times to allow seeking
-typedef struct pos
-{
-    SdifFloat8  timetag; // seconds
-    SdiffPosT   filepos; // memory locations
-} t_pos;
-
-typedef struct sdiflists
-{
-    t_object    x_ob;
-    SdifFileT   *file ;       //file data is malloced by SDIF library and everything goes in here
-    SdifStringT *string ;     //ascii queries
-    t_symbol    *filename; 
-    t_colout    *data;      
-    int         n_outs;
-    int         max_vec;      // enough memory is allocated for the biggest list that will be sent out   
-    int         nframes;      //number of frames found during indexing
-    t_canvas    *canvas;      //used for locating path directory
-    t_atom      *infolist;    // storage for right most outlet (always info - NVT or stats)
-    t_outlet    *infoout;
-    t_outlet    *timeout;
-    float       seconds;
-    float timeRange;
-    t_pos       *markers;     // locations and times of frames
-    long        index;        // current frame 
-    int         use_timetags; // boolean for deciding between timetag and index seeking  
-    unsigned int streamid;    // a unique identifier for streams within a file
-} t_sdiflists;
-
-/*-------------------open files, STYP first if given, then SDIF-----------------*/
-static void sdiflists_open(t_sdiflists *x,  t_symbol *s, int argcount, t_atom *argvec)
-{	
-    int i,j;
-    unsigned int StreamSpecified = 0;
-    
-    for (i = 0; i < argcount; i++)
-    {
-          if (argvec[i].a_type == A_FLOAT)
-          {//TODO: check if this was given after file, cuz that would be useless
-                x->streamid = (int) argvec[i].a_w.w_float;
-               StreamSpecified = 1;
-               post("stream specified:#%d", x->streamid);
-          }
- 
-      if (argvec[i].a_type == A_SYMBOL)
-      {
-          char *sym =  argvec[i].a_w.w_symbol->s_name;                 
-          if(!strcmp( sym + strlen(sym)-5 , ".sdif" ) || 
-                        !strcmp( sym + strlen(sym)-5 , ".SDIF" ))
-          {
-              t_colout *u;
-              if(x->markers[0].timetag != -1) 
-              {
-                  post("closing file... ");
-                  SdifFClose(x->file);
-                  for(j=0; j < x->nframes; j++)  x->markers[j].timetag = x->markers[j].filepos = 0;
-                  for(j=0, u = x->data; j < x->n_outs; u++, j++) freebytes( u->outvec, x->max_vec * sizeof(t_atom));
-		 
-                  x->markers[0].timetag = -1;
-                  x->index = -1;
-                  x->nframes = IFRAMES;
-#if DEBUG                         
-                  post("sdiflists::open: closed previous file");              
-#endif  
-	      }// end if x->file exists
-              unsigned int rows = 0;
-              unsigned int cols = 0;
-
-              t_int eof, m, updatepos;
-              t_int firstframe = 1;
-              t_int timepos = 0;
-              size_t bytesread = 0;  
-              SdiffPosT currpos;
-              float currtime = 0;
-                  				
-              /*method for opening file in canvas directory.
-                Based on zexy's [msgfile], which is based on
-                Pd's [textfile]*/
-              char filnam[MAXPDSTRING], namebuf[MAXPDSTRING];
-              char buf[MAXPDSTRING], *bufptr, *readbuf;
-              int fd; // used to check if file exists
-              char *dirname;
-              
-              dirname = canvas_getdir(x->canvas)->s_name;
-              t_binbuf *bbuf = binbuf_new();
-              
-              fd = open_via_path(dirname, sym,"", buf, &bufptr, MAXPDSTRING, 0);
-              if(fd < 0)
-              {
-                  error("sdiflists-open: %s cannot be found", sym);
-                  return;
-              }
-              namebuf[0] = 0;
-              if (*buf)   strcat(namebuf, buf), strcat(namebuf, "/");
-              
-              strcat(namebuf, bufptr);
-              // open and get length 
-              sys_bashfilename(namebuf, filnam);
-              //this is hopefully a readable file
-              
-#if DEBUG
-              post("(open_via_path) dirname: %s, filename->s_name: %s, buf: %s, bufptr: %s", dirname, sym, buf, bufptr);
-              post("AFTER bashfilename: namebuf: %s, filnam: %s ", namebuf, filnam);
-#endif
-	      
-              x->filename = gensym( namebuf );
-	      
-              /* Check if the file is a good SDIF file, skip function if not */
-              if (SdifCheckFileFormat (x->filename->s_name))
-              { 
-                  post("sdiflists: reading %s", x->filename->s_name);
-                  x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-     		  bytesread += SdifFReadGeneralHeader  (x->file);       
-                  bytesread += SdifFReadAllASCIIChunks (x->file);                 
-                  eof = SdifFCurrSignature(x->file) == eEmptySignature;	
-                  int err;
-                  while (!eof) //frame loop
-                  {
-                      /*The frame positions must be indexed before the
-                        frameheader is read, then check if it is a
-                        selected frame.  If not, skip the frame and
-                        overwrite the marker.*/
-                      err = SdifFGetPos(x->file, &currpos);
-                      if(err==-1) error("error SdifFGetPos");
-						
-						
-                      /* Read frame header.  Current signature has already been read
-                         by SdifFReadAllASCIIChunks or the last loop.) */
-                      bytesread += SdifFReadFrameHeader (x->file);
-
-                      if(!StreamSpecified)
-                        {
-                          x->streamid = SdifSelectGetFirstInt(x->file->Selection->stream, SdifFCurrID (x->file));
-                          StreamSpecified = 1;
-                          post("first stream used: #%d", x->streamid);
-                        }
-
-                      //PROBLEM: (maybe not...check)the last frame in the file is always acceptable... fix by using sel spec			
-                      while (!SdifFCurrFrameIsSelected (x->file) ||  SdifFCurrID (x->file) != x->streamid )
-                      {
-	   //  post("frame skipped");
-                          SdifFSkipFrameData (x->file);
-                          if ((eof = SdifFGetSignature(x->file, &bytesread) == eEof)) break;  
-                          SdifFGetPos(x->file, &currpos);			
-                          bytesread += SdifFReadFrameHeader(x->file);			
-                       }
-
-                      if(eof) //have to check again...since it might have skipped to the end
-                        break;
-			
-                      //check if this is a new time so successive frames don't overwrite filepos
-                      currtime =  SdifFCurrTime (x->file);
-                      if( !timepos ||  x->markers[timepos-1].timetag  != currtime )
-                      {
-                            x->markers[timepos].filepos = currpos;
-                            x->markers[timepos].timetag  = currtime;
-                            timepos++;
-                            if( timepos >= x->nframes )
-                            {
-                                   x->markers = (t_pos *)resizebytes( x->markers, x->nframes * sizeof(t_pos),
-		                               (x->nframes + IFRAMES) * sizeof(t_pos) );                                        
-                                   x->nframes = x->nframes + IFRAMES;
-                             }
-                      }      						
-                      /*matrices loop */
-                      for ( m = 0; (unsigned int)m < SdifFCurrNbMatrix (x->file); m++)
-                      {  
-                          bytesread += SdifFReadMatrixHeader (x->file);
-			  
-                          if( SdifFCurrNbRow (x->file) > rows)
-                          {
-                              rows = SdifFCurrNbRow (x->file); //get matrix stats
-                              cols = SdifFCurrNbCol (x->file);//should stay the same
-                           }
-                          //skip the actual matrices
-                          bytesread += SdifFSkipMatrixData (x->file);
-                      }// end for matrices
-                      eof = SdifFGetSignature (x->file, &bytesread) == eEof; 
-						
-                 }// end while no eof
-                 x->seconds = currtime;
-                 x->nframes= timepos; //last timepos was the eof
-#if DEBUG
-                  post(" rows: %d , cols: %d , frames: %d , seconds: %f", rows, cols,  x->nframes, x->seconds);
-                  post("sdiflists: %s opened. ", x->filename->s_name);
-#endif
-                  x->max_vec = rows; //needed to free memory
-	 
-                  //the following lines are a bug work-around... if the eof is reached, you cannot seek
-                  //until the fle is closed, opened, and re-initialized... i posted about this on the sdif list.
-                  SdifFClose (x->file);
-                  x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-                  SdifFReadGeneralHeader  (x->file); 
-                  SdifFReadAllASCIIChunks (x->file); 
-                  eof = SdifFCurrSignature(x->file) == eEmptySignature;  
-		
-                  //make room for the row lists
-                  for ( i=0, u = x->data; i < x->n_outs; u++, i++)
-	   u->outvec = (t_atom *)getbytes( x->max_vec * sizeof(t_atom));
-	     
-               } /* end if filetype check */
-            }
-        } //end if Symbol
-    }//end for arguments
-}
-
-/*--------------------seek to position and output data---------------------*/
-/*SDIF selection spec is infile::[#stream][:frame][/matrix][.column][_row][@time]*/
-/*in any order (accept :: is always first), allowing spaces*/
-static void sdiflists_seek(t_sdiflists *x, t_floatarg gotoindex)
-{
-  //check if file has been opened, -1 means first timetag was never set
-  if(x->markers[0].timetag == -1) 
-    {
-      post("sdiflists: open a file before seeking");
-      return;
-    }
-  x->index = (long)gotoindex;
-  //check if index  exists 
-  if( x->index >= x->nframes || gotoindex < 0)
-    {
-       
-#if DEBUG
-      post("no index there.");
-#endif
-      return;
-    }
-
-#if DEBUG_MEM
-  post ("index = %d , file pos = %d", x->index, x->markers[x->index].filepos);
-#endif
-    
-  t_colout *u;
-  int      i, selectedrow, selectedcol;
-  unsigned int m;
-  int      nbrows =0;
-  int      nbcols =0;
-  int      xout = 0;
-  int      eof = 0;
-  int      col, row;
-  float   value = 0;
-  size_t   bytesread;
-  int       listsize[x->n_outs];
-  float timetag;
-  
-  //seek to index
-  SdifFSetPos( x->file , &x->markers[x->index].filepos);
-  
-  //loop through 
-  while(!eof)
-  {
-      SdifFReadFrameHeader(x->file);
-      timetag =   SdifFCurrTime (x->file);	
-      //break once the current time has changed
-      if( x->markers[x->index].timetag != timetag) break;
- 
-      outlet_float(x->timeout, timetag);
-
-      /*Get the Data.  If no selection is given when the file is opened,
-        all rows/columns/matrices/frames will be obtained. */
-      if(SdifFCurrFrameIsSelected(x->file))
-      {   
-         
-#if DEBUG
-          //fsig turns up 0 unless I close file and reopen in in the open function..
-          SdifSignature   fsig     = SdifFCurrFrameSignature (x->file);
-          SdifUInt4       streamid = SdifFCurrID (x->file);
-          post("\n frame header- Signature: '%s', timetag: %f, streamid: %d,  nmatrices: %d", 
-               SdifSignatureToString(fsig),x->markers[x->index].timetag, streamid,SdifFCurrNbMatrix (x->file));
-#endif
- 
-          //each frame can contain multiple matrices, so go through all of them
-          for( m= 0; m < SdifFCurrNbMatrix (x->file) ; m++)
-          {
-              bytesread =  SdifFReadMatrixHeader(x->file); 
-              //matrices not selected will be skipped, but they still need to be added to the bytesread tally			
-              if (SdifFCurrMatrixIsSelected (x->file)) 
-              {
-                  //get how many rows total, then check which ones are selected
-                  nbrows = SdifFCurrNbRow (x->file);
-                  nbcols = SdifFCurrNbCol (x->file);
-#if DEBUG
-                  //same problem with matrix signature as frame signature
-                  SdifDataTypeET  type = 	SdifFCurrDataType(x->file);		
-                  post("matrix header: Signature: '%s', nbrows: %d,  nbcols %d,  type %04x", 
-                  SdifSignatureToString(SdifFCurrSignature(x->file)), nbrows, nbcols, type);
-#endif
-
-                  //go through every row and build vectors according to which column the row i sin
-                  for (selectedrow = 0, row = 0; row < nbrows; row++)
-                  {
-                      if(SdifFRowIsSelected (x->file, row))
-                      {
-                          bytesread +=  SdifFReadOneRow (x->file);                          
-                          //put each member in the correct vector by accessing each one according to the current column
-                          //plus any previous columns from other matrices/frames         
-                          for ( selectedcol= 0, col = 1, u = x->data + xout + selectedcol;
-                                col <= nbcols &&  xout + selectedcol < x->n_outs; col++, u++)   
-                          {
-                                  
-                              if(SdifFColumnIsSelected (x->file, col))
-                              {
-                                  value = SdifFCurrOneRowCol (x->file, col);
-                                  SETFLOAT(u->outvec + selectedrow, value);
-                                  selectedcol++;
-                              }//end if col is selected	
-                          } //end for cols
-                          selectedrow++;
-                        }//end if row is selected
-                  }//end for rows
-                  //set how big each vector is that was just filled
-                  for(i = 0; i < SdifFNumColumnsSelected (x->file); i++)
-                    {
-                      listsize[xout + i] =  SdifFNumRowsSelected (x->file);
-                    }
-                  //update number of columns
-                  xout += SdifFNumColumnsSelected (x->file);
-                }//end if matrix is selected
-              else   bytesread += SdifFSkipMatrixData(x->file);
-             
-              SdifFReadPadding(x->file, SdifFPaddingCalculate(x->file->Stream, bytesread));
-            }//end for matrices in frame
-        }// end if  current frame is selected and not eof
-       else   SdifFSkipFrameData(x->file);
- 
-       eof = SdifFGetSignature (x->file, &bytesread) == eEof;             
-   } //end while not eof
-
-  /* !! Once eof has been found, I have to close the file and reopen for the
-     frame signatures to be found.  someone please tell me why this is.. */
-  if(eof)
-  {
-      SdifFClose (x->file);
-      x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-      SdifFReadGeneralHeader  (x->file); 
-      SdifFReadAllASCIIChunks (x->file); 
-      eof = SdifFCurrSignature(x->file) == eEmptySignature;  
-      
-  }
-#if DEBUG
-  if (SdifFLastError (x->file))   
-  {
-      error(" in sdiflists_seek() ");
-  } 
-#endif
-  // send out columns of rows, preserving right to left order 
-for (i = x->n_outs, u = x->data + i; u--, i--;)
-      outlet_list(u->out, gensym("list"),listsize[i], u->outvec);
-}
-
-static void sdiflists_timeRange(t_sdiflists *x, t_floatarg t)
-{
-    x->timeRange = t;
-}
-static void sdiflists_time(t_sdiflists *x, t_floatarg time)
-{
-  int i;
-  float timeDiff;
-  for( i = 0; i < x->nframes; i++)
-  {
-
-      timeDiff = fabs( x->markers[i].timetag - time );
-      if(timeDiff < x->timeRange ) 
-      {
-          sdiflists_seek(x, i);
-          break;
-      }
-  }
-}
-
-static void sdiflists_bang(t_sdiflists *x)
-{
-  sdiflists_seek(x, (float)++x->index);
-}
-
-
-/*--------------------------------------------------------*/
-/*	query posts frame, matrix, and all ascii info	  */
-static void sdiflists_info(t_sdiflists *x)
-{
-
-  /* What I want to Post:
-     - information about external
-     - filename
-     - 1NVT
-     - streams in file, frame/matrix types
-     - selection
-     - column info
-     - framecount and timerange
-  */
-
-  post("\n_-=-_ sdiflists -info _-=-_");
-  
-  if(x->markers[0].timetag == -1) 
-    {
-      post("sdiflists: open a file before getting info");
-      return;
-    }
-  post("filename: %s", x->filename->s_name);
-
-
-  //size_t bytesread = 0; 
-  //int eof; 
-
-
-  SdifFClose (x->file);
-  x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-  SdifFReadGeneralHeader  (x->file); 
-  SdifFReadAllASCIIChunks (x->file); 
-  
-
-
-  //----send all Names Values Tables out right most list outlet----
-  if (SdifNameValuesLIsNotEmpty(x->file->NameValues)) 
-  {
-      x->string = SdifStringNew();
-      SdifListInitLoop(x->file->NameValues->NVTList); 
-      while (SdifListIsNext(x->file->NameValues->NVTList)) 
-      {
-          x->file->NameValues->CurrNVT = (SdifNameValueTableT *)
-	      SdifListGetNext(x->file->NameValues->NVTList);
-	  
-          SdifUInt4       iNV;
-          SdifHashNT     *pNV;
-          SdifHashTableT *HTable;
-          HTable = x->file->NameValues->CurrNVT->NVHT;
-	  
-          for(iNV=0; iNV<HTable->HashSize; iNV++)
-	      for (pNV = HTable->Table[iNV]; pNV; pNV = pNV->Next)
-              {
-		  SdifNameValueT *NameValue = (SdifNameValueT *) pNV->Data;
-		  SETSYMBOL(x->infolist , gensym(NameValue->Name));
-		  SETSYMBOL(x->infolist + 1 , gensym(NameValue->Value));
-		  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-              }//end for pNV
-      } //end list while NVT
-      SdifStringFree(x->string);
-  }// end if NVT is not empty
-
-  //---------------------- post 1IDS ---------------------------
-  if (   (SdifExistUserMatrixType(x->file->MatrixTypesTable))
-         || (SdifExistUserFrameType(x->file->FrameTypesTable)) )
-    {
-      x->string = SdifStringNew();
-      if ((x->file->TypeDefPass == eNotPass) || (x->file->TypeDefPass == eReadPass))
-        {   
-          SdifFAllMatrixTypeToSdifString(x->file, x->string); 
-          SETSYMBOL ( x->infolist , gensym( SdifSignatureToString(e1TYP)) );
-          SETSYMBOL ( x->infolist + 1 , gensym(x->string->str) );
-          outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-
-          post("----  %s  ----",SdifSignatureToString(e1TYP));
-				
-	  SdifFAllFrameTypeToSdifString(x->file, x->string);		//this compiles
-	}
-      SdifStringFree(x->string);	
-    }
-
-  if (SdifStreamIDTableGetNbData  (x->file->StreamIDsTable) > 0)
-  {
-      x->string = SdifStringNew();
-      if ((x->file->StreamIDPass == eNotPass) || (x->file->StreamIDPass == eReadPass))
-      {      
-	  SdifFAllStreamIDToSdifString(x->file, x->string);	//this also undeclared in sdif.h. x->string?	
-	  SETSYMBOL ( x->infolist , gensym(SdifSignatureToString(e1IDS)) );
-          SETSYMBOL ( x->infolist + 1 , gensym(x->string->str) );
-          outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-
-      }
-      SdifStringFree(x->string);	
-  }
-			
-  //------ output Stream ID's and corresponding Frame types --------
-  size_t  bytesread = 0;
-  int eof = 0;
-  int nStream = 0;
-  int streamIDlist[MAX_STREAMS];
-  int j, newStream;
-  for(j = 0; j < MAX_STREAMS; j++)
-      streamIDlist[j] = -1;
-  while(!eof)
-  {
-      bytesread += SdifFReadFrameHeader (x->file);
-      SdifUInt4       streamid = SdifFCurrID (x->file);
-      SdifSignature   fsig     = SdifFCurrFrameSignature (x->file);
-      newStream = 1;
-      for(j = 0; j < MAX_STREAMS; j++)
-      {
-	  if(streamIDlist[j] == (signed) streamid)
-	      newStream = 0;
-      }
-      if(newStream)
-      {
-	  streamIDlist[nStream++] = streamid;
-	  SETSYMBOL(x->infolist , gensym("stream"));
-	  SETFLOAT(x->infolist + 1, streamid );
-	  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-
-	  SETSYMBOL(x->infolist , gensym("frametype"));
-	  SETSYMBOL (x->infolist + 1, gensym(SdifSignatureToString(fsig)) );
-	  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-      }
-
-      bytesread += SdifFSkipFrameData (x->file);
-      eof = (SdifFGetSignature(x->file, &bytesread)== eEof);
- 
-  }
-  
-  //also send other useful info out rightmost list outlet
-  SETSYMBOL(x->infolist , gensym("frames"));
-  SETFLOAT (x->infolist + 1, (float) x->nframes);
-  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-    
-  SETSYMBOL(x->infolist , gensym("seconds"));
-  SETFLOAT (x->infolist + 1, x->seconds );
-  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-	 
-  SETSYMBOL(x->infolist , gensym("maxlist"));
-  SETFLOAT (x->infolist + 1, x->max_vec );
-  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-   
- 
-}		
-
-/*--------------------------------------------------------*/
-/* about for author info */
-static void sdiflists_about(t_sdiflists *x)
-{
-  post("~~~ [sdiflists] v0.1 ~~~");
-  post("by Richie Eakin, reakinator@gmail.com");
-  post("source last edited: %s", DATE);
-  post("SDIF Ircam library version %s \n", SDIF_VERSION_STRING ); 
-}
-						
-static void sdiflists_error(t_sdiflists *x, t_floatarg bool)
-{	
-  if(bool == 0) 
-    {
-      SdifDisableErrorOutput ();
-      post("error output disabled.");
-    }
-
-  if(bool == 1)
-    {
-      SdifEnableErrorOutput  ();	
-      post("error output enabled.");
-    }
-}
-
-static void sdiflists_types(t_sdiflists *x, t_symbol *types)
-{
-                  
-  if(x->markers[0].filepos != -1 ) 
-    {
-      t_colout *u;
-      int j;
-      SdifFClose(x->file);
-      for(j=0; j < x->nframes; j++)
-        x->markers[j].timetag = x->markers[j].filepos = 0;
-
-      x->markers[0].timetag = -1;
-   
-      for ( j=0, u = x->data; j < x->n_outs; u++, j++)
-        freebytes( u->outvec, x->max_vec * sizeof(t_atom));
-  
-#if DEBUG                         
-      post("sdiflists::types: closed previous file");              
-#endif  
-      x->nframes = IFRAMES;
-    }                     	
-  //prepend the full path onto the filename
-  char fullfilename[MAXPDSTRING], namebuf[MAXPDSTRING];
-  char buf[MAXPDSTRING], *bufptr, *dirname;
-  int fd = 0;
-															
-  dirname=canvas_getdir(x->canvas)->s_name;
-  t_binbuf *bbuf = binbuf_new();
-  fd = open_via_path(dirname,  types->s_name,"", buf, &bufptr, MAXPDSTRING, 0);
-  if(fd > 0)
-    {
-      namebuf[0] = 0;
-      if (*buf)  
-        strcat(namebuf, buf), strcat(namebuf, "/");
-      strcat(namebuf, bufptr);
-      sys_bashfilename(namebuf, fullfilename);
-               
-      SdifGenKill (); // have to close it to read a new .STYP
-      SdifGenInitCond (types->s_name);
-               
-      post("sdiflists: types-declaration file: %s", types->s_name);     
-    }
-  else post ("sdiflists: types file %s could not be opened", types->s_name);
-}
-
-
-
-/*--------------------constructors and destructors---------------------*/
-/* optional creation arguments are typechecked for number of columns,
-   STYP types-definition file, and initial SDIF file. The STYP should be
-   first so that the SDIF file is defined correctly.*/
-
-/*TODO: -c x or -m y to decide between columns or matrices output*/
-static void *sdiflists_new(t_symbol *s, int argcount, t_atom *argvec)
-{
- 
-#if DEBUG 
-  post("~~~ sdiflists: Debug Mode ~~~");
- 
-#endif
-
-  
-  t_sdiflists *x = (t_sdiflists *)pd_new(sdiflists_class);
-
-  x->canvas = canvas_getcurrent();
-  t_colout *u;
-
-  int i, j;
-  int gotcols = 0;
-
-  x->n_outs = 0;
-  x->nframes = IFRAMES;
-  x->timeRange = 0.01;
-  x->index = -1; // will be incremented to 0 if banged, reset if seeked
-
- 
-
-  SdifGenInitCond (""); /*initialize standard .STYP types file if uninitialized */
-
-  for (i = 0; i < argcount; i++)
-    {
-	
-      if (argvec[i].a_type == A_FLOAT)
-        {
-			 gotcols= 1;
-			 x->n_outs = (int) argvec[i].a_w.w_float;
-			 x->data = (t_colout *)getbytes(x->n_outs * sizeof(*x->data));
-                
-
-          /*number of outlets is defined here; one for each column specified or
-            one for each matrix (if x->n_outs is zero) */
-          for ( j=0, u = x->data; j < x->n_outs; u++, j++)
-            {
-              u->out = outlet_new (&x->x_ob, &s_list);
-            }
-        }
-      if (argvec[i].a_type == A_SYMBOL)
-        {
-          t_atom at;
-          SETSYMBOL(&at , argvec[i].a_w.w_symbol );
-          char *sym =  argvec[i].a_w.w_symbol->s_name;
-                
-          if( (!strcmp( sym + strlen(sym)-5 , ".sdif" ) || 
-               !strcmp( sym + strlen(sym)-5 , ".SDIF" )) && gotcols )  	
-            {	   
-              sdiflists_open(x, 0, 1, &at);
-            }
-          if(!strcmp( sym + strlen(sym)-5 , ".styp" ) || 
-             !strcmp( sym + strlen(sym)-5 , ".STYP" )) 	
-            {
-              sdiflists_types(x, argvec[i].a_w.w_symbol);
-            }
-			    
-        }//end if symbol argument
-          
-		
-         
-    }//end for creation arguments
-
-  x->timeout =outlet_new(&x->x_ob, &s_float);
-  x->infoout = outlet_new(&x->x_ob, gensym("list"));
-  x->markers = (t_pos *)getbytes( x->nframes * sizeof(t_pos));
-  x->infolist = (t_atom *)getbytes( 2 * sizeof(t_atom));
-  x->markers[0].timetag = -1; //if this isn't -1, a file is open	
-  return (void *)x;	
-}
-
-/*cleanup function - leave SDIF library in case there are other files using it */
-static void sdiflists_free(t_sdiflists *x)
-{
-  t_colout *u;
-  int i;
-  SdifFClose (x->file);
-   
-  for ( i=0, u = x->data; i < x->n_outs; u++, i++)
-    freebytes( u->outvec, x->max_vec * sizeof(t_atom));
-  
-  freebytes(x->data, x->n_outs * sizeof(*x->data));
-  freebytes(x->markers, x->nframes * sizeof(t_pos));
-  freebytes(x->infolist, 2 * sizeof(t_atom));
-}
-
-/*SETUP: a float inlet and variable creation arguments. */
-void sdiflists_setup(void)
-{
-  sdiflists_class = class_new(gensym("sdiflists"), (t_newmethod)sdiflists_new, (t_method)sdiflists_free,sizeof(t_sdiflists), 0, A_GIMME, 0);
-  //open - filename/streams input(to do: multiple streams)
-  class_addmethod(sdiflists_class, (t_method)sdiflists_open, gensym("open"), A_GIMME , 0);
-  //seek - float is used as index or (TODO) time
-  class_addfloat(sdiflists_class, (t_method)sdiflists_seek);
-  // bang - sends out next frame 
-  class_addbang(sdiflists_class, sdiflists_bang);
-  //info - print statistics and useful information stored in file
-  class_addmethod(sdiflists_class, (t_method)sdiflists_info, gensym("info"), 0);
-  //error - disable/re-enable error messages from sdif library
-  class_addmethod(sdiflists_class, (t_method)sdiflists_error, gensym("error"), A_DEFFLOAT);
-  //get -- get info and send out right most outlet
-  class_addmethod(sdiflists_class, (t_method)sdiflists_about, gensym("about"), 0);
-  //types - change the STYP file from default ( SdifTypes.STYP)
-  class_addmethod(sdiflists_class, (t_method)sdiflists_types, gensym("types"), A_DEFSYM, 0);
-  //time - specify desired frame by time intead of frame number
-  class_addmethod(sdiflists_class, (t_method)sdiflists_time, gensym("time"), A_DEFFLOAT, 0);
-  //timerange - the timestamp selected is within this amount of the time specification
-  class_addmethod(sdiflists_class, (t_method)sdiflists_timeRange, gensym("timerange"), A_DEFFLOAT, 0);
-}
diff --git a/externals/reakin/sdiflists/sdiftostring.h b/externals/reakin/sdiflists/sdiftostring.h
deleted file mode 100644
index 5b2ae59477e254a415ee63a81035ebecd7e0adbf..0000000000000000000000000000000000000000
--- a/externals/reakin/sdiflists/sdiftostring.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SdifFPut.c functions that were not declared in sdif.h*/
-
-#include <sdif.h>
-int SdifFNameValueLCurrNVTtoSdifString   (SdifFileT *SdifF, SdifStringT *SdifString);
-int SdifFAllStreamIDToSdifString  (SdifFileT *SdifF, SdifStringT *SdifSTring);
-
-/*
-  Append one frame type to SdifString
-*/
-int SdifFOneFrameTypeToSdifString(SdifFrameTypeT *FrameType, SdifStringT *SdifString);
-
-
-int SdifFOneMatrixTypeToSdifString(SdifMatrixTypeT *MatrixType, SdifStringT *SdifString);
diff --git a/externals/reakin/sdiflists/test/meowLoris.sdif b/externals/reakin/sdiflists/test/meowLoris.sdif
deleted file mode 100644
index 6de8ce964410191dc48918465424cd723f1497b7..0000000000000000000000000000000000000000
Binary files a/externals/reakin/sdiflists/test/meowLoris.sdif and /dev/null differ
diff --git a/externals/reakin/sdiflists/test/orgue.sdif b/externals/reakin/sdiflists/test/orgue.sdif
deleted file mode 100644
index 768c1d0cff70b59173ba912111a2e40d40808cd8..0000000000000000000000000000000000000000
Binary files a/externals/reakin/sdiflists/test/orgue.sdif and /dev/null differ
diff --git a/externals/reakin/sdiflists/test/pianoSpear.sdif b/externals/reakin/sdiflists/test/pianoSpear.sdif
deleted file mode 100644
index 6d3b1fc3d13c392c82a70f8c8a4b4c2f3778d77b..0000000000000000000000000000000000000000
Binary files a/externals/reakin/sdiflists/test/pianoSpear.sdif and /dev/null differ
diff --git a/externals/reakin/sdiflists/test/richiepooSMS.sdif b/externals/reakin/sdiflists/test/richiepooSMS.sdif
deleted file mode 100644
index 5f45dbce5beff93c25b1d3dc088f4eb09a1252cc..0000000000000000000000000000000000000000
Binary files a/externals/reakin/sdiflists/test/richiepooSMS.sdif and /dev/null differ
diff --git a/externals/soundfile/Makefile b/externals/soundfile/Makefile
deleted file mode 100644
index 902c9197e1799e33a1c945f45ee23dc172c0877e..0000000000000000000000000000000000000000
--- a/externals/soundfile/Makefile
+++ /dev/null
@@ -1,171 +0,0 @@
-# To use this Makefile for your project, first put the name of your library in
-# LIBRARY_NAME variable. The folder for your project should have the same name
-# as your library.
-LIBRARY_NAME = soundfile
-
-# Next, add your source files to the SOURCES variable.
-SOURCES = sfsamples.c sfduration.c
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-SOURCES_Darwin = 
-SOURCES_Linux = 
-SOURCES_Windows = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-objectsdir = $(PD_PATH)/extra
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g
-LDFLAGS =  
-LIBS = -lgavl -lgmerlin_avdec
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-  else # Mac OS X
-    SOURCES += $(SOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = macosx
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-    FAT_FLAGS = -arch i386 -arch ppc -mmacosx-version-min=10.4
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    LIBS += -lc 
-    STRIP = strip -x
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  SOURCES += $(SOURCES_Linux)
-  EXTENSION = pd_linux
-  OS = linux
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  SOURCES += 
-  EXTENSION = dll
-  OS = cygwin
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L$(PD_PATH)/src
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  SOURCES += $(SOURCES_Windows)
-  EXTENSION = dll
-  OS = windows
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  WINDOWS_HACKS = -D'O_NONBLOCK=1'
-  CFLAGS += -mms-bitfields $(WINDOWS_HACKS)
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L$(PD_PATH)/src -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec clean dist etags
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-exec
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(LIBRARY_NAME)-meta.pd $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-#	install -m644 -p $(SOURCES:.c=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p README $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	install -m644 -p VERSION $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/VERSION.txt
-	install -m644 -p CHANGES $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/CHANGES.txt
-
-install-exec:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS).tar.bz2
-
-dist: all dist_$(OS)
-
-dist_linux:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2 $(LIBRARY_NAME)
-
-dist_macosx:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-dist_windows:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-
-etags:
-	etags *.[ch] ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showpaths:
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
diff --git a/externals/soundfile/sfduration-help.pd b/externals/soundfile/sfduration-help.pd
deleted file mode 100644
index d61a72abd5576774727ea228b09ce1f7bd4312a7..0000000000000000000000000000000000000000
--- a/externals/soundfile/sfduration-help.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#N canvas 198 412 450 300 10;
-#X floatatom 111 182 8 0 0 1 ms - -;
-#X msg 131 112 symbol ../../doc/sound/voice.wav;
-#X obj 111 157 sfduration;
-#X obj 110 78 openpanel;
-#X msg 110 50 bang;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
diff --git a/externals/soundfile/sfduration.c b/externals/soundfile/sfduration.c
deleted file mode 100644
index efb8af1c2f46b09160a97fa633a3bc1d7b4b0589..0000000000000000000000000000000000000000
--- a/externals/soundfile/sfduration.c
+++ /dev/null
@@ -1,98 +0,0 @@
-
-#include <string.h>
-#include <stdio.h>
-
-#include <gmerlin/avdec.h>
-#include <gavl/gavl.h>
-
-#include <m_pd.h>
-
-#define DEBUG(x) x
-//#define DEBUG(x)
-
-static t_class *sfduration_class;
-
-typedef struct _sfduration
-{
-    t_object x_obj;
-    t_symbol* cwd;
-    t_symbol* filename;
-    bgav_t* decoder;
-} t_sfduration;
-
-static void sfduration_bang(t_sfduration *x)
-{
-    DEBUG(post("sfduration_bang"));
-	const gavl_audio_format_t* open_audio_format;
-	gavl_time_t gavl_time;
-
-    if(x->filename == &s_) {
-        pd_error(x,"no file set");
-        return;
-    }
-	if(!bgav_open(x->decoder, x->filename->s_name)) {
-		pd_error(x, "Could not open file %s", x->filename->s_name);
-    }
-	// only concerned with the first audio stream
-	open_audio_format = bgav_get_audio_format(x->decoder, 0);    
-
-    // we can get audio formats that are unkown
-	if (open_audio_format->sample_format == GAVL_SAMPLE_NONE) {
- 		pd_error(x, "sorry, this file has unsupported audio."); 
-	}
-
-    gavl_time = bgav_get_duration(x->decoder, 0);
-    t_float time_per_sample = (t_float)(gavl_time_to_samples(
-                                            open_audio_format->samplerate, 
-                                            gavl_time));
-    t_float samplerate = (t_float)open_audio_format->samplerate;
-    outlet_float(x->x_obj.ob_outlet, time_per_sample / samplerate * 1000.0);
-
-}
-
-static void sfduration_symbol(t_sfduration *x, t_symbol* filename)
-{
-    DEBUG(post("sfduration_symbol"));
-    if(sys_isabsolutepath(filename->s_name)) {
-        x->filename = filename;
-    } else {
-        int buflen;
-        char buf[FILENAME_MAX];
-        strncpy(buf, x->cwd->s_name, FILENAME_MAX);
-        strcat(buf, "/");
-        strncat(buf, filename->s_name, FILENAME_MAX - buflen - 2);
-        x->filename = gensym(buf);
-    }
-  
-    sfduration_bang(x);
-}
-
-static void *sfduration_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_sfduration *x = (t_sfduration *)pd_new(sfduration_class);
-    // TODO convert args into a filename, so spaces are valid
-    x->filename = &s_;
-    x->cwd = canvas_getdir(canvas_getcurrent());
-    outlet_new(&x->x_obj, &s_float);
-
-    x->decoder = bgav_create(); 
-
-    return(x);
-}
-
-static void sfduration_free(t_sfduration *x)
-{
-    bgav_close(x->decoder);
-}
-
-void sfduration_setup(void)
-{
-    sfduration_class = class_new(gensym("sfduration"), 
-                                (t_newmethod)sfduration_new, 
-                                (t_method)sfduration_free, 
-                                sizeof(t_sfduration), 
-                                0, A_GIMME, 0);
-
-    class_addbang(sfduration_class, (t_method)sfduration_bang);
-    class_addsymbol(sfduration_class, (t_method)sfduration_symbol);
-}
diff --git a/externals/soundfile/sfsamples-help.pd b/externals/soundfile/sfsamples-help.pd
deleted file mode 100644
index bc32c09c9d0b95efe71e6a0a1be5d0c2e06971b7..0000000000000000000000000000000000000000
--- a/externals/soundfile/sfsamples-help.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#N canvas 198 412 450 300 10;
-#X obj 111 157 sfsamples;
-#X floatatom 111 182 0 0 0 0 - - -;
-#X msg 111 112 symbol ../../doc/sound/voice.wav;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
diff --git a/externals/soundfile/sfsamples.c b/externals/soundfile/sfsamples.c
deleted file mode 100644
index a5d2b78144dba39834642eb19e903ea45bb5a3a6..0000000000000000000000000000000000000000
--- a/externals/soundfile/sfsamples.c
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#include <gmerlin/avdec.h>
-#include <gavl/gavl.h>
-
-#include <m_pd.h>
-
-#define DEBUG(x) x
-//#define DEBUG(x)
-
-static t_class *sfsamples_class;
-static t_canvas *canvas;
-
-typedef struct _sfsamples
-{
-    t_object x_obj;
-    t_symbol* filename;
-    bgav_t* decoder;
-} t_sfsamples;
-
-static void sfsamples_bang(t_sfsamples *x)
-{
-    DEBUG(post("sfsamples_bang"));
-	const gavl_audio_format_t* open_audio_format;
-	gavl_time_t gavl_time;
-
-    if(x->filename == &s_) {
-        pd_error(x,"no file set");
-        return;
-    }
-	if(!bgav_open(x->decoder, x->filename->s_name)) {
-		pd_error(x, "Could not open file %s", x->filename->s_name);
-    }
-	// only concerned with the first audio stream
-	open_audio_format = bgav_get_audio_format(x->decoder, 0);    
-
-    // we can get audio formats that are unkown
-	if (open_audio_format->sample_format == GAVL_SAMPLE_NONE) {
- 		pd_error(x, "sorry, this file has unsupported audio."); 
-	}
-
-    gavl_time = bgav_get_duration(x->decoder, 0);
-    outlet_float(x->x_obj.ob_outlet, (float)(gavl_time_to_samples(open_audio_format->samplerate, gavl_time) / (float)open_audio_format->samplerate));
-
-}
-
-static void sfsamples_symbol(t_sfsamples *x, t_symbol* filename)
-{
-    DEBUG(post("sfsamples_symbol"));
-    x->filename = filename;
-    sfsamples_bang(x);
-}
-
-static void *sfsamples_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_sfsamples *x = (t_sfsamples *)pd_new(sfsamples_class);
-    // TODO convert args into a filename, so spaces are valid
-    x->filename == &s_;
-
-    outlet_new(&x->x_obj, &s_float);
-
-    x->decoder = bgav_create(); 
-
-    return(x);
-}
-
-static void sfsamples_free(t_sfsamples *x)
-{
-    bgav_close(x->decoder);
-}
-
-void sfsamples_setup(void)
-{
-    sfsamples_class = class_new(gensym("sfsamples"), 
-                                (t_newmethod)sfsamples_new, 
-                                (t_method)sfsamples_free, 
-                                sizeof(t_sfsamples), 
-                                0, A_GIMME, 0);
-
-    class_addbang(sfsamples_class, (t_method)sfsamples_bang);
-    class_addsymbol(sfsamples_class, (t_method)sfsamples_symbol);
-}
diff --git a/externals/srt/characterfilter.pd b/externals/srt/characterfilter.pd
deleted file mode 100644
index 0341a5589a45e42b940cb1f107013d1ce805cd45..0000000000000000000000000000000000000000
--- a/externals/srt/characterfilter.pd
+++ /dev/null
@@ -1,64 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X obj 158 46 inlet string;
-#X obj 158 273 outlet string;
-#X obj 198 104 utf82codenumber;
-#N canvas 0 0 450 444 serialize 0;
-#X obj 124 232 list split 1;
-#X obj 124 149 until;
-#X obj 124 187 list append;
-#X obj 150 116 t b l;
-#X obj 254 232 bang;
-#X obj 152 76 t b l b;
-#X obj 152 362 outlet stream;
-#X obj 150 47 inlet list;
-#X obj 287 356 outlet start;
-#X obj 40 360 outlet done;
-#X connect 0 0 6 0;
-#X connect 0 1 2 1;
-#X connect 0 2 4 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 1 0;
-#X connect 3 1 2 1;
-#X connect 4 0 1 1;
-#X connect 5 0 9 0;
-#X connect 5 1 3 0;
-#X connect 5 2 8 0;
-#X connect 7 0 5 0;
-#X restore 158 74 pd serialize;
-#N canvas 0 0 450 300 deserialize 0;
-#X obj 150 66 inlet stream;
-#X obj 282 65 inlet reset;
-#X obj 58 63 inlet done;
-#X obj 135 265 outlet list;
-#X obj 221 156 list prepend;
-#X obj 221 179 t l l;
-#X obj 140 202 list prepend;
-#X obj 267 124 t b b;
-#X obj 76 120 t b;
-#X connect 0 0 4 0;
-#X connect 1 0 7 0;
-#X connect 2 0 8 0;
-#X connect 4 0 5 0;
-#X connect 5 0 6 1;
-#X connect 5 1 4 1;
-#X connect 6 0 3 0;
-#X connect 7 0 6 1;
-#X connect 7 1 4 1;
-#X connect 8 0 6 0;
-#X restore 158 245 pd deserialize;
-#X obj 198 126 moses 32;
-#X obj 198 149 select 10;
-#X msg 198 170 10;
-#X obj 198 196 t f;
-#X connect 0 0 3 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 3 1 2 0;
-#X connect 3 2 4 2;
-#X connect 4 0 1 0;
-#X connect 5 0 6 0;
-#X connect 5 1 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 4 1;
diff --git a/externals/srt/srtfile-help.pd b/externals/srt/srtfile-help.pd
deleted file mode 100644
index 320342285af486578deff68ab180705bc784bf69..0000000000000000000000000000000000000000
--- a/externals/srt/srtfile-help.pd
+++ /dev/null
@@ -1,67 +0,0 @@
-#N canvas 137 70 690 471 10;
-#X obj 61 110 gemwin;
-#X msg 61 87 create \, 1;
-#X obj 311 326 gemhead;
-#X obj 311 346 text3d;
-#X obj 208 278 list prepend string;
-#X obj 208 298 list trim;
-#X floatatom 388 335 5 0 0 0 - - -;
-#X obj 175 88 srtfile;
-#X msg 281 57 bang;
-#X obj 190 136 delay;
-#X obj 217 190 list prepend;
-#X obj 190 161 t b b;
-#X msg 174 57 read test.srt;
-#X obj 387 267 loadbang;
-#X msg 388 306 5;
-#X msg 427 306 font ae_AlBattar.ttf;
-#X obj 388 287 t b b;
-#X msg 202 30 read /media/disk/subs.srt;
-#X obj 275 141 print bababa;
-#X obj 289 88 t b b;
-#X msg 348 237 string;
-#X obj 190 111 t f l;
-#X obj 229 136 -;
-#X obj 229 159 * -1;
-#X obj 243 236 f;
-#X obj 281 238 delay;
-#X obj 239 323 t a;
-#X obj 241 358 print;
-#X obj 285 209 print bababa1;
-#X obj 217 214 t a b;
-#X obj 209 258 characterfilter;
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 4 0 5 0;
-#X connect 5 0 26 0;
-#X connect 6 0 3 1;
-#X connect 7 0 10 1;
-#X connect 7 0 18 0;
-#X connect 7 1 21 0;
-#X connect 8 0 19 0;
-#X connect 9 0 11 0;
-#X connect 10 0 28 0;
-#X connect 10 0 29 0;
-#X connect 11 0 7 0;
-#X connect 11 1 10 0;
-#X connect 12 0 7 0;
-#X connect 13 0 16 0;
-#X connect 14 0 6 0;
-#X connect 15 0 3 0;
-#X connect 16 0 14 0;
-#X connect 16 1 15 0;
-#X connect 17 0 7 0;
-#X connect 19 0 7 0;
-#X connect 19 1 20 0;
-#X connect 20 0 26 0;
-#X connect 21 0 9 0;
-#X connect 21 1 22 0;
-#X connect 22 0 23 0;
-#X connect 23 0 24 1;
-#X connect 24 0 25 0;
-#X connect 25 0 20 0;
-#X connect 26 0 27 0;
-#X connect 26 0 3 0;
-#X connect 29 0 30 0;
-#X connect 29 1 24 0;
-#X connect 30 0 4 0;
diff --git a/externals/srt/srtfile.pd b/externals/srt/srtfile.pd
deleted file mode 100644
index 8b76086ffa19609494d3d129dd1e11a04023c9e1..0000000000000000000000000000000000000000
--- a/externals/srt/srtfile.pd
+++ /dev/null
@@ -1,362 +0,0 @@
-#N canvas 145 144 766 516 10;
-#X obj 126 18 inlet;
-#X text 173 8 open filename;
-#X text 177 23 bang;
-#X obj 45 430 outlet subtitle;
-#X obj 518 428 outlet done;
-#N canvas 231 15 793 487 linereader 0;
-#X obj 136 17 inlet;
-#X obj 159 452 outlet next line;
-#X msg 136 111 read \$1 \, rewind;
-#X obj 136 92 symbol;
-#X obj 159 357 list prepend;
-#X obj 246 334 t l l;
-#X obj 187 145 until;
-#X obj 136 266 t b b b;
-#X obj 136 221 route bang;
-#X obj 246 311 list prepend;
-#N canvas 642 75 450 300 EOL 0;
-#X obj 84 48 inlet;
-#X obj 165 129 select 10 13;
-#X text 157 51 CRLF = 13 10 (w32);
-#X msg 205 151 1;
-#X msg 245 172 0;
-#X obj 165 189 f;
-#X obj 165 217 select 1;
-#X obj 245 152 t f b;
-#X obj 60 244 outlet byte;
-#X obj 165 245 outlet EOL;
-#X obj 43 113 select 10 13;
-#X connect 0 0 10 0;
-#X connect 1 0 5 0;
-#X connect 1 1 3 0;
-#X connect 1 2 7 0;
-#X connect 3 0 5 1;
-#X connect 4 0 5 1;
-#X connect 5 0 6 0;
-#X connect 6 0 9 0;
-#X connect 7 0 8 0;
-#X connect 7 1 4 0;
-#X connect 10 0 9 0;
-#X connect 10 2 8 0;
-#X restore 246 244 pd EOL;
-#X obj 136 244 t b b;
-#X obj 137 47 route open bang bong;
-#X msg 219 81 bang;
-#X obj 316 283 t b b;
-#X obj 226 290 t b b;
-#X obj 430 445 outlet;
-#X obj 136 171 ./binfile;
-#X connect 0 0 12 0;
-#X connect 2 0 17 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 1;
-#X connect 5 1 9 1;
-#X connect 6 0 17 0;
-#X connect 7 0 15 0;
-#X connect 7 1 4 0;
-#X connect 7 2 6 1;
-#X connect 8 0 11 0;
-#X connect 8 1 10 0;
-#X connect 9 0 5 0;
-#X connect 10 0 9 0;
-#X connect 10 1 14 0;
-#X connect 11 0 7 0;
-#X connect 11 1 16 0;
-#X connect 12 0 3 0;
-#X connect 12 1 6 0;
-#X connect 12 2 13 0;
-#X connect 13 0 17 0;
-#X connect 14 0 7 0;
-#X connect 15 0 4 1;
-#X connect 15 1 9 1;
-#X connect 17 0 8 0;
-#X connect 17 2 11 0;
-#X restore 148 153 pd linereader;
-#N canvas 626 26 639 408 lineid 0;
-#X obj 146 47 inlet;
-#X obj 124 318 outlet;
-#X obj 360 56 inlet reset;
-#X obj 146 168 route bang;
-#X obj 226 244 i;
-#X obj 261 246 + 1;
-#X msg 178 210 0;
-#X obj 146 190 t b b;
-#X obj 124 271 list prepend;
-#X obj 213 190 t b b;
-#X obj 124 293 list prepend 0;
-#X obj 360 94 t b;
-#X obj 265 318 outlet done;
-#X obj 146 97 t a a;
-#X connect 0 0 13 0;
-#X connect 2 0 11 0;
-#X connect 3 0 7 0;
-#X connect 3 1 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 10 1;
-#X connect 5 0 4 1;
-#X connect 6 0 4 1;
-#X connect 7 0 12 0;
-#X connect 7 1 6 0;
-#X connect 8 0 10 0;
-#X connect 9 0 8 0;
-#X connect 9 1 4 0;
-#X connect 10 0 1 0;
-#X connect 11 0 6 0;
-#X connect 13 0 3 0;
-#X connect 13 1 8 1;
-#X restore 148 189 pd lineid;
-#X obj 208 125 until;
-#X obj 148 248 route 0 1;
-#X obj 208 210 t b b;
-#X obj 378 428 outlet ID;
-#N canvas 207 25 634 523 timestamp 0;
-#X obj 59 44 inlet bytes;
-#X obj 59 184 outlet from;
-#X obj 146 183 outlet to;
-#X obj 311 47 inlet reset;
-#X text 141 13 HH:MM:SS \, sss --> HH:MM:SS \, sss;
-#N canvas 523 25 450 526 getdelays 0;
-#X obj 53 138 unpack 0 0 0 0 0 0 0 0;
-#X obj 53 162 * 60;
-#X obj 53 184 +;
-#X obj 53 204 * 60;
-#X obj 53 225 +;
-#X obj 53 247 +;
-#X obj 140 162 * 60;
-#X obj 140 184 +;
-#X obj 140 204 * 60;
-#X obj 140 225 +;
-#X obj 140 247 +;
-#X obj 53 276 * 1000;
-#X obj 140 276 * 1000;
-#X obj 55 325 -;
-#X obj 53 299 t f f;
-#X obj 140 325 -;
-#X obj 55 356 outlet;
-#X obj 140 356 outlet;
-#X obj 53 104 inlet timestamps;
-#X obj 291 74 inlet set number;
-#X obj 291 148 t f;
-#X connect 0 0 1 0;
-#X connect 0 1 2 1;
-#X connect 0 2 4 1;
-#X connect 0 3 5 1;
-#X connect 0 4 6 0;
-#X connect 0 5 7 1;
-#X connect 0 6 9 1;
-#X connect 0 7 10 1;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 12 0;
-#X connect 11 0 14 0;
-#X connect 12 0 15 0;
-#X connect 13 0 16 0;
-#X connect 14 0 13 1;
-#X connect 14 0 15 1;
-#X connect 14 1 13 0;
-#X connect 15 0 17 0;
-#X connect 18 0 0 0;
-#X connect 19 0 20 0;
-#X connect 20 0 13 1;
-#X connect 20 0 15 1;
-#X restore 59 150 pd getdelays;
-#N canvas 496 75 450 413 bytes2numbers 0;
-#X obj 95 23 inlet bytes;
-#X obj 95 278 outlet;
-#X obj 95 60 string2any;
-#X obj 95 82 list;
-#X msg 95 107 list \$1 \$3 \$5 \$7;
-#X obj 94 130 unpack s 0 s 0;
-#N canvas 0 0 450 475 fractional 0;
-#X obj 99 42 inlet;
-#X obj 99 411 outlet;
-#X text 151 43 123;
-#X text 155 416 0.123;
-#X obj 145 339 *;
-#X obj 168 171 log;
-#X obj 202 172 log 10;
-#X obj 168 193 /;
-#X msg 206 152 10;
-#X obj 168 214 i;
-#X obj 168 152 abs;
-#X obj 168 240 + 1;
-#X obj 168 313 pow;
-#X msg 168 285 10 \$1;
-#X obj 168 263 * -1;
-#X obj 145 126 t f f b;
-#X obj 99 84 route 0;
-#X msg 99 118 0;
-#X connect 0 0 16 0;
-#X connect 4 0 1 0;
-#X connect 5 0 7 0;
-#X connect 6 0 7 1;
-#X connect 7 0 9 0;
-#X connect 8 0 6 0;
-#X connect 9 0 11 0;
-#X connect 10 0 5 0;
-#X connect 11 0 14 0;
-#X connect 12 0 4 1;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 4 0;
-#X connect 15 1 10 0;
-#X connect 15 2 8 0;
-#X connect 16 0 17 0;
-#X connect 16 1 15 0;
-#X connect 17 0 1 0;
-#X restore 106 166 pd fractional;
-#X obj 95 211 pack 0 0 0 0;
-#N canvas 0 0 450 475 fractional 0;
-#X obj 99 42 inlet;
-#X obj 99 411 outlet;
-#X text 151 43 123;
-#X text 155 416 0.123;
-#X obj 99 299 *;
-#X obj 122 131 log;
-#X obj 99 85 t f f b;
-#X obj 156 132 log 10;
-#X obj 122 153 /;
-#X msg 160 112 10;
-#X obj 122 174 i;
-#X obj 122 112 abs;
-#X obj 122 200 + 1;
-#X obj 122 273 pow;
-#X msg 122 245 10 \$1;
-#X obj 122 223 * -1;
-#X connect 0 0 6 0;
-#X connect 4 0 1 0;
-#X connect 5 0 8 0;
-#X connect 6 0 4 0;
-#X connect 6 1 11 0;
-#X connect 6 2 9 0;
-#X connect 7 0 8 1;
-#X connect 8 0 10 0;
-#X connect 9 0 7 0;
-#X connect 10 0 12 0;
-#X connect 11 0 5 0;
-#X connect 12 0 15 0;
-#X connect 13 0 4 1;
-#X connect 14 0 13 0;
-#X connect 15 0 14 0;
-#X restore 216 166 pd fractional;
-#X obj 205 211 pack 0 0 0 0;
-#X obj 95 249 list append;
-#X obj 95 190 symbol2list :;
-#X obj 205 190 symbol2list :;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 5 1 6 0;
-#X connect 5 2 12 0;
-#X connect 5 3 8 0;
-#X connect 6 0 7 3;
-#X connect 7 0 10 0;
-#X connect 8 0 9 3;
-#X connect 9 0 10 1;
-#X connect 10 0 1 0;
-#X connect 11 0 7 0;
-#X connect 12 0 9 0;
-#X restore 59 110 pd bytes2numbers;
-#X connect 0 0 6 0;
-#X connect 3 0 5 1;
-#X connect 5 0 1 0;
-#X connect 5 1 2 0;
-#X connect 6 0 5 0;
-#X restore 178 381 pd timestamp;
-#X obj 208 308 list split 1;
-#N canvas 0 0 450 506 lines2multiline 0;
-#X obj 75 47 inlet singleline;
-#X obj 75 427 outlet multiline;
-#X obj 142 199 list append 10;
-#X text 254 197 <-- Gem's linebreak;
-#X obj 75 127 route bang;
-#X obj 142 259 list prepend;
-#X obj 142 280 t l l;
-#X obj 75 313 list prepend;
-#X obj 75 269 t b;
-#X obj 278 51 inlet delimiter;
-#X obj 75 98 t a a;
-#X obj 75 399 route bang;
-#X obj 75 345 t a b b a;
-#X connect 0 0 10 0;
-#X connect 2 0 5 0;
-#X connect 4 0 8 0;
-#X connect 4 1 2 0;
-#X connect 5 0 6 0;
-#X connect 6 0 7 1;
-#X connect 6 1 5 1;
-#X connect 7 0 12 0;
-#X connect 8 0 7 0;
-#X connect 9 0 2 1;
-#X connect 10 0 4 0;
-#X connect 11 1 1 0;
-#X connect 12 0 11 0;
-#X connect 12 1 7 1;
-#X connect 12 2 5 1;
-#X restore 248 334 pd lines2multiline;
-#X obj 178 429 outlet from to;
-#X obj 178 404 pack 0 0;
-#X msg 259 360 0;
-#X obj 126 45 route read bang;
-#X obj 126 67 symbol;
-#X msg 126 108 open \$1;
-#N canvas 565 53 450 300 checkopen 0;
-#X obj 58 29 inlet bang;
-#X obj 171 207 outlet bang;
-#X obj 58 83 symbol;
-#X obj 107 83 symbol;
-#X obj 58 102 select select;
-#X obj 58 142 print STR-error;
-#X obj 58 61 t b b;
-#X obj 171 143 t b;
-#X obj 285 32 inlet filename;
-#X msg 58 122 line requested without prior read!;
-#X connect 0 0 6 0;
-#X connect 2 0 4 0;
-#X connect 3 0 4 1;
-#X connect 4 0 9 0;
-#X connect 4 1 7 0;
-#X connect 6 0 2 0;
-#X connect 6 1 3 0;
-#X connect 7 0 1 0;
-#X connect 8 0 2 1;
-#X connect 9 0 5 0;
-#X restore 208 99 pd checkopen;
-#X obj 126 88 t s b s;
-#X connect 0 0 17 0;
-#X connect 5 0 6 0;
-#X connect 5 1 4 0;
-#X connect 6 0 8 0;
-#X connect 6 1 9 0;
-#X connect 7 0 5 0;
-#X connect 8 0 10 0;
-#X connect 8 1 11 0;
-#X connect 8 2 12 0;
-#X connect 9 0 13 0;
-#X connect 9 1 7 1;
-#X connect 11 0 15 0;
-#X connect 11 1 15 1;
-#X connect 12 1 13 0;
-#X connect 13 0 3 0;
-#X connect 15 0 14 0;
-#X connect 16 0 11 1;
-#X connect 17 0 18 0;
-#X connect 17 1 20 0;
-#X connect 18 0 21 0;
-#X connect 19 0 5 0;
-#X connect 20 0 7 0;
-#X connect 21 0 19 0;
-#X connect 21 1 6 1;
-#X connect 21 1 16 0;
-#X connect 21 2 20 1;
diff --git a/externals/srt/utf82codenumber.pd b/externals/srt/utf82codenumber.pd
deleted file mode 100644
index 5cd80b5a50c66852b655257610f1fc45ced9c970..0000000000000000000000000000000000000000
--- a/externals/srt/utf82codenumber.pd
+++ /dev/null
@@ -1,133 +0,0 @@
-#N canvas 375 22 649 526 10;
-#X obj 181 32 inlet byte;
-#X obj 181 476 outlet byte;
-#X text 259 108 aux;
-#X text 323 111 2byte;
-#X text 386 113 3byte;
-#X text 446 113 4byte;
-#X text 180 112 1byte;
-#X obj 181 129 & 127;
-#X obj 321 129 & 31;
-#X obj 251 129 & 63;
-#X obj 390 129 & 15;
-#X obj 450 129 & 7;
-#X obj 251 150 t f b;
-#X msg 207 175 1;
-#X obj 181 268 ==;
-#X text 220 284 expectedbytes;
-#X obj 181 226 i;
-#X obj 226 266 t f b;
-#X msg 268 266 0;
-#X obj 204 371 t l l;
-#X obj 181 310 select 1;
-#X obj 181 393 list prepend;
-#X msg 353 174 2;
-#X obj 181 198 t b f;
-#X obj 181 151 t f b;
-#X obj 321 150 t f b;
-#X obj 212 226 + 1;
-#X obj 390 153 t f b;
-#X msg 422 177 3;
-#X obj 450 151 t f b;
-#X msg 482 175 4;
-#X obj 181 416 t l l;
-#N canvas 327 0 461 427 shifter 0;
-#X obj 134 59 inlet;
-#X obj 134 387 outlet;
-#X obj 166 220 list split 1;
-#X obj 166 167 until;
-#X obj 166 195 list append;
-#X obj 266 220 bang;
-#X obj 166 246 +;
-#X obj 166 299 t f f;
-#X obj 166 144 t b l b;
-#X msg 215 265 0;
-#X obj 166 270 << 6;
-#X obj 166 321 >> 6;
-#X obj 134 359 f;
-#X obj 134 98 t b l;
-#X connect 0 0 13 0;
-#X connect 2 0 6 0;
-#X connect 2 1 4 1;
-#X connect 2 2 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 1;
-#X connect 6 0 10 0;
-#X connect 7 0 11 0;
-#X connect 7 1 6 1;
-#X connect 8 0 3 0;
-#X connect 8 1 4 1;
-#X connect 8 2 9 0;
-#X connect 9 0 6 1;
-#X connect 10 0 7 0;
-#X connect 11 0 12 1;
-#X connect 12 0 1 0;
-#X connect 13 0 12 0;
-#X connect 13 1 8 0;
-#X restore 181 443 pd shifter;
-#X obj 203 345 list prepend;
-#X obj 243 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 356 199 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 419 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 486 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 181 87 moses 128;
-#X obj 251 87 moses 192;
-#X obj 321 87 moses 224;
-#X obj 390 87 moses 240;
-#X obj 181 61 t f;
-#X text 272 476 unicode code number;
-#X text 265 30 UTF-8 multibyte;
-#X connect 0 0 42 0;
-#X connect 7 0 24 0;
-#X connect 8 0 25 0;
-#X connect 9 0 12 0;
-#X connect 10 0 27 0;
-#X connect 11 0 29 0;
-#X connect 12 0 23 0;
-#X connect 13 0 17 0;
-#X connect 13 0 34 0;
-#X connect 14 0 20 0;
-#X connect 16 0 14 0;
-#X connect 16 0 26 0;
-#X connect 17 0 14 1;
-#X connect 17 1 18 0;
-#X connect 17 1 33 1;
-#X connect 18 0 26 0;
-#X connect 19 0 21 1;
-#X connect 19 1 33 1;
-#X connect 20 0 21 0;
-#X connect 21 0 31 0;
-#X connect 22 0 17 0;
-#X connect 22 0 35 0;
-#X connect 23 0 16 0;
-#X connect 23 1 33 0;
-#X connect 24 0 23 0;
-#X connect 24 1 13 0;
-#X connect 25 0 23 0;
-#X connect 25 1 22 0;
-#X connect 26 0 16 1;
-#X connect 27 0 23 0;
-#X connect 27 1 28 0;
-#X connect 28 0 17 0;
-#X connect 28 0 36 0;
-#X connect 29 0 23 0;
-#X connect 29 1 30 0;
-#X connect 30 0 17 0;
-#X connect 30 0 37 0;
-#X connect 31 0 32 0;
-#X connect 32 0 1 0;
-#X connect 33 0 19 0;
-#X connect 38 0 7 0;
-#X connect 38 1 39 0;
-#X connect 39 0 9 0;
-#X connect 39 1 40 0;
-#X connect 40 0 8 0;
-#X connect 40 1 41 0;
-#X connect 41 0 10 0;
-#X connect 41 1 11 0;
-#X connect 42 0 38 0;
diff --git a/externals/tclpd/AUTHORS b/externals/tclpd/AUTHORS
deleted file mode 100644
index 03b00a35e59d661c89423df6b7ccab76d6692889..0000000000000000000000000000000000000000
--- a/externals/tclpd/AUTHORS
+++ /dev/null
@@ -1,7 +0,0 @@
-Authors of tclpd.
-
-Federico Ferri <mescalinum@gmail.com>
-
-I'd like to thank also Mathieu Bouchard for sharing its knowledge and giving
-advices, thus contributing to this project.
-
diff --git a/externals/tclpd/COPYING b/externals/tclpd/COPYING
deleted file mode 100644
index f47bd6d7af23de623dc5569d5ba7757f005bf1ce..0000000000000000000000000000000000000000
--- a/externals/tclpd/COPYING
+++ /dev/null
@@ -1,280 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
diff --git a/externals/tclpd/ChangeLog b/externals/tclpd/ChangeLog
deleted file mode 100644
index 8ddfa3e92de4d6de8393cadb0f9f7ca1c2e4a0a0..0000000000000000000000000000000000000000
--- a/externals/tclpd/ChangeLog
+++ /dev/null
@@ -1,17 +0,0 @@
-Version 0.2.1:
-	- Added support for properties function.
-	- Added support for pd_bind/unbind.
-	- Added destructor call in pd_free.
-	- Added support for glist_grab (needed for mouse motion)
-	- Added support for loadbang
-	- Added iemgui-style general purpose property panel
-	- Introduced Tcl package logic (package name: Tclpd)
-
-Version 0.2:
-	- Added support for GUI externals (widgetbehavior).
-	- Added support for save function.
-	- Fixed memory leaks.
-
-Version 0.1.1:
-	- Basic support for atom conversion, pd classes, methods.
-	- Fixed issues with tcl obj reference counter (segfaults).
diff --git a/externals/tclpd/INSTALL b/externals/tclpd/INSTALL
deleted file mode 100644
index 3083f1afd50c34e1139ab1577510a17e968b0ed4..0000000000000000000000000000000000000000
--- a/externals/tclpd/INSTALL
+++ /dev/null
@@ -1 +0,0 @@
-See README
diff --git a/externals/tclpd/Makefile b/externals/tclpd/Makefile
deleted file mode 100644
index 633feb228f0f100e60c3eb169ad59fdc1792cc28..0000000000000000000000000000000000000000
--- a/externals/tclpd/Makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/make
-
-DEBUG?=0
-OS := $(shell uname -s)
-TCL_VERSION := $(shell echo 'puts $$tcl_version' | tclsh)
-
-ifeq ($(DEBUG),1)
-	CFLAGS += -O0 -g -ggdb -DDEBUG
-endif
-ifeq ($(OS),Linux)
-  PDSUF = .pd_linux
-  PDBUNDLEFLAGS = -shared -rdynamic
-  LDSOFLAGS = -lm -ltcl$(TCL_VERSION)
-endif
-ifeq ($(OS),Darwin)
-  PDSUF = .pd_darwin
-  INCLUDES = -I/Library/Frameworks/Tcl.framework/Headers
-  PDBUNDLEFLAGS = -bundle -flat_namespace -undefined dynamic_lookup
-  LDSOFLAGS = -lm -framework Tcl
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  PDSUF = .dll
-  PDBUNDLEFLAGS = -shared
-  LDSOFLAGS = -lm -ltcl$(TCL_VERSION)
-endif
-
-LIBNAME = tcl
-INCLUDES =  -I../../pd/src -I/usr/include -I/usr/include/tcl$(TCL_VERSION)
-CFLAGS += -funroll-loops -fno-operator-names -fno-omit-frame-pointer -falign-functions=16 -Wall -fPIC
-CFLAGS += -DPDSUF=\"$(PDSUF)\"
-ifeq ($(DEBUG),0)
-	CFLAGS += -O2
-endif
-LDSHARED = $(CXX) $(PDBUNDLEFLAGS)
-
-all:: $(LIBNAME)$(PDSUF)
-	@echo '-----------------------------------------------------------------------------'
-	@echo ' $(LIBNAME)$(PDSUF) ('`test $(DEBUG) -eq 1 && echo debug || echo release`' build) '\
-		'[size: '`ls -gGh $(LIBNAME)$(PDSUF) | cut -d " " -f 3`']'
-
-clean::
-	rm -f tcl.pd_linux tcl_wrap.cxx *.o *~
-
-.SUFFIXES: .cxx .o
-
-SRCS = tcl_wrap.cxx tcl_typemap.cxx tcl_class.cxx tcl_widgetbehavior.cxx tcl_proxyinlet.cxx tcl_setup.cxx tcl_loader.cxx
-OBJS = ${SRCS:.cxx=.o}
-
-tcl_wrap.cxx:: tcl.i tcl_extras.h Makefile
-	swig -v -c++ -tcl -o tcl_wrap.cxx $(INCLUDES) tcl.i
-
-.cxx.o:: tcl_extras.h Makefile
-	$(CXX) $(CFLAGS) $(INCLUDES) -xc++ -c $<
-
-$(LIBNAME)$(PDSUF):: tcl_extras.h Makefile $(OBJS)
-	$(LDSHARED) $(CFLAGS) -o $(LIBNAME)$(PDSUF) $(OBJS) $(LDSOFLAGS)
-
-pdlib_tcl_syntax: pdlib.tcl
-	@echo -n "checking pdlib.tcl for syntax..."
-	@tclsh pdlib.tcl >/dev/null 2>&1
-	@echo " OK"
diff --git a/externals/tclpd/README b/externals/tclpd/README
deleted file mode 100644
index 0276171b197e493dc5d3281d95a32595323a86d5..0000000000000000000000000000000000000000
--- a/externals/tclpd/README
+++ /dev/null
@@ -1,112 +0,0 @@
-
- Tcl for Pd
- ==========
-
-This library allows to to write externals for Pd using the Tcl language.
-
-It is based on the standard API of PD (defined in m_pd.h, plus some other
-private header files, like g_canvas.h, s_stuff.h, ...).
-
-Also a library of Tcl helper functions is provided. It is not mandatory to use
-it (moreover: it requires Tcl 8.5, while the tclpd external alone requires only
-Tcl 8.4), but it is a syntactic sugar and can simplify a lot the code.
-Using it is as simple as sourcing pdlib.tcl in your Tcl external.
-
-Anyway, disregarding any approach chosen to develop Tcl externals, a general
-knowledge of Pd internals (atoms, symbols, symbol table, inlets, objects) is
-strongly required. (Pd-External-HOWTO is always a good reading)
-
-
- Compiling and installing
- ========================
-
-To compile tclpd, simply type:
-
-  make clean all
-
-To compile it with debug enabled:
-
-  make DEBUG=1 clean all
-
-Requirements are pd >= 0.39, swig, c++ compiler.
-To install tclpd, simply copy it to /usr/lib/pd/extra (or where you installed
-pure-data).
-
-
- Writing GUI externals
- =====================
-
-Pd is split into two processes: pd (the core) and pd-gui.
-A simple pd external just runs in the core. A simple Tcl externals still runs
-in the core, because tclpd creates a Tcl interpreter for that.
-
-Instead, pd-gui has its own Tcl interpreter. In order to to GUI things (i.e.
-draw on the canvas, or react to mouse events), the core process needs to
-communicate with the pd-gui process (generally sending Tk commands, or calling
-procedures defined in the pd-gui interp.
-This is done with the sys_gui() function, if using the plain API.
-
-Also pdlib.tcl provide means to simplify this task, with the guiproc function,
-which defines procedures directly into the pd-gui interpreter.
-
-As a counterexample, I'd like to cite tot/toxy/widget externals, which you may
-be familiar with.
-Such externals run in the pd-gui process. That was fine for writing simple gui
-externals, that don't need to react to any message.
-But, for instance, you cannot do a metronome or anything which is timing
-accurate, or heavy IO, as that is not the purpose of the gui process.
-Tclpd instead, by running in the core process, allows that.
-
-
- Data conversion between Tcl <=> Pd
- ==================================
-
-In pd exists 'atoms'. An atom is a float, a symbol, a list item, and such.
-Tcl does not have data types. In Tcl everything is a string, also numbers and
-lists. Just when something needs to be read as number, then evaluation comes
-in.
-This leads to loss of information about atom types. Imagine a
-symbol '456' comes into tclpd, you won't know anymore if "456"
-is a symbol or a float.
-
-Here a little convention comes in: in tclpd an atom gets converted into a
-two-item list, where first item is atom type, and second item is its value.
-
-Some examples of this conversion:
-
- Pd:  456
- Tcl: {float 456}
-
- Pd:  symbol foo
- Tcl: {symbol foo}
-
- Pd:  list cat dog 123 456 weee
- Tcl: {{symbol cat} {symbol dog} {float 123} {float 456} {symbol wee}}
-
-
- Examples
- ========
-
-I provided small examples.
-after loading pd with option '-lib tcl', just type the filename
-(minus the .tcl extension) to load the Tcl externals examples.
-
-actually there is one simple example: list_change (behaves like
-[change] object, but work with lists only)
-
-examples make use of pdlib.tcl. It's still possible to port the example to use
-only the plain Pd api. Contributions are welcome.
-
-
- Authors
- =======
-
-Please refer to AUTHORS file found in tclpd package.
-
-
- License
- =======
-
-Please refer to COPYING file found in tclpd package.
-
-
diff --git a/externals/tclpd/TODO b/externals/tclpd/TODO
deleted file mode 100644
index e1cc55c83726f2fc198c711805908d71193942a4..0000000000000000000000000000000000000000
--- a/externals/tclpd/TODO
+++ /dev/null
@@ -1,4 +0,0 @@
-TODO-list for tclpd (most important things first)
-=================================================
-- add (or check) GOP
-- signal externals? (really?)
diff --git a/externals/tclpd/bitmap-help.pd b/externals/tclpd/bitmap-help.pd
deleted file mode 100644
index e12deabc8c00208c59df63eb6fec233d9f20716a..0000000000000000000000000000000000000000
--- a/externals/tclpd/bitmap-help.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#N canvas 625 330 742 518 10;
-#X obj 63 244 bitmap -cellsize 15 -uwidth 8 -uheight 8;
-#bitmap setdata 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0
-0 1 0 1 1 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 0 1
-0 1 1 0 1 0 1 0 1 0;
-#X obj 87 410 print out;
-#X msg 39 117 getrow \$1;
-#X obj 42 245 vradio 15 1 0 8 empty empty empty 0 -8 0 10 -228856 -162280
--1 0;
-#X obj 42 410 s \$0r;
-#X obj 39 89 r \$0r;
-#X text 36 19 [bitmap] - a two dimensional array of bits (toggles)
-;
-#X text 38 49 creation arguments -cellsize <#> -uwidth <#> -uheight <#>;
-#X msg 111 117 getcol \$1;
-#X obj 111 89 r \$0c;
-#X obj 63 213 r \$0b;
-#X obj 39 157 s \$0b;
-#X obj 63 372 hradio 15 1 0 8 empty empty empty 0 -8 0 10 -228856 -162280
--1 0;
-#X obj 157 410 s \$0c;
-#X obj 227 157 s \$0b;
-#X msg 227 117 getcell 0 1;
-#X msg 317 117 getcell 1 1;
-#X text 226 88 getcell <row> <col>;
-#X obj 247 243 bitmap -cellsize 4 -uwidth 16 -uheight 16;
-#bitmap setdata 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 0 1 1 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0
-1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 1 1 0 0
-0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0
-1 0 1 1 1 1 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0
-1 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 1 1 1 0 0
-0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1
-0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X msg 447 200 setcell \$1 \$2 \$3;
-#N canvas 4 117 450 300 randomdata 0;
-#X obj 220 136 random 2;
-#X obj 62 89 t b b b;
-#X obj 62 35 inlet;
-#X obj 62 187 pack f f f;
-#X obj 62 222 outlet;
-#X obj 62 62 metro 10;
-#X obj 62 136 random 4;
-#X obj 141 136 random 4;
-#X connect 0 0 3 2;
-#X connect 1 0 6 0;
-#X connect 1 1 7 0;
-#X connect 1 2 0 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 5 0 1 0;
-#X connect 6 0 3 0;
-#X connect 7 0 3 1;
-#X restore 447 175 pd randomdata;
-#X obj 447 151 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X obj 447 331 bitmap -cellsize 16 -uwidth 4 -uheight 4;
-#bitmap setdata 1 0 0 0 1 0 0 1 1 0 1 1 1 1 1 0;
-#X msg 465 231 setcol 1 0 0 0 0 \, setcol 2 0 0 0 0;
-#X msg 481 292 setrow \$1 \$2 \$2 \$3 \$3;
-#X msg 481 265 0 1 0 \, 1 1 0 \, 2 0 1 \, 3 0 1;
-#X connect 0 0 1 0;
-#X connect 2 0 11 0;
-#X connect 3 0 4 0;
-#X connect 5 0 2 0;
-#X connect 8 0 11 0;
-#X connect 9 0 8 0;
-#X connect 10 0 0 0;
-#X connect 12 0 13 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 19 0 22 0;
-#X connect 20 0 19 0;
-#X connect 21 0 20 0;
-#X connect 23 0 22 0;
-#X connect 24 0 22 0;
-#X connect 25 0 24 0;
diff --git a/externals/tclpd/bitmap-madness.pd b/externals/tclpd/bitmap-madness.pd
deleted file mode 100644
index 49a9dd3f5f37f4bfb9568542a38d269d6ad4e099..0000000000000000000000000000000000000000
--- a/externals/tclpd/bitmap-madness.pd
+++ /dev/null
@@ -1,134 +0,0 @@
-#N canvas 5 140 311 321 10;
-#N canvas 322 138 514 645 in 1;
-#X obj 20 462 outlet;
-#X obj 51 8 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
-;
-#X obj 44 60 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#N canvas 3 94 332 662 for_X_Y 0;
-#X obj 61 60 inlet;
-#X obj 71 223 until;
-#X msg 125 177 0;
-#X obj 72 261 f;
-#X obj 106 260 + 1;
-#X obj 68 141 t b b;
-#X obj 78 418 until;
-#X msg 132 372 0;
-#X obj 79 456 f;
-#X obj 113 455 + 1;
-#X obj 75 336 t b b;
-#X obj 73 297 t b f;
-#X obj 82 502 pack f f;
-#X msg 77 528 \$2 \$1;
-#X obj 74 589 outlet;
-#X msg 72 177 32;
-#X msg 79 372 32;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 4 0;
-#X connect 3 0 11 0;
-#X connect 4 0 3 1;
-#X connect 5 0 15 0;
-#X connect 5 1 2 0;
-#X connect 6 0 8 0;
-#X connect 7 0 8 1;
-#X connect 8 0 9 0;
-#X connect 8 0 12 0;
-#X connect 9 0 8 1;
-#X connect 10 0 16 0;
-#X connect 10 1 7 0;
-#X connect 11 0 10 0;
-#X connect 11 1 12 1;
-#X connect 12 0 13 0;
-#X connect 13 0 14 0;
-#X connect 15 0 1 0;
-#X connect 16 0 6 0;
-#X restore 50 125 pd for_X_Y;
-#X obj 78 270 sin;
-#X obj 78 227 / 64;
-#X obj 51 154 unpack f f;
-#X obj 107 190 t f f;
-#X obj 21 422 pack f f f;
-#X msg 21 442 setcell \$1 \$2 \$3;
-#X obj 76 297 + 0.5;
-#X obj 151 277 sin;
-#X obj 149 255 / 16;
-#X obj 79 321 +;
-#X obj 49 189 t f f f;
-#X obj 79 249 +;
-#X obj 228 155 f;
-#X obj 263 154 + 0.1;
-#X obj 49 94 t b b;
-#X obj 78 360 wrap;
-#X obj 77 401 i;
-#X obj 148 230 expr sqrt(pow(sin($f3)*32-$f1 \, 2)+pow(cos($f3)*34-$f2
-\, 2));
-#X obj 79 380 * 1.8;
-#X obj 79 341 * 1.2;
-#X obj 151 299 + 0.6;
-#X obj 52 35 metro 40;
-#X connect 1 0 25 0;
-#X connect 2 0 18 0;
-#X connect 3 0 6 0;
-#X connect 4 0 10 0;
-#X connect 5 0 15 0;
-#X connect 6 0 14 0;
-#X connect 6 1 7 0;
-#X connect 7 0 8 1;
-#X connect 7 1 21 1;
-#X connect 8 0 9 0;
-#X connect 9 0 0 0;
-#X connect 10 0 13 0;
-#X connect 11 0 24 0;
-#X connect 12 0 11 0;
-#X connect 13 0 23 0;
-#X connect 14 0 8 0;
-#X connect 14 1 5 0;
-#X connect 14 2 21 0;
-#X connect 15 0 4 0;
-#X connect 16 0 17 0;
-#X connect 16 0 21 2;
-#X connect 17 0 16 1;
-#X connect 18 0 3 0;
-#X connect 18 1 16 0;
-#X connect 19 0 22 0;
-#X connect 20 0 8 2;
-#X connect 21 0 12 0;
-#X connect 22 0 20 0;
-#X connect 23 0 19 0;
-#X connect 24 0 13 1;
-#X connect 25 0 18 0;
-#X restore 17 10 pd in;
-#X obj 17 34 bitmap 8 32 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
-1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
-1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
-0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
-0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
-0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
-0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
-0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
-0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
-0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
-#X connect 0 0 1 0;
diff --git a/externals/tclpd/bitmap.tcl b/externals/tclpd/bitmap.tcl
deleted file mode 100644
index 1cbc7662f686fd1bfd28aeb6af385c0c8e0e6810..0000000000000000000000000000000000000000
--- a/externals/tclpd/bitmap.tcl
+++ /dev/null
@@ -1,346 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-set ::script_path [file dirname [info script]]
-
-pd::guiproc bitmap_draw_new {self c x y config data} {
-    set w [dict get $config -uwidth]
-    set h [dict get $config -uheight]
-    set sz [dict get $config -cellsize]
-    set fgcolor [dict get $config -fgcolor]
-    set bgcolor [dict get $config -bgcolor]
-    set colors [list $bgcolor $fgcolor]
-    set z 0
-    for {set i 0} {$i < $h} {incr i} {
-        for {set j 0} {$j < $w} {incr j} {
-            $c create rectangle \
-                [expr {0+$x+$j*$sz}] [expr {0+$y+$i*$sz}] \
-                [expr {1+$x+($j+1)*$sz}] [expr {1+$y+($i+1)*$sz}] \
-                -outline $fgcolor -fill [lindex $colors [lindex $data $z]] \
-                -tags [list $self cell_${j}_${i}_$self]
-            incr z
-        }
-    }
-    set x2 [expr {$x+$w*$sz+1}]
-    set y2 [expr {$y+$h*$sz+1}]
-    $c create rectangle $x $y $x2 $y2 \
-        -outline $fgcolor -tags [list $self border$self]
-}
-
-pd::guiclass bitmap {
-    constructor {
-        set s [file join $::script_path properties.tcl]
-        sys_gui "source {$s}\n"
-
-        pd::add_outlet $self float
-
-        # set defaults:
-        set @config [list]
-        lappend @config -uwidth 8
-        lappend @config -uheight 8
-        lappend @config -cellsize 16
-        lappend @config -label ""
-        lappend @config -labelpos "top"
-        lappend @config -sendsymbol ""
-        lappend @config -receivesymbol ""
-        lappend @config -fgcolor "#000000"
-        lappend @config -bgcolor "#ffffff"
-        lappend @config -lblcolor "#000000"
-        set @data {
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-        }
-        # expanded ($n) send/recv symbols:
-        set @send {}
-        set @recv {}
-
-        ::$self 0 config {*}$args
-
-        set @rcvLoadData {#bitmap}
-        pd_bind [tclpd_get_instance_pd $self] [gensym $@rcvLoadData]
-    }
-
-    destructor {
-        set pdself [tclpd_get_instance_pd $self]
-        if {$@rcvLoadData != {}} {
-            #should not happen!
-            pd_unbind $pdself [gensym $@rcvLoadData]
-        }
-        if {[dict get $@config -receivesymbol] != {}} {
-            pd_unbind $pdself $@recv
-        }
-    }
-
-    0_config {
-        if {$args == {}} {
-            return $@config
-        } else {
-            set newconf [list]
-            set optlist [pd::strip_selectors $args]
-            set optlist [pd::strip_empty $optlist]
-            for {set i 0} {$i < [llength $optlist]} {} {
-                set k [lindex $optlist $i]
-                if {![dict exists $@config $k]} {
-                    return -code error "unknown option '$k'"
-                }
-                incr i
-                set v [lindex $optlist $i]
-                if {[lsearch -exact {-uwidth -uheight -cellsize} $k] != -1} {
-                    set v [expr {int($v)}]
-                }
-                dict set newconf $k $v
-                incr i
-            }
-            if {[dict get $@config -uwidth] != [dict get $newconf -uwidth] ||
-                [dict get $@config -uheight] != [dict get $newconf -uheight]} {
-                $self 0 resize {*}[pd::add_selectors [list \
-                    [dict get $newconf -uwidth] \
-                    [dict get $newconf -uheight] \
-                    ]]
-            }
-            set ui 0
-            foreach opt {label labelpos cellsize fgcolor bgcolor lblcolor} {
-                set old [dict get $@config -$opt]
-                if {[dict exists $newconf -$opt]} {
-                    set new [dict get $newconf -$opt]
-                    if {$old != $new} {
-                        dict set @config -$opt $new
-                        set ui 1
-                    }
-                }
-            }
-            foreach opt {sendsymbol receivesymbol} {
-                set old [dict get $@config -$opt]
-                if {[dict exists $newconf -$opt]} {
-                    set new [dict get $newconf -$opt]
-                    if {$old != $new} {
-                        if {$opt == "receivesymbol"} {
-                            set selfpd [tclpd_get_instance_pd $self]
-                            if {$old != {}} {
-                                pd_unbind $selfpd $@recv
-                            }
-                            if {$new != {}} {
-                                set @recv [canvas_realizedollar \
-                                    [tclpd_get_glist $self] [gensym $new]]
-                                pd_bind $selfpd $@recv
-                            } else {
-                                set @recv {}
-                            }
-                        }
-                        dict set @config -$opt $new
-                    }
-                }
-            }
-            if {$ui && [info exists @c]} {
-                sys_gui [list $@c delete $self]\n
-                sys_gui [list bitmap_draw_new $self \
-                    $@c $@x $@y $@config $@data]\n
-            }
-        }
-    }
-    
-    0_resize {
-        set w [pd::arg 0 int]
-        set h [pd::arg 1 int]
-        set oldw [dict get $@config -uwidth]
-        set oldh [dict get $@config -uheight]
-        set newd {}
-        for {set y 0} {$y < $h} {incr y} {
-            for {set x 0} {$x < $w} {incr x} {
-                if {$x < $oldw && $y < $oldh} {
-                    lappend newd [lindex $@data [expr {$y*$oldw+$x}]]
-                } else {
-                    lappend newd 0
-                }
-            }
-        }
-        dict set @config -uwidth $w
-        dict set @config -uheight $h
-        set @data $newd
-    }
-
-    0_getrow {
-        set r [list]
-        set n [pd::arg 0 int]
-        set w [dict get $@config -uwidth]
-        for {set i [expr {$n*$w}]} {$i < [expr {($n+1)*$w}]} {incr i} {
-            lappend r [list float [lindex $@data $i]]
-        }
-        pd::outlet $self 0 list $r
-    }
-
-    0_getcol {
-        set r [list]
-        set n [pd::arg 0 int]
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        for {set i [expr {$n}]} {$i < [expr {$w*$h}]} {incr i $w} {
-            lappend r [list float [lindex $@data $i]]
-        }
-        pd::outlet $self 0 list $r
-    }
-
-    0_getcell {
-        set r [pd::arg 0 int]
-        set c [pd::arg 1 int]
-        set w [dict get $@config -uwidth]
-        pd::outlet $self 0 float [lindex $@data [expr {$r*$w+$c}]]
-    }
-
-    0_setrow {
-        set row [pd::arg 0 int]
-        set z 1
-        set col 0
-        set w [dict get $@config -uwidth]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        for {set idx [expr {$row*$w}]} {$idx < [expr {($row+1)*$w}]} {incr idx} {
-            set d [expr {0!=[pd::arg $z int]}]
-            lset @data $idx $d
-            sys_gui [list $@c itemconfigure cell_${col}_${row}_$self \
-                -fill [lindex $colors $d]]\n
-            incr z
-            incr col
-        }
-    }
-
-    0_setcol {
-        set col [pd::arg 0 int]
-        set z 1
-        set row 0
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        for {set idx [expr {$col}]} {$idx < [expr {$w*$h}]} {incr idx $w} {
-            set d [expr {0!=[pd::arg $z int]}]
-            lset @data $idx $d
-            sys_gui [list $@c itemconfigure cell_${col}_${row}_$self \
-                -fill [lindex $colors $d]]\n
-            incr z
-            incr row
-        }
-    }
-
-    0_setcell {
-        set r [pd::arg 0 int]
-        set c [pd::arg 1 int]
-        set d [expr {0!=[pd::arg 2 int]}]
-        set w [dict get $@config -uwidth]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        set idx [expr {$r*$w+$c}]
-        lset @data $idx $d
-        sys_gui [list $@c itemconfigure cell_${r}_${c}_$self \
-            -fill [lindex $colors $d]]\n
-    }
-
-    0_setdata {
-        set d [pd::strip_selectors $args]
-        set l [llength $d]
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        if {$l != $w*$h} {
-            return -code error "bad data size"
-        }
-        set @data [list]
-        foreach i $d {lappend @data [expr {int($i)}]}
-        if {$@rcvLoadData != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] [gensym $@rcvLoadData]
-            set @rcvLoadData {}
-        }
-    }
-
-    object_save {
-        return [list #X obj $@x $@y bitmap {*}[pd::add_empty $@config] \; \
-            \#bitmap setdata {*}$@data \; ]
-    }
-
-    object_properties {
-        set title "\[bitmap\] properties"
-        set x_xobj_obpd [tclpd_get_object_pd $self]
-        set x [tclpd_get_instance $self]
-        set buf [list propertieswindow %s $@config $title]\n
-        gfxstub_new $x_xobj_obpd $x $buf
-    }
-
-    widgetbehavior_getrect {
-        lassign $args x1 y1
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set sz [dict get $@config -cellsize]
-        set x2 [expr {1+$x1+$w*$sz}]
-        set y2 [expr {1+$y1+$h*$sz}]
-        return [list $x1 $y1 $x2 $y2]
-    }
-
-    widgetbehavior_displace {
-        set dx [lindex $args 0]
-        set dy [lindex $args 1]
-        if {$dx != 0 || $dy != 0} {
-            incr @x $dx
-            incr @y $dy
-            sys_gui [list $@c move $self $dx $dy]\n
-        }
-        return [list $@x $@y]
-    }
-
-    widgetbehavior_select {
-        set sel [lindex $args 0]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set selcolor "blue"
-        set colors [list $selcolor $fgcolor]
-        sys_gui [list $@c itemconfigure $self \
-            -outline [lindex $colors $sel]]\n
-    }
-
-    widgetbehavior_activate {
-    }
-
-    widgetbehavior_vis {
-        set @c [lindex $args 0]
-        set @x [lindex $args 1]
-        set @y [lindex $args 2]
-        set vis [lindex $args 3]
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set sz [dict get $@config -cellsize]
-        if {$vis} {
-            sys_gui [list bitmap_draw_new $self $@c $@x $@y $@config $@data]\n
-        } else {
-            sys_gui [list $@c delete $self]\n
-        }
-    }
-
-    widgetbehavior_click {
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set sz [dict get $@config -cellsize]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        set xpix [expr {[lindex $args 0]-$@x-1}]
-        set ypix [expr {[lindex $args 1]-$@y-1}]
-        if {$xpix < 0 || $xpix >= $w*$sz} {return}
-        if {$ypix < 0 || $ypix >= $h*$sz} {return}
-        set shift [lindex $args 2]
-        set alt [lindex $args 3]
-        set dbl [lindex $args 4]
-        set doit [lindex $args 5]
-        if {$doit} {
-            set j [expr {$xpix/$sz}]
-            set i [expr {$ypix/$sz}]
-            set idx [expr {$w*${i}+${j}}]
-            set d [expr {[lindex $@data $idx]==0}]
-            lset @data $idx $d
-            sys_gui [list $@c itemconfigure cell_${j}_${i}_$self \
-                -fill [lindex $colors $d]]\n
-        }
-    }
-}
diff --git a/externals/tclpd/colorpicker.tcl b/externals/tclpd/colorpicker.tcl
deleted file mode 100644
index 0c433cb7d4940570aef52d3d64bb47e91bb44287..0000000000000000000000000000000000000000
--- a/externals/tclpd/colorpicker.tcl
+++ /dev/null
@@ -1,281 +0,0 @@
-if {[info exists ::colorpicker::version]} {return}
-namespace eval ::colorpicker {
-    namespace export colorpicker
-    # =========================================
-    # colorpicker
-    set version 0.1
-    # (C) 2009 - Federico Ferri
-    # mescalinum (at) gmail (dot) com
-    #
-    # Released under GPL-3 license:
-    # http://www.gnu.org/licenses/gpl-3.0.html
-    # =========================================
-    package provide colorpicker $version
-
-    variable presets {
-        ffffff dfdfdf bbbbbb ffc7c6 ffe3c6
-        feffc6 c6ffc7 c6feff c7c6ff e3c6ff
-        9f9f9f 7c7c7c 606060 ff0400 ff8300
-        faff00 00ff04 00faff 0400ff 9c00ff
-        404040 202020 000000 551312 553512
-        535512 0f4710 0e4345 131255 2f004d
-    }
-
-    proc colorpicker {w mode args} {
-        variable {}
-        set modes {switches hsv}
-        if {[lsearch -exact $modes $mode] == -1} {
-            error "bad mode: $mode. must be one of: $modes."
-        }
-        set ($w:mode) $mode
-        set ($w:color) "#000000"
-        set ($w:command) {}
-        set ($w:textvar) {}
-        frame $w
-        init_$mode $w
-        rename $w ::colorpicker::_$w
-        interp alias {} $w {} ::colorpicker::dispatch $w
-        if {$args != {}} {uplevel 1 ::colorpicker::config $w $args}
-        return $w
-    }
-
-    proc dispatch {w cmd args} {
-        variable {}
-        switch -glob -- $cmd {
-            get {set ($w:color)}
-            set {uplevel 1 [linsert $args 0 ::colorpicker::set_color_ext $w]}
-            con* {uplevel 1 [linsert $args 0 ::colorpicker::config $w]}
-            default {uplevel 1 [linsert $args 0 ::colorpicker::_$w $cmd]}
-        }
-    }
-
-    proc config {w args} {
-        variable {}
-        set options {}
-        set flag 0
-        foreach {key value} $args {
-            switch -glob -- $key {
-                -com* {
-                    set ($w:command) $value
-                    set flag 1
-                }
-                -textvar* {
-                    set ($w:textvar) $value
-                    set flag 1
-                }
-                default { lappend options $key $value }
-            }
-        }
-        if {!$flag || $options != ""} {
-            uplevel 1 [linsert $options 0 ::scrolledframe::_$w config]
-        }
-    }
-
-    proc set_color_ext {w c} {
-        # called by the widget public method
-        variable {}
-        set c [string tolower $c]
-        if {![regexp {^#[0-9a-f]{6,6}$} $c]} {
-            error "Invalid color: $c. Specify a color in the format #HHHHHH"
-        }
-        switch -exact -- $($w:mode) {
-            switches {
-                set_color $w $c
-            }
-            hsv {
-                set r [expr 0x[string range $c 1 2]]
-                set g [expr 0x[string range $c 3 4]]
-                set b [expr 0x[string range $c 5 6]]
-                set hsv [rgbToHsv $r $g $b]
-                hsv_set $w h [lindex $hsv 0]
-                hsv_set $w s [lindex $hsv 1]
-                hsv_set $w v [lindex $hsv 2]
-                set_color $w $c
-            }
-        }
-    }
-
-    proc set_color {w c} {
-        # called internally in reaction to events
-        variable {}
-        set c [string tolower $c]
-        set ($w:color) $c
-        if {$($w:command) != {}} {
-            set cmd $($w:command)
-            lappend cmd $c
-            uplevel #0 $cmd
-        }
-        if {$($w:textvar) != {}} {
-            uplevel #0 [list set $($w:textvar) $c]
-        }
-        switch -exact -- $($w:mode) {
-            switches {
-                variable presets
-                set q 0
-                for {set row 0} {$row < 3} {incr row} {
-                    for {set col 0} {$col < 10} {incr col} {
-                        set b [expr {$c == "#[lindex $presets $q]"}]
-                        ${w}.r${row}c${col} configure \
-                            -relief [lindex {raised sunken} $b]
-                        incr q
-                    }
-                }
-            }
-            hsv {
-            }
-        }
-    }
-
-    proc mkColor {rgb} {
-        set r [lindex $rgb 0]; set g [lindex $rgb 1]; set b [lindex $rgb 2]
-        if {$r < 0} {set r 0} elseif {$r > 255} {set r 255}
-        if {$g < 0} {set g 0} elseif {$g > 255} {set g 255}
-        if {$b < 0} {set b 0} elseif {$b > 255} {set b 255}
-        return #[format "%2.2x%2.2x%2.2x" $r $g $b]
-    }
-
-    proc rgbToHsv {r g b} {
-        set sorted [lsort -real [list $r $g $b]]
-        set temp [lindex $sorted 0]
-        set v [lindex $sorted 2]
-        set value $v
-        set bottom [expr {$v-$temp}]
-        if {$bottom == 0} {
-            set hue 0
-            set saturation 0
-            set value $v
-        } else {
-            if {$v == $r} {
-                set top [expr {$g-$b}]
-                if {$g >= $b} {
-                    set angle 0
-                } else {
-                    set angle 360
-                }
-            } elseif {$v == $g} {
-                set top [expr {$b-$r}]
-                set angle 120
-            } elseif {$v == $b} {
-                set top [expr {$r-$g}]
-                set angle 240
-            }
-            set hue [expr {round(60*(double($top)/$bottom)+$angle)}]
-        }
-        if {$v == 0} {
-            set saturation 0
-        } else {
-            set saturation [expr {round(255-255*(double($temp)/$v))}]
-        }
-        return [list $hue $saturation $value]
-    }
-
-    proc hsvToRgb {h s v} {
-        set hi [expr {int(double($h)/60)%6}]
-        set f [expr {double($h)/60-$hi}]
-        set s [expr {double($s)/255}]
-        set v [expr {double($v)/255}]
-        set p [expr {double($v)*(1-$s)}]
-        set q [expr {double($v)*(1-$f*$s)}]
-        set t [expr {double($v)*(1-(1-$f)*$s)}]
-        switch -- $hi {
-            0 {set r $v; set g $t; set b $p}
-            1 {set r $q; set g $v; set b $p}
-            2 {set r $p; set g $v; set b $t}
-            3 {set r $p; set g $q; set b $v}
-            4 {set r $t; set g $p; set b $v}
-            5 {set r $v; set g $p; set b $q}
-            default {error "[lindex [info level 0] 0]: bad H value"}
-        }
-        set r [expr {round($r*255)}]
-        set g [expr {round($g*255)}]
-        set b [expr {round($b*255)}]
-        return [list $r $g $b]
-    }
-
-    proc init_switches {w} {
-        variable {}
-        variable presets
-        set q 0
-        for {set row 0} {$row < 3} {incr row} {
-            for {set col 0} {$col < 10} {incr col} {
-                set c "#[lindex $presets $q]"
-                set b [expr {$($w:color) == $c}]
-                grid [frame ${w}.r${row}c${col} -width 18 -height 16 \
-                    -borderwidth 1 -relief [lindex {raised sunken} $b] \
-                    -background $c -highlightthickness 0] \
-                    -row $row -column $col
-                bind ${w}.r${row}c${col} <ButtonPress-1> \
-                    "[namespace current]::set_color $w $c"
-                incr q
-            }
-        }
-    }
-
-    proc init_hsv {w} {
-        variable colorhsv
-        set colorhsv($w:h) 0
-        set colorhsv($w:s) 255
-        set colorhsv($w:v) 255
-        grid [canvas ${w}.hue -width 130 -height 15 -borderwidth 1 \
-            -relief sunken -highlightthickness 0] -column 0 -row 0
-        grid [canvas ${w}.sat -width 130 -height 14 -borderwidth 1 \
-            -relief sunken -highlightthickness 0] -column 0 -row 1
-        grid [canvas ${w}.val -width 130 -height 14 -borderwidth 1 \
-            -relief sunken -highlightthickness 0] -column 0 -row 2
-        grid [canvas ${w}.test -width 46 -height 46 -borderwidth 1 \
-            -relief sunken -highlightthickness 0 -background red] \
-            -column 1 -row 0 -rowspan 3
-        variable mh
-        variable ms
-        variable mv
-        set mh($w) 0; set ms($w) 0; set mv($w) 0;
-        set sh "[namespace current]::hsv_set $w h \[expr {%x*360.0/130.0}\]"
-        set ss "[namespace current]::hsv_set $w s \[expr {%x*255.0/130.0}\]"
-        set sv "[namespace current]::hsv_set $w v \[expr {%x*255.0/130.0}\]"
-        bind ${w}.hue <ButtonPress-1> "set [namespace current]::mh($w) 1; $sh"
-        bind ${w}.sat <ButtonPress-1> "set [namespace current]::ms($w) 1; $ss"
-        bind ${w}.val <ButtonPress-1> "set [namespace current]::mv($w) 1; $sv"
-        bind ${w}.hue <ButtonRelease-1> "set [namespace current]::mh($w) 0"
-        bind ${w}.sat <ButtonRelease-1> "set [namespace current]::ms($w) 0"
-        bind ${w}.val <ButtonRelease-1> "set [namespace current]::mv($w) 0"
-        bind ${w}.hue <Motion> "if {\$[namespace current]::mh($w)} {$sh}"
-        bind ${w}.sat <Motion> "if {\$[namespace current]::ms($w)} {$ss}"
-        bind ${w}.val <Motion> "if {\$[namespace current]::mv($w)} {$sv}"
-        for {set x 0} {$x < 130} {incr x 3} {
-            set c [mkColor [hsvToRgb [expr {$x*360.0/130.0}] 255 255]]
-            ${w}.hue create rectangle $x 0 [expr {4+$x}] 16 -fill $c -outline {}
-        }
-        hsv_regen $w $colorhsv($w:h)
-    }
-
-    proc hsv_regen {w hue} {
-        ${w}.sat delete all
-        ${w}.val delete all
-        for {set x 0} {$x < 130} {incr x 3} {
-            set x1 [expr {$x*255.0/130.0}]
-            set c1 [mkColor [hsvToRgb $hue $x1 255]]
-            set c2 [mkColor [hsvToRgb $hue 255 $x1]]
-            ${w}.sat create rectangle $x 0 [expr {4+$x}] 16 \
-            -fill $c1 -outline {}
-            ${w}.val create rectangle $x 0 [expr {4+$x}] 16 \
-            -fill $c2 -outline {}
-        }
-    }
-
-    proc hsv_set {w what val} {
-        variable colorhsv
-        if {$what != {h} && $what != {s} && $what != {v}} {return}
-        set colorhsv($w:$what) $val
-        if {$colorhsv($w:$what) < 0.0} {set colorhsv($w:$what) 0}
-        if {$what == {h}} {
-            if {$colorhsv($w:$what) >= 360.0} {set colorhsv($w:$what) 0}
-            hsv_regen $w $colorhsv($w:$what)
-        } else {
-            if {$colorhsv($w:$what) > 255.0} {set colorhsv($w:$what) 255}
-        }
-        set c [mkColor [hsvToRgb \
-            $colorhsv($w:h) $colorhsv($w:s) $colorhsv($w:v)]]
-        ${w}.test configure -background $c
-        set_color $w $c
-    }
-}
diff --git a/externals/tclpd/dynreceive-help.pd b/externals/tclpd/dynreceive-help.pd
deleted file mode 100644
index 88a5568f40598bd42f5b1701eb561525bf07584e..0000000000000000000000000000000000000000
--- a/externals/tclpd/dynreceive-help.pd
+++ /dev/null
@@ -1,22 +0,0 @@
-#N canvas 416 120 513 409 10;
-#X obj 141 168 s \$0.foo;
-#X msg 46 120 bar baz;
-#X obj 60 320 dynreceive \$0.foo;
-#X floatatom 122 123 5 0 0 0 - - -;
-#X symbolatom 177 125 10 0 0 0 - - -;
-#X obj 267 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 43 86 1) send some symbols:;
-#X text 45 240 2) try to change the receive symbol:;
-#X msg 60 287 set xyz;
-#X msg 312 306 \; xyz 1 2 3;
-#X obj 60 350 print out;
-#X text 39 23 Works like [receive] \, but allows to dynamically set
-(or clear) the receive symbol.;
-#X text 139 288 <--;
-#X connect 1 0 0 0;
-#X connect 2 0 10 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 8 0 2 0;
diff --git a/externals/tclpd/dynreceive.tcl b/externals/tclpd/dynreceive.tcl
deleted file mode 100644
index 8a269f7a36278f497fe33a844d41a68de441aabc..0000000000000000000000000000000000000000
--- a/externals/tclpd/dynreceive.tcl
+++ /dev/null
@@ -1,53 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-pd::class dynreceive {
-    constructor {
-        set @sym {}
-        if {[pd::args] > 0} {
-            set @sym [pd::arg 0 symbol]
-            pd_bind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-        pd::add_outlet $self
-    }
-
-    destructor {
-        # don't forget to call pd_unbind, or sending things to a symbol
-        # bound to dead object will crash pd!
-        if {$@sym != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-    }
-
-    0_set {
-        # send [set empty( to clear the receive symbol
-        set s [pd::arg 0 symbol]
-        if {$@sym != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-        if {$s == {empty}} {
-            set @sym {}
-        } else {
-            set @sym $s
-            pd_bind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-    }
-
-    0_bang {
-        pd::outlet $self 0 bang
-    }
-
-    0_float {
-        pd::outlet $self 0 float [pd::arg 0 float]
-    }
-
-    0_symbol {
-        pd::outlet $self 0 symbol [gensym [pd::arg 0 symbol]]
-    }
-
-    0_anything {
-        set sel [pd::arg 0 symbol]
-        set argz [lrange $args 1 end]
-        pd::outlet $self 0 $sel $argz
-    }
-}
diff --git a/externals/tclpd/dynroute-help.pd b/externals/tclpd/dynroute-help.pd
deleted file mode 100644
index 86d173ea1d4c136ae555271ed781b04379cc90be..0000000000000000000000000000000000000000
--- a/externals/tclpd/dynroute-help.pd
+++ /dev/null
@@ -1,26 +0,0 @@
-#N canvas 1022 530 786 430 10;
-#X obj 93 268 dynroute 4;
-#X msg 41 147 apple red \, banana yellow \, pear green \, apple yellow
-\, strawberry red;
-#X obj 41 194 list prepend;
-#X msg 200 224 clear \, add apple 0 \, add banana 1 \, add pear 2;
-#X msg 206 258 remove pear 2 \, add pear 0 \, add strawberry 2;
-#X text 39 32 Dynamically route lists based on first element \, according
-to the mapping specified on right inlet. Creation argument (float)
-specifies how many outlet to have (including last outlet \, which is
-used for sending unmatching items);
-#X text 44 120 Test it with some data:;
-#X obj 93 379 print out1;
-#X obj 115 352 print out2;
-#X obj 137 325 print out3;
-#X obj 160 298 print other;
-#X text 256 293 <-- non-matching stuff is sent here;
-#X text 196 192 Change the mapping:;
-#X connect 0 0 7 0;
-#X connect 0 1 8 0;
-#X connect 0 2 9 0;
-#X connect 0 3 10 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 1;
-#X connect 4 0 0 1;
diff --git a/externals/tclpd/dynroute.tcl b/externals/tclpd/dynroute.tcl
deleted file mode 100644
index 2309ac74fe2489572d0402ef9850eff79c89e3c0..0000000000000000000000000000000000000000
--- a/externals/tclpd/dynroute.tcl
+++ /dev/null
@@ -1,57 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-# dynroute: dynamically route messages based on first element
-# non-matching arguments are sent to last inlet
-# constructor: <float>   specify the number of outlets (default: 1)
-# send commands to the right inlet
-# available commands:
-# add <atom> <float>     route selector <atom> to output number <float>
-# remove <atom> <float>  remove previously created routing
-# clear
-
-pd::class dynroute {
-    constructor {
-        pd::add_inlet $self list
-
-        set @num_outlets [pd::arg 0 int]
-        if {$@num_outlets < 0} {set @num_outlets 2}
-
-        for {set i 0} {$i < $@num_outlets} {incr i} {
-            pd::add_outlet $self list
-        }
-
-        set @routing {}
-    }
-
-    0_list {
-        set sel [pd::arg 0 any]
-        set out [expr {$@num_outlets-1}]
-        catch {set out [dict get $@routing $sel]}
-        pd::outlet $self $out list $args
-    }
-
-    1_add {
-        set sel [pd::arg 0 any]
-        set out [pd::arg 1 int]
-        if {$out < 0 || $out >= $@num_outlets} {
-            pd::post "error: add: outlet number out of range"
-            return
-        }
-        dict set @routing $sel $out
-    }
-
-    1_remove {
-        set sel [pd::arg 0 any]
-        set out [pd::arg 1 int]
-        if {$out < 0 || $out >= $@num_outlets} {
-            pd::post "error: add: outlet number out of range"
-            return
-        }
-        catch {dict unset @routing $sel $out}
-    }
-
-    1_clear {
-        set @routing {}
-    }
-}
diff --git a/externals/tclpd/list_change-help.pd b/externals/tclpd/list_change-help.pd
deleted file mode 100644
index 430b23d08ee74b32998d4f5386407180b1e85f0f..0000000000000000000000000000000000000000
--- a/externals/tclpd/list_change-help.pd
+++ /dev/null
@@ -1,21 +0,0 @@
-#N canvas 617 384 635 406 10;
-#X obj 54 240 list_change;
-#X text 144 236 right inlet sets internal value without output anything
-;
-#X obj 71 271 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 54 309 print;
-#X text 33 21 Outputs its input (a list) only when it changes. You
-can set the current value using the right inlet \, or bang to force
-output;
-#X msg 117 201 list foo bar;
-#X msg 69 140 list foo bar;
-#X msg 77 163 list bar baz;
-#X msg 54 104 bang;
-#X text 98 103 output current value;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 5 0 0 1;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
diff --git a/externals/tclpd/list_change.tcl b/externals/tclpd/list_change.tcl
deleted file mode 100644
index 2c70937829bae1780e59ce9576556467431e5540..0000000000000000000000000000000000000000
--- a/externals/tclpd/list_change.tcl
+++ /dev/null
@@ -1,31 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-pd::class list_change {
-    constructor {
-        # add second inlet (first created by default)
-        pd::add_inlet $self list
-
-        # add outlet
-        pd::add_outlet $self list
-
-        set @curlist {}
-    }
-
-    0_list {
-        # HOT inlet
-        if {$args != $@curlist} {
-            set @curlist $args
-            pd::outlet $self 0 list $@curlist
-        }
-    }
-
-    0_bang {
-        pd::outlet $self 0 list $@curlist
-    }
-
-    1_list {
-        # COLD inlet
-        set @curlist $args
-    }
-}
diff --git a/externals/tclpd/pdlib.tcl b/externals/tclpd/pdlib.tcl
deleted file mode 100644
index b50479b8e4d899062251f8edc5c2c9c58028a309..0000000000000000000000000000000000000000
--- a/externals/tclpd/pdlib.tcl
+++ /dev/null
@@ -1,257 +0,0 @@
-# TCL objectized library for PD api
-# by Federico Ferri <mescalinum@gmail.com> - (C) 2007-2009
-
-package provide TclpdLib 0.17
-
-package require Tcl 8.5
-
-set verbose 0
-
-namespace eval ::pd {
-    proc error_msg {m} {
-        return "pdlib: [uplevel {lindex [info level 0] 0}]: error: $m"
-    }
-
-    proc add_inlet {self sel} {
-        if $::verbose {post [info level 0]}
-        variable _
-        tclpd_add_proxyinlet [tclpd_get_instance $self]
-    }
-
-    proc add_outlet {self {sel {}}} {
-        if $::verbose {post [info level 0]}
-        variable _
-        if {$sel == {}} {
-            set o [outlet_new [tclpd_get_object $self] [null_symbol]]
-        } else {
-            if {[lsearch -exact {bang float list symbol} $sel] == -1} {
-                return -code error [error_msg "unsupported selector: $sel"]
-            }
-            set o [outlet_new [tclpd_get_object $self] [gensym $sel]]
-        }
-        lappend _($self:x_outlet) $o
-        return $o
-    }
-
-    # used inside class for outputting some value
-    proc outlet {self n sel args} {
-        if $::verbose {post [info level 0]}
-        variable _
-        set outlet [lindex $_($self:x_outlet) $n]
-        switch -- $sel {
-            float {
-                set v [lindex $args 0]
-                outlet_float $outlet $v
-            }
-            symbol {
-                set v [lindex $args 0]
-                outlet_symbol $outlet $v
-            }
-            list {
-                set v [lindex $args 0]
-                set sz [llength $v]
-                set aa [new_atom_array $sz]
-                for {set i 0} {$i < $sz} {incr i} {
-                    set_atom_array $aa $i [lindex $v $i]
-                }
-                outlet_list $outlet [gensym "list"] $sz $aa
-                delete_atom_array $aa $sz
-            }
-            bang {
-                outlet_bang $outlet
-            }
-            default {
-                set v [lindex $args 0]
-                set sz [llength $v]
-                set aa [new_atom_array $sz]
-                for {set i 0} {$i < $sz} {incr i} {
-                    set_atom_array $aa $i [lindex $v $i]
-                }
-                outlet_anything $outlet [gensym $sel] $sz $aa
-                delete_atom_array $aa $sz
-            }
-        }
-    }
-
-    # used internally (from dispatcher) to call a class method
-    proc call_classmethod {classname self inlet sel args} {
-        if $::verbose {post [info level 0]}
-        set m_sel "::${classname}_${inlet}_${sel}"
-        if {[llength [info commands $m_sel]] > 0} {
-            return [$m_sel $self {*}$args]
-        }
-        set m_any "::${classname}_${inlet}_anything"
-        if {[llength [info commands $m_any]] > 0} {
-            return [$m_any $self [list symbol $sel] {*}$args]
-        }
-        post "Tcl class $classname: inlet $inlet: no such method: $sel"
-    }
-
-    proc read_class_definition {classname def} {
-        set patchable_flag 1
-        set noinlet_flag 0
-
-        proc ::${classname}_object_save {self args} {return ""}
-
-        foreach {id arg} $def {
-            switch -- $id {
-                patchable {
-                    if {$arg != 0 && $arg != 1} {
-                        return -code error [error_msg "patchable must be 0/1"]
-                    }
-                    set patchable_flag $arg
-                }
-                noinlet {
-                    if {$arg != 0 && $arg != 1} {
-                        return -code error [error_msg "noinlet must be 0/1"]
-                    }
-                    set noinlet_flag $arg
-                }
-                default {
-                    proc ::${classname}_${id} {self args} [concat "global _;" [regsub -all @(\\\$?\[\\w\\?\]+) $arg _(\$self:\\1)]]
-                }
-            }
-        }
-
-        # class level dispatcher (sort of class constructor)
-        proc ::$classname {self args} "
-            if \$::verbose {::pd::post \[info level 0\]}
-            # define object dispatcher:
-            proc ::\$self {inlet selector args} \"
-             if \\\$::verbose {::pd::post \\\[info level 0\\\]}
-             ::pd::call_classmethod $classname \$self \\\$inlet \\\$selector {*}\\\$args
-            \"
-            # call constructor:
-            ::${classname}_constructor \$self {*}\$args
-            return \$self
-        "
-
-        # TODO: c->c_gobj = (typeflag >= CLASS_GOBJ)
-        set flag [expr {
-            8 * ($noinlet_flag != 0) +
-            3 * ($patchable_flag != 0)
-        }]
-
-        return $flag
-    }
-
-    # this handles the pd::class definition
-    proc class {classname def} {
-        if $::verbose {post [lrange [info level 0] 0 end-1]}
-
-        set flag [read_class_definition $classname $def]
-
-        # this wraps the call to class_new()
-        tclpd_class_new $classname $flag
-    }
-
-    proc guiclass {classname def} {
-        if $::verbose {post [lrange [info level 0] 0 end-1]}
-
-        set flag [read_class_definition $classname $def]
-
-        # this wraps the call to class_new()
-        tclpd_guiclass_new $classname $flag
-    }
-
-    # wrapper to post() withouth vargs
-    proc post {args} {
-        poststring2 [concat {*}$args]
-    }
-
-    proc args {} {
-        return [uplevel 1 "llength \$args"]
-    }
-
-    proc arg {n {assertion any}} {
-        upvar 1 args up_args
-        set up_args_len [llength $up_args]
-        if {$n < 0 || $n >= $up_args_len} {
-            return -code error "fatal: argument $n out of range"
-        }
-        set v [lindex $up_args $n]
-        set i 0
-        if {[llength $v] != 2} {
-            return -code error "fatal: malformed atom: $v (full args: $up_args)"
-        }
-        foreach {selector value} $v {break}
-        if {$assertion == {int}} {
-            set assertion {float}
-            set i 1
-        }
-        if {$assertion != {any}} {
-            if {$selector != $assertion} {
-                return -code error "arg #$n is $selector, must be $assertion"
-            }
-        }
-        if {$assertion == {float} && $i && $value != int($value)} {
-            return -code error "arg #$n is float, must be int"
-        }
-        if {$assertion == {float} && $i} {
-            return [expr {int($value)}]
-        } else {
-            return $value
-        }
-    }
-
-    proc default_arg {n assertion defval} {
-        if {$n < [uplevel "pd::args"]} {
-            return [uplevel "pd::arg $n $assertion"]
-        } else {
-            return $defval
-        }
-    }
-
-    proc strip_selectors {pdlist} {
-        set r {}
-        foreach atom $pdlist {
-            if {[llength $atom] != 2} {
-                return -code error "Malformed pd list!"
-            }
-            lappend r [lindex $atom 1]
-        }
-        return $r
-    }
-
-    proc add_selectors {tcllist} {
-        set r {}
-        foreach i $tcllist {
-            lappend r [list [lindex {float symbol} [catch {expr $i}]] $i]
-        }
-        return $r
-    }
-
-    proc strip_empty {tcllist} {
-        set r {}
-        foreach i $tcllist {
-            if {$i == "empty"} {lappend r {}} {lappend r $i}
-        }
-        return $r
-    }
-
-    proc add_empty {tcllist} {
-        set r {}
-        foreach i $tcllist {
-            if {$i == {}} {lappend r "empty"} {lappend r $i}
-        }
-        return $r
-    }
-
-    # mechanism for uploading procs to gui interp, without the hassle of escaping [encoder]
-    proc guiproc {name argz body} {
-        # upload the decoder
-        sys_gui "proc guiproc {name argz body} {set map {}; for {set i 0} {\$i < 256} {incr i} {lappend map %\[format %02x \$i\] \[format %c \$i\]}; foreach x {name argz body} {set \$x \[string map \$map \[set \$x\]\]}; uplevel \[list proc \$name \$argz \$body\]}\n"
-        # build the mapping
-        set map {}
-        for {set i 0} {$i < 256} {incr i} {
-            set chr [format %c $i]
-            set hex [format %02x $i]
-            if {[regexp {[^A-Za-z0-9]} $chr]} {lappend map $chr %$hex}
-        }
-        # encode data
-        foreach x {name argz body} {set $x [string map $map [set $x]]}
-        # upload proc
-        sys_gui "guiproc $name $argz $body\n"
-    }
-}
-
diff --git a/externals/tclpd/pkgIndex.tcl b/externals/tclpd/pkgIndex.tcl
deleted file mode 100644
index f460393756739e25b756e4e3c24b27bf4652067a..0000000000000000000000000000000000000000
--- a/externals/tclpd/pkgIndex.tcl
+++ /dev/null
@@ -1 +0,0 @@
-package ifneeded TclpdLib 0.17 [list source [file join $TCLPD_DIR pdlib.tcl]]
diff --git a/externals/tclpd/properties.tcl b/externals/tclpd/properties.tcl
deleted file mode 100644
index 3788c5bae7f3962741d6aa3bae13e821449bb064..0000000000000000000000000000000000000000
--- a/externals/tclpd/properties.tcl
+++ /dev/null
@@ -1,423 +0,0 @@
-if {[catch {package require colorpicker}]} {
-    source [file join [file dirname [info script]] colorpicker.tcl]
-    package require colorpicker
-}
-namespace import ::colorpicker::colorpicker
-
-proc propertieswindow {gfxstub_id {options {}} {title {}}} {
-    set win $gfxstub_id
-    set ::id($win.p) $gfxstub_id
-    set ::optkeys($win.p) [list]
-    foreach {k v} $options {
-        set ::config($win.p:$k) $v
-        lappend ::optkeys($win.p) $k
-    }
-    toplevel $win -class [winfo class .]
-    pack [propertiespanel $win.p]
-    wm resizable $win 0 0
-    wm title $win $title
-    set win
-}
-
-proc has_key {w key} {
-    expr {[lsearch -exact $::optkeys($w) $key] != -1}
-}
-
-proc propertiespanel {w} {
-    set pad [propertiespanel_padding $w]
-    incr pad $pad
-    frame $w -borderwidth 0 -relief raised -padx $pad -pady $pad
-    set subpanels {dimensions output behavior connective label colors}
-    foreach subpanel $subpanels {
-        set x [propertiespanel_$subpanel $w]
-        if {$x != {}} {grid $x -sticky ew -in $w}
-    }
-    set x [propertiespanel_buttons $w]
-    grid $x -in $w
-    grid columnconfigure . 0 -weight 1
-    set w
-}
-
-proc propertiespanel_padding {w} {
-    return 3
-}
-
-proc propertiespanel_dimensions {w} {
-    set x ${w}.dimensions
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Dimensions:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0; set col 0
-    if {[has_key $w -width]} {
-        grid [label ${x}.wl -text "Width (px):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.w -textvar ::config($w:-width) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -height]} {
-        grid [label ${x}.hl -text "Height (px):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.h -textvar ::config($w:-height) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -uwidth]} {
-        grid [label ${x}.uwl -text "Width (cells):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uw -textvar ::config($w:-uwidth) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -uheight]} {
-        grid [label ${x}.uhl -text "Height (cells):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uh -textvar ::config($w:-uheight) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -cellsize]} {
-        grid [label ${x}.csl -text "Cell size (pixels):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.cs -textvar ::config($w:-cellsize) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -cellwidth]} {
-        grid [label ${x}.uwl -text "Cell width:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uw -textvar ::config($w:-cellwidth) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -cellheight]} {
-        grid [label ${x}.uhl -text "Cell height:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uh -textvar ::config($w:-cellheight) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_output {w} {
-    set x ${w}.output
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Output range:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0; set col 0
-    if {[has_key $w -rangebottom]} {
-        grid [label ${x}.rbl -text "Bottom:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rb -textvar ::config($w:-rangebottom) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -rangetop]} {
-        grid [label ${x}.rtl -text "Top:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rt -textvar ::config($w:-rangetop) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -rangeleft]} {
-        grid [label ${x}.rll -text "Left:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rl -textvar ::config($w:-rangeleft) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -rangeright]} {
-        grid [label ${x}.rrl -text "Right:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rr -textvar ::config($w:-rangeright) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -rangemin]} {
-        grid [label ${x}.rml -text "Min:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rm -textvar ::config($w:-rangemin) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -rangemax]} {
-        grid [label ${x}.rMl -text "Max:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rM -textvar ::config($w:-rangemax) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -logarithmic]} {
-        incr col
-        grid [checkbutton ${x}.rL -variable ::config($w:-logarithmic) \
-            -text "Logarithmic"] \
-            -row $row -column $col -columnspan 3 -sticky w -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_behavior {w} {
-    set x ${w}.behavior
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Widget behavior:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0; set col 0
-    if {[has_key $w -jumponclick]} {
-        grid [checkbutton ${x}.joc -variable ::config($w:-jumponclick) \
-            -text "Jump on click"] \
-            -row $row -column $col -sticky w -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -init]} {
-        grid [checkbutton ${x}.init -variable ::config($w:-init) \
-            -text "Output init value"] \
-            -row $row -column $col -sticky w -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_label {w} {
-    set x ${w}.label
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Label:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0
-    if {[has_key $w -label]} {
-        grid [label ${x}.ll -text "Text:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.l -textvar ::config($w:-label)] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        incr row
-        incr count
-    }
-    if {[has_key $w -labelpos]} {
-        grid [label ${x}.lpl -text "Position:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        frame ${x}.f
-        if {![info exists ::config($w:-labelpos)]} {
-            set ::config($w:-labelpos) top
-        }
-        grid [radiobutton ${x}.f.lp1 -variable ::config($w:-labelpos) \
-            -value top -text Top] \
-            -row 1 -column 1 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid [radiobutton ${x}.f.lp2 -variable ::config($w:-labelpos) \
-            -value bottom -text Bottom] \
-            -row 1 -column 2 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid [radiobutton ${x}.f.lp3 -variable ::config($w:-labelpos) \
-            -value left -text Left] \
-            -row 2 -column 1 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid [radiobutton ${x}.f.lp4 -variable ::config($w:-labelpos) \
-            -value right -text Right] \
-            -row 2 -column 2 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid ${x}.f -sticky w -row $row -column 1
-        incr row
-        incr count
-    }
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_connective {w} {
-    set x ${w}.connective
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Messages:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0
-    if {[has_key $w -sendsymbol]} {
-        grid [label ${x}.ssl -text "Send symbol:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.ss -textvar ::config($w:-sendsymbol) -width 15] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        incr row
-        incr count
-    }
-    if {[has_key $w -receivesymbol]} {
-        grid [label ${x}.rsl -text "Receive symbol:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.rs -textvar ::config($w:-receivesymbol) -width 15] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        incr row
-        incr count
-    }
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_colors {w} {
-    set colors {-bgcolor Background -fgcolor Foreground -lblcolor Label}
-    set x ${w}.colors
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Colors:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0
-    foreach {optkey color} $colors {
-        if {![has_key $w $optkey]} {continue}
-        grid [label ${x}.l$color -text "${color}:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.t$color -textvar ::config($w:$optkey) -width 8] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        grid [frame ${x}.p$color -width 20 -height 20 \
-            -borderwidth 1 -relief sunken] \
-            -row $row -column 2 -sticky ew -padx $pad -pady $pad
-        grid [button ${x}.b$color -text "Pick..." -overrelief {} \
-            -command {} \
-            ] -row $row -column 3 -sticky ew -padx $pad -pady $pad
-        bind ${x}.b$color <Enter> {break}
-        bind ${x}.b$color <Leave> {break}
-        bind ${x}.b$color <ButtonPress-1> [list \
-            propertiespanel_colors_pick \
-            $w $x $colors ${x}.b$color ${x}.p$color ${x}.t$color]
-        trace add variable ::config($w:$optkey) write [list \
-            propertiespanel_colors_set_wrap $w $x ${x}.p$color $optkey]
-        incr row
-        incr count
-    }
-    if {![info exists ::cpt($w)]} {set ::cpt($w) switches}
-    foreach {optkey color} $colors {
-        if {![has_key $w $optkey]} {continue}
-        # trigger the variable trace:
-        if {[info exists ::config($w:$optkey)]} {
-            set ::config($w:$optkey) $::config($w:$optkey)
-        }
-    }
-    if {$count == 0} {return {}}
-    frame ${x}.f
-    grid [radiobutton ${x}.f.cpt1 -variable ::cpt($w) -justify right \
-        -value switches -text Switches] \
-        -row 0 -column 0 -sticky ew -padx $pad -pady $pad
-    grid [radiobutton ${x}.f.cpt2 -variable ::cpt($w) -justify right \
-        -value hsv -text HSV] \
-        -row 1 -column 0 -sticky ew -padx $pad -pady $pad
-    grid ${x}.f -row $row -column 0
-    grid [colorpicker ${x}.cp2 hsv] \
-        -row $row -column 1 -columnspan 3 -sticky ew -padx $pad -pady $pad
-    grid [colorpicker ${x}.cp1 switches -command [list ${x}.cp2 set]] \
-        -row $row -column 1 -columnspan 3 -sticky ew -padx $pad -pady $pad
-    raise ${x}.cp1
-    trace add variable ::cpt($w) write \
-        [list propertiespanel_colors_switchpicker $w $x $row]
-    set x
-}
-
-proc propertiespanel_colors_set_wrap {w x wp optkey config_ idx op} {
-    propertiespanel_colors_set $w $x $wp {} -1 $::config($w:$optkey)
-}
-
-proc propertiespanel_colors_switchpicker {w x row cpt idx op} {
-    raise ${x}.cp[expr {1+($::cpt($w) == {hsv})}]
-}
-
-proc propertiespanel_colors_pick {w x colors wb wp wt} {
-    foreach {k color} $colors {
-        ${x}.b$color configure -relief raised -state normal
-    }
-    set r [$wb cget -relief]
-    if {$r == {sunken}} {
-        $wb configure -relief raised
-        ${x}.cp1 configure -command {}
-        ${x}.cp2 configure -command {}
-    } else {
-        $wb configure -relief sunken
-        ${x}.cp1 configure -command \
-            [list propertiespanel_colors_set $w $x $wp $wt 1]
-        ${x}.cp2 configure -command \
-            [list propertiespanel_colors_set $w $x $wp $wt 2]
-    }
-}
-
-proc propertiespanel_colors_set {w x wp wt from color} {
-    if {$wt != {}} {$wt delete 0 end ; $wt insert 0 $color}
-    $wp configure -background $color
-    if {$::cpt($w) == {switches} && $from == 1} {
-        ${x}.cp2 set $color
-    }
-}
-
-proc propertiespanel_buttons {w} {
-    set x ${w}.buttons
-    set pad [propertiespanel_padding $w]
-    frame $x -padx $pad -pady $pad
-    set col 0
-    foreach action {Cancel Apply Ok} {
-        grid [button ${x}.btn$action \
-            -command [list propertiespanel_buttons_action $w $action] \
-            -text $action] \
-            -row 0 -column $col -padx $pad -pady $pad
-        incr col
-    }
-    set x
-}
-
-proc propertiespanel_buttons_action {w action} {
-    switch -- $action {
-        Cancel {
-            propertiespanel_close $w
-        }
-        Apply {
-            propertiespanel_apply $w
-        }
-        Ok {
-            propertiespanel_apply $w
-            propertiespanel_close $w
-        }
-    }
-}
-
-proc propertiespanel_apply {w} {
-    set newconf [list]
-    foreach key $::optkeys($w) {
-        set v $::config($w:$key)
-        if {$v == ""} {set v "empty"}
-        lappend newconf $key $v
-    }
-    set newconf [string map {$ \\$} $newconf]
-    pd [linsert $newconf 0 $::id($w) config]\;
-}
-
-proc propertiespanel_close {w} {
-    pd [concat $::id($w) cancel \;]
-}
diff --git a/externals/tclpd/slider2-help.pd b/externals/tclpd/slider2-help.pd
deleted file mode 100644
index 1f36ace809b3437ce2168c43fc3bdddaa243c8d9..0000000000000000000000000000000000000000
--- a/externals/tclpd/slider2-help.pd
+++ /dev/null
@@ -1,51 +0,0 @@
-#N canvas 79 235 731 505 10;
-#X obj 343 150 slider2 -width 15 -height 130 -headsz 3 -rangebottom
-0 -rangetop 127 -init 0 -initvalue 94 -jumponclick 0 -label norm -labelpos
-top -orient vertical -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X obj 401 150 slider2 -width 15 -height 130 -headsz 3 -rangebottom
-127 -rangetop 0 -init 0 -initvalue 63 -jumponclick 0 -label rev -labelpos
-top -orient vertical -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X obj 522 154 slider2 -width 130 -height 15 -headsz 3 -rangebottom
-0 -rangetop 127 -init 0 -initvalue 95 -jumponclick 0 -label norm -labelpos
-top -orient horizontal -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X obj 522 213 slider2 -width 130 -height 15 -headsz 3 -rangebottom
-127 -rangetop 0 -init 0 -initvalue 70 -jumponclick 0 -label rev -labelpos
-top -orient horizontal -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X floatatom 343 295 5 0 0 0 - - -;
-#X floatatom 401 295 5 0 0 0 - - -;
-#X floatatom 522 177 5 0 0 0 - - -;
-#X floatatom 522 236 5 0 0 0 - - -;
-#X text 324 109 -orient vertical;
-#X text 523 111 -orient horizontal;
-#X text 321 61 Output range test:;
-#X obj 46 174 slider2 -width 15 -height 130 -headsz 3 -rangebottom
-0 -rangetop 127 -init 0 -initvalue 10 -jumponclick 0 -label empty -labelpos
-top -orient vertical -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X msg 46 143 config -orient vertical;
-#X msg 46 113 config -orient horizontal;
-#X floatatom 46 321 5 0 0 0 - - -;
-#X obj 159 358 slider2 -width 130 -height 15 -headsz 3 -rangebottom
-0 -rangetop 255 -init 0 -initvalue 202.795 -jumponclick 0 -label empty
--labelpos top -orient horizontal -sendsymbol \$0.sl-out -receivesymbol
-\$0.sl-in -fgcolor #000000 -bgcolor #20ca34 -lblcolor #000000;
-#X obj 45 358 r \$0.sl-out;
-#X obj 45 466 s \$0.sl-in;
-#X msg 45 439 config -bgcolor \$1;
-#X obj 45 412 makefilename #%6.6x;
-#X obj 45 385 expr (0x20 << 16) | ($f1 << 8) | (0xff - $f1);
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 3 0 7 0;
-#X connect 11 0 14 0;
-#X connect 12 0 11 0;
-#X connect 13 0 11 0;
-#X connect 16 0 20 0;
-#X connect 18 0 17 0;
-#X connect 19 0 18 0;
-#X connect 20 0 19 0;
diff --git a/externals/tclpd/slider2.tcl b/externals/tclpd/slider2.tcl
deleted file mode 100644
index ff4678a5605b612eed66b547441e096fa228d00e..0000000000000000000000000000000000000000
--- a/externals/tclpd/slider2.tcl
+++ /dev/null
@@ -1,273 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-set ::script_path [file dirname [info script]]
-
-pd::guiproc slider2_draw_new {self c x y config state} {
-    # import variables from dicts:
-    foreach v {headsz width height fgcolor bgcolor orient} \
-        {set $v [dict get $config -$v]}
-    set x2 [expr {$x+$width+1}]
-    set y2 [expr {$y+$height+1}]
-    $c create rectangle $x $y $x2 $y2 \
-        -outline $fgcolor -fill $bgcolor -tags [list $self border$self]
-    switch $orient {
-        horizontal {set y1 $y; set x3 [expr {$x+$headsz}]}
-        vertical {set y1 [expr {$y2-$headsz}]; set x3 $x2}
-    }
-    $c create rectangle $x $y1 $x3 $y2 -outline {} -fill $fgcolor \
-        -tags [list $self head$self]
-    slider2_update $self $c $x $y $config $state
-}
-
-pd::guiproc slider2_update {self c x y config state} {
-    # import variables from dicts:
-    foreach v {initvalue headsz width height label labelpos lblcolor orient} \
-        {set $v [dict get $config -$v]}
-    foreach v {min max rev} {set $v [dict get $state _$v]}
-    set realvalue [expr {1.0*($initvalue-$min)/($max-$min)}]
-    if {$realvalue < 0.0} {set realvalue 0}
-    if {$realvalue > 1.0} {set realvalue 1}
-    if {$rev} {set realvalue [expr {1.0-$realvalue}]}
-    if {$orient == "vertical"} {set realvalue [expr {1.0-$realvalue}]}
-    switch $orient {
-        horizontal {
-            set hr [expr {$width-$headsz}]
-            $c coords head$self [expr {$x+$hr*$realvalue}] $y \
-                [expr {$x+$hr*$realvalue+$headsz}] [expr {$y+$height+1}]
-        }
-        vertical {
-            set vr [expr {$height-$headsz}]
-            $c coords head$self $x [expr {$y+$vr*$realvalue}] \
-                [expr {$x+$width+1}] [expr {$y+$vr*$realvalue+$headsz}]
-        }
-    }
-    $c delete label$self
-    if {$label != {}} {
-        switch $labelpos {
-            top
-            {set lx [expr {$x+$width/2}]; set ly [expr {$y}]; set a "s"}
-            bottom
-            {set lx [expr {$x+$width/2}]; set ly [expr {$y+$height+2}]; set a "n"}
-            left
-            {set lx [expr {$x}]; set ly [expr {$y+$height/2}]; set a "e"}
-            right
-            {set lx [expr {$x+$width+2}]; set ly [expr {$y+$height/2}]; set a "w"}
-        }
-        $c create text $lx $ly -anchor $a -text $label -fill $lblcolor \
-             -tags [list $self label$self]
-    }
-}
-
-pd::guiclass slider2 {
-    constructor {
-        pd::add_outlet $self float
-        sys_gui "source {[file join $::script_path properties.tcl]}\n"
-        # set defaults:
-        set @config {
-            -width 15 -height 130 -headsz 3 -rangebottom 0 -rangetop 127
-            -init 0 -initvalue 0 -jumponclick 0 -label "" -labelpos "top"
-            -orient "vertical" -sendsymbol "" -receivesymbol ""
-            -fgcolor "#000000" -bgcolor "#ffffff" -lblcolor "#000000"
-        }
-        set @state {_min 0 _max 127 _rev 0}
-        # expanded ($n) send/recv symbols:
-        set @send {}
-        set @recv {}
-        ::$self 0 config {*}$args
-    }
-
-    destructor {
-        if {[dict get $@config -receivesymbol] != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] $@recv
-        }
-    }
-
-    0_loadbang {
-        if {[dict get $@config -init]} {$self 0 bang}
-    }
-
-    0_config {
-        set newconf [list]
-        set optlist [pd::strip_selectors $args]
-        set optlist [pd::strip_empty $optlist]
-        set int_opts {-width -height -cellsize}
-        set bool_opts {-init -jumponclick}
-        set ui_opts {-fgcolor -bgcolor -lblcolor -orient -width -height}
-        set upd_opts {-rangebottom -rangetop -label -labelpos}
-        set conn_opts {-sendsymbol -receivesymbol}
-        set ui 0
-        set upd 0
-        foreach {k v} $optlist {
-            if {![dict exists $@config $k]} {
-                return -code error "unknown option '$k'"
-            }
-            if {[dict get $@config $k] == $v} {continue}
-            if {[lsearch -exact $int_opts $k] != -1} {set v [expr {int($v)}]}
-            if {[lsearch -exact $bool_opts $k] != -1} {set v [expr {int($v)!=0}]}
-            if {[lsearch -exact $ui_opts $k] != -1} {set ui 1}
-            if {[lsearch -exact $upd_opts $k] != -1} {set upd 1}
-            dict set newconf $k $v
-        }
-        # process -{send,receive}symbol
-        if {[dict exists $newconf -receivesymbol]} {
-            set new_recv [dict get $newconf -receivesymbol]
-            set selfpd [tclpd_get_instance_pd $self]
-            if {[dict get $@config -receivesymbol] != {}} {
-                pd_unbind $selfpd $@recv
-            }
-            if {$new_recv != {}} {
-                set @recv [canvas_realizedollar \
-                    [tclpd_get_glist $self] [gensym $new_recv]]
-                pd_bind $selfpd $@recv
-            } else {set @recv {}}
-        }
-        if {[dict exists $newconf -sendsymbol]} {
-            set new_send [dict get $newconf -sendsymbol]
-            if {$new_send != {}} {
-                set @send [canvas_realizedollar \
-                    [tclpd_get_glist $self] [gensym $new_send]]
-            } else {set @send {}}
-        }
-        # changing orient -> swap sizes
-        if {[dict exists $newconf -orient] && ![dict exists $newconf -width]
-            && ![dict exists $newconf -height]} {
-            dict set newconf -width [dict get $@config -height]
-            dict set newconf -height [dict get $@config -width]
-        }
-        # no errors up to this point. we can safely merge options
-        set @config [dict merge $@config $newconf]
-        # adjust reverse range
-        set a [dict get $@config -rangebottom]
-        set b [dict get $@config -rangetop]
-        dict set @state _min [expr {$a>$b?$b:$a}]
-        dict set @state _max [expr {$a>$b?$a:$b}]
-        dict set @state _rev [expr {$a>$b}]
-        set orient [dict get $@config -orient]
-        switch $orient {
-            horizontal {set dim [dict get $@config -width];  set mul  1}
-            vertical   {set dim [dict get $@config -height]; set mul -1}
-            default {return -code error "invalid value '$orient' for -orient"}
-        }
-        # recompute pix2units conversion
-        set @pix2units [expr {(2.0 * [dict get $@state _rev] - 1.0) *
-            ( [dict get $@state _max] - [dict get $@state _min] ) *
-            $mul / ( $dim - [dict get $@config -headsz])}]
-        # if ui changed, update it
-        if {$ui && [info exists @c]} {
-            sys_gui [list $@c delete $self]\n
-            sys_gui [list slider2_draw_new $self $@c $@x $@y $@config $@state]\n
-        } elseif {$upd && [info exists @c]} {
-            sys_gui [list slider2_update $self $@c $@x $@y $@config $@state]\n
-        }
-        if {[dict exists $newconf -width] || [dict exists $newconf -height]} {
-            canvas_fixlinesfor \
-                [tclpd_get_glist $self] [tclpd_get_instance_text $self]
-        }
-    }
-    
-    0_set {
-        foreach v {min max} {set $v [dict get $@state _$v]}
-        set f [pd::arg 0 float]
-        if {$f < $min} {set f $min}
-        if {$f > $max} {set f $max}
-        dict set @config -initvalue $f
-        if {[info exists @c]} {
-            # update ui:
-            sys_gui [list slider2_update $self $@c $@x $@y $@config $@state]\n
-        }
-    }
-
-    0_bang {
-        foreach v {initvalue} {set $v [dict get $@config -$v]}
-        pd::outlet $self 0 float $initvalue
-        if {$@send != {}} {
-            set s_thing [$@send cget -s_thing]
-            if {$s_thing != {NULL}} {pd_float $s_thing $initvalue}
-        }
-    }
-
-    0_float {
-        $self 0 set {*}$args
-        $self 0 bang
-    }
-
-    object_save {
-        return [list #X obj $@x $@y slider2 {*}[pd::add_empty $@config] \;]
-    }
-
-    object_properties {
-        set c [string map {$ \\$} $@config]
-        gfxstub_new [tclpd_get_object_pd $self] [tclpd_get_instance $self] \
-            [list propertieswindow %s $c "\[slider2\] properties"]\n
-    }
-
-    widgetbehavior_getrect {
-        lassign $args x1 y1
-        set x2 [expr {1+$x1+[dict get $@config -width]}]
-        set y2 [expr {1+$y1+[dict get $@config -height]}]
-        return [list $x1 $y1 $x2 $y2]
-    }
-
-    widgetbehavior_displace {
-        lassign $args dx dy
-        if {$dx != 0 || $dy != 0} {
-            incr @x $dx; incr @y $dy
-            sys_gui [list $@c move $self $dx $dy]\n
-        }
-        return [list $@x $@y]
-    }
-
-    widgetbehavior_select {
-        lassign $args sel
-        sys_gui [list $@c itemconfigure $self&&!label$self -outline [lindex \
-            [list [dict get $@config -fgcolor] {blue}] $sel]]\n
-    }
-
-    widgetbehavior_vis {
-        lassign $args @c @x @y vis
-        if {$vis} {
-            sys_gui [list slider2_draw_new $self $@c $@x $@y $@config $@state]\n
-        } else {
-            sys_gui [list $@c delete $self]\n
-        }
-    }
-
-    widgetbehavior_click {
-        lassign $args x y shift alt dbl doit
-        set h [dict get $@config -height]
-        set ypix [expr {[lindex $args 1]-$@y-1}]
-        if {$ypix < 0 || $ypix >= $h} {return}
-        if {$doit} {
-            switch [dict get $@config -orient] {
-                horizontal {
-                    set @motion_start_x $x
-                    set @motion_curr_x $x
-                }
-                vertical {
-                    set @motion_start_y $y
-                    set @motion_curr_y $y
-                }
-            }
-            set @motion_start_v [dict get $@config -initvalue]
-            tclpd_guiclass_grab [tclpd_get_instance $self] \
-                [tclpd_get_glist $self] $x $y
-        }
-    }
-
-    widgetbehavior_motion {
-        lassign $args dx dy
-        switch [dict get $@config -orient] {
-            horizontal {
-                set @motion_curr_x [expr {$dx+$@motion_curr_x}]
-                set pixdelta [expr {-1*($@motion_curr_x-$@motion_start_x)}]
-            }
-            vertical {
-                set @motion_curr_y [expr {$dy+$@motion_curr_y}]
-                set pixdelta [expr {-1*($@motion_curr_y-$@motion_start_y)}]
-            }
-        }
-        set f [expr {$@motion_start_v+$pixdelta*$@pix2units}]
-        $self 0 float {*}[pd::add_selectors [list $f]]
-    }
-}
diff --git a/externals/tclpd/tcl.i b/externals/tclpd/tcl.i
deleted file mode 100644
index 0e658473ec735997e3c27c0bb86c208fab73ae62..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl.i
+++ /dev/null
@@ -1,106 +0,0 @@
-%module tclpd
-%include exception.i
-%include cpointer.i
-
-#define __attribute__(x)
-
-/* functions that are in m_pd.h but don't exist in modern versions of pd */
-%ignore pd_getfilename;
-%ignore pd_getdirname;
-%ignore pd_anything;
-%ignore class_parentwidget;
-%ignore sys_isreadablefile;
-%ignore garray_get;
-%ignore c_extern;
-%ignore c_addmess;
-
-/* functions that we can't auto-wrap, because they have varargs */
-%ignore post;
-%ignore class_new;
-
-/* functions that we can't auto-wrap, because <insert reason here> */
-%ignore glist_new;
-%ignore canvas_zapallfortemplate;
-%ignore canvas_fattenforscalars;
-%ignore canvas_visforscalars;
-%ignore canvas_clicksub;
-%ignore text_xcoord;
-%ignore text_ycoord;
-%ignore canvas_getglistonsuper;
-%ignore canvas_getfont;
-%ignore canvas_setusedastemplate;
-%ignore canvas_vistext;
-%ignore rtext_remove;
-%ignore canvas_recurapply;
-%ignore gobj_properties;
-
-/* end of ignore-list */
-
-%include "m_pd.h"
-%include "g_canvas.h"
-%include "tcl_extras.h"
-
-%{
-    #include "m_pd.h"
-    #include "tcl_extras.h"
-
-    typedef t_atom t_atom_array;
-
-    /* extern "C" SWIGEXPORT int Tclpd_SafeInit(Tcl_Interp *interp); */
-    /* extern "C" { void tcl_setup() {tclpd_setup(void);} } */
-%}
-
-/* this does the trick of solving
- TypeError in method 'xyz', argument 4 of type 't_atom *' */
-%name(outlet_list) EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom_array *argv);
-%name(outlet_anything) EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom_array *argv);
-
-%pointer_class(t_float, t_float)
-%pointer_class(t_symbol, t_symbol)
-
-%typemap(in) t_atom * {
-    t_atom *a = (t_atom*)getbytes(sizeof(t_atom));
-    if(tcl_to_pd($input, a) == TCL_ERROR) {
-#ifdef DEBUG
-        post("Tcl SWIG: typemap(in) error");
-#endif
-        return TCL_ERROR;
-    }
-    $1 = a;
-}
-
-%typemap(freearg) t_atom * {
-    freebytes($1, sizeof(t_atom));
-}
-
-%typemap(out) t_atom* {
-    Tcl_Obj* res_obj;
-    if(pd_to_tcl($1, &res_obj) == TCL_ERROR) {
-#ifdef DEBUG
-        post("Tcl SWIG: typemap(out) error");
-#endif
-        return TCL_ERROR;
-    }
-    Tcl_SetObjResult(tcl_for_pd, res_obj);
-}
-
-/* helper functions for t_atom arrays */
-%inline %{
-    t_atom_array *new_atom_array(int size) {
-        return (t_atom_array*)getbytes(size*sizeof(t_atom));
-    }
-
-    void delete_atom_array(t_atom_array *a, int size) {
-        freebytes(a, size*sizeof(t_atom));
-    }
-
-    t_atom* get_atom_array(t_atom_array *a, int index) {
-        return &a[index];
-    }
-
-    void set_atom_array(t_atom_array *a, int index, t_atom *n) {
-        memcpy(&a[index], n, sizeof(t_atom));
-    }
-%}
-
-
diff --git a/externals/tclpd/tcl_class.cxx b/externals/tclpd/tcl_class.cxx
deleted file mode 100644
index 16c7564d9f6dd189c14005bed3f0f09b14a815dd..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_class.cxx
+++ /dev/null
@@ -1,314 +0,0 @@
-#include "tcl_extras.h"
-#include <map>
-#include <string>
-#include <string.h>
-
-using namespace std;
-
-static unsigned long objectSequentialId = 0;
-map<string,t_class*> class_table;
-map<string,t_pd*> object_table;
-
-/* set up the class that handles loading of tcl classes */
-t_class* tclpd_class_new(const char* name, int flags) {
-    t_class* c = class_new(gensym(name), (t_newmethod)tclpd_new,
-        (t_method)tclpd_free, sizeof(t_tcl), flags, A_GIMME, A_NULL);
-
-    class_table[string(name)] = c;
-    class_addanything(c, tclpd_anything);
-    class_addmethod(c, (t_method)tclpd_loadbang, gensym("loadbang"), A_NULL);
-    
-    // always set save function. it will call the default if
-    // none exists in tcl space.
-    class_setsavefn(c, tclpd_save);
-
-    // check if properties function exists in tcl space.
-    char buf[80];
-    int res_i;
-    snprintf(buf, 80, "llength [info procs ::%s_object_properties]", name);
-    if(Tcl_Eval(tcl_for_pd, buf) == TCL_OK) {
-        Tcl_Obj* res = Tcl_GetObjResult(tcl_for_pd);
-        if(Tcl_GetIntFromObj(tcl_for_pd, res, &res_i) == TCL_OK) {
-            if(res_i) {
-                class_setpropertiesfn(c, tclpd_properties);
-            }
-#ifdef DEBUG
-            else {
-                post("tclpd_class_new: propertiesfn does not exist", buf);
-            }
-#endif
-        }
-#ifdef DEBUG
-        else {
-            post("tclpd_class_new: Tcl_GetIntFromObj returned an error");
-        }
-#endif
-    }
-#ifdef DEBUG
-    else {
-        post("tclpd_class_new: [info procs] returned an error");
-    }
-#endif
-    return c;
-}
-
-t_class* tclpd_guiclass_new(const char* name, int flags) {
-    t_class* c = tclpd_class_new(name, flags);
-    t_widgetbehavior* wb = (t_widgetbehavior*)getbytes(sizeof(t_widgetbehavior));
-    wb->w_getrectfn = tclpd_guiclass_getrect;
-    wb->w_displacefn = tclpd_guiclass_displace;
-    wb->w_selectfn = tclpd_guiclass_select;
-    wb->w_activatefn = NULL;
-    wb->w_deletefn = tclpd_guiclass_delete;
-    wb->w_visfn = tclpd_guiclass_vis;
-    wb->w_clickfn = tclpd_guiclass_click;
-    class_setwidget(c, wb);
-    return c;
-}
-
-t_tcl* tclpd_new(t_symbol* classsym, int ac, t_atom* at) {
-    // lookup in class table
-    const char* name = classsym->s_name;
-    t_class* qlass = class_table[string(name)];
-
-    t_tcl* x = (t_tcl*)pd_new(qlass);
-    x->ninlets = 1 /* qlass->c_firstin ??? */;
-
-    x->classname = Tcl_NewStringObj(name, -1);
-    Tcl_IncrRefCount(x->classname);
-
-    char s[64];
-    snprintf(s, 64, "tclpd:%s:x%lx", name, objectSequentialId++);
-    x->self = Tcl_NewStringObj(s, -1);
-    Tcl_IncrRefCount(x->self);
-
-    x->x_glist = (t_glist*)canvas_getcurrent();
-
-    // store in object table (for later lookup)
-    object_table[string(s)] = (t_pd*)x;
-
-    // build constructor command
-    Tcl_Obj *av[ac+2]; InitArray(av, ac+2, NULL);
-    av[0] = x->classname;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = x->self;
-    Tcl_IncrRefCount(av[1]);
-    for(int i=0; i<ac; i++) {
-        if(pd_to_tcl(&at[i], &av[2+i]) == TCL_ERROR) {
-#ifdef DEBUG
-            post("pd_to_tcl: tclpd_new: failed during conversion. check memory leaks!");
-#endif
-            goto error;
-        }
-    }
-    // call constructor
-    if(Tcl_EvalObjv(tcl_for_pd, ac+2, av, 0) != TCL_OK) {
-        goto error;
-    }
-
-    for(int i = 0; i < (ac+2); i++)
-        Tcl_DecrRefCount(av[i]);
-
-    return x;
-
-error:
-    tclpd_interp_error(TCL_ERROR);
-    for(int i = 0; i < (ac+2); i++) {
-        if(!av[i]) break;
-        Tcl_DecrRefCount(av[i]);
-    }
-    pd_free((t_pd*)x);
-    return 0;
-}
-
-void tclpd_free(t_tcl* x) {
-    // build destructor command
-    Tcl_Obj *sym = Tcl_NewStringObj(Tcl_GetStringFromObj(x->classname, NULL), -1);
-    Tcl_AppendToObj(sym, "_destructor", -1);
-    Tcl_Obj *av[2]; InitArray(av, 2, NULL);
-    av[0] = sym;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = x->self;
-    Tcl_IncrRefCount(av[1]);
-    // call destructor
-    if(Tcl_EvalObjv(tcl_for_pd, 2, av, 0) != TCL_OK) {
-#ifdef DEBUG
-        post("tclpd_free: failed");
-#endif
-    }
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-
-    Tcl_DecrRefCount(x->self);
-    Tcl_DecrRefCount(x->classname);
-#ifdef DEBUG
-    post("tclpd_free called");
-#endif
-}
-
-void tclpd_anything(t_tcl* x, t_symbol* s, int ac, t_atom* at) {
-    tclpd_inlet_anything(x, 0, s, ac, at);
-}
-
-void tclpd_inlet_anything(t_tcl* x, int inlet, t_symbol* s, int ac, t_atom* at) {
-    // proxy method - format: <self> <inlet#> <selector> ...
-    Tcl_Obj* av[ac+3]; InitArray(av, ac+3, NULL);
-    int result;
-
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewIntObj(inlet);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj(s->s_name, -1);
-    Tcl_IncrRefCount(av[2]);
-    for(int i=0; i<ac; i++) {
-        if(pd_to_tcl(&at[i], &av[3+i]) == TCL_ERROR) {
-#ifdef DEBUG
-            post("pd_to_tcl: tclpd_inlet_anything: failed during conversion. check memory leaks!");
-#endif
-            goto error;
-        }
-    }
-    result = Tcl_EvalObjv(tcl_for_pd, ac+3, av, 0);
-    if(result != TCL_OK) {
-        goto error;
-    }
-
-    for(int i=0; i < (ac+3); i++)
-        Tcl_DecrRefCount(av[i]);
-
-    // OK
-    return;
-
-error:
-    tclpd_interp_error(TCL_ERROR);
-    for(int i=0; i < (ac+3); i++) {
-        if(!av[i]) break;
-        Tcl_DecrRefCount(av[i]);
-    }
-    return;
-}
-
-void tclpd_loadbang(t_tcl* x) {
-    tclpd_inlet_anything(x, 0, gensym("loadbang"), 0, NULL);
-}
-
-/* Tcl glue: */
-
-t_proxyinlet* tclpd_add_proxyinlet(t_tcl* x) {
-    t_proxyinlet* proxy = (t_proxyinlet*)pd_new(proxyinlet_class);
-    proxyinlet_init(proxy);
-    proxy->target = x;
-    proxy->ninlet = x->ninlets++;
-    inlet_new(&x->o, &proxy->obj.ob_pd, 0, 0);
-    return proxy;
-}
-
-t_tcl* tclpd_get_instance(const char* objectSequentialId) {
-    return (t_tcl*)object_table[objectSequentialId];
-}
-
-t_pd* tclpd_get_instance_pd(const char* objectSequentialId) {
-    return (t_pd*)object_table[objectSequentialId];
-}
-
-t_object* tclpd_get_object(const char* objectSequentialId) {
-    t_tcl* x = tclpd_get_instance(objectSequentialId);
-    return &x->o;
-}
-
-t_pd* tclpd_get_object_pd(const char* objectSequentialId) {
-    t_object* o = tclpd_get_object(objectSequentialId);
-    return &o->ob_pd;
-}
-
-t_glist* tclpd_get_glist(const char* objectSequentialId) {
-    t_tcl* x = tclpd_get_instance(objectSequentialId);
-    return x->x_glist;
-}
-
-t_symbol* null_symbol() {
-    return (t_symbol*)0;
-}
-
-void poststring2 (const char *s) {
-    post("%s", s);
-}
-
-void tclpd_save(t_gobj* z, t_binbuf* b) {
-    Tcl_Obj* av[3]; InitArray(av, 3, NULL);
-    Tcl_Obj* res;
-
-    t_tcl* x = (t_tcl*)z;
-
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("object", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("save", -1);
-    Tcl_IncrRefCount(av[2]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 3, av, 0);
-    if(result == TCL_OK) {
-        res = Tcl_GetObjResult(tcl_for_pd);
-        Tcl_IncrRefCount(res);
-        int objc;
-        Tcl_Obj** objv;
-        result = Tcl_ListObjGetElements(tcl_for_pd, res, &objc, &objv);
-        if(result == TCL_OK) {
-            if(objc == 0 && objv == NULL) {
-                // call default savefn
-                text_save(z, b);
-            } else {
-                // do custom savefn
-                int i;
-                double tmp;
-                for(i = 0; i < objc; i++) {
-                    result = Tcl_GetDoubleFromObj(tcl_for_pd, objv[i], &tmp);
-                    if(result == TCL_OK) {
-                        binbuf_addv(b, "f", (t_float)tmp);
-                    } else {
-                        char* tmps = Tcl_GetStringFromObj(objv[i], NULL);
-                        if(!strcmp(tmps, ";")) {
-                            binbuf_addv(b, ";");
-                        } else {
-                            binbuf_addv(b, "s", gensym(tmps));
-                        }
-                    }
-                }
-            }
-        } else {
-            pd_error(x, "Tcl: object save: failed");
-            tclpd_interp_error(result);
-        }
-        Tcl_DecrRefCount(res);
-    } else {
-        pd_error(x, "Tcl: object save: failed");
-        tclpd_interp_error(result);
-    }
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-}
-
-void tclpd_properties(t_gobj* z, t_glist* owner) {
-    Tcl_Obj* av[3]; InitArray(av, 3, NULL);
-    Tcl_Obj* res;
-
-    t_tcl* x = (t_tcl*)z;
-
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("object", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("properties", -1);
-    Tcl_IncrRefCount(av[2]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 3, av, 0);
-    if(result != TCL_OK) {
-        //res = Tcl_GetObjResult(tcl_for_pd);
-        pd_error(x, "Tcl: object properties: failed");
-        tclpd_interp_error(result);
-    }
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-}
diff --git a/externals/tclpd/tcl_extras.h b/externals/tclpd/tcl_extras.h
deleted file mode 100644
index 9c5ee844c432bfe0bd4281e1cac624c6abffaf6e..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_extras.h
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "m_pd.h"
-//#include "m_imp.h"
-#include "g_canvas.h"
-//#include "s_stuff.h"
-
-#include <tcl.h>
-
-/* PATH_MAX is not defined in limits.h on some platforms */
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
-#define TCLPD_VERSION "0.2.1"
-
-#define InitArray(name, size, value) for(int zz=0; zz<(size); zz++) name[zz]=value
-
-typedef struct _t_tcl {
-    t_object o;
-    t_glist* x_glist;
-    Tcl_Obj* self;
-    Tcl_Obj* classname;
-    int ninlets;
-} t_tcl;
-
-typedef struct _t_proxyinlet {
-    t_object obj;
-    t_tcl* target;
-    int ninlet;
-    t_symbol* sel;
-    int argc;
-    t_atom* argv;
-} t_proxyinlet;
-
-/* tcl_proxyinlet.cxx */
-extern t_class* proxyinlet_class;
-void proxyinlet_init(t_proxyinlet* x);
-void proxyinlet_clear(t_proxyinlet* x);
-void proxyinlet_anything(t_proxyinlet* x, t_symbol* s, int argc, t_atom* argv);
-void proxyinlet_trigger(t_proxyinlet* x);
-t_atom* proxyinlet_get_atoms(t_proxyinlet* x);
-void proxyinlet_clone(t_proxyinlet* x, t_proxyinlet* y);
-void proxyinlet_setup(void);
-
-/* tcl_wrap.cxx */
-extern "C" int Tclpd_SafeInit(Tcl_Interp *interp);
-
-/* tcl_typemap.cxx */
-int pd_to_tcl(t_atom* input, Tcl_Obj** output);
-int tcl_to_pd(Tcl_Obj* input, t_atom* output);
-
-/* tcl_setup.cxx */
-extern Tcl_Interp* tcl_for_pd;
-extern "C" void tclpd_setup(void);
-void tclpd_interp_error(int result);
-
-/* tcl_class.cxx */
-t_class* tclpd_class_new(const char* name, int flags);
-t_class* tclpd_guiclass_new(const char* name, int flags);
-t_tcl* tclpd_new(t_symbol* classsym, int ac, t_atom* at);
-void tclpd_free (t_tcl* self);
-void tclpd_anything(t_tcl* self, t_symbol* s, int ac, t_atom* at);
-void tclpd_inlet_anything(t_tcl *self, int inlet, t_symbol *s, int ac, t_atom *at);
-void tclpd_loadbang(t_tcl* x);
-t_proxyinlet* tclpd_add_proxyinlet(t_tcl* x);
-t_tcl* tclpd_get_instance(const char* objectSequentialId);
-t_pd* tclpd_get_instance_pd(const char* objectSequentialId);
-t_object* tclpd_get_object(const char* objectSequentialId);
-t_pd* tclpd_get_object_pd(const char* objectSequentialId);
-t_glist* tclpd_get_glist(const char* objectSequentialId);
-t_symbol* null_symbol();
-void poststring2(const char* s);
-extern "C" void text_save(t_gobj *z, t_binbuf *b);
-void tclpd_save(t_gobj* z, t_binbuf* b);
-void tclpd_properties(t_gobj* z, t_glist* owner);
-
-/* tcl_widgetbehavior.cxx */
-void tclpd_guiclass_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2);
-void tclpd_guiclass_displace(t_gobj* z, t_glist* glist, int dx, int dy);
-void tclpd_guiclass_select(t_gobj* z, t_glist* glist, int selected);
-void tclpd_guiclass_activate(t_gobj* z, t_glist* glist, int state);
-void tclpd_guiclass_delete(t_gobj* z, t_glist* glist);
-void tclpd_guiclass_vis(t_gobj* z, t_glist* glist, int vis);
-int tclpd_guiclass_click(t_gobj* z, t_glist* glist, int xpix, int ypix, int shift, int alt, int dbl, int doit);
-void tclpd_guiclass_motion(t_tcl* x, t_floatarg dx, t_floatarg dy);
-void tclpd_guiclass_grab(t_tcl* x, t_glist* glist, int xpix, int ypix);
-
-/* tcl_loader.cxx */
-extern "C" int tclpd_do_load_lib(t_canvas* canvas, char* objectname);
-/* pd loader private stuff: */
-typedef int (*loader_t)(t_canvas *canvas, char* classname);
-extern "C" void sys_register_loader(loader_t loader);
-extern "C" int sys_onloadlist(char* classname);
-extern "C" void sys_putonloadlist(char* classname);
-extern "C" void class_set_extern_dir(t_symbol* s);
diff --git a/externals/tclpd/tcl_loader.cxx b/externals/tclpd/tcl_loader.cxx
deleted file mode 100644
index 2dad0d1d5aec66429b9f92b286c718774d006a20..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_loader.cxx
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "tcl_extras.h"
-#include <string.h>
-#include <unistd.h>
-
-extern "C" int tclpd_do_load_lib(t_canvas *canvas, char *objectname) {
-#ifdef DEBUG
-    post("Tcl loader: registering tcl class loader mechanism");
-#endif
-    char filename[MAXPDSTRING], dirbuf[MAXPDSTRING],
-        *classname, *nameptr;
-    int fd;
-
-    if ((classname = strrchr(objectname, '/')) != NULL)
-        classname++;
-    else
-        classname = objectname;
-
-    if(sys_onloadlist(objectname)) {
-        post("%s: already loaded", objectname);
-        return (1);
-    }
-
-        /* try looking in the path for (objectname).(tcl) ... */
-    if ((fd = canvas_open(canvas, objectname, ".tcl",
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
-            goto gotone;
-
-        /* next try (objectname)/(classname).(tcl) ... */
-    strncpy(filename, objectname, MAXPDSTRING);
-    filename[MAXPDSTRING-2] = 0;
-    strcat(filename, "/");
-    strncat(filename, classname, MAXPDSTRING-strlen(filename));
-    filename[MAXPDSTRING-1] = 0;
-    if ((fd = canvas_open(canvas, filename, ".tcl",
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
-            goto gotone;
-
-    return 0;
-
-gotone:
-    close(fd);
-    class_set_extern_dir(gensym(dirbuf));
-        /* rebuild the absolute pathname */
-    strncpy(filename, dirbuf, MAXPDSTRING);
-    filename[MAXPDSTRING-2] = 0;
-    strcat(filename, "/");
-    strncat(filename, nameptr, MAXPDSTRING-strlen(filename));
-    filename[MAXPDSTRING-1] = 0;
-
-    // load tcl external:
-    int result = Tcl_EvalFile(tcl_for_pd, filename);
-    if(result == TCL_OK) {
-        post("Tcl loader: loaded %s", filename);
-    } else {
-        post("Tcl loader: error trying to load %s", filename);
-        tclpd_interp_error(result);
-        return 0;
-    }
-
-    class_set_extern_dir(&s_);
-    sys_putonloadlist(objectname);
-    return 1;
-}
-
diff --git a/externals/tclpd/tcl_proxyinlet.cxx b/externals/tclpd/tcl_proxyinlet.cxx
deleted file mode 100644
index e1cdb48f5c2be65003eaf0899ac04e9403fdc41c..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_proxyinlet.cxx
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "tcl_extras.h"
-
-t_class* proxyinlet_class;
-
-void proxyinlet_init(t_proxyinlet* x) {
-    //x->pd = proxyinlet_class;
-    x->target = NULL;
-    x->sel = gensym("none");
-    x->argc = 0;
-    x->argv = NULL;
-}
-
-void proxyinlet_clear(t_proxyinlet* x) {
-    if(x->argv) {
-        freebytes(x->argv, x->argc * sizeof(*x->argv));
-    }
-}
-
-#define PROXYINLET_SEL_TO_LIST 0 // 0 or 1
-
-void proxyinlet_anything(t_proxyinlet* x, t_symbol* s, int argc, t_atom* argv) {
-    proxyinlet_clear(x);
-
-    if(!(x->argv = (t_atom*)getbytes((argc+PROXYINLET_SEL_TO_LIST) * sizeof(*x->argv)))) {
-        x->argc = 0;
-        error("proxyinlet: getbytes: out of memory");
-        return;
-    }
-
-    x->argc = argc + PROXYINLET_SEL_TO_LIST;
-    if(PROXYINLET_SEL_TO_LIST == 1) SETSYMBOL(&x->argv[0], s);
-    else x->sel = s;
-
-    int i;
-    for(i = 0; i < argc; i++) {
-        x->argv[i+PROXYINLET_SEL_TO_LIST] = argv[i];
-    }
-
-    proxyinlet_trigger(x);
-}
-
-void proxyinlet_trigger(t_proxyinlet* x) {
-    if(x->target != NULL && x->sel != gensym("none")) {
-        tclpd_inlet_anything(x->target, x->ninlet, x->sel, x->argc, x->argv);
-    }
-}
-
-t_atom* proxyinlet_get_atoms(t_proxyinlet* x) {
-    return x->argv;
-}
-
-void proxyinlet_clone(t_proxyinlet* x, t_proxyinlet* y) {
-    y->target = x->target;
-    y->sel = x->sel;
-
-    y->argc = x->argc;
-    if(!(y->argv = (t_atom*)getbytes(y->argc * sizeof(*y->argv)))) {
-        y->argc = 0;
-        error("proxyinlet: getbytes: out of memory");
-        return;
-    }
-
-    int i;
-    for(i = 0; i < x->argc; i++) {
-        y->argv[i] = x->argv[i];
-    }
-}
-
-void proxyinlet_setup(void) {
-    proxyinlet_class = class_new(gensym("tclpd proxyinlet"),
-        0, 0, sizeof(t_proxyinlet), 0, A_NULL);
-    class_addanything(proxyinlet_class, proxyinlet_anything);
-}
diff --git a/externals/tclpd/tcl_setup.cxx b/externals/tclpd/tcl_setup.cxx
deleted file mode 100644
index 51f82c24bfe27485f2a798a4a2e0d3ef5a86c684..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_setup.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "tcl_extras.h"
-#include <unistd.h>
-#include <limits.h>
-
-Tcl_Interp *tcl_for_pd = NULL;
-
-extern "C" void tcl_setup(void) {
-    tclpd_setup();
-}
-
-void tclpd_setup(void) {
-    if(tcl_for_pd) {
-        return;
-    }
-
-    post("Tcl loader v" TCLPD_VERSION);
-
-    proxyinlet_setup();
-
-    tcl_for_pd = Tcl_CreateInterp();
-    Tcl_Init(tcl_for_pd);
-    Tclpd_SafeInit(tcl_for_pd);
-
-    char *dirname   = new char[PATH_MAX];
-    char *dirresult = new char[PATH_MAX];
-    /* nameresult is only a pointer in dirresult space so don't delete[] it. */
-    char *nameresult;
-    if(getcwd(dirname, PATH_MAX) < 0) {
-        post("Tcl loader: FATAL: cannot get current dir");
-        /* exit(69); */ return;
-    }
-
-    int fd = open_via_path(dirname, "tcl", PDSUF, dirresult, &nameresult, PATH_MAX, 1);
-    if(fd >= 0) {
-        close(fd);
-    } else {
-        post("Tcl loader: %s was not found via the -path!", "tcl" PDSUF);
-    }
-
-    Tcl_SetVar(tcl_for_pd, "TCLPD_DIR", dirresult, 0);
-    Tcl_Eval(tcl_for_pd, "package provide Tclpd " TCLPD_VERSION);
-
-    if(Tcl_Eval(tcl_for_pd, "source $TCLPD_DIR/pkgIndex.tcl") != TCL_OK) {
-        post("Tcl loader: error loading %s/pkgIndex.tcl", dirresult);
-    }
-
-    if(Tcl_Eval(tcl_for_pd, "source $TCLPD_DIR/tcl.tcl") == TCL_OK) {
-        post("Tcl loader: loaded %s/tcl.tcl", dirresult);
-    }
-
-    if(Tcl_Eval(tcl_for_pd,"source $env(HOME)/.pd.tcl") == TCL_OK) {
-        post("Tcl loader: loaded ~/.pd.tcl");
-    }
-
-    delete[] dirresult;
-    delete[] dirname;
-
-    sys_register_loader(tclpd_do_load_lib);
-}
-
-void tclpd_interp_error(int result) {
-    post("Tcl error: %s", Tcl_GetStringResult(tcl_for_pd));
-    post("  (see stderr for details)");
-
-    fprintf(stderr, "------------------- Tcl error: -------------------\n");
-
-    // Tcl_GetReturnOptions and Tcl_DictObjGet only available in Tcl >= 8.5
-
-#if ((TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || (TCL_MAJOR_VERSION > 8))
-    Tcl_Obj* dict = Tcl_GetReturnOptions(tcl_for_pd, result);
-    Tcl_Obj* errorInfo = NULL;
-    Tcl_Obj* errorInfoK = Tcl_NewStringObj("-errorinfo", -1);
-    Tcl_IncrRefCount(errorInfoK);
-    Tcl_DictObjGet(tcl_for_pd, dict, errorInfoK, &errorInfo);
-    Tcl_DecrRefCount(errorInfoK);
-    fprintf(stderr, "%s\n", Tcl_GetStringFromObj(errorInfo, 0));
-#else
-    fprintf(stderr, "Backtrace not available in Tcl < 8.5. Please upgrade Tcl.\n");
-#endif
-
-    fprintf(stderr, "--------------------------------------------------\n");
-}
diff --git a/externals/tclpd/tcl_typemap.cxx b/externals/tclpd/tcl_typemap.cxx
deleted file mode 100644
index 4044afbe363c2e29f9390b7ebc05c67154cd986c..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_typemap.cxx
+++ /dev/null
@@ -1,68 +0,0 @@
-#include "tcl_extras.h"
-#include <string.h>
-
-int tcl_to_pd(Tcl_Obj *input, t_atom *output) {
-    int llength;
-    if(Tcl_ListObjLength(tcl_for_pd, input, &llength) == TCL_ERROR)
-        return TCL_ERROR;
-    if(llength != 2)
-        /*SWIG_exception(SWIG_ValueError, "Bad t_atom: expeting a 2-elements list.");*/
-        return TCL_ERROR;
-
-    int i;
-    Tcl_Obj* obj[2];
-    for(i = 0; i < 2; i++) Tcl_ListObjIndex(tcl_for_pd, input, i, &obj[i]);
-    char* argv0 = Tcl_GetStringFromObj(obj[0], 0);
-
-    if(strcmp(argv0, "float") == 0) {
-        double dbl;
-        if(Tcl_GetDoubleFromObj(tcl_for_pd, obj[1], &dbl) == TCL_ERROR)
-            return TCL_ERROR;
-        SETFLOAT(output, dbl);
-    } else if(strcmp(argv0, "symbol") == 0) {
-        SETSYMBOL(output, gensym(Tcl_GetStringFromObj(obj[1], 0)));
-    } else if(strcmp(argv0, "pointer") == 0) {
-        // TODO:
-        return TCL_ERROR;
-    }
-    return TCL_OK;
-}
-
-int pd_to_tcl(t_atom *input, Tcl_Obj **output) {
-    Tcl_Obj* tcl_t_atom[2];
-#ifdef DEBUG
-    post("pd_to_tcl: atom type = %d (%s)",
-        input->a_type, input->a_type == A_FLOAT ? "A_FLOAT" :
-        input->a_type == A_SYMBOL ? "A_SYMBOL" :
-        input->a_type == A_POINTER ? "A_POINTER" : "?");
-#endif
-    switch (input->a_type) {
-        case A_FLOAT: {
-            tcl_t_atom[0] = Tcl_NewStringObj("float", -1);
-            tcl_t_atom[1] = Tcl_NewDoubleObj(input->a_w.w_float);
-            break;
-        }
-        case A_SYMBOL: {
-            tcl_t_atom[0] = Tcl_NewStringObj("symbol", -1);
-            tcl_t_atom[1] = Tcl_NewStringObj(input->a_w.w_symbol->s_name, strlen(input->a_w.w_symbol->s_name));
-            break;
-        }
-        case A_POINTER: {
-            return TCL_ERROR;
-            tcl_t_atom[0] = Tcl_NewStringObj("pointer", -1);
-            tcl_t_atom[1] = Tcl_NewDoubleObj((long)input->a_w.w_gpointer);
-            break;
-        }
-        default: {
-            tcl_t_atom[0] = Tcl_NewStringObj("?", -1);
-            tcl_t_atom[1] = Tcl_NewStringObj("", 0);
-            break;
-        }
-    }
-#ifdef DEBUG
-    post("pd_to_tcl: atom value = \"%s\"", Tcl_GetStringFromObj(tcl_t_atom[1], 0));
-#endif
-    *output = Tcl_NewListObj(2, &tcl_t_atom[0]);
-    Tcl_IncrRefCount(*output);
-    return TCL_OK;
-}
diff --git a/externals/tclpd/tcl_widgetbehavior.cxx b/externals/tclpd/tcl_widgetbehavior.cxx
deleted file mode 100644
index 818e9a4602cf7054f27f4b4cd7cc1d1f486beee9..0000000000000000000000000000000000000000
--- a/externals/tclpd/tcl_widgetbehavior.cxx
+++ /dev/null
@@ -1,302 +0,0 @@
-#include "tcl_extras.h"
-#include <string.h>
-
-void tclpd_guiclass_motion(t_tcl* x, t_floatarg dx, t_floatarg dy) {
-    Tcl_Obj* av[5]; InitArray(av, 5, NULL);
-    int tmp[4], i, length;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("motion", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewDoubleObj(dx);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewDoubleObj(dy);
-    Tcl_IncrRefCount(av[4]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 5, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-}
-
-void tclpd_guiclass_grab(t_tcl* x, t_glist* glist, int xpix, int ypix) {
-    glist_grab(glist, &x->o.te_g, (t_glistmotionfn)tclpd_guiclass_motion, 0, \
-        (t_floatarg)xpix, (t_floatarg)ypix);
-}
-
-int tclpd_guiclass_click(t_gobj* z, t_glist* glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) {
-    Tcl_Obj* av[9]; InitArray(av, 9, NULL);
-    Tcl_Obj* o = NULL;
-    int i = 0;
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("click", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(xpix);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(ypix);
-    Tcl_IncrRefCount(av[4]);
-    av[5] = Tcl_NewIntObj(shift);
-    Tcl_IncrRefCount(av[5]);
-    av[6] = Tcl_NewIntObj(alt);
-    Tcl_IncrRefCount(av[6]);
-    av[7] = Tcl_NewIntObj(dbl);
-    Tcl_IncrRefCount(av[7]);
-    av[8] = Tcl_NewIntObj(doit);
-    Tcl_IncrRefCount(av[8]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 9, av, 0);
-    if(result != TCL_OK) {
-        goto error;
-    }
-    o = Tcl_GetObjResult(tcl_for_pd);
-    Tcl_IncrRefCount(o);
-    if(strlen(Tcl_GetStringFromObj(o, NULL)) > 0) {
-        result = Tcl_GetIntFromObj(tcl_for_pd, o, &i);
-        if(result != TCL_OK) {
-            goto error;
-        }
-    }
-    goto cleanup;
-
-error:
-    tclpd_interp_error(result);
-
-cleanup:
-    if(o) Tcl_DecrRefCount(o);
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-    Tcl_DecrRefCount(av[5]);
-    Tcl_DecrRefCount(av[6]);
-    Tcl_DecrRefCount(av[7]);
-    Tcl_DecrRefCount(av[8]);
-
-    // return value (BOOL) means 'object wants to be clicked' (g_editor.c:1270)
-    return i;
-}
-
-void tclpd_guiclass_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2) {
-    Tcl_Obj* av[5]; InitArray(av, 5, NULL);
-    Tcl_Obj* o;
-    Tcl_Obj* theList = NULL;
-    int tmp[4], i, length;
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("getrect", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(text_xpix(&x->o, owner));
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(text_ypix(&x->o, owner));
-    Tcl_IncrRefCount(av[4]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 5, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    theList = Tcl_GetObjResult(tcl_for_pd);
-    Tcl_IncrRefCount(theList);
-    length = 0;
-    //result = Tcl_ListObjGetElements(tcl_for_pd, theList, @, @);
-    result = Tcl_ListObjLength(tcl_for_pd, theList, &length);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    if(length != 4) {
-        pd_error(x, "widgetbehavior getrect: must return a list of 4 integers");
-        goto error;
-    }
-    o = NULL;
-    for(i = 0; i < 4; i++) {
-        result = Tcl_ListObjIndex(tcl_for_pd, theList, i, &o);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-        result = Tcl_GetIntFromObj(tcl_for_pd, o, &tmp[i]);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-    }
-    *xp1 = tmp[0]; *yp1 = tmp[1]; *xp2 = tmp[2]; *yp2 = tmp[3];
-    goto cleanup;
-error:
-cleanup:
-    if(theList) Tcl_DecrRefCount(theList);
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-}
-
-void tclpd_guiclass_displace(t_gobj* z, t_glist* glist, int dx, int dy) {
-    Tcl_Obj* av[5]; InitArray(av, 5, NULL);
-    Tcl_Obj* theList = NULL;
-    Tcl_Obj* o;
-    int length, i, tmp[2];
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("displace", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(dx);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(dy);
-    Tcl_IncrRefCount(av[4]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 5, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    theList = Tcl_GetObjResult(tcl_for_pd);
-    Tcl_IncrRefCount(theList);
-    length = 0;
-    //result = Tcl_ListObjGetElements(tcl_for_pd, theList, @, @);
-    result = Tcl_ListObjLength(tcl_for_pd, theList, &length);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    if(length != 2) {
-        pd_error(x, "widgetbehavior displace: must return a list of 2 integers");
-        goto error;
-    }
-    o = NULL;
-    for(i = 0; i < 2; i++) {
-        result = Tcl_ListObjIndex(tcl_for_pd, theList, i, &o);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-        result = Tcl_GetIntFromObj(tcl_for_pd, o, &tmp[i]);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-    }
-    x->o.te_xpix = tmp[0];
-    x->o.te_ypix = tmp[1];
-    canvas_fixlinesfor(glist_getcanvas(glist), (t_text*)x);
-    goto cleanup;
-error:
-cleanup:
-    if(theList) Tcl_DecrRefCount(theList);
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-}
-
-void tclpd_guiclass_select(t_gobj* z, t_glist* glist, int selected) {
-    Tcl_Obj* av[4]; InitArray(av, 4, NULL);
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("select", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(selected);
-    Tcl_IncrRefCount(av[3]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 4, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-}
-
-void tclpd_guiclass_activate(t_gobj* z, t_glist* glist, int state) {
-    Tcl_Obj* av[4]; InitArray(av, 4, NULL);
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("activate", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(state);
-    Tcl_IncrRefCount(av[3]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 4, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-}
-
-void tclpd_guiclass_delete(t_gobj* z, t_glist* glist) {
-    /* will this be ever need to be accessed in Tcl land? */
-    canvas_deletelinesfor(glist_getcanvas(glist), (t_text*)z);
-}
-
-void tclpd_guiclass_vis(t_gobj* z, t_glist* glist, int vis) {
-    Tcl_Obj* av[7]; InitArray(av, 7, NULL);
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("vis", -1);
-    Tcl_IncrRefCount(av[2]);
-    char buf[32];
-    snprintf(buf, 32, ".x%lx.c", glist_getcanvas(glist));
-    av[3] = Tcl_NewStringObj(buf, -1);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(text_xpix(&x->o, glist));
-    Tcl_IncrRefCount(av[4]);
-    av[5] = Tcl_NewIntObj(text_ypix(&x->o, glist));
-    Tcl_IncrRefCount(av[5]);
-    av[6] = Tcl_NewIntObj(vis);
-    Tcl_IncrRefCount(av[6]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 7, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-    Tcl_DecrRefCount(av[5]);
-    Tcl_DecrRefCount(av[6]);
-}
diff --git a/externals/tkwidgets/Makefile b/externals/tkwidgets/Makefile
deleted file mode 100644
index 1c87a43a7e0d7ce0181cb96bee4e1aa121f8a14f..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/Makefile
+++ /dev/null
@@ -1,332 +0,0 @@
-## Pd library template version 1.0.6
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = tkwidgets
-
-# add your .c source files, one object per file, to the SOURCES
-# variable, help files will be included automatically
-SOURCES = checkbutton.c photo.c text.c
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = 
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = 
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, test patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = tkwidgets.h tkwidgets.c
-
-
-
-#------------------------------------------------------------------------------#
-#
-# things you might need to edit if you are using other C libraries
-#
-#------------------------------------------------------------------------------#
-
-# -I"$(PD_INCLUDE)/pd" supports the header location for 0.43
-CFLAGS = -I"$(PD_INCLUDE)/pd" -Wall -W -g
-LDFLAGS =  
-LIBS = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"'
-
-PD_INCLUDE = $(PD_PATH)/include
-# where to install the library, overridden below depending on platform
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL) -p -m 644
-INSTALL_DATA = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU)
-  # GNU/Hurd, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU/kFreeBSD)
-  # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  PD_PATH = $(cygpath $(PROGRAMFILES))/pd
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-# in case somebody manually set the HELPPATCHES above
-HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o tkwidgets.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" tkwidgets.o  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_DATA) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_DATA) Makefile  $(DISTDIR)
-	$(INSTALL_DATA) README.txt $(DISTDIR)
-	$(INSTALL_DATA) LICENSE.txt $(DISTDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_DATA) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(HELPPATCHES))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "CFLAGS: $(CFLAGS)"
-	@echo "LDFLAGS: $(LDFLAGS)"
-	@echo "LIBS: $(LIBS)"
-	@echo "PD_INCLUDE: $(PD_INCLUDE)"
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/tkwidgets/checkbutton-help.pd b/externals/tkwidgets/checkbutton-help.pd
deleted file mode 100644
index e39553b58d78b643fb0494f6799343451bcadebf..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/checkbutton-help.pd
+++ /dev/null
@@ -1,44 +0,0 @@
-#N canvas 12 208 467 404 10;
-#X obj 171 211 checkbutton 90 20;
-#X msg 20 131 query;
-#X obj 263 275 print QUERY;
-#X msg 24 100 query size;
-#X obj 144 188 cnv 15 160 80 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 69 279 print DATA;
-#X msg 204 164 cursor gumby;
-#X obj 155 282 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 192 141 text gumby;
-#X msg 159 73 size 90 20;
-#X msg 184 122 text "blah blah";
-#X obj 51 337 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/checkbutton.htm
-;
-#X msg 141 41 onvalue 5;
-#X msg 347 136 fg blue;
-#X msg 349 158 bg pink;
-#X msg 348 182 anchor w;
-#X msg 116 137 bang;
-#X obj 127 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 125 23 offvalue 3;
-#X msg 172 98 options;
-#X msg 29 160 set 1;
-#X connect 0 0 5 0;
-#X connect 0 0 7 0;
-#X connect 0 1 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 6 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 14 0 0 0;
-#X connect 15 0 0 0;
-#X connect 16 0 0 0;
-#X connect 17 0 0 0;
-#X connect 18 0 0 0;
-#X connect 19 0 0 0;
-#X connect 20 0 0 0;
diff --git a/externals/tkwidgets/checkbutton.c b/externals/tkwidgets/checkbutton.c
deleted file mode 100644
index 00f752b3bd066152563d27ac069a1f1a7aac6401..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/checkbutton.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* [checkbutton] object for dislaying a check box
-
-   Copyright (C) 2007 Hans-Christoph Steiner <hans@at.or.at>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-   This is part of the tkwidgets library for Pd.
-
-*/
-
-/* TODO rectify char and pixel widths/heights ug */
-/* TODO bind to <Configure> so that things are redrawn when the label changes */
-/* TODO add float method to set state based on == 0 and everything else */
-
-#include "tkwidgets.h"
-
-#define DEBUG(x) x
-
-#define TOTAL_INLETS            1
-#define TOTAL_OUTLETS           2
-
-/* ------------------------ class variables --------------------------------- */
-
-static t_class *checkbutton_class;
-static t_widgetbehavior checkbutton_widgetbehavior;
-
-typedef struct _checkbutton
-{
-    t_object    x_obj;
-    t_canvas*   x_canvas;      /* canvas this widget is currently drawn in */
-    t_glist*    x_glist;       /* glist that owns this widget */
-    t_binbuf*   options_binbuf;/* binbuf to save options state in */
-
-    int         width;
-    int         height;
-
-    int         x_resizing;
-    int         x_selected;
-    
-    /* IDs for Tk widgets */
-	t_symbol*   tcl_namespace;       
-    t_symbol*   receive_name;  /* name to bind to to receive callbacks */
-	t_symbol*   canvas_id;  
-	t_symbol*   widget_id;        
-	t_symbol*   handle_id;      
-    t_symbol*   window_tag;
-	t_symbol*   iolets_tag;
-	t_symbol*   all_tag;
-    
-    t_outlet*   x_data_outlet;
-    t_outlet*   x_status_outlet;
-} t_checkbutton;
-
-static char *checkbutton_tk_options[] = {
-    "activebackground",
-    "activeforeground",
-    "anchor",
-    "background",
-    "bitmap",
-    "borderwidth",
-//    "command", /* problematic since it uses names based on pointers */
-    "compound",
-    "cursor",
-    "disabledforeground",
-    "font",
-    "foreground",
-    "height",
-    "highlightbackground",
-    "highlightcolor",
-    "highlightthickness",
-    "image",
-    "indicatoron",
-    "justify",
-    "offrelief",
-    "offvalue",
-    "onvalue",
-    "overrelief",
-    "padx",
-    "pady",
-    "relief",
-    "selectcolor",
-    "selectimage",
-    "state",
-    "takefocus",
-    "text",
-    "textvariable",
-    "underline",
-//    "variable", /* problematic since it uses names based on pointers */
-    "width",
-    "wraplength"
-};
-
-/* -------------------- common symbols to preload --------------------------- */
-
-static t_symbol *id_symbol;
-static t_symbol *query_callback_symbol;
-static t_symbol *size_symbol;
-
-/* -------------------- function prototypes --------------------------------- */
-
-static void checkbutton_query_callback(t_checkbutton *x, t_symbol *s, int argc, t_atom *argv);
-static void checkbutton_set(t_checkbutton* x,  t_float f);
-
-/* -------------------- widget helper functions------------------------------ */
-
-static void set_tkwidgets_ids(t_checkbutton* x, t_canvas* canvas)
-{
-    x->x_canvas = canvas;
-    x->canvas_id = tkwidgets_gen_canvas_id(x->x_canvas);
-    x->widget_id = tkwidgets_gen_widget_id((t_object*)x, x->canvas_id);
-    x->window_tag = tkwidgets_gen_window_tag((t_object*)x, x->canvas_id);
-    x->handle_id = tkwidgets_gen_handle_id((t_object *)x, x->canvas_id);
-}
-
-static void drawme(t_checkbutton *x, t_glist *glist)
-{
-    set_tkwidgets_ids(x,glist_getcanvas(glist));
-    sys_vgui("destroy %s\n", x->widget_id->s_name); /* just in case it exists */
-    sys_vgui("namespace eval %s {} \n", x->tcl_namespace->s_name);
-    sys_vgui("set ::%s::state 0\n", x->tcl_namespace->s_name);
-    sys_vgui("checkbutton %s -variable ::%s::state \
--command {pd [concat %s output $::%s::state \\;]}\n", 
-             x->widget_id->s_name, x->tcl_namespace->s_name, 
-             x->receive_name->s_name, x->tcl_namespace->s_name);
-    if(x->x_glist == x->x_canvas) // if GOP, don't draw inlets
-        tkwidgets_draw_iolets((t_object*)x, glist, 
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-    sys_vgui("%s create window %d %d -anchor nw -window %s -tags {%s %s}\n", 
-             x->canvas_id->s_name, 
-             text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-             x->widget_id->s_name,
-             x->window_tag->s_name, x->all_tag->s_name);
-    tkwidgets_bind_key_events(x->canvas_id, x->widget_id);
-    tkwidgets_bind_mouse_events(x->canvas_id, x->widget_id);
-}
-
-
-static void eraseme(t_checkbutton* x)
-{
-    sys_vgui("destroy %s\n", x->widget_id->s_name);
-    sys_vgui("%s delete %s\n", x->canvas_id->s_name, x->all_tag->s_name);
-}
-
-/* --------------------- query functions ------------------------------------ */
-
-static void query_id(t_checkbutton *x)
-{
-    t_atom id[2];
-    t_symbol *widget_id = x->widget_id;
-    SETSYMBOL(id, id_symbol);
-    SETSYMBOL(id + 1, widget_id);
-    checkbutton_query_callback(x, query_callback_symbol, 2, id);
-}
-
-static void query_size(t_checkbutton *x)
-{
-    t_atom coords[3];
-    SETSYMBOL(coords, size_symbol);
-    SETFLOAT(coords + 1, (t_float)x->width);
-    SETFLOAT(coords + 2, (t_float)x->height);
-    checkbutton_query_callback(x, query_callback_symbol, 3, coords);
-}
-
-static void checkbutton_query(t_checkbutton *x, t_symbol *s)
-{
-    post("checkbutton_query %s", s->s_name);
-    if(s == &s_)
-    {
-        tkwidgets_query_options(x->receive_name, x->widget_id, 
-                                sizeof(checkbutton_tk_options)/sizeof(char *), 
-                                checkbutton_tk_options);
-        query_id(x);
-        query_size(x);
-    }
-    else if(s == id_symbol)
-        query_id(x);
-    else if(s == size_symbol)
-        query_size(x);
-    else
-        tkwidgets_query_options(x->receive_name, x->widget_id, 1, &(s->s_name));
-}
-
-
-/* --------------------- checkbutton widgetbehaviour ------------------------ */
-static void checkbutton_getrect(t_gobj *z, t_glist *glist,
-                          int *xp1, int *yp1, int *xp2, int *yp2)
-{
-    t_checkbutton* x = (t_checkbutton*)z;
-
-    *xp1 = text_xpix(&x->x_obj, glist);
-    *yp1 = text_ypix(&x->x_obj, glist);
-    *xp2 = text_xpix(&x->x_obj, glist) + x->width;
-    *yp2 = text_ypix(&x->x_obj, glist) + x->height;
-}
-
-static void checkbutton_displace(t_gobj *z, t_glist *glist, int dx, int dy)
-{
-    t_checkbutton *x = (t_checkbutton *)z;
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    if (glist_isvisible(glist))
-    {
-        sys_vgui("%s move %s %d %d\n", 
-                 x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
-        sys_vgui("%s move RSZ %d %d\n", x->canvas_id->s_name, dx, dy);
-        canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
-    }
-}
-
-static void checkbutton_select(t_gobj *z, t_glist *glist, int state)
-{
-    t_checkbutton *x = (t_checkbutton *)z;
-    DEBUG(post("checkbutton_select: canvas %lx glist %lx state %d", x->x_canvas, glist, state););
-    
-    if( (state) && (!x->x_selected))
-    {
-        sys_vgui("set ::%s::bg [%s cget -bg]\n", 
-                 x->tcl_namespace->s_name, x->widget_id->s_name);
-        sys_vgui("%s configure -bg %s\n",
-                 x->widget_id->s_name, TKW_SELECTION_COLOR);
-        x->x_selected = 1;
-    }
-    else if (!state)
-    {
-        sys_vgui("%s configure -bg $::%s::bg\n",
-                 x->widget_id->s_name, x->tcl_namespace->s_name);
-        /* activatefn never gets called with 0, so destroy handle here */
-        sys_vgui("destroy %s\n", x->handle_id->s_name);
-        x->x_selected = 0;
-    }
-}
-static void checkbutton_delete(t_gobj *z, t_glist *glist)
-{
-    t_text *x = (t_text *)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-}
-       
-static void checkbutton_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    t_checkbutton* s = (t_checkbutton*)z;
-    if (vis)
-        drawme(s, glist);
-    else
-        eraseme(s);
-}
-
-static void checkbutton_save(t_gobj *z, t_binbuf *b)
-{
-    t_checkbutton *x = (t_checkbutton *)z;
-    binbuf_addv(b, "ssiisii", &s__X, gensym("obj"),
-                x->x_obj.te_xpix, x->x_obj.te_ypix, 
-                atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-                x->width, x->height);
-// TODO    binbuf_addbinbuf(b, x->options_binbuf);
-    binbuf_addv(b, ";");
-}
-
-/* -------------------- methods for atoms ----------------------------------- */
-
-/* this function uses the selector as the Tk option and applies the whole
- * message directly to the Tk widget itself using Tk's "configure".  This
- * function is called when "anything" is received. */
-static void checkbutton_set_option(t_checkbutton *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(s != &s_list)
-    {
-        t_binbuf *argument_binbuf = binbuf_new();
-        char *argument_buffer;
-        int buffer_length;
-        
-        binbuf_add(argument_binbuf, argc, argv);
-        binbuf_gettext(argument_binbuf, &argument_buffer, &buffer_length);
-        binbuf_free(argument_binbuf);
-        argument_buffer[buffer_length] = 0;
-        post("%s configure -%s {%s} \n", 
-                 x->widget_id->s_name, s->s_name, argument_buffer);
-        sys_vgui("%s configure -%s {%s} \n", 
-                 x->widget_id->s_name, s->s_name, argument_buffer);
-        tkwidgets_store_options(x->receive_name, x->tcl_namespace, x->widget_id, 
-                                sizeof(checkbutton_tk_options)/sizeof(char *), 
-                                (char **)&checkbutton_tk_options);
-    }
-}
-
-/* Pass the contents of the text widget onto the checkbutton_output_callback
- * fuction above */
-static void checkbutton_bang_output(t_checkbutton* x)
-{
-    sys_vgui("%s invoke\n", x->widget_id->s_name);
-}
-
-/* Pass the contents of the text widget onto the checkbutton_output_callback
- * fuction above */
-static void checkbutton_float_output(t_checkbutton* x, t_float f)
-{
-    checkbutton_set(x, f);
-    outlet_float(x->x_data_outlet, f);
-}
-
-/* --------------------------- methods for pd space ------------------------- */
-
-static void checkbutton_options(t_checkbutton *x)
-{
-    tkwidgets_list_options(x->x_status_outlet,
-                           sizeof(checkbutton_tk_options)/sizeof(char *), 
-                           (char **)&checkbutton_tk_options);
-}
-
-static void checkbutton_set(t_checkbutton* x,  t_float f)
-{
-    /* TODO figure out which matches make sense, in terms of offvalue/onvalue */
-    sys_vgui("if {%g != 0} {%s select} else {%s deselect}\n",
-             f, x->widget_id->s_name, x->widget_id->s_name, x->widget_id->s_name);
-}
-
-static void checkbutton_size(t_checkbutton *x, t_float width, t_float height)
-{
-    DEBUG(post("checkbutton_size"););
-    x->height = height;
-    x->width = width;
-    if(glist_isvisible(x->x_glist))
-    {
-        sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                 x->canvas_id->s_name, x->window_tag->s_name, x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-}
-
-/* --------------------------- callback functions --------------------------- */
-
-static void checkbutton_output_callback(t_checkbutton* x, t_float f)
-{
-    outlet_float(x->x_data_outlet, f);
-}
-
-static void checkbutton_query_callback(t_checkbutton *x, t_symbol *s, 
-                                       int argc, t_atom *argv)
-{
-    t_symbol *tmp_symbol = atom_getsymbolarg(0, argc, argv);
-    if(tmp_symbol != &s_)
-        outlet_anything(x->x_status_outlet, tmp_symbol, argc - 1, argv + 1);
-    else
-        post("checkbutton_query_callback %s %d", s->s_name, argc);
-}
-
-static void checkbutton_store_callback(t_checkbutton *x, t_symbol *s, 
-                                       int argc, t_atom *argv)
-{
-    if(s != &s_)
-    {
-        binbuf_clear(x->options_binbuf);
-        binbuf_restore(x->options_binbuf, argc, argv);
-    }
-    else
-        post("ERROR: does this ever happen?");
-}
-
-static void checkbutton_resize_click_callback(t_checkbutton *x, t_floatarg f)
-{
-    t_canvas *canvas = (glist_isvisible(x->x_glist) ? x->x_canvas : 0);
-    int button_state = (int)f;
-    if(x->x_resizing && !button_state && canvas)
-    {
-        tkwidgets_draw_iolets((t_object*)x, canvas,
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-    else if(!x->x_resizing && button_state)
-    {
-        tkwidgets_erase_iolets(x->canvas_id, x->iolets_tag);
-    }
-    x->x_resizing = button_state;
-}
-
-static void checkbutton_resize_motion_callback(t_checkbutton *x, 
-                                               t_floatarg f1, t_floatarg f2)
-{
-    DEBUG(post("checkbutton_resize_motion_callback"););
-    if (x->x_resizing)
-    {
-        int dx = (int)f1, dy = (int)f2;
-        if (glist_isvisible(x->x_glist))
-        {
-            x->width += dx;
-            x->height += dy;
-            sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                     x->canvas_id->s_name, x->window_tag->s_name, 
-                     x->width, x->height);
-            sys_vgui("%s move RESIZE %d %d\n",
-                     x->canvas_id->s_name, dx, dy);
-            canvas_fixlinesfor(x->x_glist, (t_text *)x);
-        }
-    }
-}
-
-/* --------------------------- standard class functions --------------------- */
-
-static void checkbutton_free(t_checkbutton *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, x->receive_name);
-}
-
-static void *checkbutton_new(t_symbol* s, int argc, t_atom *argv)
-{
-    t_checkbutton *x = (t_checkbutton *)pd_new(checkbutton_class);
-
-    x->options_binbuf = binbuf_new();
-
-    x->width = 30;
-    x->height = 30;
-
-    if(argc > 0) x->width = atom_getint(argv);
-    if(argc > 1) x->height = atom_getint(argv + 1);
-    if(argc > 2) binbuf_add(x->options_binbuf, argc - 2, argv + 2);
-
-    x->tcl_namespace = tkwidgets_gen_tcl_namespace((t_object*)x, s);
-    x->receive_name = tkwidgets_gen_callback_name(x->tcl_namespace);
-    pd_bind(&x->x_obj.ob_pd, x->receive_name);
-
-    x->x_glist = canvas_getcurrent();
-    x->iolets_tag = tkwidgets_gen_iolets_tag((t_object*)x);
-    x->all_tag = tkwidgets_gen_all_tag((t_object*)x);
-
-    x->x_data_outlet = outlet_new(&x->x_obj, &s_float);
-    x->x_status_outlet = outlet_new(&x->x_obj, &s_anything);
-
-    return (x);
-}
-
-void checkbutton_setup(void)
-{
-    checkbutton_class = class_new(gensym("checkbutton"), 
-                                  (t_newmethod)checkbutton_new, 
-                                  (t_method)checkbutton_free, 
-                                  sizeof(t_checkbutton), 0, A_GIMME,0);
-/* methods for atoms */
-	class_addanything(checkbutton_class, (t_method)checkbutton_set_option);
-	class_addbang(checkbutton_class, (t_method)checkbutton_bang_output);
-	class_addfloat(checkbutton_class, (t_method)checkbutton_float_output);
-
-/* common symbols to preload */
-	id_symbol = gensym("id");
-    query_callback_symbol = gensym("query_callback");
-    size_symbol = gensym("size");
-    
-/* methods for pd space */
-	class_addmethod(checkbutton_class, (t_method)checkbutton_options,
-                    gensym("options"), 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_query,
-                    gensym("query"), A_DEFSYMBOL, 0);
-	class_addmethod(checkbutton_class, (t_method)checkbutton_set,
-                    gensym("set"), A_DEFFLOAT, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_size,
-                    gensym("size"), A_DEFFLOAT, A_DEFFLOAT, 0);
-
-/* callbacks */
-	class_addmethod(checkbutton_class, (t_method)checkbutton_output_callback,
-                    gensym("output"), A_DEFFLOAT, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_query_callback,
-                    query_callback_symbol, A_GIMME, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_store_callback,
-                    gensym("store_callback"), A_GIMME, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_resize_click_callback,
-                    gensym("resize_click"), A_FLOAT, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_resize_motion_callback,
-                    gensym("resize_motion"), A_FLOAT, A_FLOAT, 0);
-
-/* widget behavior */
-    checkbutton_widgetbehavior.w_getrectfn  = checkbutton_getrect;
-    checkbutton_widgetbehavior.w_displacefn = checkbutton_displace;
-    checkbutton_widgetbehavior.w_selectfn   = checkbutton_select;
-    checkbutton_widgetbehavior.w_activatefn = NULL;
-    checkbutton_widgetbehavior.w_deletefn   = checkbutton_delete;
-    checkbutton_widgetbehavior.w_visfn      = checkbutton_vis;
-    checkbutton_widgetbehavior.w_clickfn    = NULL;
-    class_setwidget(checkbutton_class, &checkbutton_widgetbehavior);
-    class_setsavefn(checkbutton_class, &checkbutton_save);
-}
-
-
diff --git a/externals/tkwidgets/frosch.gif b/externals/tkwidgets/frosch.gif
deleted file mode 100644
index 1c2fd41db38b0483908f5e5cdfac70e6445df1d4..0000000000000000000000000000000000000000
Binary files a/externals/tkwidgets/frosch.gif and /dev/null differ
diff --git a/externals/tkwidgets/photo-help.pd b/externals/tkwidgets/photo-help.pd
deleted file mode 100644
index af85b649642a9aaad6e9a8e15b481095fc1528ab..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/photo-help.pd
+++ /dev/null
@@ -1,27 +0,0 @@
-#N canvas 140 178 568 628 10;
-#X text 19 18 Incorporate images. This is instantiated with;
-#X msg 86 132 open \$1;
-#X obj 86 88 bng 15 250 50 0 empty empty empty 0 -6 0 10 -4034 -1 -1
-;
-#X obj 86 109 openpanel;
-#X obj 66 555 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1
--1;
-#X msg 265 152 size \$1 \$2;
-#X obj 265 129 pack 0 0;
-#X obj 313 106 hsl 128 15 0 127 0 0 empty empty y 7 7 0 10 -203904
--1 -1 0 1;
-#X obj 263 88 hsl 128 15 0 127 0 0 empty empty x 7 7 0 10 -204800 -1
--1 0 1;
-#X obj 309 337 photo frosch.gif;
-#X obj 101 336 photo volga.gif;
-#X text 19 34 [photo volga.gif];
-#X text 17 57 [photo] works with .gif \, .ppm \, and .pgm image formats
-only.;
-#X connect 1 0 10 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 0;
-#X connect 7 0 6 1;
-#X connect 8 0 6 0;
-#X connect 10 0 4 0;
diff --git a/externals/tkwidgets/photo.c b/externals/tkwidgets/photo.c
deleted file mode 100644
index 258d101efbe2c670c8723016ac885c06d6709ffe..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/photo.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* [photo] object for dislaying images in a patch
-
-   Copyright (C) 2002-2004 Guenter Geiger
-   Copyright (C) 2007 Hans-Christoph Steiner <hans@at.or.at>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-   This is part of the tkwidgets library for Pd.
-
-*/
-
-#include "tkwidgets.h"
-
-/* ------------------------ photo ----------------------------- */
-
-static t_class *photo_class;
-
-typedef struct _photo
-{
-    t_object     x_obj;
-    t_glist*     x_glist;
-    t_symbol*    receive_name;
-    int          x_width;
-    int          x_height;
-    t_symbol*    filename;
-} t_photo;
-
-static char *photo_tk_options[] = {
-    "activeimage",
-    "disabledimage",
-    "gamma",
-    "image",
-    "state"
-};
-
-/* widget helper functions */
-
-    void photo_drawme(t_photo *x, t_glist *glist, int firsttime)
-{
-	if (firsttime) 
-    {
-		char fname[MAXPDSTRING];
-		canvas_makefilename(glist_getcanvas(x->x_glist), x->filename->s_name,
-							fname, MAXPDSTRING);
-
-        sys_vgui("image create photo img%x -file {%s}\n", x, fname);
-        sys_vgui(".x%x.c create image %d %d -image img%x -anchor nw -tags %xS\n", 
-                 glist_getcanvas(glist),text_xpix(&x->x_obj, glist), 
-                 text_ypix(&x->x_obj, glist),x,x);
-
-        /* TODO callback from gui
-           sys_vgui("photo_size logo");
-        */
-    }     
-    else 
-    {
-        sys_vgui(".x%x.c coords %xS %d %d\n",
-                 glist_getcanvas(glist), x,
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist));
-    }
-	
-}
-
-
-void photo_erase(t_photo* x,t_glist* glist)
-{
-    int n;
-    sys_vgui(".x%x.c delete %xS\n",
-             glist_getcanvas(glist), x);
-
-}
-	
-
-
-/* ------------------------ photo widgetbehaviour----------------------------- */
-
-
-static void photo_getrect(t_gobj *z, t_glist *glist,
-                          int *xp1, int *yp1, int *xp2, int *yp2)
-{
-    t_photo* x = (t_photo*)z;
-
-    *xp1 = text_xpix(&x->x_obj, glist);
-    *yp1 = text_ypix(&x->x_obj, glist);
-    *xp2 = text_xpix(&x->x_obj, glist) + x->x_width;
-    *yp2 = text_ypix(&x->x_obj, glist) + x->x_height;
-}
-
-static void photo_displace(t_gobj *z, t_glist *glist,
-                           int dx, int dy)
-{
-    t_photo *x = (t_photo *)z;
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n",
-             glist_getcanvas(glist), x,
-             text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-             text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height);
-
-    photo_drawme(x, glist, 0);
-    canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-}
-
-static void photo_select(t_gobj *z, t_glist *glist, int state)
-{
-    t_photo *x = (t_photo *)z;
-    if (state) {
-        sys_vgui(".x%x.c create rectangle \
-%d %d %d %d -tags %xSEL -outline blue\n",
-                 glist_getcanvas(glist),
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                 text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height,
-                 x);
-    }
-    else 
-    {
-        sys_vgui(".x%x.c delete %xSEL\n",
-                 glist_getcanvas(glist), x);
-    }
-}
-
-
-static void photo_activate(t_gobj *z, t_glist *glist, int state)
-{
-/*    t_text *x = (t_text *)z;
-      t_rtext *y = glist_findrtext(glist, x);
-      if (z->g_pd != gatom_class) rtext_activate(y, state);*/
-}
-
-static void photo_delete(t_gobj *z, t_glist *glist)
-{
-    t_text *x = (t_text *)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-}
-
-       
-static void photo_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    t_photo* s = (t_photo*)z;
-    if (vis)
-        photo_drawme(s, glist, 1);
-    else
-        photo_erase(s,glist);
-}
-
-/* can we use the normal text save function ?? */
-
-static void photo_save(t_gobj *z, t_binbuf *b)
-{
-    t_photo *x = (t_photo *)z;
-    binbuf_addv(b, "ssiiss;", gensym("#X"), gensym("obj"),
-                x->x_obj.te_xpix, x->x_obj.te_ypix,   
-                atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-                x->filename);
-}
-
-
-void photo_size(t_photo* x,t_floatarg w,t_floatarg h) {
-    x->x_width = w;
-    x->x_height = h;
-}
-
-void photo_open(t_photo* x, t_symbol* fname)
-{
-    x->filename = fname;
-    photo_erase(x, x->x_glist);
-    photo_drawme(x, x->x_glist, 1);
-}
-
-
-static void photo_free(t_photo *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, x->receive_name);
-}
-
-static void *photo_new(t_symbol* s)
-{
-    t_photo *x = (t_photo *)pd_new(photo_class);
-
-    x->x_glist = (t_glist*) canvas_getcurrent();
-
-    x->x_width = 15;
-    x->x_height = 15;
-
-    x->x_glist = canvas_getcurrent();
-
-	x->filename = s;
-    outlet_new(&x->x_obj, &s_float);
-    return (x);
-}
-
-
-static t_widgetbehavior photo_widgetbehavior = {
-w_getrectfn:	photo_getrect,
-w_displacefn:	photo_displace,
-w_selectfn:     photo_select,
-w_activatefn:	photo_activate,
-w_deletefn:	    photo_delete,
-w_visfn:        photo_vis,
-w_clickfn:      NULL,
-};
-
-void photo_setup(void)
-{
-    photo_class = class_new(gensym("photo"), (t_newmethod)photo_new, 
-                            (t_method)photo_free, 
-                            sizeof(t_photo), 0, A_DEFSYM,0);
-    
-    class_addmethod(photo_class, (t_method)photo_size, gensym("size"),
-                    A_FLOAT, A_FLOAT, 0);
-
-/*
-  class_addmethod(photo_class, (t_method)photo_color, gensym("color"),
-  A_SYMBOL, 0);
-*/
-
-    class_addmethod(photo_class, (t_method)photo_open, gensym("open"),
-                    A_SYMBOL, 0);
-	
-    class_setwidget(photo_class, &photo_widgetbehavior);
-    class_setsavefn(photo_class, &photo_save);
-}
-
-
diff --git a/externals/tkwidgets/text-help.pd b/externals/tkwidgets/text-help.pd
deleted file mode 100644
index eed5fae23aff7baeb98aa4e6e887efee191cd7e0..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/text-help.pd
+++ /dev/null
@@ -1,251 +0,0 @@
-#N canvas 245 42 785 704 10;
-#X obj 52 -43 text 130 60 0;
-#X obj 53 -193 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 12 65 print;
-#X msg 78 -197 clear;
-#X msg 107 -157 set one two three four five six;
-#X obj 36 142 text 130 60 0;
-#X obj 231 3 select return;
-#X obj 59 66 pddp/print;
-#X obj 198 -86 trigger bang bang;
-#X msg 198 -65 clear;
-#X symbolatom 196 68 10 0 0 1 last_key_typed - -;
-#X text 235 24 ^-- hit return to output;
-#X msg 118 -134 append seven eight nine;
-#X msg 122 -114 append ten eleven.;
-#X obj 554 -171 text 130 60 0 -autoseparators 1 -background white -borderwidth
-2 -cursor xterm -exportselection 1 -font {Courier 12} -foreground Black
--height 24 -highlightbackground systemWindowBody -highlightcolor Black
--highlightthickness 1 -insertbackground Black -insertborderwidth 0
--insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X obj 581 -213 symbol;
-#X msg 479 -240 flat;
-#X msg 514 -240 groove;
-#X msg 561 -240 raised;
-#X msg 609 -241 ridge;
-#X msg 650 -241 solid;
-#X msg 691 -241 sunken;
-#X obj 653 281 symbol;
-#X obj 557 283 symbol;
-#X msg 540 259 on;
-#X msg 574 258 off;
-#X msg 634 256 normal;
-#X msg 680 256 disabled;
-#X msg 26 110 size 100 50;
-#X text 633 236 disable editing;
-#X obj 582 -34 text 130 60 0;
-#X obj 581 -79 symbol;
-#X obj 597 107 symbol;
-#X msg 539 -104 none;
-#X msg 574 -104 char;
-#X msg 611 -104 word;
-#X text 628 -80 word wrapping;
-#X msg 612 75 purple;
-#X msg 659 75 orange;
-#X msg 707 74 magenta;
-#X obj 452 45 pddp/pddplink http://en.wikipedia.org/wiki/X11_color_names
-;
-#X obj 394 -34 text 130 60 0 -autoseparators 1 -background grey70 -borderwidth
-1 -cursor xterm -exportselection 1 -font {Courier 12} -foreground Black
--height 24 -highlightbackground systemWindowBody -highlightcolor Black
--highlightthickness 1 -insertbackground Black -insertborderwidth 0
--insertofftime 300 -insertontime 600 -insertwidth 0 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X obj 331 -90 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 10 -262144
--1 -1 0 1;
-#X obj 59 330 text 130 60 0 -autoseparators 1 -background grey70 -borderwidth
-1 -cursor gobbler -exportselection 1 -font {Courier 12} -foreground
-Black -height 24 -highlightbackground systemWindowBody -highlightcolor
-Black -highlightthickness 1 -insertbackground Black -insertborderwidth
-0 -insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlight -selectborderwidth
-1 -selectforeground systemHighlightText -setgrid 0 -spacing1 0 -spacing2
-0 -spacing3 0 -state normal -undo 0 -width 80 -wrap char;
-#X obj 58 285 symbol;
-#X obj 46 394 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/cursors.htm
-;
-#X msg 56 250 boat;
-#X msg 16 250 clock;
-#X msg 159 250 gumby;
-#X msg 202 250 gobbler;
-#X obj 404 -212 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 10 -262144
--1 -1 0 1;
-#X obj 470 -90 tgl 15 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0
-1;
-#X msg 109 -80 key a;
-#X msg 150 -80 key 32;
-#X obj 352 259 keyup;
-#X msg 352 298 key \$1;
-#X floatatom 369 280 5 0 0 0 - - -;
-#X msg 249 -41 key 3322;
-#X obj 560 335 text 130 60 0;
-#X obj 352 333 text 130 60 0;
-#X text 347 237 type single chars:;
-#X msg 421 284 key a;
-#X msg 422 306 key 9;
-#X text 201 372 for more cursors:;
-#X text 337 398 for more keynums:;
-#X msg 413 265 key 65228;
-#X msg 91 250 coffee_mug;
-#X msg 59 306 cursor \$1;
-#X msg 401 -192 borderwidth \$1;
-#X msg 582 -192 relief \$1;
-#X msg 582 -58 wrap \$1;
-#X msg 329 -70 insertwidth \$1;
-#X msg 557 305 undo \$1;
-#X msg 652 304 state \$1;
-#X msg 113 110 size 200 100;
-#X msg 577 75 #00f;
-#X text 528 236 turn off undo;
-#X obj 261 157 text 130 60 0 -autoseparators 1 -background grey70 -borderwidth
-1 -cursor xterm -exportselection 1 -font {"Lucida Sans" 18 bold} -foreground
-Black -height 24 -highlightbackground systemWindowBody -highlightcolor
-Black -highlightthickness 1 -insertbackground Black -insertborderwidth
-0 -insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X msg 285 133 font "Lucida Sans" 18 bold;
-#X msg 261 108 font Arial 16;
-#X obj 339 412 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/keysyms.htm
-;
-#X obj 140 -253 pddp/pddplink http://puredata.info/dev/TkWidget -text
-TkWidget library;
-#X text 22 -253 This is part of the;
-#X obj 186 -229 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/text.htm
--text text;
-#X text 37 -229 This object is based on:;
-#X msg 470 -70 scrollbars \$1;
-#X msg 598 128 background \$1;
-#X obj 469 160 text 300 60 0 -autoseparators 1 -background orange -borderwidth
-1 -cursor xterm -exportselection 1 -font {Courier 12} -foreground magenta
--height 24 -highlightbackground systemWindowBody -highlightcolor Black
--highlightthickness 1 -insertbackground Black -insertborderwidth 0
--insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X obj 479 107 symbol;
-#X msg 519 74 magenta;
-#X msg 480 128 foreground \$1;
-#X msg 399 75 #ff0;
-#X msg 435 75 grey;
-#X msg 471 75 black;
-#N canvas 410 182 450 300 adding 0;
-#X obj 90 229 text 200 60 0;
-#X text 53 3 You can add text one character at a time using the "key"
-message. It works either with the character itself or the ASCII value
-of the character:;
-#X msg 90 82 key \$1;
-#X obj 94 57 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X msg 126 202 key ";
-#X msg 169 202 key a;
-#X msg 215 202 key B;
-#X msg 145 82 key 10;
-#X msg 259 202 key [;
-#X msg 145 102 key 32;
-#X text 198 83 carriage return;
-#X text 198 102 space;
-#X msg 145 163 key 92;
-#X text 199 161 backslash;
-#X msg 145 143 key 59;
-#X text 199 141 semicolon;
-#X msg 145 122 key 44;
-#X text 198 122 comma;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 12 0 0 0;
-#X connect 14 0 0 0;
-#X connect 16 0 0 0;
-#X restore 199 -200 pd adding with the key message;
-#X obj 107 -177 loadbang;
-#X connect 0 0 2 0;
-#X connect 0 0 7 0;
-#X connect 0 1 6 0;
-#X connect 0 1 10 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 8 0;
-#X connect 8 0 9 0;
-#X connect 8 1 0 0;
-#X connect 9 0 0 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 15 0 69 0;
-#X connect 16 0 15 0;
-#X connect 17 0 15 0;
-#X connect 18 0 15 0;
-#X connect 19 0 15 0;
-#X connect 20 0 15 0;
-#X connect 21 0 15 0;
-#X connect 22 0 73 0;
-#X connect 23 0 72 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 0;
-#X connect 26 0 22 0;
-#X connect 27 0 22 0;
-#X connect 28 0 5 0;
-#X connect 31 0 70 0;
-#X connect 32 0 86 0;
-#X connect 33 0 31 0;
-#X connect 34 0 31 0;
-#X connect 35 0 31 0;
-#X connect 37 0 32 0;
-#X connect 38 0 32 0;
-#X connect 39 0 32 0;
-#X connect 42 0 71 0;
-#X connect 44 0 67 0;
-#X connect 46 0 44 0;
-#X connect 47 0 44 0;
-#X connect 48 0 44 0;
-#X connect 49 0 44 0;
-#X connect 50 0 68 0;
-#X connect 51 0 85 0;
-#X connect 52 0 0 0;
-#X connect 53 0 0 0;
-#X connect 54 0 55 0;
-#X connect 54 0 56 0;
-#X connect 55 0 59 0;
-#X connect 57 0 0 0;
-#X connect 61 0 59 0;
-#X connect 62 0 59 0;
-#X connect 65 0 59 0;
-#X connect 66 0 44 0;
-#X connect 67 0 43 0;
-#X connect 68 0 14 0;
-#X connect 69 0 14 0;
-#X connect 70 0 30 0;
-#X connect 71 0 41 0;
-#X connect 72 0 58 0;
-#X connect 73 0 58 0;
-#X connect 74 0 5 0;
-#X connect 75 0 32 0;
-#X connect 78 0 77 0;
-#X connect 79 0 77 0;
-#X connect 85 0 41 0;
-#X connect 86 0 87 0;
-#X connect 88 0 90 0;
-#X connect 89 0 88 0;
-#X connect 90 0 87 0;
-#X connect 91 0 88 0;
-#X connect 92 0 88 0;
-#X connect 93 0 88 0;
-#X connect 95 0 4 0;
diff --git a/externals/tkwidgets/text-test.pd b/externals/tkwidgets/text-test.pd
deleted file mode 100644
index 5926ed9eb664f8ffaf721084212a531be317ae2f..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/text-test.pd
+++ /dev/null
@@ -1,27 +0,0 @@
-#N canvas 525 280 538 519 10;
-#X obj 169 112 text 227 97 1;
-#X msg 174 40 bang;
-#X msg 289 83 key \$1;
-#X msg 273 48 123;
-#X msg 305 48 124;
-#X msg 335 48 125;
-#X msg 242 49 10;
-#X msg 368 47 92;
-#X obj 177 367 text 200 60 0;
-#X obj 190 283 loadbang;
-#X msg 182 319 set blah blah blah;
-#X msg 425 48 59;
-#X msg 397 47 44;
-#X obj 169 219 pddp/print;
-#X connect 0 0 13 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 7 0 2 0;
-#X connect 9 0 10 0;
-#X connect 10 0 8 0;
-#X connect 11 0 2 0;
-#X connect 12 0 2 0;
diff --git a/externals/tkwidgets/text.c b/externals/tkwidgets/text.c
deleted file mode 100644
index 610d574ad87596e2b4e5168fb2ba11ba5b91cd4c..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/text.c
+++ /dev/null
@@ -1,783 +0,0 @@
-/* text widget for Pd
-
-  Copyright 2003 Guenter Geiger
-  Copyright 2004 Ben Bogart <ben@ekran.org>
-  Copyright 2007 Hans-Christoph Steiner <hans@at.or.at>
-
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-  
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-  
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include "tkwidgets.h"
-
-/* TODO: append options messages to options_binbuf if not visible */
-/* TODO: window name "handle1376fc00" already exists in parent */
-/* TODO: figure out window vs. text width/height */
-/* TODO: add x scrollbar */
-/* TODO: make "insert" function based on the text widget "insert" */
-/* TODO: make [key( support chars > 127 */
-
-
-#define TEXT_DEFAULT_COLOR     "grey90"
-#define TEXT_DEFAULT_WIDTH     200
-#define TEXT_DEFAULT_HEIGHT    60
-#define TEXT_MIN_WIDTH         40
-#define TEXT_MIN_HEIGHT        20
-
-#define DEBUG(x)
-//#define DEBUG(x) x
-
-static t_class *textwidget_class;
-static t_widgetbehavior textwidget_widgetbehavior;
-
-typedef struct _textwidget
-{
-    t_object    x_obj;
-    t_canvas*   x_canvas;      /* canvas this widget is currently drawn in */
-    t_glist*    x_glist;       /* glist that owns this widget */
-    t_binbuf*   options_binbuf;/* binbuf to save options state in */
-    t_binbuf*   text_binbuf;   /* store text on copy/paste and [loadbang] set*/
-
-    int         width;
-    int         height;
-    int         have_scrollbars;
-
-    int         x_resizing;
-    int         x_selected;
-    
-    /* IDs for Tk widgets */
-	t_symbol*   tcl_namespace;       
-    t_symbol*   receive_name;  /* name to bind to to receive callbacks */
-	t_symbol*   canvas_id;  
-    t_symbol*   frame_id;       
-	t_symbol*   widget_id;        
-    t_symbol*   scrollbar_id;   
-	t_symbol*   handle_id;      
-	t_symbol*   window_tag;      
-	t_symbol*   iolets_tag;
-	t_symbol*   all_tag;
-    
-    t_outlet*   x_data_outlet;
-    t_outlet*   x_status_outlet;
-} t_textwidget;
-
-static char *textwidget_tk_options[] = {
-    "autoseparators",
-    "background",
-    "borderwidth",
-    "cursor",
-    "exportselection",
-    "font",
-    "foreground",
-    "height",
-    "highlightbackground",
-    "highlightcolor",
-    "highlightthickness",
-    "insertbackground",
-    "insertborderwidth",
-    "insertofftime",
-    "insertontime",
-    "insertwidth",
-    "maxundo",
-    "padx",
-    "pady",
-    "relief",
-    "selectbackground",
-    "selectborderwidth",
-    "selectforeground",
-    "setgrid",
-    "spacing1",
-    "spacing2",
-    "spacing3",
-    "state",
-    "tabs",
-    "takefocus",
-    "undo",
-    "width",
-    "wrap",
-//    "xscrollcommand", /* problematic since it uses the canvas_id, etc. */
-//    "yscrollcommand", /* problematic since it uses the canvas_id, etc. */
-};
-
-
-/* common symbols to preload */
-static t_symbol *backspace_symbol;
-static t_symbol *down_symbol;
-static t_symbol *escape_symbol;
-static t_symbol *id_symbol;
-static t_symbol *left_symbol;
-static t_symbol *query_callback_symbol;
-static t_symbol *return_symbol;
-static t_symbol *right_symbol;
-static t_symbol *scrollbars_symbol;
-static t_symbol *size_symbol;
-static t_symbol *space_symbol;
-static t_symbol *tab_symbol;
-static t_symbol *up_symbol;
-
-/* -------------------- function prototypes --------------------------------- */
-
-static void textwidget_query_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv);
-
-
-/* -------------------- widget helper functions ----------------------------- */
-
-
-static void query_id(t_textwidget *x)
-{
-    t_atom id[2];
-    t_symbol *widget_id = x->widget_id;
-    SETSYMBOL(id, id_symbol);
-    SETSYMBOL(id + 1, widget_id);
-    textwidget_query_callback(x, query_callback_symbol, 2, id);
-}
-
-static void query_scrollbars(t_textwidget *x)
-{
-    t_atom state[2];
-    SETSYMBOL(state, scrollbars_symbol);
-    SETFLOAT(state + 1, (t_float)x->have_scrollbars);
-    textwidget_query_callback(x, query_callback_symbol, 2, state);
-}
-
-static void query_size(t_textwidget *x)
-{
-    t_atom coords[3];
-    SETSYMBOL(coords, size_symbol);
-    SETFLOAT(coords + 1, (t_float)x->width);
-    SETFLOAT(coords + 2, (t_float)x->height);
-    textwidget_query_callback(x, query_callback_symbol, 3, coords);
-}
-
-static void set_tkwidgets_ids(t_textwidget *x, t_canvas *canvas)
-{
-    x->x_canvas = canvas;
-    x->canvas_id = tkwidgets_gen_canvas_id(x->x_canvas);
-    x->frame_id = tkwidgets_gen_frame_id((t_object*)x, x->canvas_id);
-    x->widget_id = tkwidgets_gen_widget_id((t_object*)x, x->frame_id);
-    x->scrollbar_id = tkwidgets_gen_scrollbar_id((t_object*)x, x->frame_id);
-    x->window_tag = tkwidgets_gen_window_tag((t_object*)x, x->frame_id);
-    x->handle_id = tkwidgets_gen_handle_id((t_object *)x, x->canvas_id);
-}
-
-static void create_widget(t_textwidget *x)
-{
-    DEBUG(post("create_widget"););
-
-    sys_vgui("namespace eval %s {} \n", x->tcl_namespace->s_name);
-    
-    /* Seems we have to delete the widget in case it already exists (Provided by Guenter)*/
-    sys_vgui("destroy %s\n", x->frame_id->s_name);
-    sys_vgui("frame %s \n", x->frame_id->s_name);
-    sys_vgui("text %s -bd 1 -highlightbackground grey70 -highlightthickness 1 -bg %s\n",
-             x->widget_id->s_name, TEXT_DEFAULT_COLOR);
-    sys_vgui("pack %s -side left -fill both -expand 1 \n", x->widget_id->s_name);
-    sys_vgui("pack %s -side bottom -fill both -expand 1 \n", x->frame_id->s_name);
-
-    tkwidgets_bind_key_events(x->canvas_id, x->widget_id);
-    tkwidgets_bind_mouse_events(x->canvas_id, x->widget_id);
-    /* bind to KeyRelease events to send out right outlet one key at a time */
-    sys_vgui("bind %s <KeyRelease> {+pd %s keyup %%N \\;} \n", 
-             x->widget_id->s_name, x->receive_name->s_name);
-/* override the standard Pd bindings for these since they cause trouble */
-#ifdef __APPLE__
-    sys_vgui("bind %s <Mod1-a> {%s tag add sel 1.0 end} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-    sys_vgui("bind %s <Mod1-v> {tk_textPaste %s} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-#else
-    sys_vgui("bind %s <Control-a> {%s tag add sel 1.0 end} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-    sys_vgui("bind %s <Control-v> {tk_textPaste %s} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-#endif
-}
-
-static void drawme(t_textwidget *x, t_glist *glist)
-{
-    char *buf;
-    int bufsize;
-    DEBUG(post("drawme: firsttime %d canvas %lx glist %lx", x->x_canvas, glist););
-    set_tkwidgets_ids(x,glist_getcanvas(glist));	
-    create_widget(x);	
-    if(x->x_glist == x->x_canvas) // if GOP, don't draw inlets
-        tkwidgets_draw_iolets((t_object*)x, glist, 
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-    if(x->have_scrollbars) 
-        tkwidgets_draw_y_scrollbar(x->widget_id, x->scrollbar_id);
-    sys_vgui("%s create window %d %d -anchor nw -window %s    \
-                  -tags {%s %s} -width %d -height %d \n", x->canvas_id->s_name,
-             text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-             x->frame_id->s_name, x->window_tag->s_name, x->all_tag->s_name, 
-             x->width, x->height);
-    tkwidgets_restore_options(x->widget_id, x->options_binbuf);
-    binbuf_gettext(x->text_binbuf, &buf, &bufsize);
-    buf[bufsize] = 0; // binbuf_gettext() doesn't terminate the string
-    post("%s insert end {%s}\n", x->widget_id->s_name, buf);
-    sys_vgui("%s insert end {%s}\n", x->widget_id->s_name, buf);
-}     
-
-static void eraseme(t_textwidget* x)
-{
-    DEBUG(post("eraseme: canvas %lx", x->x_canvas););
-    sys_vgui("destroy %s\n", x->frame_id->s_name);
-    sys_vgui("%s delete %s\n", x->canvas_id->s_name, x->all_tag->s_name);
-}
-	
-
-
-/* ------------------------ text widgetbehaviour----------------------------- */
-
-static void textwidget_getrect(t_gobj *z, t_glist *owner, 
-                          int *xp1, int *yp1, int *xp2, int *yp2)
-{
-//    DEBUG(post("textwidget_getrect");); /* this one is very chatty :D */
-    t_textwidget *x = (t_textwidget*)z;
-    *xp1 = text_xpix(&x->x_obj, owner);
-    *yp1 = text_ypix(&x->x_obj, owner);
-    *xp2 = *xp1 + x->width;
-    *yp2 = *yp1 + x->height + 2; // add 2 to give space for outlets
-}
-
-static void textwidget_displace(t_gobj *z, t_glist *glist, int dx, int dy)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    DEBUG(post("textwidget_displace: canvas %lx glist %lx", x->x_canvas, glist););
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    if (glist_isvisible(glist))
-    {
-//        set_tkwidgets_ids(x,glist_getcanvas(glist)); /* TODO is this needed here? */
-        sys_vgui("%s move %s %d %d\n", x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
-        sys_vgui("%s move RESIZE %d %d\n", x->canvas_id->s_name, dx, dy);
-        canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
-    }
-    DEBUG(post("displace end"););
-}
-
-static void textwidget_select(t_gobj *z, t_glist *glist, int state)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    DEBUG(post("textwidget_select: canvas %lx glist %lx state %d", x->x_canvas, glist, state););
-    
-    if( (state) && (!x->x_selected))
-    {
-        sys_vgui("set ::%s::bg [%s cget -bg]\n", 
-                 x->tcl_namespace->s_name, x->widget_id->s_name);
-        sys_vgui("%s configure -bg %s -state disabled -cursor $cursor_editmode_nothing\n",
-                 x->widget_id->s_name, TKW_SELECTION_COLOR);
-        x->x_selected = 1;
-    }
-    else if (!state)
-    {
-        sys_vgui("%s configure -bg $::%s::bg -state normal -cursor xterm\n",
-                 x->widget_id->s_name, x->tcl_namespace->s_name);
-        /* activatefn never gets called with 0, so destroy handle here */
-        sys_vgui("destroy %s\n", x->handle_id->s_name);
-        x->x_selected = 0;
-    }
-}
-
-static void textwidget_activate(t_gobj *z, t_glist *glist, int state)
-{
-    DEBUG(post("textwidget_activate"););    
-    t_textwidget *x = (t_textwidget *)z;
- 	int x1, y1, x2, y2;
-
-    if(state)
-    {
-        textwidget_getrect(z, glist, &x1, &y1, &x2, &y2);
-        sys_vgui("canvas %s -width %d -height %d -bg #ddd -bd 0 \
--highlightthickness 3 -highlightcolor {#f00} -cursor bottom_right_corner\n",
-                 x->handle_id->s_name, TKW_HANDLE_WIDTH, TKW_HANDLE_HEIGHT);
-        int handle_x1 = x2 - TKW_HANDLE_WIDTH;
-        int handle_y1 = y2 - (TKW_HANDLE_HEIGHT - TKW_HANDLE_INSET);
-//        int handle_x2 = x2;
-//        int handle_y2 = y2 - TKW_HANDLE_INSET;
-/* no worky, this should draw MAC OS X style lines on the resize handle */
-/*         sys_vgui("%s create line %d %d %d %d -fill black -tags RESIZE_LINES\n",  */
-/*                  x->handle_id->s_name, handle_x2, handle_y1, handle_x1, handle_y2); */
-/* TODO split out the handle and the handle binding into common functions */
-        sys_vgui("%s create window %d %d -anchor nw -width %d -height %d -window %s -tags RESIZE\n",
-                 x->canvas_id->s_name, handle_x1, handle_y1,
-                 TKW_HANDLE_WIDTH, TKW_HANDLE_HEIGHT,
-                 x->handle_id->s_name, x->all_tag->s_name);
-        sys_vgui("raise %s\n", x->handle_id->s_name);
-        sys_vgui("bind %s <Button> {pd [concat %s resize_click 1 \\;]}\n",
-                 x->handle_id->s_name, x->receive_name->s_name);
-        sys_vgui("bind %s <ButtonRelease> {pd [concat %s resize_click 0 \\;]}\n",
-                 x->handle_id->s_name, x->receive_name->s_name);
-        sys_vgui("bind %s <Motion> {pd [concat %s resize_motion %%x %%y \\;]}\n",
-                 x->handle_id->s_name, x->receive_name->s_name);
-    }
-}
-
-static void textwidget_delete(t_gobj *z, t_glist *glist)
-{
-    DEBUG(post("textwidget_delete: glist %lx", glist););    
-    t_text *x = (t_text *)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-}
-
-       
-static void textwidget_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    t_textwidget *x = (t_textwidget*)z;
-    DEBUG(post("textwidget_vis: vis %d canvas %lx glist %lx", vis, x->x_canvas, glist););
-    if (vis)
-        drawme(x, glist);
-    else 
-        eraseme(x);
-}
-
-/*  the clickfn is only called in run mode and is therefore not useful AFAIK
- *  for this text widget, unless there is something like click to output words
- *  implemented, which is what Max/MSP's textedit does */
-/*
-static int textwidget_click(t_gobj *z, t_glist *glist, int xpix, int ypix, 
-                       int shift, int alt, int dbl, int doit)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    DEBUG(post("textwidget_click x:%d y:%d edit: %d", xpix, ypix, x->x_canvas->gl_edit););
-    return 0;
-}
-*/
-
-static void textwidget_save(t_gobj *z, t_binbuf *b)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    
-    binbuf_addv(b, "ssiisiii", &s__X, gensym("obj"),
-                x->x_obj.te_xpix, x->x_obj.te_ypix, 
-                atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-                x->width, x->height, x->have_scrollbars);
-    binbuf_addbinbuf(b, x->options_binbuf);
-    binbuf_addv(b, ";");
-}
-
-
-/* -------------------- methods for atoms ----------------------------------- */
-
-/* this function uses the selector as the Tk option and applies the whole
- * message directly to the Tk widget itself using Tk's "configure".  This
- * function is called when "anything" is received. */
-static void textwidget_set_option(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(s != &s_list)
-    {
-        t_binbuf *argument_binbuf = binbuf_new();
-        char *argument_buffer;
-        int buffer_length;
-        
-        binbuf_add(argument_binbuf, argc, argv);
-        binbuf_gettext(argument_binbuf, &argument_buffer, &buffer_length);
-        binbuf_free(argument_binbuf);
-        argument_buffer[buffer_length] = 0;
-        sys_vgui("%s configure -%s {%s} \n", 
-                 x->widget_id->s_name, s->s_name, argument_buffer);
-        tkwidgets_store_options(x->receive_name, x->tcl_namespace, x->widget_id, 
-                                sizeof(textwidget_tk_options)/sizeof(char *), 
-                                (char **)&textwidget_tk_options);
-    }
-}
-
-/* Pass the contents of the text widget onto the textwidget_output_callback
- * fuction above */
-static void textwidget_bang_output(t_textwidget* x)
-{
-    /* With "," and ";" escaping thanks to JMZ */
-    sys_vgui("pd [concat %s output [string map {\",\" \"\\\\,\" \";\" \"\\\\;\"} \
-              [%s get 0.0 end]] \\;]\n", 
-             x->receive_name->s_name, x->widget_id->s_name);
-}
-
-/* -------------------- methods for pd space -------------------------------- */
-
-static void textwidget_append(t_textwidget* x,  t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_append"););
-    int i;
-    t_symbol *tmp_symbol = s; /* <-- this gets rid of the unused variable warning */
-    t_float tmp_float;
-
-    for(i=0; i<argc ; i++)
-    {
-        tmp_symbol = atom_getsymbolarg(i, argc, argv);
-        if(tmp_symbol == &s_)
-        {
-            tmp_float = atom_getfloatarg(i, argc , argv);
-            sys_vgui("lappend ::%s::list %g \n", x->tcl_namespace->s_name, tmp_float );
-        }
-        else 
-        {
-            sys_vgui("lappend ::%s::list %s \n", x->tcl_namespace->s_name, tmp_symbol->s_name );
-        }
-    }
-    sys_vgui("append ::%s::list \" \"\n", x->tcl_namespace->s_name);
-    sys_vgui("%s insert end $::%s::list ; unset ::%s::list \n", 
-               x->widget_id->s_name, x->tcl_namespace->s_name, x->tcl_namespace->s_name );
-    sys_vgui("%s yview end-2char \n", x->widget_id->s_name );
-}
-
-/* Clear the contents of the text widget */
-static void textwidget_clear(t_textwidget* x)
-{
-    sys_vgui("%s delete 0.0 end \n", x->widget_id->s_name);
-}
-
-static void textwidget_key(t_textwidget* x,  t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_key"););
-    t_symbol *tmp_symbol = s; /* <-- this gets rid of the unused variable warning */
-    char charbuf;
-
-    tmp_symbol = atom_getsymbolarg(0, argc, argv);
-    if(tmp_symbol == &s_)
-        charbuf = (t_int) atom_getfloatarg(0, argc , argv);
-    else
-        charbuf = tmp_symbol->s_name[0];
-    if(charbuf < 10)
-    {
-        sys_vgui("%s insert end %d\n", x->widget_id->s_name, charbuf);
-    }
-    else 
-    {
-        switch(charbuf)
-        {
-        case '\\': 
-            sys_vgui("%s insert end \"\\\\\"\n", x->widget_id->s_name); break;
-        case '{': 
-            sys_vgui("%s insert end {\\{}\n", x->widget_id->s_name); break;
-        case '}': 
-            sys_vgui("%s insert end \"}\"\n", x->widget_id->s_name); break;
-        default:
-            sys_vgui("%s insert end {%c}\n", x->widget_id->s_name, charbuf);
-        }
-    }
-    sys_vgui("%s yview end-2char\n", x->widget_id->s_name );
-}
-
-/* Function to reset the contents of the textwidget box */
-static void textwidget_set(t_textwidget* x,  t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_set"););
-
-    if(glist_isvisible(x->x_glist))
-    {
-        textwidget_clear(x);
-        textwidget_append(x, s, argc, argv);
-    }
-    else
-    {
-        binbuf_clear(x->text_binbuf);
-        binbuf_add(x->text_binbuf, argc, argv);
-    }
-}
-
-static void textwidget_options(t_textwidget *x)
-{
-    tkwidgets_list_options(x->x_status_outlet,
-                           sizeof(textwidget_tk_options)/sizeof(char *), 
-                           (char **)&textwidget_tk_options);
-}
-
-static void textwidget_query(t_textwidget *x, t_symbol *s)
-{
-    post("textwidget_query %s", s->s_name);
-    if(s == &s_)
-    {
-        tkwidgets_query_options(x->receive_name, x->widget_id, 
-                                sizeof(textwidget_tk_options)/sizeof(char *), 
-                                textwidget_tk_options);
-        query_id(x);
-        query_scrollbars(x);
-        query_size(x);
-    }
-    else if(s == id_symbol)
-        query_id(x);
-    else if(s == scrollbars_symbol)
-        query_scrollbars(x);
-    else if(s == size_symbol)
-        query_size(x);
-    else
-        tkwidgets_query_options(x->receive_name, x->widget_id, 1, &(s->s_name));
-}
-
-static void textwidget_scrollbars(t_textwidget *x, t_float f)
-{
-    int value = (int) f;
-    if(value > 0)
-    {
-        x->have_scrollbars = 1;
-        tkwidgets_draw_y_scrollbar(x->widget_id, x->scrollbar_id);
-    }
-    else
-    {
-        x->have_scrollbars = 0;
-        tkwidgets_erase_y_scrollbar(x->widget_id, x->scrollbar_id);
-    }
-}
-
-static void textwidget_size(t_textwidget *x, t_float width, t_float height)
-{
-    DEBUG(post("textwidget_size"););
-    x->height = height;
-    x->width = width;
-    if(glist_isvisible(x->x_glist))
-    {
-        sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                 x->canvas_id->s_name, x->window_tag->s_name, x->width, x->height);
-        tkwidgets_erase_iolets(x->canvas_id, x->iolets_tag);
-        tkwidgets_draw_iolets((t_object*)x, x->x_glist, 
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-}
-
-/* -------------------- callback functions ---------------------------------- */
-
-static void textwidget_click_callback(t_textwidget *x, t_floatarg f)
-{
-    if( (x->x_glist->gl_edit) && (x->x_glist == x->x_canvas) )
-    {	
-        textwidget_select((t_gobj *)x, x->x_glist, f);
-    }
-}
-
-static void textwidget_keyup_callback(t_textwidget *x, t_float f)
-{
-/*     DEBUG(post("textwidget_keyup_callback");); */
-    int keycode = (int) f;
-    char buf[10];
-    t_symbol *output_symbol;
-
-    if( (keycode > 32 ) && (keycode < 65288) )
-    {
-        snprintf(buf, 2, "%c", keycode);
-        output_symbol = gensym(buf);
-    } else
-        switch(keycode) /* TODO find a way to make this work with all keysyms */
-        {
-        case 32: /* space */
-            output_symbol = space_symbol;
-            break;
-        case 65293: /* return */
-            output_symbol = return_symbol;
-            break;
-        case 65288: /* backspace */
-            output_symbol = backspace_symbol;
-            break;
-        case 65289: /* tab */
-            output_symbol = tab_symbol;
-            break;
-        case 65307: /* escape */
-            output_symbol = escape_symbol;
-            break;
-        case 65361: /* left */
-            output_symbol = left_symbol;
-            break;
-        case 65363: /* right */
-            output_symbol = right_symbol;
-            break;
-        case 65362: /* up */
-            output_symbol = up_symbol;
-            break;
-        case 65364: /* down */
-            output_symbol = down_symbol;
-            break;
-        default:
-            snprintf(buf, 10, "key_%d", keycode);
-            DEBUG(post("keyup: %d", keycode););
-            output_symbol = gensym(buf);
-        }
-    outlet_symbol(x->x_status_outlet, output_symbol);
-}
-
-static void textwidget_output_callback(t_textwidget* x, t_symbol *s, int argc, t_atom *argv)
-{
-    outlet_list(x->x_data_outlet, s, argc, argv );
-}
-
-static void textwidget_query_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
-{
-    t_symbol *tmp_symbol = atom_getsymbolarg(0, argc, argv);
-    if(tmp_symbol != &s_)
-        outlet_anything(x->x_status_outlet, tmp_symbol, argc - 1, argv + 1);
-    else
-        post("ERROR: textwidget_query_callback %s %d", s->s_name, argc);
-}
-
-static void textwidget_store_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(s != &s_)
-    {
-        binbuf_clear(x->options_binbuf);
-        binbuf_restore(x->options_binbuf, argc, argv);
-    }
-    else
-        post("ERROR: does this ever happen?");
-}
-
-static void textwidget_resize_click_callback(t_textwidget *x, t_floatarg f)
-{
-    t_canvas *canvas = (glist_isvisible(x->x_glist) ? x->x_canvas : 0);
-    int button_state = (int)f;
-    if(x->x_resizing && !button_state && canvas)
-    {
-        tkwidgets_draw_iolets((t_object*)x, canvas,
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-    else if(!x->x_resizing && button_state)
-    {
-        tkwidgets_erase_iolets(x->canvas_id, x->iolets_tag);
-    }
-    x->x_resizing = button_state;
-}
-
-static void textwidget_resize_motion_callback(t_textwidget *x, t_floatarg f1, t_floatarg f2)
-{
-    DEBUG(post("textwidget_resize_motion_callback"););
-    if (x->x_resizing)
-    {
-        int dx = (int)f1, dy = (int)f2;
-        if (glist_isvisible(x->x_glist))
-        {
-            x->width += dx;
-            x->height += dy;
-            sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                     x->canvas_id->s_name, x->window_tag->s_name, 
-                     x->width, x->height);
-            sys_vgui("%s move RESIZE %d %d\n",
-                     x->canvas_id->s_name, dx, dy);
-            canvas_fixlinesfor(x->x_glist, (t_text *)x);
-        }
-    }
-}
-
-/* --------------------------- standard class functions --------------------- */
-
-static void textwidget_free(t_textwidget *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, x->receive_name);
-}
-
-static void *textwidget_new(t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_new"););
-    t_textwidget *x = (t_textwidget *)pd_new(textwidget_class);
-    
-    x->options_binbuf = binbuf_new();
-    x->text_binbuf = binbuf_new();
-
-    x->x_selected = 0;
-    x->x_resizing = 0;
-    x->width = TEXT_DEFAULT_WIDTH;
-    x->height = TEXT_DEFAULT_HEIGHT;
-    x->have_scrollbars = 0;
-
-    if(argc > 0) x->width = atom_getint(argv);
-    if(argc > 1) x->height = atom_getint(argv + 1);
-    if(argc > 2) x->have_scrollbars = atom_getint(argv + 2);
-    if(argc > 3) binbuf_add(x->options_binbuf, argc - 3, argv + 3);
-    
-    x->tcl_namespace = tkwidgets_gen_tcl_namespace((t_object*)x, s);
-    x->receive_name = tkwidgets_gen_callback_name(x->tcl_namespace);
-    pd_bind(&x->x_obj.ob_pd, x->receive_name);
-
-    x->x_glist = canvas_getcurrent();
-//    set_tkwidgets_ids(x, x->x_glist); /* TODO: is this needed here? */
-    x->iolets_tag = tkwidgets_gen_iolets_tag((t_object*)x);
-    x->all_tag = tkwidgets_gen_all_tag((t_object*)x);
-
-    x->x_data_outlet = outlet_new(&x->x_obj, &s_float);
-    x->x_status_outlet = outlet_new(&x->x_obj, &s_symbol);
-
-    return (x);
-}
-
-void text_setup(void) {
-    textwidget_class = class_new(gensym("text"), (t_newmethod)textwidget_new, 
-                                 (t_method)textwidget_free,sizeof(t_textwidget),
-                                 0, A_GIMME, 0);
-
-/* methods for atoms */
-	class_addbang(textwidget_class, (t_method)textwidget_bang_output);
-	class_addanything(textwidget_class, (t_method)textwidget_set_option);
-
-/* methods for pd space */
-	class_addmethod(textwidget_class, (t_method)textwidget_append,
-                    gensym("append"), A_GIMME, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_clear,
-                    gensym("clear"), 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_key,
-                    gensym("key"), A_GIMME, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_options,
-                    gensym("options"), 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_query,
-                    gensym("query"), A_DEFSYMBOL, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_scrollbars,
-                    gensym("scrollbars"), A_DEFFLOAT, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_set,
-                    gensym("set"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_size,
-                    gensym("size"), A_DEFFLOAT, A_DEFFLOAT, 0);
-
-/* callbacks */
-    class_addmethod(textwidget_class, (t_method)textwidget_click_callback,
-                    gensym("click"), A_FLOAT, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_keyup_callback,
-                    gensym("keyup"), A_DEFFLOAT, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_output_callback,
-                    gensym("output"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_query_callback,
-                    gensym("query_callback"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_store_callback,
-                    gensym("store_callback"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_resize_click_callback,
-                    gensym("resize_click"), A_FLOAT, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_resize_motion_callback,
-                    gensym("resize_motion"), A_FLOAT, A_FLOAT, 0);
-
-/* widget behavior */
-    textwidget_widgetbehavior.w_getrectfn  = textwidget_getrect;
-    textwidget_widgetbehavior.w_displacefn = textwidget_displace;
-    textwidget_widgetbehavior.w_selectfn   = textwidget_select;
-    textwidget_widgetbehavior.w_activatefn = textwidget_activate;
-    textwidget_widgetbehavior.w_deletefn   = textwidget_delete;
-    textwidget_widgetbehavior.w_visfn      = textwidget_vis;
-    textwidget_widgetbehavior.w_clickfn    = NULL;
-    class_setwidget(textwidget_class, &textwidget_widgetbehavior);
-    class_setsavefn(textwidget_class, &textwidget_save);
-
-/* commonly used symbols */
-    backspace_symbol = gensym("backspace");
-	down_symbol = gensym("down");
-	escape_symbol = gensym("escape");
-	id_symbol = gensym("id");
-	left_symbol = gensym("left");
-    query_callback_symbol = gensym("query_callback");
-    return_symbol = gensym("return");
-	right_symbol = gensym("right");
-    size_symbol = gensym("size");
-    scrollbars_symbol = gensym("scrollbars");
-	space_symbol = gensym("space");
-	tab_symbol = gensym("tab");
-	up_symbol = gensym("up");
-}
diff --git a/externals/tkwidgets/tkwidgets-meta.pd b/externals/tkwidgets/tkwidgets-meta.pd
deleted file mode 100644
index efe295c12836dc654183a20090ff62c1b0e1df69..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/tkwidgets-meta.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 25 49 420 300 META 1;
-#X text 13 41 NAME tkwidgets;
-#X text 10 25 AUTHOR Hans-Christoph Steiner <hans@eds.org>;
-#X text 10 10 VERSION 0.0;
-#X restore 10 10 pd META;
diff --git a/externals/tkwidgets/tkwidgets.c b/externals/tkwidgets/tkwidgets.c
deleted file mode 100644
index b37e03f573a4583d866eb5ad5f258fb6de45f1bd..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/tkwidgets.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* 
-    Copyright (C) 2007 Free Software Foundation
-    written by Hans-Christoph Steiner <hans@at.or.at>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    This is the shared library for the tkwidgets library for Pd.
-
-*/
-
-/* TODO apply store logic to query so query doesn't send blank options */
-
-#include "tkwidgets.h"
-#include <stdio.h>
-#include <string.h>
-
-#define DEBUG(x)
-//#define DEBUG(x) x
-
-/* -------------------- options handling ------------------------------------ */
-
-void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, 
-                             int argc, char** argv)
-{
-    int i;
-    for(i = 0; i < argc; i++)
-        sys_vgui("pd [concat %s query_callback %s [%s cget -%s] \\;]\n",
-                 receive_name->s_name, argv[i], widget_id->s_name, argv[i]);
-}
-
-/* this queries the widget for each option listed in the tk_options struct,
- * builts a list in Tcl-space, then send that list to the store_callback */
-void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace,
-                             t_symbol *widget_id, int argc, char **argv)
-{
-    int i;
-    for(i = 0; i < argc; i++)
-    {
-        sys_vgui("set ::%s::tmp [%s cget -%s]\n",
-                 tcl_namespace->s_name, widget_id->s_name, argv[i]);
-        sys_vgui("if {[string length $::%s::tmp] > 0} {\n",
-                 tcl_namespace->s_name);
-        sys_vgui("lappend ::%s::list -%s; lappend ::%s::list $::%s::tmp}\n", 
-                 tcl_namespace->s_name, argv[i], 
-                 tcl_namespace->s_name, tcl_namespace->s_name);
-    }
-    sys_vgui("pd [concat %s store_callback $::%s::list \\;]\n",
-             receive_name->s_name, tcl_namespace->s_name);
-    sys_vgui("unset ::%s::list \n", tcl_namespace->s_name);  
-}
-
-void tkwidgets_restore_options(t_symbol *widget_id, t_binbuf *options_binbuf)
-{
-    int length;
-    char *options;
-    binbuf_gettext(options_binbuf, &options, &length);
-    options[length] = 0; //binbuf_gettext() doesn't put a null, so we do
-    sys_vgui("%s configure %s\n", widget_id->s_name, options);
-}
-
-/* output a list of available options for this widget */ 
-void tkwidgets_list_options(t_outlet *status_outlet, int argc, char** argv)
-{
-    int i;
-    t_binbuf *bb = binbuf_new();
-    for(i = 0; i < argc; ++i)
-    {
-        binbuf_addv(bb, "s", gensym(argv[i]));
-    }
-    outlet_anything(status_outlet, gensym("options"), 
-                    binbuf_getnatom(bb), binbuf_getvec(bb));
-}
-
-
-/* -------------------- generate names for various elements ----------------- */
-
-t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s%lx", widget_name->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_callback_name(t_symbol* tcl_namespace)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"#%s", tcl_namespace->s_name);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_canvas_id(t_canvas* canvas)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,".x%lx.c", (long unsigned int) canvas);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_frame_id(t_object* x, t_symbol* canvas_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.frame%lx", canvas_id->s_name, (long unsigned int)x);
-    return gensym(buf);    
-}
-
-t_symbol* tkwidgets_gen_widget_id(t_object* x, t_symbol* parent_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.widget%lx", parent_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_handle_id(t_object *x, t_symbol* canvas_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.handle%lx", canvas_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_scrollbar_id(t_object *x, t_symbol* frame_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.scrollbar%lx", frame_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_window_tag(t_object* x, t_symbol* canvas_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.window%lx", canvas_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_iolets_tag(t_object* x)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"iolets%lx", (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_all_tag(t_object *x)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"all%lx", (long unsigned int)x);
-    return gensym(buf);
-}
-
-/* -------------------- inlets/outlets -------------------------------------- */
- 
-static int calculate_onset(int x_location, int width,
-                           int current_iolet, int total_iolets)
-{
-    DEBUG(post("calculate_onset"););
-    return(x_location + (width - IOWIDTH)                               \
-           * current_iolet / (total_iolets == 1 ? 1 : total_iolets - 1));
-}
-
-/* standard method for drawing inlets and outlets.  Currently, the number of
- * inlets and outlets is set in tkwidgets.h since I think all of the
- * objectclasses will have the same ones.  If that needs to change, then this
- * function can use obj_ninlets() and obj_noutlets() */
-void tkwidgets_draw_iolets(t_object *x, t_glist *glist, t_symbol *canvas_id,
-                           t_symbol *iolets_tag, t_symbol *all_tag,
-                           int width, int height)
-{
-    int i, onset;
-    int x_location = text_xpix(x, glist);
-    int y_location = text_ypix(x, glist);
-
-/* TODO: make inlets draw on top of widget */
-    for (i = 0; i < TOTAL_INLETS; i++)  /* inlets */
-    {
-        onset = calculate_onset(x_location, width, i, TOTAL_INLETS);
-        sys_vgui("%s create rectangle %d %d %d %d -tags {%s %s}\n",
-                 canvas_id->s_name, onset, y_location - 2,
-                 onset + IOWIDTH, y_location,
-                 iolets_tag->s_name, all_tag->s_name);
-        sys_vgui("%s raise %s\n", canvas_id->s_name, iolets_tag->s_name);
-    }
-    for (i = 0; i < TOTAL_OUTLETS; i++) /* outlets */
-    {
-        onset = calculate_onset(x_location, width, i, TOTAL_OUTLETS);
-        sys_vgui("%s create rectangle %d %d %d %d -tags {%s %s}\n",
-                 canvas_id->s_name, onset, y_location + height,
-                 onset + IOWIDTH, y_location + height + 2,
-                 iolets_tag->s_name, all_tag->s_name);
-        sys_vgui("%s raise %s\n", canvas_id->s_name, iolets_tag->s_name);
-    }
-}
-
-void tkwidgets_erase_iolets(t_symbol* canvas_id, t_symbol* iolets_tag)
-{
-    sys_vgui("%s delete %s\n", canvas_id->s_name, iolets_tag->s_name); 
-}
-
-/* -------------------- scrollbars ------------------------------------------ */
-
-void tkwidgets_draw_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id)
-{
-    sys_vgui("scrollbar %s -orient vertical -command {%s yview}\n",
-             scrollbar_id->s_name, widget_id->s_name);
-    sys_vgui("pack %s -side right -fill y -before %s \n",
-             scrollbar_id->s_name, widget_id->s_name);
-    sys_vgui("%s configure -yscrollcommand {%s set}\n",
-             widget_id->s_name, scrollbar_id->s_name);
-}
-
-void tkwidgets_erase_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id)
-{
-    sys_vgui("%s configure -yscrollcommand {}\n", widget_id->s_name);
-    sys_vgui("pack forget %s \n", scrollbar_id->s_name);
-    sys_vgui("destroy %s \n", scrollbar_id->s_name);
-}
-
-/* -------------------- bind to keys and mouse events ----------------------- */
-
-void tkwidgets_bind_key_events(t_symbol *canvas_id, t_symbol *widget_id)
-{
-#ifdef __APPLE__
-    sys_vgui("bind %s <Mod1-Key> {pdtk_canvas_ctrlkey %s %%K 0}\n",
-             widget_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Mod1-Shift-Key> {pdtk_canvas_ctrlkey %s %%K 1}\n",
-             widget_id->s_name, canvas_id->s_name);
-#else
-    sys_vgui("bind %s <Control-Key> {pdtk_canvas_ctrlkey %s %%K 0}\n",
-             widget_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Control-Shift-Key> {pdtk_canvas_ctrlkey %s %%K 1}\n",
-             widget_id->s_name, canvas_id->s_name);
-#endif
-}
-
-void tkwidgets_bind_mouse_events(t_symbol *canvas_id, t_symbol *widget_id)
-{
-    /* mouse buttons */
-    sys_vgui("bind %s <Button> {pdtk_canvas_sendclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b 0}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <ButtonRelease> {pdtk_canvas_mouseup %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Shift-Button> {pdtk_canvas_click %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b 1}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Button-2> {pdtk_canvas_rightclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Button-3> {pdtk_canvas_rightclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Control-Button> {pdtk_canvas_rightclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    /* mouse motion */
-    sys_vgui("bind %s <Motion> {pdtk_canvas_motion %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] 0}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-}
-
-/* -------------------- gui elements for resizing --------------------------- */
-
-void tkwidgets_draw_handle()
-{
-    // TODO draw resize handle when selected in editmode
-}
-
-void tkwidgets_draw_resize_window()
-{
-    // TODO draw the resize window while resizing
-}
diff --git a/externals/tkwidgets/tkwidgets.h b/externals/tkwidgets/tkwidgets.h
deleted file mode 100644
index e234ccd39dacfebd496e1584ec3aa1dc63f5aa19..0000000000000000000000000000000000000000
--- a/externals/tkwidgets/tkwidgets.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* 
-    Copyright (C) 2007 Free Software Foundation
-    written by Hans-Christoph Steiner <hans@at.or.at>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    This is the shared library for the tkwidgets library for Pd.
-
-*/
-
-#ifndef __TKWIDGETS_H
-#define __TKWIDGETS_H
-
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-
-/* I don't know what these do, but they seem to be everywhere */
-#ifdef _MSC_VER
-#pragma warning( disable : 4244 )
-#pragma warning( disable : 4305 )
-#endif
-
-/* so far, all of the tkwidgets objects have the same inlets/outlets */
-#define TOTAL_INLETS            1
-#define TOTAL_OUTLETS           2
-
-#define TKW_SELECTION_COLOR     "#bdbddd"
-
-/* size and offset for the resizing handle */
-#define TKW_HANDLE_HEIGHT       15
-#define TKW_HANDLE_WIDTH        15
-#define TKW_HANDLE_INSET        -2
-
-/* sketch for a common struct */
-typedef struct _tkwidgets
-{
-    t_canvas* canvas;        /* canvas/glist this widget is currently drawn in*/
-    t_glist*  glist;         /* glist that owns this widget */
-    t_binbuf* options_binbuf;/* binbuf to save options state in */
-    t_symbol* receive_name;  /* name to bind to, to receive callbacks */
-    t_symbol* tcl_namespace; /* namespace to prevent name collisions */
-    t_symbol* canvas_id;     /* the canvas that is showing this widget */
-    t_symbol* frame_id;      /* the frame around the widget and supporters */
-    t_symbol* window_tag;     /* the window that contains the widget */
-    t_symbol* widget_id;     /* the core widget */
-    t_symbol* handle_id;     /* the resizing handle */
-    t_symbol* all_tag;       /* the tag for moving/deleting everything */
-    int       resizing;      /* flag to tell when being resized */
-    int       selected;      /* flag for when widget is selected */
-} t_tkwidgets;   
-
-/* handle options */
-void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace,
-                             t_symbol *widget_id, int argc, char **argv);
-void tkwidgets_restore_options(t_symbol *widget_id, t_binbuf *options_binbuf);
-void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, 
-                             int argc, char** argv);
-void tkwidgets_list_options(t_outlet *status_outlet, int argc, char** argv);
-
-/* generate ID and tag names for using in Tcl/Tk space */
-t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name);
-t_symbol* tkwidgets_gen_callback_name(t_symbol* tcl_namespace);
-t_symbol* tkwidgets_gen_canvas_id(t_canvas* canvas);
-t_symbol* tkwidgets_gen_frame_id(t_object* x, t_symbol* canvas_id);
-t_symbol* tkwidgets_gen_widget_id(t_object* x, t_symbol* parent_id);
-t_symbol* tkwidgets_gen_handle_id(t_object *x, t_symbol* canvas_id);
-t_symbol* tkwidgets_gen_scrollbar_id(t_object *x, t_symbol* frame_id);
-t_symbol* tkwidgets_gen_window_tag(t_object* x, t_symbol* canvas_id);
-t_symbol* tkwidgets_gen_iolets_tag(t_object* x);
-t_symbol* tkwidgets_gen_all_tag(t_object *x);
-
-
-// TODO perhaps I should try to use glist_drawiofor() from g_text.c
-void tkwidgets_draw_iolets(t_object *x, t_glist *glist, t_symbol *canvas_id,
-                           t_symbol *iolets_tag, t_symbol *all_tag,
-                           int width, int height);
-void tkwidgets_erase_iolets(t_symbol* canvas_id, t_symbol* iolets_tag);
-void tkwidgets_draw_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id);
-void tkwidgets_erase_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id);
-
-void tkwidgets_draw_handle(); // TODO draw resize handle when selected in editmode
-void tkwidgets_draw_resize_window(); // TODO draw the resize window while resizing
-
-/* selection */
-
-
-
-/* bind this widget to Cmd/Ctrl keys and mouse events to support things like
- * then standard keys and right-click to bring up the Properties/Open/Help
- * menu when the Tk widgets have focus */
-void tkwidgets_bind_key_events(t_symbol *canvas_id, t_symbol *widget_id);
-void tkwidgets_bind_mouse_events(t_symbol *canvas_id, t_symbol *widget_id);
-
-
-
-#endif /* NOT __TK_WIDGETS_H */
diff --git a/externals/tkwidgets/volga.gif b/externals/tkwidgets/volga.gif
deleted file mode 100644
index e5fc301db9f0cc018bad8bbe125ce159c04c3618..0000000000000000000000000000000000000000
Binary files a/externals/tkwidgets/volga.gif and /dev/null differ