aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/tutorial
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2002-10-22 23:07:10 +0000
committerThomas Grill <xovo@users.sourceforge.net>2002-10-22 23:07:10 +0000
commitd62e56f4df9594f72ce501f5e19c974fd18e7295 (patch)
tree635d4af7a7c2425098e60ca277086ec436b617f7 /externals/grill/flext/tutorial
parentc6f373c281ecb5cd1f4aa7a070e15cc61ab8793c (diff)
This commit was generated by cvs2svn to compensate for changes in r186,
which included commits to RCS files with non-trunk default branches. svn path=/trunk/; revision=187
Diffstat (limited to 'externals/grill/flext/tutorial')
-rwxr-xr-xexternals/grill/flext/tutorial/adv1/adv1.cwbin0 -> 98601 bytes
-rw-r--r--externals/grill/flext/tutorial/adv1/adv1.dsp96
-rwxr-xr-xexternals/grill/flext/tutorial/adv1/main.cpp104
-rw-r--r--externals/grill/flext/tutorial/build-pd-bcc.bat27
-rw-r--r--externals/grill/flext/tutorial/build-pd-cygwin.sh3
-rw-r--r--externals/grill/flext/tutorial/build-pd-linux.sh4
-rw-r--r--externals/grill/flext/tutorial/build-pd-msvc.bat11
-rw-r--r--externals/grill/flext/tutorial/config-pd-bcc.txt21
-rw-r--r--externals/grill/flext/tutorial/config-pd-cygwin.txt13
-rw-r--r--externals/grill/flext/tutorial/config-pd-linux.txt19
-rw-r--r--externals/grill/flext/tutorial/config-pd-msvc.txt16
-rwxr-xr-xexternals/grill/flext/tutorial/gpl.txt346
-rwxr-xr-xexternals/grill/flext/tutorial/license.txt50
-rw-r--r--externals/grill/flext/tutorial/makefile.pd-bcc75
-rw-r--r--externals/grill/flext/tutorial/makefile.pd-cygwin58
-rw-r--r--externals/grill/flext/tutorial/makefile.pd-linux57
-rw-r--r--externals/grill/flext/tutorial/makefile.pd-msvc48
-rwxr-xr-xexternals/grill/flext/tutorial/maxmsp/ex-adv1bin0 -> 265 bytes
-rwxr-xr-xexternals/grill/flext/tutorial/maxmsp/ex-signal1bin0 -> 331 bytes
-rwxr-xr-xexternals/grill/flext/tutorial/maxmsp/ex-signal2bin0 -> 410 bytes
-rwxr-xr-xexternals/grill/flext/tutorial/maxmsp/ex-simple1bin0 -> 404 bytes
-rwxr-xr-xexternals/grill/flext/tutorial/maxmsp/ex-simple2bin0 -> 303 bytes
-rwxr-xr-xexternals/grill/flext/tutorial/maxmsp/ex-simple3bin0 -> 381 bytes
-rw-r--r--externals/grill/flext/tutorial/pd/ex-adv1.pd14
-rw-r--r--externals/grill/flext/tutorial/pd/ex-signal1.pd16
-rw-r--r--externals/grill/flext/tutorial/pd/ex-signal2.pd17
-rw-r--r--externals/grill/flext/tutorial/pd/ex-simple1.pd10
-rw-r--r--externals/grill/flext/tutorial/pd/ex-simple2.pd13
-rw-r--r--externals/grill/flext/tutorial/pd/ex-simple3.pd18
-rw-r--r--externals/grill/flext/tutorial/pd/ex-thread1.pd34
-rw-r--r--externals/grill/flext/tutorial/pd/ex-thread2.pd40
-rw-r--r--externals/grill/flext/tutorial/readme.txt36
-rw-r--r--externals/grill/flext/tutorial/signal1/main.cpp129
-rw-r--r--externals/grill/flext/tutorial/signal1/signal1.cwbin0 -> 102333 bytes
-rw-r--r--externals/grill/flext/tutorial/signal1/signal1.dsp95
-rw-r--r--externals/grill/flext/tutorial/signal2/main.cpp80
-rw-r--r--externals/grill/flext/tutorial/signal2/signal2.cwbin0 -> 104217 bytes
-rw-r--r--externals/grill/flext/tutorial/signal2/signal2.dsp95
-rwxr-xr-xexternals/grill/flext/tutorial/simple1/main.cpp78
-rwxr-xr-xexternals/grill/flext/tutorial/simple1/simple1.cwbin0 -> 94211 bytes
-rw-r--r--externals/grill/flext/tutorial/simple1/simple1.dsp95
-rwxr-xr-xexternals/grill/flext/tutorial/simple2/main.cpp80
-rwxr-xr-xexternals/grill/flext/tutorial/simple2/simple2.cwbin0 -> 98601 bytes
-rw-r--r--externals/grill/flext/tutorial/simple2/simple2.dsp95
-rw-r--r--externals/grill/flext/tutorial/simple3/main.cpp90
-rw-r--r--externals/grill/flext/tutorial/simple3/simple3.cwbin0 -> 102333 bytes
-rw-r--r--externals/grill/flext/tutorial/simple3/simple3.dsp95
-rw-r--r--externals/grill/flext/tutorial/thread1/main.cpp79
-rw-r--r--externals/grill/flext/tutorial/thread1/thread1.cwbin0 -> 89119 bytes
-rw-r--r--externals/grill/flext/tutorial/thread1/thread1.dsp104
-rw-r--r--externals/grill/flext/tutorial/thread2/main.cpp132
-rwxr-xr-xexternals/grill/flext/tutorial/thread2/thread2.cwbin0 -> 89119 bytes
-rw-r--r--externals/grill/flext/tutorial/thread2/thread2.dsp95
-rw-r--r--externals/grill/flext/tutorial/tutorial.dsw161
54 files changed, 2649 insertions, 0 deletions
diff --git a/externals/grill/flext/tutorial/adv1/adv1.cw b/externals/grill/flext/tutorial/adv1/adv1.cw
new file mode 100755
index 00000000..bd68d0e8
--- /dev/null
+++ b/externals/grill/flext/tutorial/adv1/adv1.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/adv1/adv1.dsp b/externals/grill/flext/tutorial/adv1/adv1.dsp
new file mode 100644
index 00000000..8917c44e
--- /dev/null
+++ b/externals/grill/flext/tutorial/adv1/adv1.dsp
@@ -0,0 +1,96 @@
+# Microsoft Developer Studio Project File - Name="adv1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=adv1 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "adv1.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "adv1.mak" CFG="adv1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "adv1 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "adv1 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "adv1"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "adv1 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"../msvc/adv1.dll" /libpath:"..\..\pd-msvc"
+# SUBTRACT LINK32 /nodefaultlib
+
+!ELSEIF "$(CFG)" == "adv1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /Fr /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_d-pdwin.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "adv1 - Win32 Release"
+# Name "adv1 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/adv1/main.cpp b/externals/grill/flext/tutorial/adv1/main.cpp
new file mode 100755
index 00000000..f59ebddd
--- /dev/null
+++ b/externals/grill/flext/tutorial/adv1/main.cpp
@@ -0,0 +1,104 @@
+/*
+flext tutorial - advanced 1
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This is an example of a simplified prepend object
+*/
+
+#include <flext.h>
+
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 400)
+#error You need at least flext version 0.4.0
+#endif
+
+
+class adv1:
+ public flext_base
+{
+ FLEXT_HEADER(adv1,flext_base)
+
+public:
+ // constructor with variable argument list
+ adv1(int argc,t_atom *argv);
+
+protected:
+ void m_any(const t_symbol *s,int argc,t_atom *argv); // method which digests anything
+
+ AtomList lst;
+private:
+ FLEXT_CALLBACK_A(m_any); // callback for method "m_any" (with anything argument)
+};
+
+// instantiate the class (constructor has a variable argument list)
+// note the two words in the string: prepend acts as an alias for adv1!
+FLEXT_NEW_V("adv1 prepend",adv1)
+
+
+
+// constructor
+
+adv1::adv1(int argc,t_atom *argv)
+{
+ AddInAnything(); // one inlet that can receive anything
+ AddOutAnything(); // one outlet for anything
+
+ // set up inlets and outlets
+ SetupInOut();
+
+ // register method
+ FLEXT_ADDMETHOD(0,m_any); // register method "m_any" for inlet 0
+
+ if(argc != 0) { // check for arg count
+ // store arg list
+ lst(argc,argv);
+ }
+ else {
+ // no args given
+ post("%s - no arguments given",thisName());
+
+ // tell flext that the initialization was not successful... object will not live
+ InitProblem();
+ }
+}
+
+
+
+// method
+
+void adv1::m_any(const t_symbol *s,int argc,t_atom *argv)
+{
+ // reserve space for as many atoms as possibly necessary
+ AtomList result(lst.Count()+argc+2);
+
+ // ix is our counter of atoms to output
+ int ix = 0;
+
+ int i = 0;
+ if(!IsSymbol(lst[0])) {
+ // if first element to prepend is no symbol then make it a "list"
+ SetSymbol(result[ix++],sym_list);
+ }
+ // copy atoms to prepend to result list
+ for(; i < lst.Count(); ++i) CopyAtom(&result[ix++],&lst[i]);
+
+ // if anything is no "list" or "float" then append it to result list
+ if(s != sym_list && s != sym_float
+#ifdef MAXMSP
+ && s != sym_int // in Max integers are system data types
+#endif
+ )
+ SetSymbol(result[ix++],s);
+
+ // append pending arguments to result list
+ for(i = 0; i < argc; ++i) CopyAtom(&result[ix++],argv+i);
+
+ // output result list as an anything
+ ToOutAnything(0,GetSymbol(result[0]),ix-1,result.Atoms()+1);
+}
+
+
diff --git a/externals/grill/flext/tutorial/build-pd-bcc.bat b/externals/grill/flext/tutorial/build-pd-bcc.bat
new file mode 100644
index 00000000..5a8e8a57
--- /dev/null
+++ b/externals/grill/flext/tutorial/build-pd-bcc.bat
@@ -0,0 +1,27 @@
+@echo --- Building flext tutorial examples with BorlandC++ ---
+
+@cd simple1
+@make -f ..\makefile.pd-bcc NAME=simple1 SETUPFUNCTION=simple1_setup
+@cd ..
+
+@cd simple2
+@make -f ..\makefile.pd-bcc NAME=simple2 SETUPFUNCTION=simple2_setup
+@cd ..
+
+@cd simple3
+@make -f ..\makefile.pd-bcc NAME=simple3 SETUPFUNCTION=simple3_setup
+@cd ..
+
+@cd adv1
+@make -f ..\makefile.pd-bcc NAME=adv1 SETUPFUNCTION=adv1_setup
+@cd ..
+
+@cd signal1
+@make -f ..\makefile.pd-bcc NAME=signal1~ SETUPFUNCTION=signal1_tilde_setup
+@cd ..
+
+@cd signal2
+@make -f ..\makefile.pd-bcc NAME=signal2~ SETUPFUNCTION=signal2_tilde_setup
+@cd ..
+
+
diff --git a/externals/grill/flext/tutorial/build-pd-cygwin.sh b/externals/grill/flext/tutorial/build-pd-cygwin.sh
new file mode 100644
index 00000000..1c34954a
--- /dev/null
+++ b/externals/grill/flext/tutorial/build-pd-cygwin.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+make -f makefile.pd-cygwin
diff --git a/externals/grill/flext/tutorial/build-pd-linux.sh b/externals/grill/flext/tutorial/build-pd-linux.sh
new file mode 100644
index 00000000..bd11c6c4
--- /dev/null
+++ b/externals/grill/flext/tutorial/build-pd-linux.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+make -f makefile.pd-linux
+
diff --git a/externals/grill/flext/tutorial/build-pd-msvc.bat b/externals/grill/flext/tutorial/build-pd-msvc.bat
new file mode 100644
index 00000000..f6eb9625
--- /dev/null
+++ b/externals/grill/flext/tutorial/build-pd-msvc.bat
@@ -0,0 +1,11 @@
+@echo --- Building flext tutorial examples with MSVC++ ---
+
+nmake /f makefile.pd-msvc NAME=simple1 DIR=simple1
+nmake /f makefile.pd-msvc NAME=simple2 DIR=simple2
+nmake /f makefile.pd-msvc NAME=simple3 DIR=simple3
+nmake /f makefile.pd-msvc NAME=adv1 DIR=adv1
+nmake /f makefile.pd-msvc NAME=signal1~ DIR=signal1
+nmake /f makefile.pd-msvc NAME=signal2~ DIR=signal2
+nmake /f makefile.pd-msvc NAME=thread1 DIR=thread1
+nmake /f makefile.pd-msvc NAME=thread2 DIR=thread2
+
diff --git a/externals/grill/flext/tutorial/config-pd-bcc.txt b/externals/grill/flext/tutorial/config-pd-bcc.txt
new file mode 100644
index 00000000..2ce2b2c3
--- /dev/null
+++ b/externals/grill/flext/tutorial/config-pd-bcc.txt
@@ -0,0 +1,21 @@
+# flext - C++ layer for Max/MSP and pd (pure data) externals
+# tutorial examples
+# Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+#
+
+# where is PD?
+PDPATH=c:\programme\audio\pd
+
+# where is BorlandC++?
+BCCPATH=c:\programme\prog\bcc55
+
+# where do the flext libraries reside?
+FLEXTPATH=$(PDPATH)\flext
+
+# build directory for tutorial examples
+OUTPATH=.\pd-bcc
+
+
+
+
+
diff --git a/externals/grill/flext/tutorial/config-pd-cygwin.txt b/externals/grill/flext/tutorial/config-pd-cygwin.txt
new file mode 100644
index 00000000..a2ccf30c
--- /dev/null
+++ b/externals/grill/flext/tutorial/config-pd-cygwin.txt
@@ -0,0 +1,13 @@
+# flext - C++ layer for Max/MSP and pd (pure data) externals
+# tutorial examples
+# Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+#
+
+# where is PD?
+PDPATH=/cygdrive/c/programme/audio/pd
+
+# where do the flext libraries reside?
+FLEXTPATH=${PDPATH}/flext
+
+# where should the examples be built?
+OUTPATH=./pd-cygwin
diff --git a/externals/grill/flext/tutorial/config-pd-linux.txt b/externals/grill/flext/tutorial/config-pd-linux.txt
new file mode 100644
index 00000000..3cfb4a9f
--- /dev/null
+++ b/externals/grill/flext/tutorial/config-pd-linux.txt
@@ -0,0 +1,19 @@
+# flext - C++ layer for Max/MSP and pd (pure data) externals
+# tutorial examples
+# Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+#
+
+# where are the PD header files?
+PDPATH=/usr/local/include
+
+# where do the flext libraries reside?
+FLEXTPATH=/usr/local/lib/pd/flext
+
+# where should the examples be built? (relative path)
+OUTPATH=./pd-linux
+
+# install the examples? (yes/no)
+INSTALL=yes
+
+# where should the examples be installed?
+INSTPATH=${FLEXTPATH}/tutorial
diff --git a/externals/grill/flext/tutorial/config-pd-msvc.txt b/externals/grill/flext/tutorial/config-pd-msvc.txt
new file mode 100644
index 00000000..b68fdadb
--- /dev/null
+++ b/externals/grill/flext/tutorial/config-pd-msvc.txt
@@ -0,0 +1,16 @@
+# flext - C++ layer for Max/MSP and pd (pure data) externals
+# tutorial examples
+# Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+#
+
+# where is PD?
+PDPATH=c:\programme\audio\pd
+
+# where is MS VC++?
+MSVCPATH=c:\programme\prog\microsoft visual studio\VC98
+
+# where do the flext libraries reside?
+FLEXTPATH=$(PDPATH)\flext
+
+# where should the examples be built?
+OUTPATH=.\pd-msvc
diff --git a/externals/grill/flext/tutorial/gpl.txt b/externals/grill/flext/tutorial/gpl.txt
new file mode 100755
index 00000000..5ea29a7d
--- /dev/null
+++ b/externals/grill/flext/tutorial/gpl.txt
@@ -0,0 +1,346 @@
+ 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) 19yy <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) 19yy 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/grill/flext/tutorial/license.txt b/externals/grill/flext/tutorial/license.txt
new file mode 100755
index 00000000..f0d1a975
--- /dev/null
+++ b/externals/grill/flext/tutorial/license.txt
@@ -0,0 +1,50 @@
+flext - C++ layer for Max/MSP and pd (pure data) externals
+Copyright (C) 2001,2002 Thomas Grill
+
+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.
+
+In the official flext distribution, the GNU General Public License is
+in the file gpl.txt
+
+---------------------------------------------------------
+
+ OTHER COPYRIGHT NOTICES
+
+---------------------------------------------------------
+This package uses a lot of code from GEM by Mark Danks
+
+See the license text below:
+
+--- GEM --------------------------------------
+GEM - Graphics Environment for Multimedia
+Copyright (C) 1997-2000 Mark Danks
+
+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.
+
+In the official GEM distribution, the GNU General Public License is
+in the file GnuGPL.LICENSE
+
diff --git a/externals/grill/flext/tutorial/makefile.pd-bcc b/externals/grill/flext/tutorial/makefile.pd-bcc
new file mode 100644
index 00000000..1e718176
--- /dev/null
+++ b/externals/grill/flext/tutorial/makefile.pd-bcc
@@ -0,0 +1,75 @@
+# flext tutorial examples
+# Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+#
+# This is a make include file for BorlandC++
+# It can't be used on its own
+#
+# ---------------------------------------------
+
+!include ..\config-pd-bcc.txt
+
+OUTPATH=..\$(OUTPATH)
+
+TARGET=pdwin
+
+# includes, libs
+INCPATH=-I$(BCCPATH)\include -I$(PDPATH)\src -I$(FLEXTPATH)
+LIBPATH=-L$(BCCPATH)\lib -L$(PDPATH)\lib -L$(FLEXTPATH)
+LIBS=cw32.lib import32.lib C0D32.OBJ
+
+# compiler definitions and flags
+DEFS=-DPD -DNT
+CFLAGS=-6 -O2 -OS -ff -tWD
+
+# the rest can stay untouched
+# ----------------------------------------------
+
+# all the source files from the package
+SRCS= main.cpp
+HDRS=
+
+#default target
+all: $(OUTPATH)\$(NAME).dll
+
+# remove build
+clean:
+ -del /s /q $(OUTPATH) > nul
+ rmdir $(OUTPATH)
+
+# -----------------------------------------------
+
+OBJS= $(SRCS:.cpp=.obj)
+
+$(SRCS): $(HDRS)
+ -touch $<
+
+.PATH.OBJ=$(OUTPATH)
+
+.cpp.obj:
+ bcc32 -c $(CFLAGS) $(DEFS) $(INCPATH) -n$(OUTPATH) $<
+
+$(OUTPATH):
+ -@if not exist $< mkdir $<
+
+$(OUTPATH)\pd.lib: $(PDPATH)\bin\pd.dll
+ implib -a $@ $**
+
+$(OUTPATH)\$(NAME).def:
+ @echo EXPORTS $(SETUPFUNCTION) = _$(SETUPFUNCTION) > $<
+
+$(OUTPATH)\$(NAME)~.dll : $(OUTPATH)\$(NAME).dll
+ -ren $** $<
+
+$(OUTPATH)\$(NAME).dll :: $(OUTPATH) $(OUTPATH)\$(NAME).def $(OUTPATH)\pd.lib
+
+$(OUTPATH)\$(NAME).dll :: $(OBJS)
+ ilink32 -C -Tpd $(LIBPATH) $** ,$<,,$(LIBS) $(OUTPATH)\pd.lib $(FLEXTPATH)\flext-$(TARGET).lib ,$(OUTPATH)\$(NAME).def
+ -@del $**
+ -@del $(OUTPATH)\*.i*
+ -@del $(OUTPATH)\*.map
+ -@del $(OUTPATH)\*.def
+ -@del $(OUTPATH)\*.tds
+
+
+
+
diff --git a/externals/grill/flext/tutorial/makefile.pd-cygwin b/externals/grill/flext/tutorial/makefile.pd-cygwin
new file mode 100644
index 00000000..b8a48403
--- /dev/null
+++ b/externals/grill/flext/tutorial/makefile.pd-cygwin
@@ -0,0 +1,58 @@
+# flext tutorial examples
+#
+# Makefile for gcc @ cygwin
+#
+# usage: make -f makefile.pd-cygwin
+#
+# -----------------------------------------------------
+#
+# note: the thread examples don't compile with cygwin
+#
+# -----------------------------------------------------
+
+include config-pd-cygwin.txt
+
+FLEXTLIB=$(FLEXTPATH)/flext-pdwin.lib
+
+INCLUDES=$(PDPATH)/src
+LIBPATH=$(PDPATH)/bin
+FLAGS=-DPD -DNT
+CFLAGS=-O6 -mcpu=pentiumpro
+LIBS=m pd
+
+
+# the rest can stay untouched
+# ----------------------------------------------
+
+# all the source files from the package
+
+EXAMPLES=simple1 simple2 simple3 adv1 signal1~ signal2~ # thread1 thread2
+
+TARGETS=$(patsubst %,$(OUTPATH)/%.dll,$(EXAMPLES))
+
+# default target
+all: $(OUTPATH) $(TARGETS)
+
+
+$(OUTPATH)/%~.dll : $(OUTPATH)/%.dll
+ mv $^ $@
+
+$(SRCS): $(HDRS)
+ touch $@
+
+$(OUTPATH):
+ -mkdir $(OUTPATH)
+
+$(OUTPATH)/%.o : %/main.cpp
+ $(CXX) -c $(CFLAGS) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(FLEXTPATH)) $< -o $@
+
+$(OUTPATH)/%.dll : $(OUTPATH)/%.o $(FLEXTLIB)
+ $(CXX) $(LDFLAGS) -shared $(patsubst %,-L%,$(LIBPATH)) $^ $(patsubst %,-l%,$(LIBS)) -o $@
+ rm $<
+ chmod 755 $@
+
+
+.PHONY: clean
+clean:
+ rm -f $(OUTPATH)/*.o $(TARGETS)
+
diff --git a/externals/grill/flext/tutorial/makefile.pd-linux b/externals/grill/flext/tutorial/makefile.pd-linux
new file mode 100644
index 00000000..5c0a3cbc
--- /dev/null
+++ b/externals/grill/flext/tutorial/makefile.pd-linux
@@ -0,0 +1,57 @@
+# flext tutorial examples
+#
+# Makefile for gcc @ linux
+#
+# usage: make -f makefile.pd-linux
+#
+# -----------------------------------------------------
+
+include config-pd-linux.txt
+
+FLEXTLIB=$(FLEXTPATH)/flext_t.a # take threaded library for all
+
+
+# compiler+linker stuff ### EDIT! ###
+INCLUDES=$(PDPATH)/src
+LIBPATH=
+FLAGS=-DPD -DFLEXT_THREADS
+CFLAGS=-O6 -mcpu=pentiumpro
+LIBS=m
+
+
+# the rest can stay untouched
+# ----------------------------------------------
+
+# all the source files from the package
+
+EXAMPLES=simple1 simple2 simple3 adv1 signal1~ signal2~ thread1 thread2
+
+
+TARGETS=$(patsubst %,$(OUTPATH)/%.pd_linux,$(EXAMPLES))
+
+# default target
+all: $(OUTPATH) $(TARGETS)
+
+
+$(OUTPATH)/%~.pd_linux : $(OUTPATH)/%.pd_linux
+ mv $^ $@
+
+$(SRCS): $(HDRS)
+ touch $@
+
+$(OUTPATH):
+ mkdir $(OUTPATH)
+
+$(OUTPATH)/%.o : %/main.cpp
+ $(CXX) -c $(CFLAGS) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(FLEXTPATH)) $< -o $@
+
+$(OUTPATH)/%.pd_linux : $(OUTPATH)/%.o $(FLEXTLIB)
+ $(CXX) $(LDFLAGS) -shared $(patsubst %,-L%,$(LIBPATH)) $^ $(patsubst %,-l%,$(LIBS)) -o $@
+ chmod 755 $@
+
+
+.PHONY: clean
+clean:
+ rm -f $(OUTPATH)/*.o $(TARGETS)
+
+
diff --git a/externals/grill/flext/tutorial/makefile.pd-msvc b/externals/grill/flext/tutorial/makefile.pd-msvc
new file mode 100644
index 00000000..3478cb9e
--- /dev/null
+++ b/externals/grill/flext/tutorial/makefile.pd-msvc
@@ -0,0 +1,48 @@
+# flext - C++ layer for Max/MSP and pd (pure data) externals
+# Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+#
+# Makefile for MSVC++
+#
+#
+# IMPORTANT: Adjust some of the paths also in makefile-inc.msvc
+#
+# usage: make -f makefile.pd-msvc
+#
+# ---------------------------------------------------------------
+
+!include config-pd-msvc.txt
+
+# includes
+INCPATH=/I"$(MSVCPATH)\include" /I"$(PDPATH)\src" /I"$(FLEXTPATH)"
+LIBPATH=/LIBPATH:"$(MSVCPATH)\lib" /LIBPATH:"$(PDPATH)\bin" /LIBPATH:"$(FLEXTPATH)"
+LIBS=pd.lib pthreadVC.lib flext_t-pdwin.lib
+
+# compiler definitions and flags
+DEFS=/DPD /DNT /DFLEXT_THREADS
+
+CFLAGS=/GR /GD /G6 /Ox /MT
+
+
+# the rest can stay untouched
+# ----------------------------------------------
+
+# all the source files from the package
+SRCS=main.cpp
+HDRS=
+
+# -----------------------------------------------
+
+all: $(OUTPATH) $(OUTPATH)\$(NAME).dll
+
+$(OUTPATH):
+ -mkdir $(OUTPATH)
+
+$(OUTPATH)\$(NAME)~.dll : $(OUTPATH)\$(NAME).dll
+ -ren $** $<
+
+$(OUTPATH)\$(NAME).dll : $(DIR)\$(SRCS)
+ cl /c /LD $(CFLAGS) $(DEFS) $(INCPATH) $** /Fotemp.obj
+ link /DLL /out:$@ /INCREMENTAL:NO temp.obj $(LIBS) $(LIBPATH)
+ @-del $(OUTPATH)\*.exp
+ @-del $(OUTPATH)\*.lib
+ @-del temp.obj
diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv1 b/externals/grill/flext/tutorial/maxmsp/ex-adv1
new file mode 100755
index 00000000..dc29619b
--- /dev/null
+++ b/externals/grill/flext/tutorial/maxmsp/ex-adv1
Binary files differ
diff --git a/externals/grill/flext/tutorial/maxmsp/ex-signal1 b/externals/grill/flext/tutorial/maxmsp/ex-signal1
new file mode 100755
index 00000000..ca80fc9f
--- /dev/null
+++ b/externals/grill/flext/tutorial/maxmsp/ex-signal1
Binary files differ
diff --git a/externals/grill/flext/tutorial/maxmsp/ex-signal2 b/externals/grill/flext/tutorial/maxmsp/ex-signal2
new file mode 100755
index 00000000..f7172d01
--- /dev/null
+++ b/externals/grill/flext/tutorial/maxmsp/ex-signal2
Binary files differ
diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple1 b/externals/grill/flext/tutorial/maxmsp/ex-simple1
new file mode 100755
index 00000000..efebcce6
--- /dev/null
+++ b/externals/grill/flext/tutorial/maxmsp/ex-simple1
Binary files differ
diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple2 b/externals/grill/flext/tutorial/maxmsp/ex-simple2
new file mode 100755
index 00000000..5515bc98
--- /dev/null
+++ b/externals/grill/flext/tutorial/maxmsp/ex-simple2
Binary files differ
diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple3 b/externals/grill/flext/tutorial/maxmsp/ex-simple3
new file mode 100755
index 00000000..62e048b7
--- /dev/null
+++ b/externals/grill/flext/tutorial/maxmsp/ex-simple3
Binary files differ
diff --git a/externals/grill/flext/tutorial/pd/ex-adv1.pd b/externals/grill/flext/tutorial/pd/ex-adv1.pd
new file mode 100644
index 00000000..7ff14d6e
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-adv1.pd
@@ -0,0 +1,14 @@
+#N canvas 175 265 667 312 12;
+#X msg 35 31 or two words;
+#X msg 167 31 2 3;
+#X msg 47 252 one 2 3;
+#X obj 85 154 print result;
+#X obj 69 123 adv1 one;
+#X obj 47 224 prepend set;
+#X text 154 216 you can also use "prepend" if "adv1" has already been
+loaded!;
+#X connect 0 0 4 0;
+#X connect 1 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-signal1.pd b/externals/grill/flext/tutorial/pd/ex-signal1.pd
new file mode 100644
index 00000000..391e33a5
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-signal1.pd
@@ -0,0 +1,16 @@
+#N canvas 335 232 452 302 10;
+#X obj 233 98 hsl 128 15 0 1 0 0 empty empty empty 20 8 0 8 -260818
+-1 -1 0 1;
+#X obj 117 46 osc~ 440;
+#X obj 155 173 *~ 0.6;
+#X obj 147 218 dac~;
+#X obj 184 47 osc~ 880;
+#X floatatom 210 80 5 0 0;
+#X obj 155 139 signal1~;
+#X connect 0 0 6 2;
+#X connect 1 0 6 0;
+#X connect 2 0 3 0;
+#X connect 2 0 3 1;
+#X connect 4 0 6 1;
+#X connect 5 0 6 2;
+#X connect 6 0 2 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-signal2.pd b/externals/grill/flext/tutorial/pd/ex-signal2.pd
new file mode 100644
index 00000000..cdd7aaea
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-signal2.pd
@@ -0,0 +1,17 @@
+#N canvas 251 267 456 306 12;
+#X obj 89 68 signal2~;
+#X floatatom 52 117 5 0 0;
+#X floatatom 153 120 5 0 0;
+#X floatatom 251 120 5 0 0;
+#X floatatom 345 121 5 0 0;
+#X obj 90 30 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 29 136 sample rate;
+#X text 136 136 block size;
+#X text 116 29 bang to get audio system parameters;
+#X text 243 137 channels in and out;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 0;
+#X connect 0 3 4 0;
+#X connect 5 0 0 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-simple1.pd b/externals/grill/flext/tutorial/pd/ex-simple1.pd
new file mode 100644
index 00000000..1be01595
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-simple1.pd
@@ -0,0 +1,10 @@
+#N canvas 197 285 460 310 12;
+#X floatatom 85 47 5 0 0;
+#X floatatom 85 142 5 0 0;
+#X msg 22 44 help;
+#X text 137 141 inverse;
+#X text 139 45 input;
+#X obj 85 90 simple1;
+#X connect 0 0 5 0;
+#X connect 2 0 5 0;
+#X connect 5 0 1 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-simple2.pd b/externals/grill/flext/tutorial/pd/ex-simple2.pd
new file mode 100644
index 00000000..8074cb13
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-simple2.pd
@@ -0,0 +1,13 @@
+#N canvas 197 285 454 304 12;
+#X obj 110 96 simple2 3;
+#X floatatom 98 51 5 0 0;
+#X floatatom 199 52 5 0 0;
+#X floatatom 108 150 5 0 0;
+#X msg 11 12 help;
+#X text 90 30 triggering;
+#X text 202 31 non-triggering;
+#X text 196 96 default argument;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 4 0 0 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-simple3.pd b/externals/grill/flext/tutorial/pd/ex-simple3.pd
new file mode 100644
index 00000000..e2867241
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-simple3.pd
@@ -0,0 +1,18 @@
+#N canvas 329 97 539 308 12;
+#X msg 11 12 help;
+#X msg 123 84 born;
+#X msg 172 85 to;
+#X msg 214 87 hula;
+#X msg 228 168 yeah;
+#X msg 228 130 hula 1;
+#X text 280 169 other symbol;
+#X text 57 12 issue help message;
+#X obj 148 231 simple3;
+#X text 261 88 tag without argument;
+#X text 297 128 tag and argument;
+#X connect 0 0 8 0;
+#X connect 1 0 8 0;
+#X connect 2 0 8 0;
+#X connect 3 0 8 0;
+#X connect 4 0 8 0;
+#X connect 5 0 8 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-thread1.pd b/externals/grill/flext/tutorial/pd/ex-thread1.pd
new file mode 100644
index 00000000..6358406c
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-thread1.pd
@@ -0,0 +1,34 @@
+#N canvas 105 266 672 310 12;
+#X obj 54 29 bng 25 250 50 0 empty empty start 0 -6 0 8 -258699 -1
+-1;
+#X floatatom 54 216 8 0 0;
+#X obj 54 182 thread1;
+#X floatatom 145 218 8 0 0;
+#X obj 145 184 thread1;
+#X floatatom 235 219 8 0 0;
+#X obj 235 185 thread1;
+#X floatatom 327 219 8 0 0;
+#X obj 327 185 thread1;
+#X floatatom 420 219 8 0 0;
+#X obj 420 185 thread1;
+#X obj 146 123 delay 200;
+#X obj 235 122 delay 200;
+#X obj 328 124 delay 200;
+#X obj 419 123 delay 200;
+#X text 93 23 click to start;
+#X text 141 41 (if you click twice \, the same thread is started a
+second time);
+#X connect 0 0 2 0;
+#X connect 0 0 11 0;
+#X connect 2 0 1 0;
+#X connect 4 0 3 0;
+#X connect 6 0 5 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 11 0 4 0;
+#X connect 11 0 12 0;
+#X connect 12 0 6 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 13 0 14 0;
+#X connect 14 0 10 0;
diff --git a/externals/grill/flext/tutorial/pd/ex-thread2.pd b/externals/grill/flext/tutorial/pd/ex-thread2.pd
new file mode 100644
index 00000000..26205b8d
--- /dev/null
+++ b/externals/grill/flext/tutorial/pd/ex-thread2.pd
@@ -0,0 +1,40 @@
+#N canvas 116 192 666 304 12;
+#X msg 91 131 stop;
+#X msg 262 135 stop;
+#X obj 206 42 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X obj 298 42 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X text 198 21 start;
+#X text 290 20 stop;
+#X msg 46 131 0;
+#X msg 217 135 0;
+#X msg 430 133 stop;
+#X msg 385 133 0;
+#X obj 411 172 thread2 50;
+#X obj 239 172 thread2 15;
+#X obj 73 171 thread2 3;
+#X floatatom 73 205 8 0 0;
+#X floatatom 239 205 8 0 0;
+#X floatatom 411 205 8 0 0;
+#X msg 140 131 text;
+#X msg 309 135 text;
+#X msg 477 133 text;
+#X connect 0 0 12 0;
+#X connect 1 0 11 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 0 0;
+#X connect 3 0 1 0;
+#X connect 3 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 11 0;
+#X connect 8 0 10 0;
+#X connect 9 0 10 0;
+#X connect 10 0 15 0;
+#X connect 11 0 14 0;
+#X connect 12 0 13 0;
+#X connect 16 0 12 0;
+#X connect 17 0 11 0;
+#X connect 18 0 10 0;
diff --git a/externals/grill/flext/tutorial/readme.txt b/externals/grill/flext/tutorial/readme.txt
new file mode 100644
index 00000000..ec05f1a1
--- /dev/null
+++ b/externals/grill/flext/tutorial/readme.txt
@@ -0,0 +1,36 @@
+flext - C++ layer for Max/MSP and pd (pure data) externals
+tutorial examples
+
+Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+----------------------------------------------------------------------------
+
+These are a few examples to demonstrate some flext features.
+Contribution of examples to the package is higly appreciated!
+
+----------------------------------------------------------------------------
+
+The package should at least compile (and is tested) with the following compilers:
+
+pd - Windows:
+-------------
+o Borland C++ 5.5 (free): edit "config-pd-bcc.txt" & run "build-pd-bcc.bat"
+
+o Microsoft Visual C++ 6: edit "config-pd-msvc.txt" & run "build-pd-msvc.bat"
+
+o Cygwin: edit "config-pd-cygwin.txt" & run "sh build-pd-cygwin.sh"
+
+pd - linux:
+-----------
+o GCC: edit "config-pd-linux.txt" & run "sh build-pd-linux.sh"
+
+Max/MSP - MacOS 9:
+------------------
+o Metrowerks CodeWarrior V6: edit & use the several ".cw" project files
+
+o Apple MPW-PR: edit & use the several "make.mpw" makefiles
+
+----------------------------------------------------------------------------
+
diff --git a/externals/grill/flext/tutorial/signal1/main.cpp b/externals/grill/flext/tutorial/signal1/main.cpp
new file mode 100644
index 00000000..14818e6f
--- /dev/null
+++ b/externals/grill/flext/tutorial/signal1/main.cpp
@@ -0,0 +1,129 @@
+// signal1~ - a flext tutorial external written by Frank Barknecht
+//
+// This is a commented port of the pan~ example from the PD-Externals-Howto to
+// illustrate the usage of flext. You can get the original code at
+// http://iem.kug.ac.at/pd/externals-HOWTO/
+
+#include <flext.h>
+#include <math.h>
+
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 300)
+#error You need at least flext version 0.3.0
+#endif
+
+
+// A flext dsp external ("tilde object") inherits from the class flext_dsp
+class signal1:
+ public flext_dsp
+{
+ // Each external that is written in C++ needs to use #defines
+ // from flbase.h
+ //
+ // The define
+ //
+ // FLEXT_HEADER(NEW_CLASS, PARENT_CLASS)
+ //
+ // should be somewhere in your dsp file.
+ // A good place is here:
+
+ FLEXT_HEADER(signal1, flext_dsp)
+
+ public:
+ signal1():
+ f_pan(0) // initialize f_pan
+ {
+ // The constructor of your class is responsible for
+ // setting up inlets and outlets and for registering
+ // inlet-methods:
+
+ AddInSignal(2); // 2 audio ins
+ AddInFloat(); // 1 float in
+ AddOutSignal(); // 1 audio out [ == AddOutSignal(1) ]
+
+ SetupInOut(); // set up inlets and outlets.
+ // Must be called once!
+
+ // Now we need to bind the handler function to our
+ // panning inlet, which is inlet 2 (counting all inlets
+ // from 0). We want the function "setPan" to get
+ // called on incoming float messages:
+
+ FLEXT_ADDMETHOD(2,setPan);
+
+ // We're done constructing:
+ post("-- pan~ with flext ---");
+
+ } // end of constructor
+
+
+ protected:
+ // here we declare the virtual DSP function
+ virtual void m_signal(int n, float *const *in, float *const *out);
+ private:
+ float f_pan; // holds our panning factor
+
+ // Before we can use "setPan" as a handler, we must register this
+ // function as a callback to PD or Max. This is done using the
+ // FLEXT_CALLBACK* macros. There are several of them.
+ //
+ // FLEXT_CALLBACK_F is a shortcut, that registers a function
+ // expecting one float arg (thus ending in "_F"). There are
+ // other shortcuts that register other types of functions. Look
+ // into flext.h. No semicolon at the end of line!!!
+ FLEXT_CALLBACK_F(setPan)
+
+ // Now setPan can get declared and defined here.
+ void setPan(float f)
+ {
+ // set our private panning factor "f_pan" to the inlet
+ // value float "f" in the intervall [0,1]
+ f_pan = (f<0) ? 0.0f : (f>1) ? 1.0f : f ;
+
+ // if you want to debug if this worked, comment out the
+ // following line:
+ //post("Set panning to %.2f, maybe clipped from %.2f", f_pan,f);
+ } // end setPan
+}; // end of class declaration for signal1
+
+
+// Before we can run our signal1-class in PD, the object has to be registered as a
+// PD object. Otherwise it would be a simple C++-class, and what good would
+// that be for? Registering is made easy with the FLEXT_NEW_* macros defined
+// in flext.h. For tilde objects without arguments call:
+
+FLEXT_NEW_DSP("signal1~ signal1~", signal1)
+// T.Grill: there are two names for the object: signal1~ as main name and pan~ as its alias
+
+// Now we define our DSP function. It gets this arguments:
+//
+// int n: length of signal vector. Loop over this for your signal processing.
+// float *const *in, float *const *out:
+// These are arrays of the signals in the objects signal inlets rsp.
+// oulets. We come to that later inside the function.
+
+void signal1::m_signal(int n, float *const *in, float *const *out)
+{
+
+ const float *ins1 = in[0];
+ const float *ins2 = in[1];
+ // As said above "in" holds a list of the signal vectors in all inlets.
+ // After these two lines, ins1 holds the signal vector ofthe first
+ // inlet, index 0, and ins2 holds the signal vector of the second
+ // inlet, with index 1.
+
+ float *outs = out[0];
+ // Now outs holds the signal vector at the one signal outlet we have.
+
+ // We are now ready for the main signal loop
+ while (n--)
+ {
+
+ // The "++" after the pointers outs, ins1 and ins2 walks us
+ // through the signal vector with each n, of course. Before
+ // each step we change the signal value in the outlet *outs
+ // according to our panning factor "f_pan" and according to the
+ // signals at the two signal inlets, *ins1 and *ins2
+
+ *outs++ = (*ins1++) * (1-f_pan) + (*ins2++) * f_pan;
+ }
+} // end m_signal
diff --git a/externals/grill/flext/tutorial/signal1/signal1.cw b/externals/grill/flext/tutorial/signal1/signal1.cw
new file mode 100644
index 00000000..f273b763
--- /dev/null
+++ b/externals/grill/flext/tutorial/signal1/signal1.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/signal1/signal1.dsp b/externals/grill/flext/tutorial/signal1/signal1.dsp
new file mode 100644
index 00000000..42916c07
--- /dev/null
+++ b/externals/grill/flext/tutorial/signal1/signal1.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="signal1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=signal1 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "signal1.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "signal1.mak" CFG="signal1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "signal1 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "signal1 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "max/flext/tutorial/signal1"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "signal1 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"../msvc/signal1~.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "signal1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /Fr /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_d-pdwin.lib /nologo /dll /debug /machine:I386 /out:"msvc-debug/signal1~.dll" /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "signal1 - Win32 Release"
+# Name "signal1 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/signal2/main.cpp b/externals/grill/flext/tutorial/signal2/main.cpp
new file mode 100644
index 00000000..1517b536
--- /dev/null
+++ b/externals/grill/flext/tutorial/signal2/main.cpp
@@ -0,0 +1,80 @@
+/*
+flext tutorial - signal 2
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This is an object showing varous parameters of the pd audio system
+*/
+
+// include flext header
+#include <flext.h>
+
+// check for appropriate flext version
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 300)
+#error You need at least flext version 0.3.0
+#endif
+
+
+// define the class that stands for a pd/Max object
+// Attention: the class name must be the same as the object name!! (without the ~)
+
+class signal2:
+ // inherit from flext dsp class
+ public flext_dsp
+{
+ // obligatory flext header (class name,base class name)
+ FLEXT_HEADER(signal2,flext_dsp)
+
+public:
+ // constructor
+ signal2();
+
+protected:
+ void m_bang(); // method for bang
+
+ // this virtual function is obligatory for objects derived from flext_dsp
+ virtual void m_signal(int n, float *const *in, float *const *out);
+
+private:
+ FLEXT_CALLBACK(m_bang); // callback for method "m_bang"
+};
+
+// instantiate the class
+FLEXT_NEW_DSP("signal2~",signal2)
+
+
+signal2::signal2()
+{
+ // define inlets:
+ // first inlet must always by of type anything (or signal for dsp objects)
+ AddInAnything(); // add one inlet for any message
+
+ // add outlets for sample rate, block size, audio in and out channel count
+ AddOutFloat(1);
+ AddOutInt(3); // although PD knows no int type, flext does!
+
+ // set up inlets and outlets - obligatory!
+ SetupInOut();
+
+ // register methods
+ FLEXT_ADDBANG(0,m_bang); // register method "m_bang" for bang message into inlet 0
+}
+
+void signal2::m_bang()
+{
+ // output various parameters of the pd audio system
+ ToOutFloat(0,Samplerate());
+ ToOutInt(1,Blocksize());
+ ToOutInt(2,ChannelsIn());
+ ToOutInt(3,ChannelsOut());
+}
+
+void signal2::m_signal(int, float *const *, float *const *)
+{
+ // do no dsp work
+}
+
diff --git a/externals/grill/flext/tutorial/signal2/signal2.cw b/externals/grill/flext/tutorial/signal2/signal2.cw
new file mode 100644
index 00000000..a7b29ba3
--- /dev/null
+++ b/externals/grill/flext/tutorial/signal2/signal2.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/signal2/signal2.dsp b/externals/grill/flext/tutorial/signal2/signal2.dsp
new file mode 100644
index 00000000..c70ae670
--- /dev/null
+++ b/externals/grill/flext/tutorial/signal2/signal2.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="signal2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=signal2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "signal2.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "signal2.mak" CFG="signal2 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "signal2 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "signal2 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "max/flext/tutorial/signal2"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "signal2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"../msvc/signal2~.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "signal2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /Fr /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_d-pdwin.lib /nologo /dll /debug /machine:I386 /out:"msvc-debug/signal2~.dll" /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "signal2 - Win32 Release"
+# Name "signal2 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/simple1/main.cpp b/externals/grill/flext/tutorial/simple1/main.cpp
new file mode 100755
index 00000000..38f12573
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple1/main.cpp
@@ -0,0 +1,78 @@
+/*
+flext tutorial - simple 1
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This is an example of a simple object doing a float inversion
+*/
+
+// include flext header
+#include <flext.h>
+
+// check for appropriate flext version
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 300)
+#error You need at least flext version 0.3.0
+#endif
+
+
+// define the class that stands for a pd/Max object
+// Attention: the class name must be the same as the object name!! (without an eventual ~)
+
+class simple1:
+ // inherit from basic flext class
+ public flext_base
+{
+ // obligatory flext header (class name,base class name)
+ FLEXT_HEADER(simple1,flext_base)
+
+public:
+ // constructor
+ simple1();
+
+protected:
+ void m_float(float f); // method for float values
+
+private:
+ FLEXT_CALLBACK_1(m_float,float); // callback for method "m_float" (with one float argument)
+};
+
+// instantiate the class
+FLEXT_NEW("simple1",simple1)
+
+
+simple1::simple1()
+{
+ // define inlets:
+ // first inlet must always by of type anything (or signal for dsp objects)
+ AddInAnything(); // add one inlet for any message
+
+ // define outlets:
+ AddOutFloat(); // add one float outlet (has index 0)
+
+ // set up inlets and outlets - obligatory!
+ SetupInOut();
+
+ // register methods
+ FLEXT_ADDMETHOD(0,m_float); // register method (for float messages) "m_float" for inlet 0
+}
+
+void simple1::m_float(float f)
+{
+ float res;
+ if(f == 0) {
+ // special case 0
+ post("%s - zero can't be inverted!",thisName());
+ res = 0;
+ }
+ else
+ // normal case
+ res = 1/f;
+
+ // output value to outlet
+ ToOutFloat(0,res); // (0 stands for the outlet index 0 - the leftmost outlet)
+}
+
diff --git a/externals/grill/flext/tutorial/simple1/simple1.cw b/externals/grill/flext/tutorial/simple1/simple1.cw
new file mode 100755
index 00000000..d8b58eb1
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple1/simple1.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/simple1/simple1.dsp b/externals/grill/flext/tutorial/simple1/simple1.dsp
new file mode 100644
index 00000000..281042a2
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple1/simple1.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="simple1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=simple1 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "simple1.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "simple1.mak" CFG="simple1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "simple1 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "simple1 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "simple1"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "simple1 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"../msvc/simple1.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "simple1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /Fr /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_d-pdwin.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "simple1 - Win32 Release"
+# Name "simple1 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/simple2/main.cpp b/externals/grill/flext/tutorial/simple2/main.cpp
new file mode 100755
index 00000000..306a953b
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple2/main.cpp
@@ -0,0 +1,80 @@
+/*
+flext tutorial - simple 2
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This is an example of a simple object doing a float addition
+*/
+
+// include flext header
+#include <flext.h>
+
+// check for appropriate flext version
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 300)
+#error You need at least flext version 0.3.0
+#endif
+
+
+class simple2:
+ public flext_base
+{
+ FLEXT_HEADER(simple2,flext_base)
+
+public:
+ // constructor with float argument
+ simple2(float init);
+
+protected:
+ void m_float1(float f);
+ void m_float2(float f);
+
+ // stored argument of right inlet
+ float arg;
+
+private:
+ // FLEXT_CALLBACK_F(...) is a shortcut for FLEXT_CALLBACK_1(...,float)
+ FLEXT_CALLBACK_F(m_float1); // callback for method "m_float1" (with one float argument)
+ FLEXT_CALLBACK_F(m_float2); // callback for method "m_float2" (with one float argument)
+};
+
+// instantiate the class (constructor has one float argument)
+FLEXT_NEW_1("simple2",simple2,float)
+
+
+simple2::simple2(float init):
+ arg(init) // store argument
+{
+ // define inlets
+ AddInAnything(); // first inlet of type anything (index 0)
+ AddInFloat(); // additional float inlet (index 1)
+
+ // define outlets
+ AddOutFloat(); // one float outlet (has index 0)
+
+ // set up inlets and outlets - obligatory!
+ SetupInOut();
+
+ // register methods
+ FLEXT_ADDMETHOD(0,m_float1); // register method (for floats) "m_float1" for inlet 0
+ FLEXT_ADDMETHOD(1,m_float2); // register method (for floats) "m_float2" for inlet 1
+}
+
+void simple2::m_float1(float f)
+{
+ float res;
+ res = arg+f;
+
+ // output value to outlet
+ ToOutFloat(0,res); // (0 stands for the outlet index 0)
+}
+
+void simple2::m_float2(float f)
+{
+ // store float
+ arg = f;
+}
+
diff --git a/externals/grill/flext/tutorial/simple2/simple2.cw b/externals/grill/flext/tutorial/simple2/simple2.cw
new file mode 100755
index 00000000..1bc9379f
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple2/simple2.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/simple2/simple2.dsp b/externals/grill/flext/tutorial/simple2/simple2.dsp
new file mode 100644
index 00000000..22b75a5e
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple2/simple2.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="simple2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=simple2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "simple2.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "simple2.mak" CFG="simple2 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "simple2 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "simple2 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "simple2"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "simple2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"../msvc/simple2.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "simple2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_d-pdwin.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "simple2 - Win32 Release"
+# Name "simple2 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/simple3/main.cpp b/externals/grill/flext/tutorial/simple3/main.cpp
new file mode 100644
index 00000000..5d290f67
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple3/main.cpp
@@ -0,0 +1,90 @@
+/*
+flext tutorial - simple 3
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This is an example of an object digesting several "tagged" messages
+
+*/
+
+// include flext header
+#include <flext.h>
+
+// check for appropriate flext version
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 300)
+#error You need at least flext version 0.3.0
+#endif
+
+class simple3:
+ public flext_base
+{
+ FLEXT_HEADER(simple3,flext_base)
+
+public:
+ // constructor with variable argument list
+ simple3();
+
+protected:
+ void m_tag();
+ void m_tag_and_int(int i);
+ void m_sym(t_symbol *s);
+
+ // override default flext help function
+ virtual void m_help();
+
+private:
+
+ FLEXT_CALLBACK(m_tag); // callback for method "m_tag" (no arguments)
+ FLEXT_CALLBACK_I(m_tag_and_int); // callback for method "m_tag" (int arguments)
+ FLEXT_CALLBACK_S(m_sym); // callback for method "m_sym" (with one symbol argument)
+};
+
+// instantiate the class (constructor has a variable argument list)
+FLEXT_NEW("simple3",simple3)
+
+
+simple3::simple3()
+{
+ // define inlets
+ AddInAnything(); // add inlet of type anything (index 0)
+
+ // set up inlets and outlets
+ SetupInOut();
+
+ // register methods
+ FLEXT_ADDMETHOD_(0,"born",m_tag); // register method for tag "born"
+ FLEXT_ADDMETHOD_(0,"to",m_tag); // register method for tag "to"
+ FLEXT_ADDMETHOD_(0,"hula",m_tag); // register method for tag "hula"
+ FLEXT_ADDMETHOD_I(0,"hula",m_tag_and_int); // register method for tag "hula" and int argument
+
+ FLEXT_ADDMETHOD(0,m_sym); // register method for all other symbols
+}
+
+void simple3::m_tag()
+{
+ post("tag recognized");
+}
+
+void simple3::m_tag_and_int(int i)
+{
+ post("tag recognized (has int arg: %i)",i);
+}
+
+void simple3::m_sym(t_symbol *s)
+{
+ post("symbol: %s",GetString(s));
+}
+
+
+void simple3::m_help()
+{
+ // post a help message
+ // thisName() returns a char * for the object name
+ post("%s - example for tagged messages",thisName());
+}
+
+
diff --git a/externals/grill/flext/tutorial/simple3/simple3.cw b/externals/grill/flext/tutorial/simple3/simple3.cw
new file mode 100644
index 00000000..b29678f7
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple3/simple3.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/simple3/simple3.dsp b/externals/grill/flext/tutorial/simple3/simple3.dsp
new file mode 100644
index 00000000..8390b044
--- /dev/null
+++ b/externals/grill/flext/tutorial/simple3/simple3.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="simple3" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=simple3 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "simple3.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "simple3.mak" CFG="simple3 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "simple3 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "simple3 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "simple3"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "simple3 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"../msvc/simple3.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "simple3 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_d-pdwin.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "simple3 - Win32 Release"
+# Name "simple3 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/thread1/main.cpp b/externals/grill/flext/tutorial/thread1/main.cpp
new file mode 100644
index 00000000..878cef76
--- /dev/null
+++ b/externals/grill/flext/tutorial/thread1/main.cpp
@@ -0,0 +1,79 @@
+/*
+flext tutorial - threads 1
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This shows an example of a method running as a thread
+*/
+
+// define FLEXT_THREADS for thread usage. Flext must also have been compiled with that defined!
+#ifndef FLEXT_THREADS
+#define FLEXT_THREADS
+#endif
+
+#include <flext.h>
+
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 301)
+#error You need at least flext version 0.3.1
+#endif
+
+
+class thread1:
+ public flext_base
+{
+ FLEXT_HEADER(thread1,flext_base)
+
+public:
+ thread1();
+
+protected:
+ void m_start(); // method function
+
+private:
+ // define threaded callback for method m_start (with boolean argument)
+ // the same syntax as with FLEXT_CALLBACK is used here
+ FLEXT_THREAD(m_start);
+};
+
+FLEXT_NEW("thread1",thread1)
+
+
+
+thread1::thread1()
+{
+ AddInAnything();
+ AddOutInt();
+ SetupInOut(); // set up inlets and outlets
+
+ FLEXT_ADDBANG(0,m_start); // register method
+}
+
+void thread1::m_start()
+{
+ // Please note that this functions needs about 10 seconds to complete
+ // Without threads it would block the real-time system
+
+ // Okay, that functionality would be far more elegant with timers
+ // ... but hey, it's a demo!
+
+ for(int i = 0; i < 20 && !ShouldExit(); ++i) {
+ ToOutInt(0,i); // output loop count
+
+ // wait for half a second
+ for(int j = 0; j < 5 && !ShouldExit(); ++j) Sleep(0.1f);
+ // note: we shall not block a thread for a longer time.
+ // The system might want to destroy the object in the meantime and
+ // expects thread termination.
+ // Flext waits for 1 second by default, then it aborts the thread brutally
+ }
+
+ // output a final zero
+ ToOutInt(0,0);
+}
+
+
+
diff --git a/externals/grill/flext/tutorial/thread1/thread1.cw b/externals/grill/flext/tutorial/thread1/thread1.cw
new file mode 100644
index 00000000..b26ff18b
--- /dev/null
+++ b/externals/grill/flext/tutorial/thread1/thread1.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/thread1/thread1.dsp b/externals/grill/flext/tutorial/thread1/thread1.dsp
new file mode 100644
index 00000000..7ef7ca52
--- /dev/null
+++ b/externals/grill/flext/tutorial/thread1/thread1.dsp
@@ -0,0 +1,104 @@
+# Microsoft Developer Studio Project File - Name="thread1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=thread1 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "thread1.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "thread1.mak" CFG="thread1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "thread1 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "thread1 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "thread1"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "thread1 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /D "FLEXT_THREADS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_t-pdwin.lib pthreadVC.lib /nologo /dll /machine:I386 /out:"../msvc/thread1.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "thread1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /D "FLEXT_THREADS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_td-pdwin.lib pthreadVC.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "thread1 - Win32 Release"
+# Name "thread1 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+
+!IF "$(CFG)" == "thread1 - Win32 Release"
+
+# ADD CPP /GR-
+
+!ELSEIF "$(CFG)" == "thread1 - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/thread2/main.cpp b/externals/grill/flext/tutorial/thread2/main.cpp
new file mode 100644
index 00000000..ce2a170e
--- /dev/null
+++ b/externals/grill/flext/tutorial/thread2/main.cpp
@@ -0,0 +1,132 @@
+/*
+flext tutorial - threads 2
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+-------------------------------------------------------------------------
+
+This shows an example of multiple threads and syncing with a thread conditional
+*/
+
+// define FLEXT_THREADS for thread usage. Flext must also have been compiled with that defined!
+#ifndef FLEXT_THREADS
+#define FLEXT_THREADS
+#endif
+
+#include <flext.h>
+
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 301)
+#error You need at least flext version 0.3.1
+#endif
+
+
+class thread2:
+ public flext_base
+{
+ FLEXT_HEADER(thread2,flext_base)
+
+public:
+ thread2(int del);
+
+protected:
+ void m_start(int st);
+ void m_stop();
+ void m_text();
+
+ void m_textout();
+
+private:
+ FLEXT_THREAD_I(m_start); // define threaded callback for method m_start
+ FLEXT_CALLBACK(m_stop); // normal callback for m_stop
+ FLEXT_CALLBACK(m_text); // turn on console output
+
+ FLEXT_THREAD(m_textout); // text output
+
+ float delay;
+ volatile int count;
+
+ // caution: CodeWarrior seems to ignore volatile modifier!!
+ volatile bool stopit,running,blipping; // flags for running and stopping
+
+ // thread conditional for stop signal
+ ThrCond cond;
+};
+
+FLEXT_NEW_1("thread2",thread2,int)
+
+
+
+thread2::thread2(int del):
+ delay(del/1000.f),
+ stopit(false),
+ running(false),blipping(false)
+{
+ AddInAnything();
+ AddOutInt(2);
+ SetupInOut(); // set up inlets and outlets
+
+ FLEXT_ADDMETHOD(0,m_start); // register start for integer numbers (floats in PD)
+ FLEXT_ADDMETHOD_(0,"text",m_text); // register m_text method for "text" tag
+ FLEXT_ADDMETHOD_(0,"stop",m_stop); // register m_text method for "stop" tag
+}
+
+void thread2::m_start(int st)
+{
+ // if already running, just set back the counter
+ if(running) { count = st; return; }
+
+ running = true;
+
+ // loop until either the system exit flag or the "stopit" flag is set
+ for(count = st; !ShouldExit() && !stopit; ++count)
+ {
+ Sleep(delay);
+ ToOutInt(0,count); // output loop count
+ }
+
+ cond.Lock(); // lock conditional
+ running = false; // change state flag
+ cond.Signal(); // signal changed flag to watiting "stop" method
+ cond.Unlock(); // unlock conditional
+}
+
+void thread2::m_stop()
+{
+ cond.Lock(); // lock conditional
+ stopit = true; // set termination flag
+
+ while(*(&running) || *(&blipping)) // workaround for CodeWarrior!
+ {
+ cond.Wait(); // wait for signal by running threads
+ }
+
+ // --- Here, the threads should have stopped ---
+
+ stopit = false; // reset flag
+ cond.Unlock(); // unlock conditional
+}
+
+
+void thread2::m_text()
+{
+ FLEXT_CALLMETHOD(m_textout);
+}
+
+void thread2::m_textout()
+{
+ if(blipping) return;
+ blipping = true;
+
+ while(!ShouldExit() && !stopit) {
+ post("%i",count);
+ Sleep(1.f);
+ }
+
+ cond.Lock(); // lock conditional
+ blipping = false; // change state flag
+ cond.Signal(); // signal changed flag to watiting "stop" method
+ cond.Unlock(); // unlock conditional
+}
+
diff --git a/externals/grill/flext/tutorial/thread2/thread2.cw b/externals/grill/flext/tutorial/thread2/thread2.cw
new file mode 100755
index 00000000..b26ff18b
--- /dev/null
+++ b/externals/grill/flext/tutorial/thread2/thread2.cw
Binary files differ
diff --git a/externals/grill/flext/tutorial/thread2/thread2.dsp b/externals/grill/flext/tutorial/thread2/thread2.dsp
new file mode 100644
index 00000000..da5e149e
--- /dev/null
+++ b/externals/grill/flext/tutorial/thread2/thread2.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="thread2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=thread2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "thread2.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "thread2.mak" CFG="thread2 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "thread2 - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "thread2 - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "max/flext/tutorial/thread2"
+# PROP Scc_LocalPath "."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "thread2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "msvc"
+# PROP Intermediate_Dir "msvc"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR- /GX- /O2 /I "..\..\source" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /D "FLEXT_THREADS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "NDEBUG"
+# ADD RSC /l 0xc07 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_t-pdwin.lib pthreadVC.lib /nologo /dll /machine:I386 /out:"../msvc/thread2.dll" /libpath:"..\..\pd-msvc"
+
+!ELSEIF "$(CFG)" == "thread2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "msvc-debug"
+# PROP Intermediate_Dir "msvc-debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR- /GX- /ZI /Od /I "..\..\source" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NT" /D "PD" /D "FLEXT_THREADS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc07 /d "_DEBUG"
+# ADD RSC /l 0xc07 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext_td-pdwin.lib pthreadVC.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\pd-msvc"
+
+!ENDIF
+
+# Begin Target
+
+# Name "thread2 - Win32 Release"
+# Name "thread2 - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# End Target
+# End Project
diff --git a/externals/grill/flext/tutorial/tutorial.dsw b/externals/grill/flext/tutorial/tutorial.dsw
new file mode 100644
index 00000000..5bc8001a
--- /dev/null
+++ b/externals/grill/flext/tutorial/tutorial.dsw
@@ -0,0 +1,161 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "adv1"=.\adv1\adv1.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ adv1
+ .\adv1
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "flext"=..\flext.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ max/flext
+ ..
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "signal1"=.\signal1\signal1.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ max/flext/tutorial/signal1
+ .\signal1
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "signal2"=.\signal2\signal2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ max/flext/tutorial/signal2
+ .\signal2
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "simple1"=.\simple1\simple1.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ simple1
+ .\simple1
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "simple2"=.\simple2\simple2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ simple2
+ .\simple2
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "simple3"=.\simple3\simple3.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ simple3
+ .\simple3
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "thread1"=.\thread1\thread1.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ thread1
+ .\thread1
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "thread2"=.\thread2\thread2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+ begin source code control
+ max/flext/tutorial/thread2
+ .\thread2
+ end source code control
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+