diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flatom.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flatom.cpp
deleted file mode 100755
index 366e101ceec1f6ec9634d2b0b3e2c084c2a1b03a..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flatom.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flatom.cpp
-    \brief Definitions for handling the t_atom type and lists thereof.
-*/
- 
-#ifndef __FLEXT_ATOM_CPP
-#define __FLEXT_ATOM_CPP
-
-#include "flext.h"
-
-#include <cstring> // for memcpy
-
-#include "flpushns.h"
-
-#if FLEXT_SYS != FLEXT_SYS_JMAX
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::CmpAtom(const t_atom &a,const t_atom &b)
-{
-	if(GetType(a) == GetType(b)) {
-		switch(GetType(a)) {
-			case A_FLOAT: return GetFloat(a) == GetFloat(b)?0:(GetFloat(a) < GetFloat(b)?-1:1);
-#if FLEXT_SYS == FLEXT_SYS_MAX
-			case A_INT: return GetInt(a) == GetInt(b)?0:(GetInt(a) < GetInt(b)?-1:1);
-#endif
-			case A_SYMBOL: return GetSymbol(a) == GetSymbol(b)?0:strcmp(GetString(a),GetString(b));
-#if FLEXT_SYS == FLEXT_SYS_PD
-			case A_POINTER: return GetPointer(a) == GetPointer(b)?0:(GetPointer(a) < GetPointer(b)?-1:1);
-#endif
-			default:
-				// can't be compared.....
-				FLEXT_ASSERT(false);
-				return 0;
-		}
-	}
-	else
-		return GetType(a) < GetType(b)?-1:1;
-}
-#else
-#error Not implemented
-#endif
-
-FLEXT_TEMPIMPL(t_atom *FLEXT_CLASSDEF(flext))::CopyList(int argc,const t_atom *argv)
-{
-	t_atom *dst = new t_atom[argc];
-    memcpy(dst,argv,argc*sizeof(t_atom));
-	return dst;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::CopyAtoms(int cnt,t_atom *dst,const t_atom *src)
-{
-    if(dst < src)
-        // forward
-        memcpy(dst,src,cnt*sizeof(t_atom));
-    else
-        // backwards
-        while(cnt--) dst[cnt] = src[cnt];
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AtomList::Alloc(int sz,int keepix,int keeplen,int keepto)
-{
-    if(lst) {
-        if(cnt == sz) {
-            if(keepix >= 0 && keepix != keepto) {
-                int c = keeplen >= 0?keeplen:cnt;
-                FLEXT_ASSERT(c+keepto <= cnt);
-                FLEXT_ASSERT(c+keepix <= cnt);
-                CopyAtoms(c,lst+keepto,lst+keepix);
-            }
-
-            return; // no change
-        }
-
-        t_atom *l;
-        if(sz) {
-            l = new t_atom[sz];
-            if(keepix >= 0) {
-                // keep contents
-                int c = keeplen >= 0?keeplen:(cnt > sz?sz:cnt);
-                FLEXT_ASSERT(c+keepto <= sz);
-                FLEXT_ASSERT(c+keepix <= cnt);
-                CopyAtoms(c,l+keepto,lst+keepix);
-            }
-        }
-        else
-            l = NULL;
-
-        Free();
-        lst = l,cnt = sz;
-    }
-    else {
-        FLEXT_ASSERT(cnt == 0);
-        if(sz) lst = new t_atom[cnt = sz];
-    }
-}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext))::AtomList::~AtomList() { Free(); }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AtomList::Free()
-{
-    if(lst) { 
-        delete[] lst; lst = NULL; 
-        cnt = 0;
-    }
-    else
-        FLEXT_ASSERT(cnt == 0);
-}
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext))::AtomList &FLEXT_CLASSDEF(flext))::AtomList::Set(int argc,const t_atom *argv,int offs,bool resize)
-{
-	int ncnt = argc+offs;
-	if(resize) Alloc(ncnt);
-
-    // argv can be NULL independently from argc
-    if(argv) CopyAtoms(argc,lst+offs,argv);
-
-	return *this;
-}
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::AtomList::Compare(const AtomList &a) const
-{
-	if(Count() == a.Count()) {
-		for(int i = 0; i < Count(); ++i) {
-			int cmp = CmpAtom(lst[i],a[i]);
-			if(cmp) return cmp;
-		}
-		return 0;
-	}
-	else 
-		return Count() < a.Count()?-1:1;
-}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext))::AtomListStaticBase::~AtomListStaticBase() { Free(); }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AtomListStaticBase::Alloc(int sz,int keepix,int keeplen,int keepto)
-{ 
-    if(sz <= precnt) {
-        // small enough for pre-allocated space
-
-        if(AtomList::lst != predata && AtomList::lst) {
-            // currently allocated memory is larger than what we need
-
-            if(keepix >= 0) {
-                // keep contents
-                int c = keeplen >= 0?keeplen:(AtomList::cnt > sz?sz:AtomList::cnt);
-                FLEXT_ASSERT(c+keepto <= precnt);
-                FLEXT_ASSERT(c+keepix <= AtomList::cnt);
-                CopyAtoms(c,predata+keepto,AtomList::lst+keepix);
-            }
-
-            // free allocated memory
-            AtomList::Free();
-        }
-        AtomList::lst = predata;
-        AtomList::cnt = sz;
-    }
-    else 
-        AtomList::Alloc(sz,keepix,keeplen,keepto);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AtomListStaticBase::Free()
-{
-    if(AtomList::lst != predata)
-        AtomList::Free();
-    else {
-        AtomList::lst = NULL;
-        AtomList::cnt = 0;
-    }
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_ATOM_CPP
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flatom_part.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flatom_part.cpp
deleted file mode 100755
index 8d4a23f76480f9ff81a105686fe2cbd41b5472dd..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flatom_part.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flatom_part.cpp
-    \brief Definitions for handling the t_atom type and lists thereof.
-*/
- 
-#ifndef __FLEXT_ATOM_PART_CPP
-#define __FLEXT_ATOM_PART_CPP
-
-#include "flext.h"
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::AtomList::Get(t_atom *argv,int mxsz) const
-{
-    int argc = Count();
-    if(mxsz >= 0 && argc > mxsz) argc = mxsz;
-
-    for(int i = 0; i < argc; ++i) SetAtom(argv[i],lst[i]);
-
-    return argc;
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AtomList::GetPart(int offs,int len,AtomList &ret) const
-{
-    if(offs+len > Count()) {
-        len = Count()-offs;
-        if(len < 0) len = 0;
-    }
-
-    ret(len,Atoms()+offs);
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_ATOM_PART_CPP
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flatom_pr.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flatom_pr.cpp
deleted file mode 100755
index 795f37ba0d7a313651050a593f2446f32294c5dd..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flatom_pr.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flatom_pr.cpp
-    \brief Definitions for printing and scanning the t_atom type.
-*/
-
-#ifndef __FLEXT_ATOM_PR_CPP
-#define __FLEXT_ATOM_PR_CPP
-
-#include "flext.h"
-
-#include <cctype>
-#include <cstdlib>
-#include <cstring>
-#include <cstdio>
-
-#include "flpushns.h"
-
-#ifdef _MSC_VER
-#define snprintf _snprintf
-#endif
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::PrintAtom(const t_atom &a,char *buf,size_t bufsz)
-{
-    bool ok = true;
-    if(IsFloat(a)) {
-        ok = STD::snprintf(buf,bufsz,"%g",GetFloat(a)) > 0;
-    }
-    else if(IsInt(a)) {
-        ok = STD::snprintf(buf,bufsz,"%i",GetInt(a)) > 0;
-    }
-    else if(IsSymbol(a)) {
-		const char *c = GetString(a);
-		size_t len = strlen(c);
-		if(len < bufsz) {
-			memcpy(buf,c,len); buf[len] = 0;
-			ok = true;
-		}
-		else 
-			ok = false;
-    }
-#if FLEXT_SYS == FLEXT_SYS_PD
-#ifndef FLEXT_COMPATIBLE
-    else if(IsPointer(a)) {
-        ok = STD::snprintf(buf,bufsz,"%p",GetPointer(a)) > 0;
-    }
-#endif
-    else if(a.a_type == A_DOLLAR) {
-        ok = STD::snprintf(buf,bufsz,"$%d",a.a_w.w_index) > 0;
-    }
-    else if(a.a_type == A_DOLLSYM) {
-        ok = STD::snprintf(buf,bufsz,"$%s",GetString(a)) > 0;
-    }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    else if(a.a_type == A_DOLLAR) {
-        ok = STD::snprintf(buf,bufsz,"$%ld",a.a_w.w_long) > 0;
-    }
-#else
-//#pragma message("Not implemented")
-#endif
-    else {
-        error("flext: atom type unknown");
-        ok = false;
-    }
-    return ok;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::PrintList(int argc,const t_atom *argv,char *buf,size_t bufsz)
-{
-    bool ok = true;
-    for(int i = 0; ok && i < argc && bufsz > 0; ++i) {
-        if(i) { *(buf++) = ' '; --bufsz; } // prepend space
-
-        if(PrintAtom(argv[i],buf,bufsz)) {
-            size_t len = strlen(buf);
-            buf += len,bufsz -= len;
-        }
-        else
-            ok = false;
-    }
-    *buf = 0;
-    return ok;
-}
-
-
-FLEXT_TEMPIMPL(const char *FLEXT_CLASSDEF(flext))::ScanAtom(t_atom &a,const char *c)
-{
-	// skip leading whitespace
-	while(*c && isspace(*c)) ++c;
-	if(!*c) return NULL;
-
-    // go to next space and save character
-    char *end = const_cast<char *>(c);
-    while(*end && !isspace(*end)) ++end;
-    char sv = *end;
-
-    float fres;
-    // first try float
-    char *endp;
-    // see if it's a float - thanks to Frank Barknecht
-    fres = (float)strtod(c,&endp);   
-    if(*c && endp != c) { 
-        int ires = (int)fres; // try a cast
-        if(fres == ires)
-            SetInt(a,ires);
-        else
-            SetFloat(a,fres);
-    }
-    // no, it's a symbol
-    else
-        SetString(a,c);
-
-    *end = sv;
-
-	return end;
-}
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::ScanList(int argc,t_atom *argv,const char *buf)
-{
-    int read;    
-    for(read = 0; read < argc; ++read)
-    {
-        buf = ScanAtom(argv[read],buf);
-        if(!buf) break;
-    }
-    return read;
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_ATOM_PR_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flattr.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flattr.cpp
deleted file mode 100755
index 84ad85afd1ef9f58a3960c6ac61a1ca7e407f4f2..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flattr.cpp
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flattr.cpp
-    \brief Attribute handling for the flext base class
-*/
- 
-#ifndef __FLEXT_ATTR_CPP
-#define __FLEXT_ATTR_CPP
-
-#include "flext.h"
-
-#include <cstring>
-#include <cctype>
-#include <set>
-
-#include "flpushns.h"
-
-#ifdef __MWERKS__
-#define STD std
-#else
-#define STD
-#endif
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::AttrItem::AttrItem(const t_symbol *t,metharg tp,methfun f,int fl):
-	Item(NULL),index(0),
-	flags(fl|afl_shown),
-	argtp(tp),fun(f),
-	counter(NULL),tag(t)
-{}
-
-
-/*
-FLEXT_CLASSDEF(flext_base)::AttrDataCont::AttrDataCont() {}
-
-FLEXT_CLASSDEF(flext_base)::AttrDataCont::~AttrDataCont()
-{
-	for(iterator it = begin(); it != end(); ++it)
-		if(it.data()) delete it.data();
-}
-*/
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::AttrDataCont::~AttrDataCont() { clear(); }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AttrDataCont::clear()
-{
-    for(FLEXT_TEMP_TYPENAME AttrDataCont::iterator it(*this); it; ++it) delete it.data();
-    TablePtrMap<const t_symbol *,AttrData *,8>::clear();
-}
-
-//! Add get and set attributes
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddAttrib(ItemCont *aa,ItemCont *ma,const t_symbol *asym,metharg tp,methfun gfun,methfun sfun)
-{
-	AttrItem *a,*b;
-
-    FLEXT_ASSERT(asym != sym__ && asym != sym_list && asym != sym_float && asym != sym_symbol && asym != sym_anything);
-
-	if(sfun) // if commented out, there will be a warning at run-time (more user-friendly)
-	{
-		a = new AttrItem(asym,tp,sfun,AttrItem::afl_set);
-        a->index = aa->Members();
-		aa->Add(a,asym); 
-
-		// bind attribute to a method
-		MethItem *mi = new MethItem(a);
-		mi->SetArgs(sfun,1,new metharg(tp));
-		ma->Add(mi,asym);
-	}
-	else
-		a = NULL;
-
-	if(gfun) // if commented out, there will be a warning at run-time (more user-friendly)
-	{
-		b = new AttrItem(asym,tp,gfun,AttrItem::afl_get);
-        b->index = aa->Members();
-		aa->Add(b,asym); 
-
-		static char tmp[256] = "get";
-		strcpy(tmp+3,GetString(asym));
-
-		// bind attribute to a method
-		MethItem *mi = new MethItem(b);
-		mi->SetArgs(gfun,0,NULL);
-		ma->Add(mi,MakeSymbol(tmp));
-	}
-	else
-		b = NULL;
-
-	if(a && b) {
-		a->counter = b;
-		b->counter = a;
-	}
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddAttrib(const t_symbol *attr,metharg tp,methfun gfun,methfun sfun)
-{
-	if(HasAttributes())
-		AddAttrib(ThAttrs(),ThMeths(),attr,tp,gfun,sfun);
-	else
-		error("%s - attribute procession is not enabled!",thisName());
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddAttrib(t_classid c,const t_symbol *attr,metharg tp,methfun gfun,methfun sfun)
-{
-	AddAttrib(ClAttrs(c),ClMeths(c),attr,tp,gfun,sfun);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ListAttrib(AtomList &la) const
-{
-	typedef TablePtrMap<int,const t_symbol *,32> AttrList;
-	AttrList list[2];
-    ItemCont *clattrhead = ClAttrs(thisClassId());
-
-	int i;
-	for(i = 0; i <= 1; ++i) {
-        ItemCont *a = i?attrhead:clattrhead;
-		if(a && a->Contained(0)) {
-            ItemSet &ai = a->GetInlet();
-            for(FLEXT_TEMP_TYPENAME ItemSet::iterator as(ai); as; ++as) {
-                for(Item *al = as.data(); al; al = al->nxt) {
-					AttrItem *aa = (AttrItem *)al;
-					list[i].insert(aa->index,as.key());
-                    break;
-                }
-			}
-		}
-	}
-
-	la((int)(list[0].size()+list[1].size()));
-	int ix = 0;
-	for(i = 0; i <= 1; ++i)
-		for(AttrList::iterator it(list[i]); it; ++it) 
-			SetSymbol(la[ix++],it.data());
-}
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext_base))::CheckAttrib(int argc,const t_atom *argv)
-{
-	int offs = 0;
-	for(; offs < argc; ++offs)
-		if(IsString(argv[offs]) && *GetString(argv[offs]) == '@') break;
-	return offs;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::InitAttrib(int argc,const t_atom *argv)
-{
-	int cur,nxt;
-	for(cur = 0; cur < argc; cur = nxt) {
-		// find next @symbol
-		for(nxt = cur+1; nxt < argc; ++nxt)
-			if(IsString(argv[nxt]) && *GetString(argv[nxt]) == '@') break;
-
-		const t_symbol *tag = MakeSymbol(GetString(argv[cur])+1);
-
-		// find puttable attribute
-		AttrItem *attr = FindAttrib(tag,false,true);
-		if(attr) {
-			// make an entry (there are none beforehand...)
-/*
-			AttrDataCont::iterator it = attrdata->find(tag);
-			if(it == attrdata->end()) {
-				AttrDataCont::pair pair; 
-				pair.key() = tag;
-				pair.data() = new AttrData;
-				it = attrdata->insert(attrdata->begin(),pair);
-			}
-
-			AttrData &a = *it.data();
-			a.SetInit(true);
-			a.SetInitValue(nxt-cur-1,argv+cur+1);
-
-			// pass value to object
-			SetAttrib(tag,attr,a.GetInitValue());
-*/
-			AttrData *a = attrdata->find(tag);
-            if(!a) {
-                AttrData *old = attrdata->insert(tag,a = new AttrData);
-                FLEXT_ASSERT(!old);
-            }
-
-			a->SetInit(true);
-			a->SetInitValue(nxt-cur-1,argv+cur+1);
-
-			// pass value to object
-			SetAttrib(tag,attr,a->GetInitValue());
-		}
-	}
-	return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::ListAttrib() const
-{
-    if(HasAttributes()) {
-        // defined in flsupport.cpp
-		AtomListStatic<32> la;
-		ListAttrib(la);
-		ToOutAnything(GetOutAttr(),sym_attributes,la.Count(),la.Atoms());
-		return true;
-	}
-	else
-		return false;
-}
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::AttrItem *FLEXT_CLASSDEF(flext_base))::FindAttrib(const t_symbol *tag,bool get,bool msg) const
-{
-    ItemCont *clattrhead = ClAttrs(thisClassId());
-
-    // first search within object scope
-	AttrItem *a = NULL;
-    {
-        for(Item *lst = attrhead->FindList(tag); lst; lst = lst->nxt) {
-            AttrItem *b = (AttrItem *)lst;
-            if(get?b->IsGet():b->IsSet()) { a = b; break; }
-        }
-    }
-
-    // then (if nothing found) search within class scope
-	if(!a) {
-        for(Item *lst = clattrhead->FindList(tag); lst; lst = lst->nxt) {
-            AttrItem *b = (AttrItem *)lst;
-            if(get?b->IsGet():b->IsSet()) { a = b; break; }
-        }
-	}
-
-    if(!a && msg) {
-		// print a message
-		error("%s - %s: attribute not found",thisName(),GetString(tag));
-	}
-	return a;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::SetAttrib(const t_symbol *tag,int argc,const t_atom *argv)
-{
-	// search for matching attribute
-	AttrItem *a = FindAttrib(tag,false,true);
-	return a && SetAttrib(tag,a,argc,argv);
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::SetAttrib(const t_symbol *tag,AttrItem *a,int argc,const t_atom *argv)
-{
-	if(a->fun) {
-		bool ok = true;
-
-		t_any any;
-		switch(a->argtp) {
-		case a_float:
-			if(argc == 1 && CanbeFloat(argv[0])) {
-				any.ft = GetAFloat(argv[0]);
-				((methfun_1)a->fun)(this,any);				
-			}
-			else ok = false;
-			break;
-		case a_int:
-			if(argc == 1 && CanbeInt(argv[0])) {
-				any.it = GetAInt(argv[0]);
-				((methfun_1)a->fun)(this,any);				
-			}
-			else ok = false;
-			break;
-		case a_symbol:
-			if(argc == 1 && IsSymbol(argv[0])) {
-                t_atom at;
-                GetParamSym(at,GetSymbol(argv[0]),thisCanvas());
-				any.st = const_cast<t_symbol *>(GetSymbol(at));
-				((methfun_1)a->fun)(this,any);				
-			}
-			else ok = false;
-			break;
-		case a_bool:
-			if(argc == 1 && CanbeBool(argv[0])) {
-				any.bt = GetABool(argv[0]);
-				((methfun_1)a->fun)(this,any);				
-			}
-			else ok = false;
-			break;
-		case a_LIST: {
-			AtomListStatic<16> la(argc);
-			for(int i = 0; i < argc; ++i)
-				if(IsSymbol(argv[i])) 
-					GetParamSym(la[i],GetSymbol(argv[i]),thisCanvas());
-				else
-					la[i] = argv[i];
-
-			any.vt = &la;
-			((methfun_1)a->fun)(this,any);				
-			break;
-		}
-		default:
-			ERRINTERNAL();
-		}
-
-		if(!ok)
-			post("%s - wrong arguments for attribute %s",thisName(),GetString(tag));
-	}
-	else
-		post("%s - attribute %s has no get method",thisName(),GetString(tag));
-	return true;
-}
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::GetAttrib(const t_symbol *tag,AttrItem *a,AtomList &la) const
-{
-	bool ok = true;
-	// main attribute tag
-	if(a) {
-		if(a->fun) {
-			t_any any;
-			switch(a->argtp) {
-			case a_float: {
-				((methfun_1)a->fun)(const_cast<flext_base *>(this),any);				
-				la(1);
-				SetFloat(la[0],any.ft);
-				break;
-			}
-			case a_int: {
-				((methfun_1)a->fun)(const_cast<flext_base *>(this),any);				
-				la(1);
-				SetInt(la[0],any.it);
-				break;
-			}
-			case a_bool: {
-				((methfun_1)a->fun)(const_cast<flext_base *>(this),any);				
-				la(1);
-				SetBool(la[0],any.bt);
-				break;
-			}
-			case a_symbol: {
-				((methfun_1)a->fun)(const_cast<flext_base *>(this),any);				
-				la(1);
-				SetSymbol(la[0],any.st);
-				break;
-			}
-			case a_LIST: {
-				any.vt = &la;
-				((methfun_1)a->fun)(const_cast<flext_base *>(this),any);				
-				break;
-			}
-			default:
-				ERRINTERNAL();
-				ok = false;
-			}
-		}
-		else {
-			post("%s - attribute %s has no get method",thisName(),GetString(tag));
-			ok = false;
-		}
-	}
-	else {
-		error("%s - %s: attribute not found",thisName(),GetString(tag));
-		ok = false;
-	}
-	return ok;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::GetAttrib(const t_symbol *s,AtomList &a) const
-{
-	AttrItem *attr = FindAttrib(s,true);
-	return attr && GetAttrib(s,attr,a);
-}
-
-//! \param tag symbol "get[attribute]"
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::DumpAttrib(const t_symbol *tag,AttrItem *a) const
-{
-	AtomListStatic<16> la;
-	bool ret = GetAttrib(tag,a,la);
-	if(ret) {
-		ToOutAnything(GetOutAttr(),a->tag,la.Count(),la.Atoms());
-	}
-	return ret;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::DumpAttrib(const t_symbol *attr) const
-{
-	AttrItem *item = FindAttrib(attr,true);
-	return item && DumpAttrib(attr,item);
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::BangAttrib(const t_symbol *attr,AttrItem *item)
-{
-	AtomListStatic<16> val;
-	AttrItem *item2;
-	if(!item->IsGet()) 
-		item = item->Counterpart();
-	if(item) {
-		item2 = item->Counterpart();
-		return item2 && GetAttrib(attr,item,val) && SetAttrib(attr,item2,val);
-	}
-	else
-		return false;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::BangAttrib(const t_symbol *attr)
-{
-	AttrItem *item = FindAttrib(attr,true);
-	return item && BangAttrib(attr,item);
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::BangAttribAll()
-{
-    ItemCont *clattrhead = ClAttrs(thisClassId());
-
-	for(int i = 0; i <= 1; ++i) {
-        ItemCont *a = i?attrhead:clattrhead;
-		if(a) {
-            ItemSet &ai = a->GetInlet(); // \todo need to check for presence of inlet 0?
-/*
-            for(ItemSet::iterator as = ai.begin(); as != ai.end(); ++as) {
-                for(Item *al = as.data(); al; al = al->nxt) {
-					AttrItem *a = (AttrItem *)al;
-	        		if(a->IsGet() && a->BothExist()) BangAttrib(as.key(),a);
-                }
-			}
-*/
-            for(FLEXT_TEMP_TYPENAME ItemSet::iterator as(ai); as; ++as) {
-                for(Item *al = as.data(); al; al = al->nxt) {
-					AttrItem *a = (AttrItem *)al;
-	        		if(a->IsGet() && a->BothExist()) BangAttrib(as.key(),a);
-                }
-			}
-		}
-	}
-	return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::ShowAttrib(AttrItem *a,bool show) const
-{
-	if(show) a->flags |= AttrItem::afl_shown;
-	else a->flags &= ~AttrItem::afl_shown;
-
-	// also change counterpart, if present
-	AttrItem *ca = a->Counterpart();
-	if(ca) {
-		if(show) ca->flags |= AttrItem::afl_shown;
-		else ca->flags &= ~AttrItem::afl_shown;
-	}
-	return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::ShowAttrib(const t_symbol *attr,bool show) const
-{
-	AttrItem *item = FindAttrib(attr,true);
-	return item && ShowAttrib(item,show);
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_ATTR_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flattr_ed.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flattr_ed.cpp
deleted file mode 100755
index d8e9568d75a2611017046181116de089a4aed45b..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flattr_ed.cpp
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flattr_ed.cpp
-    \brief Attribute editor (property dialog) for PD
-*/
-
-#ifndef __FLEXT_ATTR_ED_CPP
-#define __FLEXT_ATTR_ED_CPP
-
-#include "flext.h"
-
-#include "flpushns.h"
-
-#if FLEXT_SYS == FLEXT_SYS_PD 
-
-#ifdef _MSC_VER
-#pragma warning( disable : 4091 ) 
-#endif
-
-
-#if defined(FLEXT_ATTRHIDE) || PD_MINOR_VERSION < 37
-#define __FLEXT_WIDGETBEHAVIOR
-#endif
-
-//////////////////////////////////////////////////////
-#ifdef __FLEXT_WIDGETBEHAVIOR
-// we need non-public headers!
-#pragma message("Attention: non-public headers used - binary is bound to a specific version")
-
-#include <g_canvas.h>
-
-/*
-#ifdef PD_DEVEL_VERSION
-#define __FLEXT_CLONEWIDGET
-#endif
-*/
-
-#ifndef __FLEXT_CLONEWIDGET
-#include <m_imp.h>
-#endif
-
-#endif
-//////////////////////////////////////////////////////
-
-
-#include <string.h>
-#include <stdio.h>
-
-
-#ifdef FLEXT_ATTRHIDE
-#ifndef __FLEXT_CLONEWIDGET
-static t_visfn ori_vis = NULL;
-static t_selectfn ori_select = NULL;
-#endif
-#endif
-
-
-#ifdef FLEXT_ATTRHIDE
-#define ST_DISABLED ""
-#else
-#define ST_DISABLED " -state disabled"
-#endif
-
-
-#ifndef FLEXT_NOATTREDIT
-
-//! generate the script for the property dialog
-FLEXT_TEMPLATE
-void tclscript()
-{
-    static bool havecode = false;
-    if(havecode) return;
-    else havecode = true;
-
-    sys_vgui(const_cast<char *>(
-        "proc flext_escatoms {lst} {\n"
-            "set tmp {}\n"
-            "foreach a $lst {\n"
-//                "set a [regsub {\\\\} $a \\\\\\\\]\n"  // replace \ with \\  ... must be first
-                "set a [regsub {\\$} $a \\\\$]\n"  // replace $ with \$
-//                "set a [regsub {\\{} $a \\\\\\{]\n"  // replace { with \{
-//                "set a [regsub {\\}} $a \\\\\\}]\n"  // replace } with \}
-//                "set a [regsub {\\ } $a \\\\\\ ]\n"  // replace space with \space
-                "set a [regsub {,} $a \\\\,]\n"  // replace , with \,
-                "set a [regsub {;} $a \\\\\\;]\n"  // replace ; with \;
-                "lappend tmp $a\n"
-            "}\n"
-            "return $tmp\n"
-        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-        "proc flext_makevalue {id ix} {\n"
-            // strip "." from the TK id to make a variable name suffix
-            "set vid [string trimleft $id .]\n"
-
-            "set var_attr_name [concat [concat var_name_$ix]_$vid ]\n"
-            "set var_attr_init [concat [concat var_init_$ix]_$vid ]\n"
-            "set var_attr_val [concat [concat var_val_$ix]_$vid ]\n"
-            "set var_attr_save [concat [concat var_save_$ix]_$vid ]\n"
-            "set var_attr_type [concat [concat var_type_$ix]_$vid ]\n"
-
-            "global $var_attr_name $var_attr_init $var_attr_val $var_attr_save $var_attr_type\n"
-
-            "set lst {}\n"
-
-            "if { [expr $$var_attr_type] != 0 } {\n"
-                // attribute is puttable
-
-                "lappend lst [eval concat $$var_attr_name]\n" 
-
-                // process current value
-                "set tmp [flext_escatoms [eval concat $$var_attr_val]]\n"
-                "set lst [concat $lst [llength $tmp] $tmp]\n" 
-
-                // process init value
-                "set tmp [flext_escatoms [eval concat $$var_attr_init]]\n"
-                "set lst [concat $lst [llength $tmp] $tmp]\n" 
-
-                "lappend lst [eval concat $$var_attr_save]\n" 
-            "}\n"
-
-            // return list
-            "return $lst\n" 
-        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-        "proc flext_apply {id ix} {\n"
-            "set lst [flext_makevalue $id $ix]\n"
-            "set lst [eval concat $lst]\n" // remove curly braces from character escaping
-            "pd [concat $id attributedialog $lst \\;]\n"
-        "}\n"
-
-        "proc flext_applyall {id alen} {\n"
-            // make a list of the attribute values (including save flags)
-
-            "set lst {}\n"
-            "for {set ix 1} {$ix <= $alen} {incr ix} {\n"
-                "set lst [concat $lst [flext_makevalue $id $ix]]\n" 
-            "}\n"
-            "set lst [eval concat $lst]\n" // remove curly braces from character escaping
-
-            "pd [concat $id attributedialog $lst \\;]\n"
-        "}\n"
-
-        "proc flext_cancel {id} {\n"
-            "pd [concat $id cancel \\;]\n"
-        "}\n"
-
-        "proc flext_ok {id alen} {\n"
-            "flext_applyall $id $alen\n"
-            "flext_cancel $id\n"
-        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-        "proc flext_help {id} {\n"
-            "toplevel $id.hw\n"
-            "wm title $id.hw \"Flext attribute editor help\"\n"
-
-            "frame $id.hw.buttons\n"
-            "pack $id.hw.buttons -side bottom -fill x -pady 2m\n"
-
-            "text $id.hw.text -relief sunken -bd 2 -yscrollcommand \"$id.hw.scroll set\" -setgrid 1 -width 80 -height 10 -wrap word\n"
-            "scrollbar $id.hw.scroll -command \"$id.hw.text yview\"\n"
-            "pack $id.hw.scroll -side right -fill y\n"
-            "pack $id.hw.text -expand yes -fill both\n"
-
-            "button $id.hw.buttons.ok -text OK -command \"destroy $id.hw\"\n"
-            "pack $id.hw.buttons.ok -side left -expand 1\n"
-            "bind $id.hw {<KeyPress-Escape>} \"destroy $id.hw\"\n"
-
-            "$id.hw.text tag configure big -font {Arial 10 bold}\n"
-            "$id.hw.text configure -font {Arial 8 bold}\n"
-            "$id.hw.text insert end \""
-                "The flext attribute editor lets you query or change attribute values exposed by an external object. \" big \"\n\n"
-                "Local variable names ($-values) will only be saved as such for init values. "
-                "Alternatively, # can be used instead of $.\n"
-                "Ctrl-Button on a text field will open an editor window where text can be entered more comfortably.\n"
-            "\"\n"
-            "$id.hw.text configure -state disabled\n"
-        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-        "proc flext_copyval {dst src} {\n"
-            "global $src $dst\n"
-            "set $dst [expr $$src]\n"
-        "}\n"
-
-        "proc flext_textcopy {id idtxt var} {\n"
-            "global $var\n"
-            "set txt [eval $idtxt get 0.0 end]\n"
-            // strip newline characters
-            "set tmp {}\n"
-            "foreach t $txt { lappend tmp [string trim $t] }\n"
-            "set $var $tmp\n"
-            "destroy $id\n"
-        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-        "proc flext_textzoom {id var title attr edit} {\n"
-            "global $var\n"
-            "toplevel $id.w\n"
-            "wm title $id.w [concat $title \" @\" $attr]\n"
-//            "wm iconname $w \"text\"\n"
-//            "positionWindow $id.w\n"
-
-            "frame $id.w.buttons\n"
-            "pack $id.w.buttons -side bottom -fill x -pady 2m\n"
-
-            "text $id.w.text -relief sunken -bd 2 -yscrollcommand \"$id.w.scroll set\" -setgrid 1 -width 80 -height 20\n"
-            "scrollbar $id.w.scroll -command \"$id.w.text yview\"\n"
-            "pack $id.w.scroll -side right -fill y\n"
-            "pack $id.w.text -expand yes -fill both\n"
-
-            // insert text with newlines
-            "set txt [split [expr $$var] ,]\n"
-            "set lines [llength $txt]\n"
-            "for {set ix 0} {$ix < ($lines-1)} {incr ix} {\n"
-                "$id.w.text insert end [string trim [lindex $txt $ix] ]\n"
-                "$id.w.text insert end \" ,\\n\"\n"
-            "}\n"
-            "$id.w.text insert end [string trim [lindex $txt end] ]\n"
-
-            "$id.w.text mark set insert 0.0\n"
-
-            "if { $edit != 0 } then {\n"
-                "button $id.w.buttons.ok -text OK -command \"flext_textcopy $id.w $id.w.text $var\"\n"
-                "pack $id.w.buttons.ok -side left -expand 1\n"
-//              "bind $id.w {<Shift-KeyPress-Return>} \"flext_textcopy $id.w $id.w.text $var\"\n"
-            "} "
-            "else { $id.w.text configure -state disabled }\n"
-
-            "button $id.w.buttons.cancel -text Cancel -command \"destroy $id.w\"\n"
-            "pack $id.w.buttons.cancel -side left -expand 1\n"
-            "bind $id.w {<KeyPress-Escape>} \"destroy $id.w\"\n"
-        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-        "proc pdtk_flext_dialog {id title attrlist} {\n"
-                "set vid [string trimleft $id .]\n"
-                "set alen [expr [llength $attrlist] / 6 ]\n"
-
-                "toplevel $id\n"
-                "wm title $id $title\n" 
-                "wm protocol $id WM_DELETE_WINDOW [concat flext_cancel $id]\n"
-
-                "frame $id.frame\n"
-                "set row 0\n"
-
-                // set grow parameters
-                "grid columnconfigure $id.frame 0 -weight 1\n"  // label
-                "grid columnconfigure $id.frame {1 4} -weight 3\n" // value entry
-                "grid columnconfigure $id.frame {2 3} -weight 0\n"  // copy buttons
-                "grid columnconfigure $id.frame 5 -weight 1\n"  // apply button
-                "grid columnconfigure $id.frame {6 7 8} -weight 0\n" // radio buttons
-
-                "grid rowconfigure $id.frame {0 1} -weight 0\n"
-
-                // set column labels
-                "label $id.frame.label -text {attribute} -font {Helvetica 9 bold}\n"
-                "label $id.frame.init  -text {initial value} -font {Helvetica 9 bold}\n"
-                "label $id.frame.copy  -text {copy} -font {Helvetica 9 bold}\n"
-                "label $id.frame.val   -text {current value} -font {Helvetica 9 bold}\n"
-                "label $id.frame.apply -text {} -font {Helvetica 9 bold}\n" // why must this be empty?
-                "foreach {i txt} {0 {don't\rsave} 1 {do\rinit} 2 {always\rsave} } {\n"
-                    "label $id.frame.b$i -text $txt -font {Helvetica 7 bold}\n"
-                "}\n"
-
-                "grid config $id.frame.label -column 0 -row $row \n"
-                "grid config $id.frame.init  -column 1 -row $row \n"
-                "grid config $id.frame.copy  -column 2 -columnspan 2 -row $row \n"
-                "grid config $id.frame.val   -column 4 -row $row \n"
-                "grid config $id.frame.apply  -column 5 -row $row \n"
-                "foreach i {0 1 2} { grid config $id.frame.b$i -column [expr $i + 6] -row $row }\n"
-                "incr row\n"
-
-                // Separator
-                "frame $id.frame.sep -relief ridge -bd 1 -height 2\n"
-                "grid config $id.frame.sep -column 0 -columnspan 9 -row $row -pady 2 -sticky {snew}\n"
-                "incr row\n")
-    );
-    sys_vgui(const_cast<char *>(
-                "set ix 1\n"
-                "foreach {an av ai atp asv afl} $attrlist {\n"
-                    "grid rowconfigure $id.frame $row -weight 1\n"
-
-                    // get attribute name
-                    "set var_attr_name [concat [concat var_name_$ix]_$vid ]\n"
-                    "global $var_attr_name\n"
-                    "set $var_attr_name $an\n"
-
-                    // get attribute init value (list)
-                    "set var_attr_init [concat [concat var_init_$ix]_$vid ]\n"
-                    "global $var_attr_init\n"
-                    "set $var_attr_init $ai\n"
-
-                    // get attribute value (list)
-                    "set var_attr_val [concat [concat var_val_$ix]_$vid ]\n"
-                    "global $var_attr_val\n"
-                    "set $var_attr_val $av\n"
-
-                    // get save flag
-                    "set var_attr_save [concat [concat var_save_$ix]_$vid ]\n"
-                    "global $var_attr_save\n"
-                    "set $var_attr_save $asv\n"
-
-                    // get type flag
-                    "set var_attr_type [concat [concat var_type_$ix]_$vid ]\n"
-                    "global $var_attr_type\n"
-                    "set $var_attr_type $afl\n"
-
-                    // add dialog elements to window
-
-                    // attribute label
-                    "label $id.frame.label-$ix -text \"$an :\" -font {Helvetica 8 bold}\n"
-                    "grid config $id.frame.label-$ix -column 0 -row $row -padx 5 -sticky {e}\n")
-    );
-    sys_vgui(const_cast<char *>(
-                    "if { $afl != 0 } {\n"
-                        // attribute is puttable
-
-                        // entry field for initial value
-                        // entry field for current value
-
-                        // choose entry field type
-                        "switch $atp {\n"
-                            "0 - 1 {\n"  // int or float
-                                "entry $id.frame.init-$ix -textvariable $var_attr_init" ST_DISABLED "\n"
-                                "entry $id.frame.val-$ix -textvariable $var_attr_val\n"
-                            "}\n"
-                            "2 {\n"  // boolean
-                                "checkbutton $id.frame.init-$ix -variable $var_attr_init" ST_DISABLED "\n"
-                                "checkbutton $id.frame.val-$ix -variable $var_attr_val\n"
-                            "}\n"
-                            "3 {\n"  // symbol
-                                "entry $id.frame.init-$ix -textvariable $var_attr_init" ST_DISABLED "\n"
-                                "entry $id.frame.val-$ix -textvariable $var_attr_val\n"
-                            "}\n"
-                            "4 - 5 {\n"  // list or unknown
-                                "entry $id.frame.init-$ix -textvariable $var_attr_init" ST_DISABLED "\n"
-                                "bind $id.frame.init-$ix {<Control-Button-1>} \" flext_textzoom $id.frame.init-$ix $var_attr_init { $title } $an 1\"\n"
-                                "entry $id.frame.val-$ix -textvariable $var_attr_val\n"
-                                "bind $id.frame.val-$ix {<Control-Button-1>} \" flext_textzoom $id.frame.val-$ix $var_attr_val { $title } $an 1\"\n"
-                            "}\n"
-                        "}\n"
-
-                        "grid config $id.frame.init-$ix  -column 1 -row $row -padx 5 -sticky {ew}\n"
-                        "grid config $id.frame.val-$ix   -column 4 -row $row -padx 5 -sticky {ew}\n"
-
-                        // copy buttons
-                        "button $id.frame.b2i-$ix -text {<-} -height 1 -command \" flext_copyval $var_attr_init $var_attr_val \"" ST_DISABLED "\n"
-                        "grid config $id.frame.b2i-$ix  -column 2 -row $row  -sticky {ew}\n"
-                        "button $id.frame.b2c-$ix -text {->} -height 1 -command \" flext_copyval $var_attr_val $var_attr_init \"\n"
-                        "grid config $id.frame.b2c-$ix  -column 3 -row $row  -sticky {ew}\n"
-
-                        // apply button
-                        "button $id.frame.apply-$ix -text {Apply} -height 1 -command \" flext_apply $id $ix \"\n"
-                        "grid config $id.frame.apply-$ix -column 5 -row $row  -sticky {ew}\n"
-
-                        // radiobuttons
-                        "foreach {i c} {0 black 1 blue 2 red} {\n"
-                            "radiobutton $id.frame.b$i-$ix -value $i -foreground $c -variable $var_attr_save" ST_DISABLED "\n"
-                            "grid config $id.frame.b$i-$ix -column [expr $i + 6] -row $row\n"
-                        "}\n")
-    );
-    sys_vgui(const_cast<char *>(
-                    "} else {\n"
-                        // attribute is gettable only
-
-                        // entry field for current value (read-only)
-
-                        // choose display field type
-                        "switch $atp {\n"
-                            "0 - 1 {\n"  // int or float
-                                "entry $id.frame.val-$ix -textvariable $var_attr_val -state disabled\n"
-                            "}\n"
-                            "2 {\n"  // boolean
-                                "checkbutton $id.frame.val-$ix -variable $var_attr_val -state disabled\n"
-                            "}\n"
-                            "3 {\n"  // symbol
-                                "entry $id.frame.val-$ix -textvariable $var_attr_val -state disabled\n"
-                            "}\n"
-                            "4 - 5 {\n"  // list or unknown
-                                "entry $id.frame.val-$ix -textvariable $var_attr_val -state disabled\n"
-                                "bind $id.frame.val-$ix {<Control-Button-1>} \" flext_textzoom $id.frame.val-$ix $var_attr_val { $title } $an 0\"\n"
-                            "}\n"
-                        "}\n"
-
-//                      "entry $id.fval.val-$ix -textvariable $var_attr_val -state disabled\n"
-                        "grid config $id.frame.val-$ix -column 4 -row $row -padx 5 -sticky {ew}\n"
-
-                        "label $id.frame.readonly-$ix -text \"read-only\"\n"
-                        "grid config $id.frame.readonly-$ix -column 6 -columnspan 3 -row $row -padx 5 -sticky {ew}\n"
-                    "}\n"
-
-                    // increase counter
-                    "incr ix\n"
-                    "incr row\n"
-                "}\n"
-
-                // empty space
-                "grid rowconfigure $id.frame $row -weight 1\n"
-                "frame $id.frame.dummy\n"
-                "grid config $id.frame.dummy -column 0 -columnspan 9 -row $row\n"
-                "incr row\n")
-    );
-    sys_vgui(const_cast<char *>(
-                // Separator
-                "frame $id.sep2 -relief ridge -bd 1 -height 2\n"
-
-                // Buttons
-                "frame $id.buttonframe\n"
-
-                "button $id.buttonframe.cancel -text {Leave} -width 20 -command \" flext_cancel $id \"\n"
-                "button $id.buttonframe.apply -text {Apply all} -width 20 -command \" flext_applyall $id $alen \"\n"
-                "button $id.buttonframe.ok -text {Apply & Leave} -width 20 -command \" flext_ok $id $alen \"\n"
-                "button $id.buttonframe.help -text {Help} -width 10 -command \" flext_help $id \"\n"
-
-                "grid columnconfigure $id.buttonframe {0 1 2 3} -weight 1\n"
-                "grid config $id.buttonframe.cancel $id.buttonframe.apply $id.buttonframe.ok $id.buttonframe.help -padx 2 -sticky {snew}\n"
-
-//                "scrollbar $id.scroll -command \"$id.frame yview\"\n"
-
-                "pack $id.buttonframe $id.sep2 -pady 2 -expand 0 -side bottom -fill x\n"
-//                "pack $id.scroll -side right -fill y\n"
-                "pack $id.frame -expand 1 -side top -fill both\n"
-
-                // Key bindings
-                "bind $id {<KeyPress-Escape>} \" flext_cancel $id \"\n"
-                "bind $id {<KeyPress-Return>} \" flext_ok $id $alen \"\n"
-                "bind $id {<Shift-KeyPress-Return>} \" flext_applyall $id $alen \"\n"
-        "}\n")
-    );
-}
-
-#endif
-
-
-#ifdef __FLEXT_WIDGETBEHAVIOR
-static t_widgetbehavior widgetbehavior; 
-#endif
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::SetGfx(t_classid c)
-{
-	t_class *cl = getClass(c);
-    // widgetbehavior struct MUST be resident... (static is just ok here)
-
-#ifdef __FLEXT_WIDGETBEHAVIOR
-#ifndef __FLEXT_CLONEWIDGET
-    widgetbehavior.w_visfn =        cl->c_wb->w_visfn; 
-    widgetbehavior.w_selectfn =     cl->c_wb->w_selectfn; 
-    widgetbehavior.w_getrectfn =    cl->c_wb->w_getrectfn; 
-    widgetbehavior.w_displacefn =   cl->c_wb->w_displacefn; 
-    widgetbehavior.w_activatefn =   cl->c_wb->w_activatefn; 
-    widgetbehavior.w_deletefn =     cl->c_wb->w_deletefn; 
-    widgetbehavior.w_selectfn =     cl->c_wb->w_selectfn;
-    widgetbehavior.w_clickfn =      cl->c_wb->w_clickfn;
-#else
-    widgetbehavior.w_visfn =        text_widgetbehavior.w_visfn; 
-    widgetbehavior.w_selectfn =     text_widgetbehavior.w_selectfn; 
-    widgetbehavior.w_getrectfn =    text_widgetbehavior.w_getrectfn; 
-    widgetbehavior.w_displacefn =   text_widgetbehavior.w_displacefn; 
-    widgetbehavior.w_activatefn =   text_widgetbehavior.w_activatefn; 
-    widgetbehavior.w_deletefn =     text_widgetbehavior.w_deletefn; 
-    widgetbehavior.w_selectfn =     text_widgetbehavior.w_selectfn;
-    widgetbehavior.w_clickfn =      text_widgetbehavior.w_clickfn;
-#endif
-#endif
-
-#ifdef FLEXT_ATTRHIDE
-
-#ifndef __FLEXT_CLONEWIDGET
-    ori_vis = widgetbehavior.w_visfn; 
-    ori_select = widgetbehavior.w_selectfn; 
-#endif
-    widgetbehavior.w_visfn =        (t_visfn)cb_GfxVis;
-    widgetbehavior.w_selectfn =     (t_selectfn)cb_GfxSelect; 
-
-#if PD_MINOR_VERSION >= 37
-    class_setsavefn(cl,(t_savefn)cb_GfxSave);
-#else
-    widgetbehavior.w_savefn =       (t_savefn)cb_GfxSave;
-#endif
-
-#endif // FLEXT_ATTRHIDE
-
-
-#ifndef FLEXT_NOATTREDIT
-
-#if PD_MINOR_VERSION >= 37
-    class_setpropertiesfn(cl,(t_propertiesfn)cb_GfxProperties);
-#else
-    widgetbehavior.w_propertiesfn = (t_propertiesfn)cb_GfxProperties;
-#endif
-
-    FLEXT_TEMPINST(tclscript)();
-#endif // FLEXT_NOATTREDIT
-
-#ifdef __FLEXT_WIDGETBEHAVIOR
-    class_setwidget(cl, &widgetbehavior);
-#endif
-}
-
-
-#ifndef FLEXT_NOATTREDIT
-
-FLEXT_TEMPLATE
-size_t escapeit(char *dst,size_t maxlen,const char *src)
-{
-    char *d;
-    for(d = dst; *src && (d-dst) < (int)maxlen; ++src) {
-        if(*src == '%')
-            *(d++) = '%',*(d++) = '%';
-        else
-            *(d++) = *src;
-    }
-    *d = 0;
-    return d-dst;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_GfxProperties(flext_hdr *c, t_glist *)
-{
-    flext_base *th = thisObject(c);
-    char buf[1000];
-
-     // beginning of proc
-    sys_vgui(const_cast<char *>("proc pdtk_flext_dialog_%p {title} {\n"),th);
-
-    sys_vgui(const_cast<char *>("pdtk_flext_dialog $title {\n"));
-
-    // add title
-    t_text *x = (t_text *)c;
-    FLEXT_ASSERT(x->te_binbuf);
-
-    int argc = binbuf_getnatom(x->te_binbuf);
-    t_atom *argv = binbuf_getvec(x->te_binbuf);
-
-    PrintList(argc,argv,buf,sizeof(buf));
-    sys_vgui(const_cast<char *>("%s } {\n"),buf);
-
-    AtomListStatic<32> la;
-    th->ListAttrib(la);
-    int cnt = la.Count();
-
-    for(int i = 0; i < cnt; ++i) {
-        const t_symbol *sym = GetSymbol(la[i]); 
-
-        // get attribute
-        AttrItem *gattr = th->FindAttrib(sym,true);
-        // get puttable attribute
-        AttrItem *pattr = gattr?gattr->Counterpart():th->FindAttrib(sym,false);
-
-        // get flags
-        int sv;
-        const AtomList *initdata;
-        const AttrData *a = th->attrdata->find(sym);
-//        AttrDataCont::iterator it = th->attrdata->find(sym);
-//        if(it == th->attrdata->end())
-        if(!a)
-            sv = 0,initdata = NULL;
-        else {
-//            const AttrData &a = *it.data();
-            if(a->IsSaved())
-                sv = 2;
-            else if(a->IsInit())
-                sv = 1;
-            else 
-                sv = 0;
-            initdata = a->IsInitValue()?&a->GetInitValue():NULL;
-        }
-
-        // get attribute type
-        int tp;
-        bool list;
-        switch((gattr?gattr:pattr)->argtp) {
-            case a_int: tp = 0; list = false; break;
-            case a_float: tp = 1; list = false; break;
-            case a_bool: tp = 2; list = false; break;
-            case a_symbol: tp = 3; list = true; break;
-            case a_list: 
-            case a_LIST: tp = 4; list = true; break;
-            default: 
-                tp = 5; list = true; 
-                FLEXT_ASSERT(false);
-        }
-
-        sys_vgui(const_cast<char *>(list?"%s {":"%s "),GetString(sym));
-
-        AtomListStatic<32> lv;
-        if(gattr) { // gettable attribute is present
-            // Retrieve attribute value
-            th->GetAttrib(sym,gattr,lv);
-
-            char *b = buf; *b = 0;
-            for(int i = 0; i < lv.Count(); ++i) {
-                char tmp[100];
-                PrintAtom(lv[i],tmp,sizeof tmp);
-                b += FLEXT_TEMPINST(escapeit)(b,sizeof(buf)+buf-b,tmp);
-                if(i < lv.Count()-1) { *(b++) = ' '; *b = 0; }
-            }
-            sys_vgui(const_cast<char *>("%s"),buf);
-        }
-        else
-            sys_vgui(const_cast<char *>("{}"));
-
-        sys_vgui(const_cast<char *>(list?"} {":" "));
-
-        if(pattr) {
-            // if there is initialization data take this, otherwise take the current data
-            const AtomList &lp = initdata?*initdata:static_cast<const AtomList &>(lv);
-
-            char *b = buf; *b = 0;
-            for(int i = 0; i < lp.Count(); ++i) {
-                char tmp[256];
-                PrintAtom(lp[i],tmp,sizeof(tmp)); 
-                b += FLEXT_TEMPINST(escapeit)(b,sizeof(buf)+buf-b,tmp);
-                if(i < lp.Count()-1) { *(b++) = ' '; *b = 0; }
-            }
-            sys_vgui(const_cast<char *>("%s"),buf);
-        }
-        else
-            sys_vgui(const_cast<char *>("{}"));
-
-
-        sys_vgui(const_cast<char *>(list?"} %i %i %i \n":" %i %i %i \n"),tp,sv,pattr?(pattr->BothExist()?2:1):0);
-    }
-
-    sys_vgui(const_cast<char *>(" } }\n")); // end of proc
-
-    STD::sprintf(buf,"pdtk_flext_dialog_%p %%s\n",th);
-    gfxstub_new((t_pd *)th->thisHdr(), th->thisHdr(),buf);
-
-    //! \todo delete proc in TCL space
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::cb_AttrDialog(flext_base *th,int argc,const t_atom *argv)
-{
-    for(int i = 0; i < argc; ) {
-        FLEXT_ASSERT(IsSymbol(argv[i]));
-
-        // get name
-        const t_symbol *aname = GetSymbol(argv[i]);
-        i++;
-
-        // get current value
-        FLEXT_ASSERT(CanbeInt(argv[i]));
-        int ccnt,coffs;
-        ccnt = GetAInt(argv[i]);
-        coffs = ++i;
-        i += ccnt;
-
-        // get init value
-        FLEXT_ASSERT(CanbeInt(argv[i]));
-        int icnt,ioffs;
-        icnt = GetAInt(argv[i]);
-        ioffs = ++i;
-        i += icnt;
-
-        FLEXT_ASSERT(i < argc);
-        int sv = GetAInt(argv[i]);
-        ++i;
-
-        // find puttable attribute
-        AttrItem *attr = th->FindAttrib(aname,false);
-        if(attr) {
-            bool ret = th->SetAttrib(aname,attr,ccnt,argv+coffs);
-            FLEXT_ASSERT(ret);
-
-            AttrData *a = th->attrdata->find(aname);
-            if(sv >= 1) {
-                // if data not present create it
-                if(!a) {
-                    AttrData *old = th->attrdata->insert(aname,a = new AttrData);
-                    FLEXT_ASSERT(!old);
-                }
-
-                a->SetSave(sv == 2);
-                a->SetInit(true);
-                a->SetInitValue(icnt,argv+ioffs);
-            }
-            else {
-                if(a) {
-                    // if data is present reset flags
-                    a->SetSave(false);
-                    a->SetInit(false);
-
-                    // let init data as is
-                }
-            }
-        }
-        else {
-            post("%s - Attribute %s can't be set",th->thisName(),GetString(aname));
-        }
-    }
-    return true;
-}
-
-#endif // FLEXT_NOATTREDIT
-
-
-#ifdef FLEXT_ATTRHIDE
-
-template<typename=void>
-void BinbufAdd(t_binbuf *b,const t_atom &at,bool transdoll)
-{
-    if(transdoll && at.a_type == A_DOLLAR) {
-        char tbuf[MAXPDSTRING];
-        sprintf(tbuf, "$%d", at.a_w.w_index);
-        binbuf_addv(b,"s",flext::MakeSymbol(tbuf));
-    }
-    else if(transdoll && at.a_type == A_DOLLSYM) {
-        char tbuf[MAXPDSTRING];
-        sprintf(tbuf, "$%s", at.a_w.w_symbol->s_name);
-        binbuf_addv(b,"s",flext::MakeSymbol(tbuf));
-    }
-    else
-        binbuf_add(b,1,const_cast<t_atom *>(&at));
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::BinbufArgs(t_binbuf *b,t_binbuf *args,bool withname,bool transdoll)
-{
-    int argc = binbuf_getnatom(args);
-    t_atom *argv = binbuf_getvec(args);
-    int i,cnt = CheckAttrib(argc,argv);
-    // process the creation arguments
-    for(i = withname?0:1; i < cnt; ++i) BinbufAdd(b,argv[i],transdoll);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::BinbufAttr(t_binbuf *b,bool transdoll)
-{
-    // process the attributes
-    AtomListStatic<32> la,lv;
-    ListAttrib(la);
-    int i,cnt = la.Count();
-
-    for(i = 0; i < cnt; ++i) {
-        const t_symbol *sym = GetSymbol(la[i]);
-        const AtomList *lref = NULL;
-
-        AttrData *a = attrdata->find(sym);
-        if(a) {
-            if(a->IsInit() && a->IsInitValue()) {
-                lref = &a->GetInitValue();
-
-#if 0 /////////////////////////////////////////////////////////////
-                // check for $-parameters
-                lv = lref->Count();
-                for(int j = 0; j < lref->Count(); ++j) {
-                    const char *s = IsSymbol((*lref)[j])?GetString((*lref)[j]):NULL;
-                    if(s && s[0] == '$') { // TODO: More refined checking?
-                        // prepend a "\"
-                        char tmp[256]; *tmp = '\\';
-                        strcpy(tmp+1,s);
-                        SetString(lv[j],tmp);
-                    }
-                    else
-                        lv[i] = (*lref)[j];
-                }
-
-                lref = &lv;
-#endif /////////////////////////////////////////////////////////////
-            }
-//            else if(a.IsSaved()) {
-            else if(a->IsSaved()) {
-                AttrItem *attr = FindAttrib(sym,true);
-
-                // attribute must be gettable (so that the data can be retrieved) and puttable (so that the data can be inited)
-                if(attr && attr->BothExist()) {
-                    GetAttrib(sym,attr,lv); 
-                    lref = &lv;
-                }
-            }
-        }
-
-        if(lref) {
-            char attrname[256]; *attrname= '@';
-            // store name
-            strcpy(attrname+1,GetString(sym));
-            binbuf_addv(b,"s",MakeSymbol(attrname));
-
-            // store value
-            for(int j = 0; j < lref->Count(); ++j) BinbufAdd(b,(*lref)[j],transdoll);
-        }
-    }
-}
-
-//! Strip the attributes off the object command line
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_GfxVis(flext_hdr *c, t_glist *gl, int vis)
-{
-    if(!gl->gl_isgraph || gl->gl_havewindow) {
-        // show object if it's not inside a GOP
-
-        flext_base *th = thisObject(c);
-        t_text *x = (t_text *)c;
-        FLEXT_ASSERT(x->te_binbuf);
-
-        t_binbuf *b = binbuf_new();
-        th->BinbufArgs(b,x->te_binbuf,true,false);
-
-        // delete old object box text
-        binbuf_free(x->te_binbuf);
-        // set new one
-        x->te_binbuf = b;
-
-        t_rtext *rt = glist_findrtext(gl,x);
-        rtext_retext(rt);
-
-        // now display the changed text with the normal drawing function
-    #ifdef __FLEXT_CLONEWIDGET
-        text_widgetbehavior.w_visfn((t_gobj *)c,gl,vis);
-    #else
-        ori_vis((t_gobj *)c,gl,vis);
-    #endif
-    }
-    // else don't show
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_GfxSelect(flext_hdr *c,t_glist *gl,int state)
-{
-    t_text *x = (t_text *)c;
-    flext_base *th = thisObject(c);
-
-    if(!gl->gl_isgraph || gl->gl_havewindow) {
-        if(state || !gl->gl_editor->e_textdirty) {
-            // change text only on selection
-            // OR if text has _not_ been changed 
-            // ->  since object will not be recreated we have to get rid
-            //     of the attribute text
-
-            FLEXT_ASSERT(x->te_binbuf);
-
-            t_binbuf *b = binbuf_new();
-            th->BinbufArgs(b,x->te_binbuf,true,false);
-            if(state) th->BinbufAttr(b,false);
-
-            // delete old object box text
-            binbuf_free(x->te_binbuf);
-            // set new one
-            x->te_binbuf = b;
-
-            t_rtext *rt = glist_findrtext(gl,x);
-            rtext_retext(rt);
-
-            // fix lines
-            canvas_fixlinesfor(gl,x);
-        }
-
-        // call original function
-        #ifdef __FLEXT_CLONEWIDGET
-            text_widgetbehavior.w_selectfn((t_gobj *)c,gl,state);
-        #else
-            ori_select((t_gobj *)c,gl,state);
-        #endif
-    }
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_GfxSave(flext_hdr *c, t_binbuf *b)
-{
-    flext_base *th = thisObject(c);
-    t_text *t = (t_text *)c;
-    binbuf_addv(b, "ssiis", gensym("#X"),gensym("obj"), t->te_xpix, t->te_ypix,MakeSymbol(th->thisName()));
-
-    // process the object arguments
-    th->BinbufArgs(b,t->te_binbuf,false,true);
-    // process the attributes
-    th->BinbufAttr(b,true);
-    // add end sign
-    binbuf_addv(b, ";");
-}
-
-#endif // FLEXT_ATTRHIDE
-
-#endif // FLEXT_SYS_PD
-
-#include "flpopns.h"
-
-#endif // __FLEXT_ATTR_ED_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flbase.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flbase.cpp
deleted file mode 100755
index beda80ae06f324b735d0b68ad1e172398587d484..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flbase.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flbase.cpp
-    \brief Implementation of the internal flext base classes.
-
-    \remark This is all derived from GEM by Mark Danks
-*/
-
-#ifndef __FLEXT_BASE_CPP
-#define __FLEXT_BASE_CPP
-
-#include "flext.h"
-
-#include "flinternal.h"
-#include <cstring>
-#include <cctype>
-#include <cstdlib>
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-#ifdef _MSC_VER
-    #pragma warning (push)
-    #pragma warning (disable:4091)
-#endif
-// for canvas_realizedollar (should be non-critical)
-#include <g_canvas.h>
-#ifdef _MSC_VER
-    #pragma warning (pop)
-#endif
-#endif
-
-#include "flpushns.h"
-
-/////////////////////////////////////////////////////////
-//
-// flext_obj
-//
-/////////////////////////////////////////////////////////
-
-FLEXT_TEMPIMPL(flext_hdr *FLEXT_CLASSDEF(flext_obj))::m_holder = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext_obj))::m_holdname = NULL;
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(flext_class) *FLEXT_CLASSDEF(flext_obj))::m_holdclass = NULL;
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext_obj))::m_holdaargc = 0;
-FLEXT_TEMPIMPL(const t_atom *FLEXT_CLASSDEF(flext_obj))::m_holdaargv = NULL;
-//FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::process_attributes = false;
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::initing = false;
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::exiting = false;
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::init_ok;
-
-//FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::ProcessAttributes(bool attr) { process_attributes = attr; }
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext_obj))::sym__shP = NULL;
-#endif
-
-/////////////////////////////////////////////////////////
-// Constructor
-//
-/////////////////////////////////////////////////////////
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_obj))::FLEXT_CLASSDEF(flext_obj)()
-    : x_obj(m_holder)
-    , clss(m_holdclass)
-    , m_name(m_holdname)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    m_canvas = canvas_getcurrent();
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    m_canvas = (t_patcher *)sym__shP->s_thing;
-    x_obj->curinlet = 0;
-#endif
-}
-
-/////////////////////////////////////////////////////////
-// Destructor
-//
-/////////////////////////////////////////////////////////
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_obj))::~FLEXT_CLASSDEF(flext_obj)()
-{
-    x_obj = NULL;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::__setup__(t_classid)
-{ 
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    sym__shP = MakeSymbol("#P");
-#endif
-    flext::Setup(); 
-}	
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::Init() { return true; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::Finalize() { return true; }
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::Exit() {}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::DefineHelp(t_classid c,const char *ref,const char *dir,bool addtilde)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    char tmp[256];
-    if(dir && *dir) { 
-        strcpy(tmp,dir);
-		char *last = tmp+strlen(tmp)-1; 
-        if(*last != '/') strcat(last,"/"); 
-        strcat(last,ref); 
-    }
-    else 
-        strcpy(tmp,ref);
-    if(addtilde) strcat(tmp,"~"); 
-
-    ::class_sethelpsymbol(getClass(c),gensym(const_cast<char *>(tmp)));
-#else
-    // no solution for Max/MSP yet
-#endif
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::GetParamSym(t_atom &dst,const t_symbol *sym,t_canvas *c)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD && defined(PD_MINOR_VERSION) && PD_MINOR_VERSION >= 37
-    if(!c) c = canvas_getcurrent();
-
-    const char *s = GetString(sym);
-    if((s[0] == '$' || s[0] == '#') && isdigit(s[1])) {
-        const t_symbol *res;
-        // patcher parameter detected... get value!
-        if(s[0] != '$') {
-            char tmp[MAXPDSTRING];
-            strcpy(tmp,s);
-            tmp[0] = '$';
-            res = canvas_realizedollar(c,const_cast<t_symbol *>(MakeSymbol(tmp)));
-        }
-        else
-            res = canvas_realizedollar(c,const_cast<t_symbol *>(sym));
-
-        // check for number
-        const char *c = GetString(res);
-        while(*c && (isdigit(*c) || *c == '.')) ++c;
-
-        if(!*c) 
-            SetFloat(dst,(float)atof(GetString(res)));
-        else
-            SetSymbol(dst,res);
-        return true;
-    }
-    else
-#else
-//    #pragma message("Not implemented")
-#endif
-        SetSymbol(dst,sym);
-    return true;
-}
-
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-// this declaration is missing in m_pd.h (0.37-0 and -1)
-// but it is there in 0.37-2 (but how to tell which micro-version?)
-extern "C" 
-#ifdef _MSC_VER
-__declspec(dllimport)
-#endif
-void canvas_getargs(int *argcp, t_atom **argvp);
-#endif
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::GetCanvasArgs(AtomList &args) const
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    int argc;
-    t_atom *argv;
-    canvas_getargs(&argc,&argv);
-    args(argc,argv);
-#else
-//    #pragma message("Not implemented")
-    args(0);
-#endif
-}
-
-
-#if FLEXT_SYS == FLEXT_SYS_MAX 
-FLEXT_TEMPLATE short patcher_myvol(t_patcher *x)
-{
-#ifndef	MM_UNIFIED // Max5 check... we don't know what to do yet
-    t_box *w;
-    if(x->p_vol)
-        return x->p_vol;
-    else if((w = (t_box *)x->p_vnewobj) != NULL)
-        return FLEXT_TEMPINST(patcher_myvol)(w->b_patcher);
-    else
-#endif
-        return 0;
-}
-#endif
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::GetCanvasDir(char *buf,size_t bufsz) const
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-	const char *c = GetString(canvas_getdir(thisCanvas()));
-    strncpy(buf,c,bufsz);
-#elif FLEXT_SYS == FLEXT_SYS_MAX 
-	short path = FLEXT_TEMPINST(patcher_myvol)(thisCanvas());
-    // \TODO dangerous!! no check for path length (got to be long enough... like 1024 chars)
-	path_topathname(path,NULL,buf);
-#else 
-#error Not implemented
-#endif
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_BASE_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flbase.h b/externals/grill/trunk/flext/libbuild/include/flext/flbase.h
deleted file mode 100755
index 448c035aa010f36be78b1c331f2ff550cc6c9f8b..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flbase.h
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flbase.h
-	\brief Internal flext base classes
-    
-	\remark This uses some ideas of GEM invented by Mark Danks
-*/
- 
-#ifndef __FLEXT_BASE_H
-#define __FLEXT_BASE_H
-
-#include "flstdc.h"
-#include "flsupport.h"
-#include <map>
-
-#include "flpushns.h"
-
-FLEXT_TEMPLATE class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj);
-
-typedef FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_obj)) flext_obj;
-
-// ----------------------------------------------------------------------------
-/*! \brief The obligatory PD or Max/MSP object header
-	\internal
-
-    This is in a separate struct to assure that obj is the very first thing.  
-    If it were the first thing in flext_obj, then there could be problems with
-    the virtual table of the C++ class.
-*/
-// ----------------------------------------------------------------------------
-
-struct FLEXT_SHARE flext_hdr
-{
-	/*!	\defgroup FLEXT_OBJHEADER Actual PD or Max/MSP object
-		\internal
-		@{ 
-	*/
-
-    	/*! \brief The obligatory object header
-			\note MUST reside at memory offset 0 (no virtual table possible)
-		*/
-    	t_sigobj    	    obj;  
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-		//! PD only: float signal holder for pd
-		float defsig;			
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		//! Max/MSP only: current inlet used by proxy objects
-		long curinlet;      
-#endif
-
-    	/*! \brief This points to the actual polymorphic C++ class
-		*/
-        FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_obj)) *data;
-
-	//!	@}  FLEXT_OBJHEADER
-};
-
-
-FLEXT_TEMPLATE class flext_class;
-
-typedef std::map<const t_symbol *,FLEXT_TEMPINST(flext_class) *> LibMap;
-
-class flext_library;
-
-// ----------------------------------------------------------------------------
-/*! \brief The mother of base classes for all flext external objects
-
-    Each extern which is written in C++ needs to use the #defines at the
-    end of this header file.  
-    
-    The define
-    
-        FLEXT_HEADER(NEW_CLASS, PARENT_CLASS)
-    
-    should be somewhere in your header file.
-    One of the defines like
-    
-    FLEXT_NEW(NEW_CLASS)
-	or
-    FLEXT_NEW_2(NEW_CLASS, float, float)
-    
-    should be the first thing in your implementation file.
-    NEW_CLASS is the name of your class and PARENT_CLASS is the 
-    parent of your class.
-*/
-// ----------------------------------------------------------------------------
-
-FLEXT_TEMPLATE
-class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
-	public flext
-{
-    public:
-
-// --- creation -------------------------------------------------------	
-
-	/*!	\defgroup FLEXT_OBJ_CREATION Object creation/destruction functionality
-		@{ 
-	*/
-
-        //! Constructor
-    	FLEXT_CLASSDEF(flext_obj)();
-
-    	//! Destructor
-    	virtual ~FLEXT_CLASSDEF(flext_obj)();
-
-        /*! \brief Signal a construction problem
-			\note This should only be used in the constructor. Object creation will be aborted.
-		*/
-		static void InitProblem() { init_ok = false; }
-
-		/*! \brief Enable/disable attribute procession (default = false)
-			\note Use that in the static class setup function (also library setup function)
-		*/
-//		static void ProcessAttributes(bool attr); //{ process_attributes = attr; }
-
-		//! Virtual function called at creation time (but after the constructor)
-		// this also guarantees that there are no instances of flext_obj
-		virtual bool Init(); 
-
-		//! Virtual function called after Init() has succeeded
-		virtual bool Finalize();
-	
-		//! Virtual function called at destruction (before the destructor)
-		virtual void Exit();
-
-	//!	@}  FLEXT_OBJ_CREATION
-
-// --- info -------------------------------------------------------	
-
-	/*!	\defgroup FLEXT_OBJ_INFO Get various information
-		@{ 
-	*/
-
-        //! Get the object's canvas
-        t_canvas *thisCanvas() const { return m_canvas; }
-
-        //! Get the PD or Max/MSP object
-		t_sigobj *thisHdr() { FLEXT_ASSERT(x_obj); return &x_obj->obj; }
-		const t_sigobj *thisHdr() const { FLEXT_ASSERT(x_obj); return &x_obj->obj; }
-        //! Get the class name (as a string)
-		const char *thisName() const { return GetString(m_name); } 
-        //! Get the class name (as a symbol)
-		const t_symbol *thisNameSym() const { return m_name; } 
-        //! Get the class pointer
-		t_class *thisClass() const;
-
-		//! Typedef for unique class identifier
-		typedef FLEXT_TEMPINST(flext_class) *t_classid;
-
-		//! Get unique id for object class
-		t_classid thisClassId() const { return clss; }
-
-		//! Get class pointer from class id
-		static t_class *getClass(t_classid id);
-		
-        static bool HasAttributes(t_classid id);
-        static bool IsDSP(t_classid id);
-        static bool HasDSPIn(t_classid id);
-        static bool IsLib(t_classid id);
-
-        bool HasAttributes() const;
-        bool IsLib() const;
-        bool IsDSP() const;
-        bool HasDSPIn() const;
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		// under Max/MSP it could be necessary to activate DSP also for message objects
-		// namely for those coexisting with DSP objects in a library
-		bool NeedDSP() const;
-#endif
-
-	//!	@}  FLEXT_OBJ_INFO
-
-// --- help -------------------------------------------------------	
-
-	/*!	\defgroup FLEXT_OBJ_HELP Help/assistance functionality
-		\remark This is still PD only
-		@{ 
-	*/
-
-		/*! Define the help reference symbol for a class
-			\internal
-		*/
-		static void DefineHelp(t_classid c,const char *ref,const char *dir = NULL,bool addtilde = false);
-
-		//! Define the help reference symbol for a class
-		void DefineHelp(const char *ref,const char *dir = NULL,bool addtilde = false) { DefineHelp(thisClassId(),ref,dir,addtilde); }
-
-	//!	@} FLEXT_OBJ_HELP
-
-
-// --- internal stuff -------------------------------------------------------	
-
-	/*!	\defgroup FLEXT_OBJ_INTERNAL Internal stuff
-		\internal
-		@{ 
-	*/
-
-    protected:    	
-
-        //! backpointer to object header
-        mutable flext_hdr *x_obj;        	
-
-        //! pointer to flext class definition
-        FLEXT_TEMPINST(flext_class) *clss;
-
-//        static bool	process_attributes;
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-        t_critical lock;
-        void Lock() { critical_enter(lock); }
-        void Unlock() { critical_exit(lock); }
-        static void SysLock() { critical_enter(0); }
-        static void SysUnlock() { critical_exit(0); }
-#elif FLEXT_SYS == FLEXT_SYS_PD
-        void Lock() {}
-        void Unlock() {}
-        static void SysLock() {}
-        static void SysUnlock() {}
-#else
-    #error
-#endif
-
-        class Locker
-        {
-        public:
-            Locker(flext_obj *o = NULL): obj(o)  { if(obj) obj->Lock(); else SysLock(); }
-            Locker(flext_hdr *h): obj(h->data)  { FLEXT_ASSERT(obj); obj->Lock(); }
-            ~Locker() { if(obj) obj->Unlock(); else SysUnlock();  }
-        protected:
-            flext_obj *obj;
-        };
-
-    private:
-
-        //! The canvas (patcher) that the object is in
-        mutable t_canvas            *m_canvas;
-        
-        //! Flag for successful object construction
-        static bool	init_ok;
-
-        // flags for init and exit procedure;
-        static bool initing;
-        static bool exiting;
-
-	public:
-
-    	//! Creation callback
-		static void __setup__(t_classid);	
-
-		/*! \brief This is a temporary holder
-			\warning don't touch it!
-		*/
-        static flext_hdr     *m_holder;
-		//! Hold object's class during construction
-		static FLEXT_TEMPINST(flext_class) *m_holdclass;
-		//! Hold object's name during construction
-        static const t_symbol *m_holdname;  
-
-		//! Holders for attribute procession flag
-		static int m_holdaargc;
-		static const t_atom *m_holdaargv;
-
-        /*! The object's name in the patcher 
-            \note objects of the same class can have various alias names!
-        */
-		const t_symbol *m_name;
-
-        /*! Return true if in object initialization phase
-            true when in constructor or Init, false when in Finalize
-        */
-        static bool Initing() { return initing; }
-
-        //! Return true if in object destruction phase (Exit or destructor)
-        static bool Exiting() { return exiting; }
-
-		// Definitions for library objects
-		static void lib_init(const char *name,void setupfun());
-		static void obj_add(bool lib,bool dsp,bool noi,bool attr,const char *idname,const char *names,void setupfun(t_classid),FLEXT_CLASSDEF(flext_obj) *(*newfun)(int,t_atom *),void (*freefun)(flext_hdr *),int argtp1,...);
-    
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		static flext_hdr *obj_new(const t_symbol *s,short argc,t_atom *argv);
-#else
-		static flext_hdr *obj_new(const t_symbol *s,int argc,t_atom *argv);
-#endif
-		static void obj_free(flext_hdr *o);
-
-		//! Convert $0 or #0 symbol into appropriate value
-		static bool GetParamSym(t_atom &dst,const t_symbol *s,t_canvas *c);
-
-		//! Get the canvas arguments
-		void GetCanvasArgs(AtomList &args) const;
-
-		//! Get the canvas/patcher directory
-        void GetCanvasDir(char *buf,size_t bufsz) const;
-
-    protected:
-        
-        // Current library class
-        static flext_library *curlib;
-        
-        // static initialization (with constructor) doesn't work for Codewarrior
-        static LibMap *libnames;
-
-        static FLEXT_TEMPINST(flext_class) *FindName(const t_symbol *s,FLEXT_TEMPINST(flext_class) *o = NULL);
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-        static t_class *buf_class;
-        static void cb_buffer_dsp(void *c,t_signal **sp);
-#endif
-    
-#if FLEXT_SYS == FLEXT_SYS_MAX
-        static const t_symbol *sym__shP;
-#endif
-    
-	//!	@} FLEXT_OBJ_INTERNAL
-};
-
-
-// max. 4 creation args (see the following macros)
-#define FLEXT_MAXNEWARGS 4 
-
-// max. 5 method args (see the following macros)
-#define FLEXT_MAXMETHARGS 5 
-
-// prefixes for the macro generated handler functions
-#define FLEXT_CALL_PRE(F) flext_c_##F
-#define FLEXT_THR_PRE(F) flext_t_##F
-#define FLEXT_GET_PRE(F) flext_g_##F
-#define FLEXT_SET_PRE(F) flext_s_##F
-
-
-#ifndef FLEXT_ATTRIBUTES
-/*! \brief Switch for global attribute processing
-	\note Should be set to 1 or 0 (or not be defined)
-	\ingroup FLEXT_DEFS
-*/
-#define FLEXT_ATTRIBUTES \
-\
-0
-
-
-#elif FLEXT_ATTRIBUTES != 0 && FLEXT_ATTRIBUTES != 1
-#error "FLEXT_ATTRIBUTES must be 0 or 1"
-#endif
-
-// ----------------------------------------
-// These should be used in the header
-// ----------------------------------------
-
-
-#define FLEXT_REALHDR(NEW_CLASS, PARENT_CLASS)    	    	\
-public:     	    	    \
-typedef NEW_CLASS thisType;  \
-typedef PARENT_CLASS thisParent;  \
-static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv);  \
-static void __free__(flext_hdr *hdr) { delete hdr->data; }   	    	\
-static void __setup__(t_classid classid) { thisParent::__setup__(classid); }
-
-
-#define FLEXT_REALHDR_S(NEW_CLASS, PARENT_CLASS,SETUPFUN)    	    	\
-public:     	    	    \
-typedef NEW_CLASS thisType;  \
-typedef PARENT_CLASS thisParent;  \
-static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv);  \
-static void __free__(flext_hdr *hdr) { delete hdr->data; }   	    	\
-static void __setup__(t_classid classid) { 	    	\
-	thisParent::__setup__(classid);    	    	\
-	thisType::SETUPFUN(classid); \
-}
-
-#define FLEXT_REALHDR_T(NEW_CLASS, PARENT_CLASS)    	    	\
-public:    	    \
-typedef NEW_CLASS thisType;  \
-typedef PARENT_CLASS thisParent;  \
-typedef typename thisParent::t_classid t_classid;  \
-static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv);  \
-static void __free__(flext_hdr *hdr) { delete hdr->data; }   	    	\
-static void __setup__(t_classid classid) { thisParent::__setup__(classid); }
-
-
-#define FLEXT_REALHDR_TS(NEW_CLASS, PARENT_CLASS,SETUPFUN)    	    	\
-public:     	    	    \
-typedef NEW_CLASS thisType;  \
-typedef PARENT_CLASS thisParent;  \
-typedef typename thisParent::t_classid t_classid;  \
-static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv);  \
-static void __free__(flext_hdr *hdr) { delete hdr->data; }   	    	\
-static void __setup__(t_classid classid) { 	    	\
-	thisParent::__setup__(classid);    	    	\
-	thisType::SETUPFUN(classid); \
-}
-
-
-// generate name of dsp/non-dsp setup function
-#if defined(FLEXT_USE_HEX_SETUP_NAME) && defined(FLEXT_SYS_PD)
-    #define FLEXT_STPF_0(NAME) setup_##NAME
-    #define FLEXT_STPF_1(NAME) setup_##NAME
-#elif FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-	#define FLEXT_STPF_0(NAME) NAME##_setup
-	#define FLEXT_STPF_1(NAME) NAME##_tilde_setup
-#else
-#error Platform not supported
-#endif
-
-#define FLEXT_STPF_(DSP) FLEXT_STPF_##DSP
-#define FLEXT_STPF(NAME,DSP) FLEXT_STPF_(DSP)(NAME)
-
-
-// --------------------------------------------------------------------------------------
-
-
-// used in library setup functions to register the individual objects in the library
-#define REAL_SETUP(cl,DSP) extern void FLEXT_STPF(cl,DSP)(); FLEXT_STPF(cl,DSP)();
-
-#ifdef FLEXT_USE_NAMESPACE
-    #define _FLEXT_REAL_SETUP_NAME(NAME) ::##NAME##_setup
-#else
-    #define _FLEXT_REAL_SETUP_NAME(NAME) NAME##_setup
-#endif
-
-// specify that to define the library itself
-#if FLEXT_SYS == FLEXT_SYS_PD
-#   define REAL_LIB_SETUP(NAME,SETUPFUN) extern "C" FLEXT_EXT void _FLEXT_REAL_SETUP_NAME(NAME)() { flext_obj::lib_init(#NAME,SETUPFUN); }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-#   define REAL_LIB_SETUP(NAME,SETUPFUN) extern "C" FLEXT_EXT int main() { flext_obj::lib_init(#NAME,SETUPFUN); return 0; }
-#else
-#   error Platform not supported
-#endif
-
-
-// --------------------------------------------------
-
-
-#define FLEXT_EXP_0 extern "C" FLEXT_EXT
-#define FLEXT_EXP_1 
-#define FLEXT_EXP(LIB) FLEXT_EXP_##LIB
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-#define FLEXT_OBJ_SETUP_0(NEW_CLASS,DSP)
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-#define FLEXT_OBJ_SETUP_0(NEW_CLASS,DSP) extern "C" FLEXT_EXT int main() { FLEXT_STPF(NEW_CLASS,DSP)(); return 0; }
-#else
-#error not implemented
-#endif
-
-#define FLEXT_OBJ_SETUP_1(NEW_CLASS,DSP)
-
-#define FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB) FLEXT_OBJ_SETUP_##LIB(NEW_CLASS,DSP)
-
-
-
-// ----------------------------------------
-// These definitions are used below
-// ----------------------------------------
-
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-	// maybe that's not necessary
-	#define FLEXTTPN_NULL A_NULL
-	#if FLEXT_SYS == FLEXT_SYS_PD 
-		#define FLEXTTPN_PTR A_POINTER
-	#else
-		#define FLEXTTPN_INT A_INT
-		#define FLEXTTPN_DEFINT A_DEFINT
-	#endif
-	#define FLEXTTPN_FLOAT A_FLOAT
-	#define FLEXTTPN_DEFFLOAT A_DEFFLOAT
-	#define FLEXTTPN_SYM A_SYMBOL
-	#define FLEXTTPN_DEFSYM A_DEFSYMBOL
-	#define FLEXTTPN_VAR A_GIMME
-#else
-	#define FLEXTTPN_NULL 0
-	#define FLEXTTPN_PTR 1
-	#define FLEXTTPN_INT 2
-	#define FLEXTTPN_FLOAT 3
-	#define FLEXTTPN_SYM 4
-	#define FLEXTTPN_VAR 5
-	#define FLEXTTPN_DEFINT 6
-	#define FLEXTTPN_DEFFLOAT 7
-	#define FLEXTTPN_DEFSYM 8
-#endif
-
-// Shortcuts for PD/Max type arguments
-#define FLEXTTYPE_void FLEXTTPN_NULL
-#define CALLBTYPE_void void
-#define FLEXTTYPE_float FLEXTTPN_FLOAT
-#define FLEXTTYPE_float0 FLEXTTPN_DEFFLOAT
-#define CALLBTYPE_float float
-#define FLEXTTYPE_t_float FLEXTTPN_FLOAT
-#define CALLBTYPE_t_float t_float
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-#define FLEXTTYPE_int FLEXTTPN_FLOAT
-#define FLEXTTYPE_int0 FLEXTTPN_DEFFLOAT
-#define CALLBTYPE_int float
-#define FLEXTTYPE_bool FLEXTTPN_FLOAT
-#define FLEXTTYPE_bool0 FLEXTTPN_DEFFLOAT
-#define CALLBTYPE_bool float
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-#define FLEXTTYPE_int FLEXTTPN_INT
-#define FLEXTTYPE_int0 FLEXTTPN_DEFINT
-#define CALLBTYPE_int int
-#define FLEXTTYPE_bool FLEXTTPN_INT
-#define FLEXTTYPE_bool0 FLEXTTPN_DEFINT
-#define CALLBTYPE_bool int
-#else
-#error Platform not supported
-#endif
-
-#define FLEXTTYPE_t_symptr FLEXTTPN_SYM
-#define FLEXTTYPE_t_symptr0 FLEXTTPN_DEFSYM
-#define CALLBTYPE_t_symptr t_symptr
-#define FLEXTTYPE_t_symtype FLEXTTYPE_t_symptr
-#define FLEXTTYPE_t_symtype0 FLEXTTYPE_t_symptr0
-#define CALLBTYPE_t_symtype t_symptr
-#define FLEXTTYPE_t_ptrtype FLEXTTPN_PTR
-#define CALLBTYPE_t_ptrtype t_ptrtype
-
-#define FLEXTTP(TP) FLEXTTYPE_ ## TP
-#define CALLBTP(TP) CALLBTYPE_ ## TP
-
-
-#define ARGMEMBER_bool(a) GetBool(a)
-#define ARGMEMBER_bool0(a) ARGMEMBER_bool(a)
-#define ARGMEMBER_int(a) GetInt(a)
-#define ARGMEMBER_int0(a) ARGMEMBER_int(a)
-#define ARGMEMBER_float(a) GetFloat(a)
-#define ARGMEMBER_float0(a) ARGMEMBER_float(a)
-#define ARGMEMBER_t_symptr(a) GetSymbol(a)
-#define ARGMEMBER_t_symptr0(a) ARGMEMBER_t_symptr(a)
-#define ARGMEMBER_t_symtype(a) ARGMEMBER_t_symptr(a)
-#define ARGMEMBER_t_symtype0(a) ARGMEMBER_t_symptr0(a)
-#define ARGCAST(a,tp) ARGMEMBER_##tp(a)
-
-#define REAL_NEW(NAME,NEW_CLASS,DSP,NOI,LIB) \
-flext_obj *NEW_CLASS::__init__(int ,t_atom *) \
-{     	    	    	    	    	    	    	    	\
-    return new NEW_CLASS;                     \
-}   	    	    	    	    	    	    	    	\
-FLEXT_EXP(LIB) void FLEXT_STPF(NEW_CLASS,DSP)()   \
-{   	    	    	    	    	    	    	    	\
-    flext_obj::obj_add(LIB,DSP,NOI,FLEXT_ATTRIBUTES,#NEW_CLASS,NAME,NEW_CLASS::__setup__,NEW_CLASS::__init__,&NEW_CLASS::__free__,FLEXTTPN_NULL); \
-} \
-FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
-
-#define REAL_NEW_V(NAME,NEW_CLASS,DSP,NOI,LIB) \
-flext_obj *NEW_CLASS::__init__(int argc,t_atom *argv) \
-{     	    	    	    	    	    	    	    	\
-    return new NEW_CLASS(argc,argv);                     \
-}   	    	    	    	    	    	    	    	\
-FLEXT_EXP(LIB) void FLEXT_STPF(NEW_CLASS,DSP)()   \
-{   	    	    	    	    	    	    	    	\
-    flext_obj::obj_add(LIB,DSP,NOI,FLEXT_ATTRIBUTES,#NEW_CLASS,NAME,NEW_CLASS::__setup__,NEW_CLASS::__init__,&NEW_CLASS::__free__,FLEXTTPN_VAR,FLEXTTPN_NULL); \
-} \
-FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
-
-#define REAL_NEW_1(NAME,NEW_CLASS,DSP,NOI,LIB, TYPE1) \
-flext_obj *NEW_CLASS::__init__(int,t_atom *argv) \
-{     	    	    	    	    	    	    	    	\
-    return new NEW_CLASS(ARGCAST(argv[0],TYPE1));                     \
-}   	    	    	    	    	    	    	    	\
-FLEXT_EXP(LIB) void FLEXT_STPF(NEW_CLASS,DSP)()   \
-{   	    	    	    	    	    	    	    	\
-    flext_obj::obj_add(LIB,DSP,NOI,FLEXT_ATTRIBUTES,#NEW_CLASS,NAME,NEW_CLASS::__setup__,NEW_CLASS::__init__,NEW_CLASS::__free__,FLEXTTP(TYPE1),FLEXTTPN_NULL); \
-} \
-FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
-
-#define REAL_NEW_2(NAME,NEW_CLASS,DSP,NOI,LIB, TYPE1,TYPE2) \
-flext_obj *NEW_CLASS::__init__(int,t_atom *argv) \
-{     	    	    	    	    	    	    	    	\
-    return new NEW_CLASS(ARGCAST(argv[0],TYPE1),ARGCAST(argv[1],TYPE2));                     \
-}   	    	    	    	    	    	    	    	\
-FLEXT_EXP(LIB) void FLEXT_STPF(NEW_CLASS,DSP)()   \
-{   	    	    	    	    	    	    	    	\
-    flext_obj::obj_add(LIB,DSP,NOI,FLEXT_ATTRIBUTES,#NEW_CLASS,NAME,NEW_CLASS::__setup__,NEW_CLASS::__init__,NEW_CLASS::__free__,FLEXTTP(TYPE1),FLEXTTP(TYPE2),FLEXTTPN_NULL); \
-} \
-FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
-
-#define REAL_NEW_3(NAME,NEW_CLASS,DSP,NOI,LIB, TYPE1, TYPE2, TYPE3) \
-flext_obj *NEW_CLASS::__init__(int,t_atom *argv) \
-{     	    	    	    	    	    	    	    	\
-    return new NEW_CLASS(ARGCAST(argv[0],TYPE1),ARGCAST(argv[1],TYPE2),ARGCAST(argv[2],TYPE3));                     \
-}   	    	    	    	    	    	    	    	\
-FLEXT_EXP(LIB) void FLEXT_STPF(NEW_CLASS,DSP)()   \
-{   	    	    	    	    	    	    	    	\
-    flext_obj::obj_add(LIB,DSP,NOI,FLEXT_ATTRIBUTES,#NEW_CLASS,NAME,NEW_CLASS::__setup__,NEW_CLASS::__init__,NEW_CLASS::__free__,FLEXTTP(TYPE1),FLEXTTP(TYPE2),FLEXTTP(TYPE3),FLEXTTPN_NULL); \
-} \
-FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
-
-#define REAL_NEW_4(NAME,NEW_CLASS,DSP,NOI,LIB, TYPE1,TYPE2, TYPE3, TYPE4) \
-flext_obj *NEW_CLASS::__init__(int,t_atom *argv) \
-{     	    	    	    	    	    	    	    	\
-    return new NEW_CLASS(ARGCAST(argv[0],TYPE1),ARGCAST(argv[1],TYPE2),ARGCAST(argv[2],TYPE3),ARGCAST(argv[3],TYPE4));                     \
-}   	    	    	    	    	    	    	    	\
-FLEXT_EXP(LIB) void FLEXT_STPF(NEW_CLASS,DSP)()   \
-{   	    	    	    	    	    	    	    	\
-    flext_obj::obj_add(LIB,DSP,NOI,FLEXT_ATTRIBUTES,#NEW_CLASS,NAME,NEW_CLASS::__setup__,NEW_CLASS::__init__,NEW_CLASS::__free__,FLEXTTP(TYPE1),FLEXTTP(TYPE2),FLEXTTP(TYPE3),FLEXTTP(TYPE4),FLEXTTPN_NULL); \
-} \
-FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
-
-
-// Shortcuts for method arguments:
-#define FLEXTARG_float a_float
-#define FLEXTARG_int a_int
-#define FLEXTARG_bool a_int
-#define FLEXTARG_t_float a_float
-#define FLEXTARG_t_symtype a_symbol
-#define FLEXTARG_t_symptr a_symbol
-#define FLEXTARG_t_ptrtype a_pointer
-
-#define FLEXTARG(TP) FLEXTARG_ ## TP
-
-#include "flpopns.h"
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flbind.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flbind.cpp
deleted file mode 100755
index 1a53d5c4fd81ba15e1b652c7c7f7a2722755059b..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flbind.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flbind.cpp
-    \brief Functionality for symbol-bound methods.
-*/
- 
-#ifndef __FLEXT_BIND_CPP
-#define __FLEXT_BIND_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(t_class *FLEXT_CLASSDEF(flext_base))::pxbnd_class = NULL;
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPLATE
-struct ProxyVars {
-    static t_object *px_freelist;
-    static t_messlist px_messlist[3];
-};
-
-FLEXT_TEMPIMPL(t_object *ProxyVars)::px_freelist = NULL;
-FLEXT_TEMPIMPL(t_messlist ProxyVars)::px_messlist[3];
-#endif
-
-/*! \brief Set up the proxy class for symbol-bound methods
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::SetupBindProxy()
-{
-    // already initialized?
-    if(!pxbnd_class) {
-#if FLEXT_SYS == FLEXT_SYS_PD
-        pxbnd_class = class_new(gensym(const_cast<char *>("flext_base bind proxy")),NULL,NULL,sizeof(pxbnd_object),CLASS_PD|CLASS_NOINLET, A_NULL);
-        add_anything(pxbnd_class,pxbnd_object::px_method); // for symbol-bound methods
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        pxbnd_class = new t_class;
-
-        pxbnd_class->c_sym = const_cast<t_symbol *>(sym__);
-        pxbnd_class->c_freelist = &FLEXT_TEMPINST(ProxyVars)::px_freelist;
-        pxbnd_class->c_freefun = NULL;
-        pxbnd_class->c_size = sizeof(pxbnd_object);
-        pxbnd_class->c_tiny = 0;
-        pxbnd_class->c_noinlet = 1;
-        FLEXT_TEMPINST(ProxyVars)::px_messlist[0].m_sym = (t_symbol *)pxbnd_class;
-
-        FLEXT_TEMPINST(ProxyVars)::px_messlist[1].m_sym = const_cast<t_symbol *>(sym_anything);
-        FLEXT_TEMPINST(ProxyVars)::px_messlist[1].m_fun = (method)pxbnd_object::px_method;
-        FLEXT_TEMPINST(ProxyVars)::px_messlist[1].m_type[0] = A_GIMME;
-        FLEXT_TEMPINST(ProxyVars)::px_messlist[1].m_type[1] = 0;
-
-        FLEXT_TEMPINST(ProxyVars)::px_messlist[2].m_sym = 0;
-#else
-#pragma warning("Not implemented!")
-#endif
-    }
-}
-
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::BindItem::BindItem(bool (*f)(flext_base *,t_symbol *s,int,t_atom *,void *data),pxbnd_object *p):
-    Item(NULL),fun(f),px(p)
-{}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::BindItem::~BindItem()
-{
-    if(px) {
-        FLEXT_ASSERT(!fun); // check if already unbound
-        object_free(&px->obj);
-    }
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::BindItem::Unbind(const t_symbol *tag)
-{
-    if(px) {
-        FLEXT_ASSERT(fun);
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-        pd_unbind(&px->obj.ob_pd,const_cast<t_symbol *>(tag)); 
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        if(tag->s_thing == (t_object *)px) 
-            const_cast<t_symbol *>(tag)->s_thing = NULL; 
-        else
-            error("flext - Binding to symbol %s not found",tag->s_name);
-#else
-#           pragma warning("Not implemented")
-#endif
-
-        fun = NULL;
-    }
-}
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    //! Bind object to a symbol
-    FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::Bind(const t_symbol *sym) { pd_bind(&thisHdr()->ob_pd,const_cast<t_symbol *>(sym)); return true; }
-    //! Unbind object from a symbol
-    FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::Unbind(const t_symbol *sym) { pd_unbind(&thisHdr()->ob_pd,const_cast<t_symbol *>(sym)); return true; }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    //! Bind object to a symbol
-    FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::Bind(const t_symbol *sym) { if(sym->s_thing) return false; else { const_cast<t_symbol *>(sym)->s_thing = (t_object *)thisHdr(); return true; } }
-    //! Unbind object from a symbol
-    FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::Unbind(const t_symbol *sym) { if(sym->s_thing != (t_object *)thisHdr()) return false; else { const_cast<t_symbol *>(sym)->s_thing = NULL; return true; } }
-#endif
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::BindMethod(const t_symbol *sym,bool (*fun)(flext_base *,t_symbol *s,int argc,t_atom *argv,void *data),void *data)
-{
-    if(!bindhead) 
-        bindhead = new ItemCont;
-    else {
-        // Search for symbol
-        for(Item *it = bindhead->FindList(sym); it; it = it->nxt) {
-            BindItem *item = (BindItem *)it;
-
-            // go through all items with matching tag
-            if(item->fun == fun) {
-                // function already registered -> bail out!
-                post("%s - Symbol already bound with this method",thisName());
-                return false;
-            }
-        }
-    }
-
-    SetupBindProxy(); 
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    pxbnd_object *px = (pxbnd_object *)object_new(pxbnd_class);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    pxbnd_object *px = (pxbnd_object *)newobject(FLEXT_TEMPINST(ProxyVars)::px_messlist);
-#else
-#pragma warning("Not implemented!")
-#endif
-
-    if(px) {
-        BindItem *mi = new BindItem(fun,px);
-        bindhead->Add(mi,sym);
-
-        px->init(this,mi,data);
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-        pd_bind(&px->obj.ob_pd,const_cast<t_symbol *>(sym)); 
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        #if 1 // old code
-        if(!sym->s_thing) 
-            const_cast<t_symbol *>(sym)->s_thing = (t_object *)px;
-        else
-            error("%s - Symbol is already bound",thisName());
-        #else
-        void *binding = object_register(gensym("flext"),const_cast<t_symbol *>(sym),(t_object *)px);
-        #endif
-#else
-#       pragma warning("Not implemented")
-#endif
-    }
-    else 
-        error("%s - Symbol proxy could not be created",thisName());
-
-    return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::UnbindMethod(const t_symbol *sym,bool (*fun)(flext_base *,t_symbol *s,int argc,t_atom *argv,void *data),void **data)
-{
-    bool ok = false;
-    
-    if(bindhead && bindhead->Contained(0)) {
-        ItemSet &set = bindhead->GetInlet();
-
-/*
-        ItemSet::iterator it1,it2;
-        if(sym) { 
-            // specific tag
-            it1 = it2 = set.find(sym); it2++; 
-        }
-        else { 
-            // any tag
-            it1 = set.begin(),it2 = set.end(); 
-        }
-
-        BindItem *it = NULL;
-        for(ItemSet::iterator si = it1; si != it2 && !it; ++si) {
-            for(Item *i = si.data(); i; i = i->nxt) {
-                BindItem *item = (BindItem *)i;
-                if(!fun || item->fun == fun) 
-                { 
-                    it = item; 
-                    if(!sym) sym = si.key();
-                    break; 
-                }
-            }
-        }
-*/
-        BindItem *item = NULL;
-        if(sym) {
-            // symbol is given
-            Item *it = set.find(sym);
-            if(fun) {
-                // check if function matches
-                for(; it && static_cast<BindItem *>(it)->fun != fun; it = it->nxt) {}
-            }
-            item = static_cast<BindItem *>(it); 
-        }
-        else {
-            // take any entry that matches
-            for(FLEXT_TEMP_TYPENAME ItemSet::iterator si(set); si && !item; ++si) {
-                for(Item *i = si.data(); i; i = i->nxt) {
-                    BindItem *bit = (BindItem *)i;
-                    if(!fun || bit->fun == fun) { 
-                        item = bit; 
-                        if(!sym) sym = si.key();
-                        break; 
-                    }
-                }
-            }
-        }
-
-        if(item) {
-            if(data) *data = item->px->data;
-            ok = bindhead->Remove(item,sym,0,false);
-            if(ok) {
-                item->Unbind(sym);
-                delete item;
-            }
-        }
-    }
-    return ok;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::GetBoundMethod(const t_symbol *sym,bool (*fun)(flext_base *,t_symbol *s,int argc,t_atom *argv,void *data),void *&data)
-{
-    if(bindhead) {
-        // Search for symbol
-        for(Item *it = bindhead->FindList(sym); it; it = it->nxt) {
-            BindItem *item = (BindItem *)it;
-
-            // go through all items with matching tag
-            if(item->fun == fun) {
-                data = item->px->data;
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::UnbindAll()
-{
-    if(bindhead && bindhead->Contained(0)) {
-        ItemSet &set = bindhead->GetInlet();
-//        for(ItemSet::iterator si = set.begin(); si != set.end(); ++si) {
-        for(FLEXT_TEMP_TYPENAME ItemSet::iterator si(set); si; ++si) {
-            Item *lst = si.data();
-            while(lst) {
-                Item *nxt = lst->nxt;
-                BindItem *it = (BindItem *)lst;
-                it->Unbind(si.key());
-                delete it;
-                lst = nxt;
-            }
-        }
-        set.clear();
-    }
-    return true;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::pxbnd_object::px_method(pxbnd_object *c,const t_symbol *s,int argc,t_atom *argv)
-{
-    c->item->fun(c->base,(t_symbol *)s,argc,(t_atom *)argv,c->data);
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_BIND_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flbuf.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flbuf.cpp
deleted file mode 100755
index ee34c28588925436263e5cd336c181a36730c313..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flbuf.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flbuf.cpp
-    \brief Implementation of the buffer abstraction class.
-*/
- 
-#ifndef __FLEXT_BUF_CPP
-#define __FLEXT_BUF_CPP
-
-#include "flext.h"
-#include "flfeatures.h"
-#include <set>
-
-#include "flpushns.h"
-
-#if FLEXT_SYS != FLEXT_SYS_JMAX
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-#define DIRTY_INTERVAL 0   // buffer dirty check in msec
-
-FLEXT_TEMPLATE
-class Buffers:
-    public std::set<flext::buffer *>
-{
-public:
-    static FLEXT_TEMPINST(Buffers) buffers;
-};
-
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(Buffers) Buffers)::buffers;
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::cb_buffer_dsp(void *c,t_signal **sp)
-{
-    for(FLEXT_TEMPINST(Buffers)::iterator it = FLEXT_TEMPINST(Buffers)::buffers.begin(); it != FLEXT_TEMPINST(Buffers)::buffers.end(); ++it)
-		(*it)->Set();
-} 
-#endif
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext))::buffer::buffer(const t_symbol *bn,bool delayed):
-    sym(NULL),data(NULL),
-    chns(0),frames(0)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    arr = NULL;
-    interval = DIRTY_INTERVAL;
-    isdirty = false;
-    ticking = false;
-	
-	// we probably should make this global... work on the set of registered buffers
-    tick = clock_new(this,(t_method)cb_tick);
-#endif
-
-    if(bn) Set(bn,delayed);
-
-    ClearDirty();
-	
-#if FLEXT_SYS == FLEXT_SYS_PD
-	// register buffer
-    FLEXT_ASSERT(FLEXT_TEMPINST(Buffers)::buffers.find(this) == FLEXT_TEMPINST(Buffers)::buffers.end());
-	FLEXT_TEMPINST(Buffers)::buffers.insert(this);
-#endif
-}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext))::buffer::~buffer()
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    if(tick) clock_free(tick);
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-	// unregister buffer
-    FLEXT_ASSERT(FLEXT_TEMPINST(Buffers)::buffers.find(this) != FLEXT_TEMPINST(Buffers)::buffers.end());
-    FLEXT_TEMPINST(Buffers)::buffers.erase(this);
-#endif
-}
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::buffer::Set(const t_symbol *s,bool nameonly)
-{
-    int ret = 0;
-    bool valid = data != NULL; // valid now? (before change)
-
-    if(s && sym != s) {
-        ret = 1;
-        data = NULL; 
-        frames = 0;
-        chns = 0; 
-    }
-
-    if(s && *GetString(s))  sym = s;
-
-    if(!sym) {
-        if(valid) ret = -1;
-    }   
-    else if(!nameonly) {
-#if FLEXT_SYS == FLEXT_SYS_PD   
-        arr = (t_garray *)pd_findbyclass(const_cast<t_symbol *>(sym), garray_class);
-        if(!arr)
-        {
-            if (*GetString(sym)) FLEXT_LOG1("buffer: no such array '%s'",GetString(sym));
-//            sym = NULL;
-            if(valid) ret = -1;
-        }
-        else {
-	        int frames1;
-			FLEXT_ARRAYTYPE *data1;
-	        if(!FLEXT_PD_ARRAYGRAB(arr, &frames1, &data1))
-	        {
-	            error("buffer: bad template '%s'",GetString(sym)); 
-	            data = NULL;
-	            frames = 0;
-	            if(valid) ret = -1;
-	        }
-	        else {
-	            ret = 0;
-	            garray_usedindsp(arr);
-	            if(frames != frames1) { frames = frames1; if(!ret) ret = 1; }
-				Element *data2 = reinterpret_cast<Element *>(data1);
-	            if(data != data2) { data = data2; if(!ret) ret = 1; }
-	            chns = 1;
-	        }
-		}
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        if(sym->s_thing) {
-            const t_buffer *p = (const t_buffer *)sym->s_thing;
-            
-            FLEXT_ASSERT(!NOGOOD(p));
-            
-            if(ob_sym(p) != sym_buffer) {
-                post("buffer: object '%s' not valid (type %s)",GetString(sym),GetString(ob_sym(p))); 
-                if(valid) ret = -2;
-            }
-            else {
-#ifdef FLEXT_DEBUG
-//              post("flext: buffer object '%s' - valid:%i samples:%i channels:%i frames:%i",GetString(sym),p->b_valid,p->b_frames,p->b_nchans,p->b_frames);
-#endif
-				Element *data1 = reinterpret_cast<Element *>(p->b_samples);
-                if(data != data1) { data = data1; if(!ret) ret = 1; }
-                if(chns != p->b_nchans) { chns = p->b_nchans; if(!ret) ret = 1; }
-                if(frames != p->b_frames) { frames = p->b_frames; if(!ret) ret = 1; }
-            }
-        }
-        else {
-            FLEXT_LOG1("buffer: symbol '%s' not defined", GetString(sym)); 
-            /*if(valid)*/ ret = -1;
-        }
-#else
-#error not implemented
-#endif
-    }
-
-    return ret;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::buffer::Update()
-{
-    FLEXT_ASSERT(sym);
-
-    bool upd = false;
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    if(!arr) return data == NULL;
-
-    int frames1;
-    FLEXT_ARRAYTYPE *data1;
-    if(!FLEXT_PD_ARRAYGRAB(arr, &frames1, &data1)) {
-        data = NULL;
-        chns = 0;
-        frames = 0;
-        upd = true;
-    }
-    else {
-		Element *data2 = reinterpret_cast<Element *>(data1);
-		if(data != data2 || frames != frames1) {
-	        data = data2;
-	        frames = frames1;
-	        upd = true;
-	    }
-	}
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    const t_buffer *p = (const t_buffer *)sym->s_thing;
-    if(p) {
-        FLEXT_ASSERT(!NOGOOD(p) && ob_sym(p) == sym_buffer);
-    
-		Element *data1 = reinterpret_cast<Element *>(p->b_samples);
-        if(data != data1 || chns != p->b_nchans || frames != p->b_frames) {
-            data = data1;
-            chns = p->b_nchans;
-            frames = p->b_frames;
-            upd = true;
-        }
-    }
-    else {
-        // buffer~ has e.g. been renamed
-        data = NULL;
-        chns = 0;
-        frames = 0;
-        upd = true;
-    }
-#else
-#error not implemented
-#endif
-    return upd;
-}
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext))::buffer::lock_t FLEXT_CLASSDEF(flext))::buffer::Lock()
-{
-    FLEXT_ASSERT(sym);
-#if FLEXT_SYS == FLEXT_SYS_PD
-    FLEXT_ASSERT(arr);
-#ifdef _FLEXT_HAVE_PD_GARRAYLOCKS
-    garray_lock(arr);
-#endif
-    return false;
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    t_buffer *p = (t_buffer *)sym->s_thing;
-    FLEXT_ASSERT(p);
-#ifdef _FLEXT_HAVE_MAX_INUSEFLAG
-    long old = p->b_inuse;
-#ifdef ATOMIC_INCREMENT
-    ATOMIC_INCREMENT(&p->b_inuse);
-#else
-    p->b_inuse = 1;
-#endif
-    return old;
-#else
-    return 0;
-#endif
-#else
-#error not implemented
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::Unlock(flext::buffer::lock_t prv)
-{
-    FLEXT_ASSERT(sym);
-#if FLEXT_SYS == FLEXT_SYS_PD
-    FLEXT_ASSERT(arr);
-#ifdef _FLEXT_HAVE_PD_GARRAYLOCKS
-    garray_unlock(arr);
-#endif
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    t_buffer *p = (t_buffer *)sym->s_thing;
-    FLEXT_ASSERT(p);
-#ifdef _FLEXT_HAVE_MAX_INUSEFLAG 
-#ifdef ATOMIC_INCREMENT
-    ATOMIC_DECREMENT(&p->b_inuse);
-#else
-    p->b_inuse = prv;
-#endif
-#endif
-#else
-#error not implemented
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::Frames(int fr,bool keep,bool zero)
-{
-    FLEXT_ASSERT(sym);
-#if FLEXT_SYS == FLEXT_SYS_PD
-    // is this function guaranteed to keep memory and set rest to zero?
-    ::garray_resize(arr,(float)fr);
-    Update();
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    Element *tmp = NULL;
-    int sz = frames;  
-    if(fr < sz) sz = fr;
-
-    if(keep) {
-        // copy buffer data to tmp storage
-        tmp = (Element *)NewAligned(sz*sizeof(Element));
-        FLEXT_ASSERT(tmp);
-        CopySamples(tmp,data,sz);
-    }
-    
-    t_atom msg;
-    t_buffer *buf = (t_buffer *)sym->s_thing;
-    // b_msr reflects buffer sample rate... is this what we want?
-    // Max bug: adding half a sample to prevent roundoff errors....
-    float ms = (fr+0.5)/buf->b_msr;
-    
-    SetFloat(msg,ms); 
-    ::typedmess((object *)buf,(t_symbol *)sym_size,1,&msg);
-    
-    Update();
-
-    if(tmp) {
-        // copy data back
-        CopySamples(data,tmp,sz);
-        FreeAligned(tmp);
-        if(zero && sz < fr) ZeroSamples(data+sz,fr-sz);
-    }
-    else
-        if(zero) ZeroSamples(data,fr);
-#else
-#error
-#endif
-}
-
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::SetRefrIntv(float intv)
-{ 
-    interval = intv; 
-    if(interval == 0 && ticking) {
-        clock_unset(tick);
-        ticking = false;
-    }
-}
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::SetRefrIntv(float) {}
-#else
-#error
-#endif
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::Dirty(bool force)
-{
-    FLEXT_ASSERT(sym);
-#if FLEXT_SYS == FLEXT_SYS_PD
-    if((!ticking) && (interval || force)) {
-        ticking = true;
-        cb_tick(this); // immediately redraw
-    }
-    else {
-        if(force) clock_delay(tick,0);
-        isdirty = true;
-    }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    t_buffer *p = (t_buffer *)sym->s_thing;
-    FLEXT_ASSERT(p && !NOGOOD(p));
-    ::object_method((t_object *)p,(t_symbol *)sym_dirty);
-//    p->b_modtime = gettime();
-#else
-#error Not implemented
-#endif 
-}
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::cb_tick(buffer *b)
-{
-    if(b->arr) garray_redraw(b->arr);
-#ifdef FLEXT_DEBUG
-    else error("buffer: array is NULL");
-#endif
-
-    if(b->isdirty && b->interval) {
-            b->isdirty = false;
-            b->ticking = true;
-            clock_delay(b->tick,b->interval);
-    }
-    else 
-        b->ticking = false;
-}
-#endif
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::buffer::ClearDirty()
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    cleantime = clock_getlogicaltime();
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    cleantime = gettime();
-#else
-#error Not implemented
-#endif
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::buffer::IsDirty() const
-{
-    if(!sym) return false;
-#if FLEXT_SYS == FLEXT_SYS_PD
-    #ifdef _FLEXT_HAVE_PD_GARRAYUPDATETIME
-    return arr && (isdirty || garray_updatetime(arr) > cleantime);
-    #else
-    // Don't know.... (no method in PD judging whether buffer has been changed from outside flext...)
-    return true; 
-    #endif
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    t_buffer *p = (t_buffer *)sym->s_thing;
-    FLEXT_ASSERT(p && !NOGOOD(p));
-    return p->b_modtime > cleantime;
-#else
-#error Not implemented
-#endif
-}
-
-#endif // Jmax
-
-#include "flpopns.h"
-
-#endif // __FLEXT_BUF_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flclass.h b/externals/grill/trunk/flext/libbuild/include/flext/flclass.h
deleted file mode 100755
index c519ae3270496b07a96ecf22d2aaf6c38d11a414..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flclass.h
+++ /dev/null
@@ -1,1131 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flclass.h
-	\brief User accessible flext base classes
-    
-*/
-
-#ifndef __FLCLASS_H
-#define __FLCLASS_H
-
-// include the header file declaring the base classes
-#include "flbase.h"
-#include "flsupport.h"
-#include "flmap.h"
-#include "flinternal.h"
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4786)
-#endif
-
-#ifdef __BORLANDC__
-#pragma warn -8008 // Condition is always false
-#pragma warn -8057 // Parameter is never used
-#pragma warn -8066 // Unreachable code
-#endif
-
-
-#include "flpushns.h"
-
-// === flext_base ==================================================
-
-/*! \brief Flext message only base object
-
-    This is the base class from which typical external objects derive.
-    DSP objects should use the flext_dsp class which inherits from flext_base and
-    provides the necessary functionality.
-
-    For a valid external object class you would also need FLEXT_HEADER, also if it's only
-    a base class without instantiated objects again.
-    To make an instance of an object class you would typically use FLEXT_NEW or 
-    its companions.
-
-    See the flext_obj class for additional information.
-*/
-
-
-FLEXT_TEMPLATE class FLEXT_SHARE FLEXT_CLASSDEF(flext_base);
-
-typedef class FLEXT_SHARE FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) flext_base;
-
-FLEXT_TEMPLATE
-class FLEXT_SHARE FLEXT_CLASSDEF(flext_base): 
-	public flext_obj
-{
-	FLEXT_HEADER_S(FLEXT_CLASSDEF(flext_base),flext_obj,Setup)
-	
-	friend class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj);
-
-public:
-
-// --- inheritable virtual methods --------------------------------
-
-	/*!	\defgroup FLEXT_C_VIRTUAL Virtual base class functions
-
-		@{ 
-	*/
-
-	//! called on patcher load (not on mere object creation!)
-	virtual void CbLoadbang();
-	virtual void m_loadbang();
-
-	//! called on (double-)click into object box
-	virtual void CbClick();
-
-	/*!	\brief Called for every incoming message.
-		All method handling is done in there
-		\return True if a handler was found and called
-	*/
-	virtual bool CbMethodHandler(int inlet,const t_symbol *s,int argc,const t_atom *argv);
-
-	/*! \brief Called for every unhandled message (by CbMethodHandler)
-	*/
-	virtual bool CbMethodResort(int inlet,const t_symbol *s,int argc,const t_atom *argv);
-	virtual bool m_method_(int inlet,const t_symbol *s,int argc,const t_atom *argv);
-
-	virtual bool CbIdle();
-
-//!		@} FLEXT_C_VIRTUAL
-
-
-// --- inlet/outlet stuff -----------------------------------------	
-
-	/*!	\defgroup FLEXT_C_INOUT Flext in-/outlet functions
-		\note These must be called in the class' constructor
-		\note All (also default) inlets must be defined
-		@{ 
-	*/
-
-	/*!	\defgroup FLEXT_C_IO_ADD Announce in-/outlet functions
-		@{ 
-	*/
-
-	// argument m specifies multiple inlet/outlet count
-	
-//	void AddInDef() { AddInlet(xlet_def,1); }
-
-	/*! \brief Add inlet(s) for anythings
-		\remark That's the one to choose for the left-most (first) inlet unless it's a signal inlet.
-	*/
-	void AddInAnything(int m = 1) { AddInlet(xlet_any,m); } 
-	/*! \brief Add inlet(s) for anythings (with description)
-		\remark That's the one to choose for the left-most (first) inlet unless it's a signal inlet.
-	*/
-	void AddInAnything(const char *desc,int m = 1) { AddInlet(xlet_any,m,desc); } 
-	//! Add inlet(s) for floats
-	void AddInFloat(int m = 1) { AddInlet(xlet_float,m); }
-	//! Add inlet(s) for floats (with description)
-	void AddInFloat(const char *desc,int m = 1) { AddInlet(xlet_float,m,desc); }
-	//! Add inlet(s) for integers
-	void AddInInt(int m = 1) { AddInlet(xlet_int,m); }
-	//! Add inlet(s) for integers (with description)
-	void AddInInt(const char *desc,int m = 1) { AddInlet(xlet_int,m,desc); }
-	//! Add inlet(s) for symbols
-	void AddInSymbol(int m = 1) { AddInlet(xlet_sym,m); }
-	//! Add inlet(s) for symbol (with description)
-	void AddInSymbol(const char *desc,int m = 1) { AddInlet(xlet_sym,m,desc); }
-	//! Add inlet(s) for bang
-	void AddInBang(int m = 1) { AddInlet(xlet_sym,m); }
-	//! Add inlet(s) for bangs (with description)
-	void AddInBang(const char *desc,int m = 1) { AddInlet(xlet_sym,m,desc); }
-	//! Add inlet(s) for lists
-	void AddInList(int m = 1) { AddInlet(xlet_list,m); }  
-	//! Add inlet(s) for lists (with description)
-	void AddInList(const char *desc,int m = 1) { AddInlet(xlet_list,m,desc); }  
-	
-	//! Add outlet(s) for anythings
-	void AddOutAnything(int m = 1) { AddOutlet(xlet_any,m); }
-	//! Add outlet(s) for anythings (with description)
-	void AddOutAnything(const char *desc,int m = 1) { AddOutlet(xlet_any,m,desc); }
-	//! Add outlet(s) for floats
-	void AddOutFloat(int m = 1) { AddOutlet(xlet_float,m); }
-	//! Add outlet(s) for floats (with description)
-	void AddOutFloat(const char *desc,int m = 1) { AddOutlet(xlet_float,m,desc); }
-	//! Add outlet(s) for integers
-	void AddOutInt(int m = 1) { AddOutlet(xlet_int,m); }
-	//! Add outlet(s) for integers (with description)
-	void AddOutInt(const char *desc,int m = 1) { AddOutlet(xlet_int,m,desc); }
-	//! Add outlet(s) for symbols
-	void AddOutSymbol(int m = 1) { AddOutlet(xlet_sym,m); }
-	//! Add outlet(s) for symbols (with description)
-	void AddOutSymbol(const char *desc,int m = 1) { AddOutlet(xlet_sym,m,desc); }
-	//! Add outlet(s) for bangs
-	void AddOutBang(int m = 1) { AddOutlet(xlet_sym,m); }
-	//! Add outlet(s) for bangs (with description)
-	void AddOutBang(const char *desc,int m = 1) { AddOutlet(xlet_sym,m,desc); }
-	//! Add outlet(s) for lists
-	void AddOutList(int m = 1) { AddOutlet(xlet_list,m); }
-	//! Add outlet(s) for lists (with description)
-	void AddOutList(const char *desc,int m = 1) { AddOutlet(xlet_list,m,desc); }
-
-	//! \deprecated inlets and outlets are now set up automatically
-	bool SetupInOut() { return true; }
-
-	//!	@} FLEXT_C_IO_ADD 
-
-	/*!	\defgroup FLEXT_C_IO_MISC Miscellanous in-/outlet functionality
-		@{ 
-	*/
-
-	//! Get number of inlets
-	int CntIn() const { return incnt; }
-	//! Get number of outlets
-	int CntOut() const { return outcnt; }
-	//! Get number of signal inlets
-	int CntInSig() const { return insigs; }
-	//! Get number of signal outlets
-	int CntOutSig() const { return outsigs; }
-
-
-	//! Retrieve currently processed message tag (NULL if no message processing)
-	static const t_symbol *thisTag() { return curtag; }
-
-	class outlet;
-
-	//! Get pointer to outlet (not in the constructor!)
-	outlet *GetOut(int ix) const { return outlets[ix]; }
-
-	int GetOutAttr() const { return HasAttributes()?CntOut():0; }
-
-	//! @} FLEXT_C_IO_MISC
-
-	/*!	\defgroup FLEXT_C_IO_OUT Output data to inlets/outlets
-		@{ 
-	*/
-
-	// output messages 
-
-	//! Output bang (index n starts with 0)
-	void ToOutBang(int n) const;
-
-	//! Output float (index n starts with 0)
-	void ToOutFloat(int n,float f) const;
-
-	//! Output integer (index n starts with 0)
-	void ToOutInt(int n,int f) const;
-	
-	//! Output boolean (index n starts with 0)
-    void ToOutBool(int n,bool f) const { ToOutInt(n,f?1:0); }
-
-	//! Output double (index n starts with 0)
-	void ToOutDouble(int n,double d) const { t_atom dbl[2]; ToOutList(n,2,SetDouble(dbl,d)); }
-
-	//! Output symbol (index n starts with 0)
-	void ToOutSymbol(int n,const t_symbol *s) const;
-	//! Output string aka symbol (index n starts with 0)
-	void ToOutString(int n,const char *s) const { ToOutSymbol(n,MakeSymbol(s)); }
-
-	//! Output atom (index n starts with 0)
-	void ToOutAtom(int n,const t_atom &at) const; 
-
-	//! Output list (index n starts with 0)
-	void ToOutList(int n,int argc,const t_atom *argv) const;
-	//! Output list (index n starts with 0)
-	void ToOutList(int n,const AtomList &list) const { ToOutList(n,list.Count(),list.Atoms()); }
-	
-	//! Output anything (index n starts with 0)
-	void ToOutAnything(int n,const t_symbol *s,int argc,const t_atom *argv) const;
-	//! Output anything (index n starts with 0)
-	void ToOutAnything(int n,const AtomAnything &any) const { ToOutAnything(n,any.Header(),any.Count(),any.Atoms()); }
-	//! Output anything (index n starts with 0)
-	void ToOutAnything(int n,const t_symbol *s,const AtomList &list) const { ToOutAnything(n,s,list.Count(),list.Atoms()); }
-	
-	//! @} FLEXT_C_IO_OUT
-
-	/*!	\defgroup FLEXT_C_IO_QUEUE Low-priority output of data to inlets/outlets
-		@{ 
-	*/
-
-	//! Output low priority bang (index n starts with 0)
-	void ToQueueBang(int n) const;
-
-	//! Output low priority float (index n starts with 0)
-	void ToQueueFloat(int n,float f) const;
-
-	//! Output low priority integer (index n starts with 0)
-	void ToQueueInt(int n,int f) const;
-
-	//! Output low priority boolean (index n starts with 0)
-	void ToQueueBool(int n,bool f) const { ToQueueInt(n,f?1:0); }
-
-	//! Output double (index n starts with 0)
-	void ToQueueDouble(int n,double d) const { t_atom dbl[2]; ToQueueList(n,2,SetDouble(dbl,d)); }
-
-	//! Output low priority symbol (index n starts with 0)
-	void ToQueueSymbol(int n,const t_symbol *s) const;
-	//! Output low priority string aka symbol (to appointed outlet)
-	void ToQueueString(int n,const char *s) const { ToQueueSymbol(n,MakeSymbol(s)); }
-
-	//! Output low priority atom (index n starts with 0)
-	void ToQueueAtom(int n,const t_atom &at) const; 
-
-	//! Output low priority list (index n starts with 0)
-	void ToQueueList(int n,int argc,const t_atom *argv) const; 
-	//! Output low priority list (index n starts with 0)
-	void ToQueueList(int n,const AtomList &list) const  { ToQueueList(n,list.Count(),list.Atoms()); }
-
-	//! Output low priority anything (index n starts with 0)
-	void ToQueueAnything(int n,const t_symbol *s,int argc,const t_atom *argv)  const;
-	//! Output low priority anything (index n starts with 0)
-	void ToQueueAnything(int n,const AtomAnything &any) const  { ToQueueAnything(n,any.Header(),any.Count(),any.Atoms()); }
-
-    //!	@} FLEXT_C_IO_QUEUE
-
-
-	/*!	\defgroup FLEXT_C_IO_SELF Output of data to inlets/outlets of this object
-		@{ 
-	*/
-
-    //! Send bang to self (inlet n)
-    void ToSelfBang(int n) const { ToQueueBang(-1-n); }
-
-	//! Send float to self (inlet n)
-    void ToSelfFloat(int n,float f) const { ToQueueFloat(-1-n,f); }
-
-	//! Send integer to self (inlet n)
-    void ToSelfInt(int n,int f) const { ToQueueInt(-1-n,f); }
-
-	//! Send boolean to self (inlet n)
-	void ToSelfBool(int n,bool f) const { ToSelfInt(n,f?1:0); }
-
-	//! Send double to self (index n starts with 0)
-	void ToSelfDouble(int n,double d) const { t_atom dbl[2]; ToSelfList(n,2,SetDouble(dbl,d)); }
-
-	//! Send symbol to self (inlet n)
-    void ToSelfSymbol(int n,const t_symbol *s) const { ToQueueSymbol(-1-n,s); }
-	//! Send string aka symbol to self (inlet 0)
-	void ToSelfString(int n,const char *s) const { ToSelfSymbol(n,MakeSymbol(s)); }
-
-	//! Output atom (index n starts with 0)
-    void ToSelfAtom(int n,const t_atom &at) const { ToQueueAtom(-1-n,at); }
-
-	//! Send list to self (inlet n)
-    void ToSelfList(int n,int argc,const t_atom *argv) const { ToQueueList(-1-n,argc,argv); }
-	//! Send list to self (inlet n)
-	void ToSelfList(int n,const AtomList &list) const  { ToSelfList(n,list.Count(),list.Atoms()); }
-
-	//! Send anything to self (inlet n)
-    void ToSelfAnything(int n,const t_symbol *s,int argc,const t_atom *argv) const { ToQueueAnything(-1-n,s,argc,argv); }
-	//! Send anything to self (inlet n)
-	void ToSelfAnything(int n,const AtomAnything &any) const { ToSelfAnything(n,any.Header(),any.Count(),any.Atoms()); }
-
-    //!	@} FLEXT_C_IO_SELF
-
-
-	/*!	\defgroup FLEXT_C_IO_MESSAGEBUNDLE Output of data via message bundles
-
-        These are used to assure the sending of several messages from a second thread to the same logical time
-
-		@{ 
-	*/
-
-	//! Output bang (index n starts with 0)
-	void MsgAddBang(MsgBundle *mb,int n) const;
-
-	//! Output float (index n starts with 0)
-	void MsgAddFloat(MsgBundle *mb,int n,float f) const;
-
-	//! Output integer (index n starts with 0)
-	void MsgAddInt(MsgBundle *mb,int n,int f) const;
-
-	//! Output boolean (index n starts with 0)
-	void MsgAddBool(MsgBundle *mb,int n,bool f) const { MsgAddInt(mb,n,f?1:0); }
-
-	//! Output double (index n starts with 0)
-	void MsgAddDouble(MsgBundle *mb,int n,double d) const { t_atom dbl[2]; MsgAddList(mb,n,2,SetDouble(dbl,d)); }
-
-	//! Output symbol (index n starts with 0)
-	void MsgAddSymbol(MsgBundle *mb,int n,const t_symbol *s) const;
-	//! Output string aka symbol (to appointed outlet)
-	void MsgAddString(MsgBundle *mb,int n,const char *s) const { MsgAddSymbol(mb,n,MakeSymbol(s)); }
-
-	//! Output atom (index n starts with 0)
-	void MsgAddAtom(MsgBundle *mb,int n,const t_atom &at) const;
-
-	//! Output list (index n starts with 0)
-	void MsgAddList(MsgBundle *mb,int n,int argc,const t_atom *argv) const;
-
-	//! Output list (index n starts with 0)
-	void MsgAddList(MsgBundle *mb,int n,const AtomList &list) const { MsgAddList(mb,n,list.Count(),list.Atoms()); }
-
-	//! Output anything (index n starts with 0)
-	void MsgAddAnything(MsgBundle *mb,int n,const t_symbol *s,int argc,const t_atom *argv) const;
-	//! Output anything (index n starts with 0)
-	void MsgAddAnything(MsgBundle *mb,int n,const AtomAnything &any) const { MsgAddAnything(mb,n,any.Header(),any.Count(),any.Atoms()); }
-
-    void MsgSelfBang(MsgBundle *mb,int n) const { MsgAddBang(mb,-1-n); }
-
-	//! Send float to self (inlet n)
-    void MsgSelfFloat(MsgBundle *mb,int n,float f) const { MsgAddFloat(mb,-1-n,f); }
-
-	//! Send integer to self (inlet n)
-    void MsgSelfInt(MsgBundle *mb,int n,int f) const { MsgAddInt(mb,-1-n,f); }
-
-	//! Send boolean to self (inlet n)
-	void MsgSelfBool(MsgBundle *mb,int n,bool f) const { MsgSelfInt(mb,n,f?1:0); }
-
-	//! Output double (index n starts with 0)
-	void MsgSelfDouble(MsgBundle *mb,int n,double d) const { t_atom dbl[2]; MsgSelfList(mb,n,2,SetDouble(dbl,d)); }
-
-	//! Send symbol to self (inlet n)
-    void MsgSelfSymbol(MsgBundle *mb,int n,const t_symbol *s) const { MsgAddSymbol(mb,-1-n,s); }
-	//! Send string aka symbol to self (inlet 0)
-	void MsgSelfString(MsgBundle *mb,int n,const char *s) const { MsgSelfSymbol(mb,n,MakeSymbol(s)); }
-
-	//! Output atom (index n starts with 0)
-    void MsgSelfAtom(MsgBundle *mb,int n,const t_atom &at) const { MsgAddAtom(mb,-1-n,at); }
-
-	//! Send list to self (inlet n)
-    void MsgSelfList(MsgBundle *mb,int n,int argc,const t_atom *argv) const { MsgAddList(mb,-1-n,argc,argv); }
-	//! Send list to self (inlet n)
-	void MsgSelfList(MsgBundle *mb,int n,const AtomList &list) const { MsgSelfList(mb,n,list.Count(),list.Atoms()); }
-
-	//! Send anything to self (inlet n)
-    void MsgSelfAnything(MsgBundle *mb,int n,const t_symbol *s,int argc,const t_atom *argv) const { MsgAddAnything(mb,-1-n,s,argc,argv); }
-	//! Send anything to self (inlet n)
-	void MsgSelfAnything(MsgBundle *mb,int n,const AtomAnything &any) const { MsgSelfAnything(mb,n,any.Header(),any.Count(),any.Atoms()); }
-
-    //! @} FLEXT_C_IO_MESSAGEBUNDLE
-
-//!	@} FLEXT_C_INOUT
-
-
-// --- message handling -------------------------------------------
-
-	enum metharg {
-		a_null = 0,
-		a_float,a_int,a_bool,
-		a_symbol,a_pointer,
-		a_list,a_any, // (t_symbol *) / int / t_atom *
-		a_LIST,a_ANY // AtomList, AtomAnything
-	};
-
-	typedef bool (*methfun)(flext_base *c);
-
-	/*!	\defgroup FLEXT_C_ADDMETHOD Method handling (object scope)
-		\internal
-		@{ 
-	*/
-
-    void AddMethodDef(int inlet,const t_symbol *tag = NULL) { ThMeths()->Add(new MethItem,tag,inlet); }
-    void AddMethodDef(int inlet,const char *tag = NULL) { AddMethodDef(inlet,MakeSymbol(tag)); }
-
-	void AddMethod(int inlet,bool (*m)(flext_base *)) { AddMethod(ThMeths(),inlet,sym_bang,(methfun)m,a_null); }
-	void AddMethod(int inlet,bool (*m)(flext_base *,int,t_atom *)) { AddMethod(ThMeths(),inlet,sym_list,(methfun)m,a_list,a_null); }
-	void AddMethod(int inlet,bool (*m)(flext_base *,int,const t_atom *)) { AddMethod(ThMeths(),inlet,sym_list,(methfun)m,a_list,a_null); }
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_null); }  // pure method
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,bool (*m)(flext_base *,t_symbol *,int,t_atom *)) { AddMethod(ThMeths(),inlet,sym_anything,(methfun)m,a_any,a_null); } // anything
-	void AddMethod(int inlet,bool (*m)(flext_base *,const t_symbol *,int,const t_atom *)) { AddMethod(ThMeths(),inlet,sym_anything,(methfun)m,a_any,a_null); } // anything
-	void AddMethod(int inlet,bool (*m)(flext_base *,t_symbol *&)) { AddMethod(ThMeths(),inlet,sym_symbol,(methfun)m,a_symbol,a_null); } // single symbol
-	void AddMethod(int inlet,bool (*m)(flext_base *,const t_symbol *&)) { AddMethod(ThMeths(),inlet,sym_symbol,(methfun)m,a_symbol,a_null); } // single symbol
-	void AddMethod(int inlet,bool (*m)(flext_base *,float &)) { AddMethod(ThMeths(),inlet,sym_float,(methfun)m,a_float,a_null); }  // single float
-	void AddMethod(int inlet,bool (*m)(flext_base *,float &,float &)) { AddMethod(ThMeths(),inlet,sym_list,(methfun)m,a_float,a_float,a_null); } // list of 2 floats
-	void AddMethod(int inlet,bool (*m)(flext_base *,float &,float &,float &)) { AddMethod(ThMeths(),inlet,sym_list,(methfun)m,a_float,a_float,a_float,a_null); } // list of 3 floats
-#if FLEXT_SYS == FLEXT_SYS_PD
-	void AddMethod(int inlet,bool (*m)(flext_base *,int &)) { AddMethod(ThMeths(),inlet,sym_float,(methfun)m,a_int,a_null); }  // single float
-#else
-	void AddMethod(int inlet,bool (*m)(flext_base *,int &)) { AddMethod(ThMeths(),inlet,sym_int,(methfun)m,a_int,a_null); }  // single float
-#endif
-	void AddMethod(int inlet,bool (*m)(flext_base *,int &,int &)) { AddMethod(ThMeths(),inlet,sym_list,(methfun)m,a_int,a_int,a_null); } // list of 2 floats
-	void AddMethod(int inlet,bool (*m)(flext_base *,int &,int &,int &)) { AddMethod(ThMeths(),inlet,sym_list,(methfun)m,a_int,a_int,a_int,a_null); } // list of 3 floats
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,int,t_atom *)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_list,a_null); } // method+gimme
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,int,const t_atom *)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_list,a_null); } // method+gimme
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,t_symbol *,int,t_atom *)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_any,a_null); } // method+gimme 
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,const t_symbol *,int,const t_atom *)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_any,a_null); } // method+gimme 
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,t_symbol *&)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_symbol,a_null); } // method+symbol
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,const t_symbol *&)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_symbol,a_null); } // method+symbol
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,float &)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_float,a_null); }  // method+float
-	void AddMethod(int inlet,const t_symbol *tag,bool (*m)(flext_base *,int &)) { AddMethod(ThMeths(),inlet,tag,(methfun)m,a_int,a_null); } // method+int
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,int,t_atom *)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,int,const t_atom *)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,t_symbol *,int,t_atom *)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,const t_symbol *,int,const t_atom *)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,t_symbol *&)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,const t_symbol *&)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,float &)) { AddMethod(inlet,MakeSymbol(tag),m); }
-	void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,int &)) { AddMethod(inlet,MakeSymbol(tag),m); }
-
-	// ¥schedule call of the CbIdle method during the next idle cycle
-	void AddIdle();
-
-	//! Set Max/MSP style of distributing list elements over (message) inlets
-	static void SetDist(t_classid c,bool d = true);
-    //! Query whether lists are distributed
-	bool DoDist() const;
-
-
-//!		@} FLEXT_C_ADDMETHOD
-
-	/*!	\defgroup FLEXT_C_CADDMETHOD Method handling (class scope)
-		\internal
-		@{ 
-	*/
-
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *)) { AddMethod(ClMeths(c),inlet,sym_bang,(methfun)m,a_null); }
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,int,t_atom *)) { AddMethod(ClMeths(c),inlet,sym_list,(methfun)m,a_list,a_null); }
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,int,const t_atom *)) { AddMethod(ClMeths(c),inlet,sym_list,(methfun)m,a_list,a_null); }
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_null); }  // pure method
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,t_symbol *,int,t_atom *)) { AddMethod(ClMeths(c),inlet,sym_anything,(methfun)m,a_any,a_null); } // anything
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,const t_symbol *,int,const t_atom *)) { AddMethod(ClMeths(c),inlet,sym_anything,(methfun)m,a_any,a_null); } // anything
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,t_symbol *&)) { AddMethod(ClMeths(c),inlet,sym_symbol,(methfun)m,a_symbol,a_null); } // single symbol
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,const t_symbol *&)) { AddMethod(ClMeths(c),inlet,sym_symbol,(methfun)m,a_symbol,a_null); } // single symbol
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,float &)) { AddMethod(ClMeths(c),inlet,sym_float,(methfun)m,a_float,a_null); }  // single float
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,float &,float &)) { AddMethod(ClMeths(c),inlet,sym_list,(methfun)m,a_float,a_float,a_null); } // list of 2 floats
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,float &,float &,float &)) { AddMethod(ClMeths(c),inlet,sym_list,(methfun)m,a_float,a_float,a_float,a_null); } // list of 3 floats
-#if FLEXT_SYS == FLEXT_SYS_PD
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,int &)) { AddMethod(ClMeths(c),inlet,sym_float,(methfun)m,a_int,a_null); }  // single integer
-#else
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,int &)) { AddMethod(ClMeths(c),inlet,sym_int,(methfun)m,a_int,a_null); }  // single integer
-#endif
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,int &,int &)) { AddMethod(ClMeths(c),inlet,sym_list,(methfun)m,a_int,a_int,a_null); } // list of 2 floats
-	static void AddMethod(t_classid c,int inlet,bool (*m)(flext_base *,int &,int &,int &)) { AddMethod(ClMeths(c),inlet,sym_list,(methfun)m,a_int,a_int,a_int,a_null); } // list of 3 floats
-    static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,int,t_atom *)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_list,a_null); } // method+gimme
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,int,const t_atom *)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_list,a_null); } // method+gimme
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,t_symbol *,int,t_atom *)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_any,a_null); } // method+gimme 
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,const t_symbol *,int,const t_atom *)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_any,a_null); } // method+gimme 
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,t_symbol *&)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_symbol,a_null); } // method+symbol
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,const t_symbol *&)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_symbol,a_null); } // method+symbol
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,float &)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_float,a_null); }  // method+float
-	static void AddMethod(t_classid c,int inlet,const t_symbol *tag,bool (*m)(flext_base *,int &)) { AddMethod(ClMeths(c),inlet,tag,(methfun)m,a_int,a_null); } // method+int
-    static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,int,t_atom *)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,int,const t_atom *)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,t_symbol *,int,t_atom *)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,const t_symbol *,int,const t_atom *)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,t_symbol *&)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,const t_symbol *&)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,float &)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-	static void AddMethod(t_classid c,int inlet,const char *tag,bool (*m)(flext_base *,int &)) { AddMethod(c,inlet,MakeSymbol(tag),m); }
-
-	// ¥schedule call of the given idlefun during the next idle cycle
-	static void AddIdle(bool (*idlefun)(int argc,const t_atom *argv),int argc,const t_atom *argv);
-
-//!		@} FLEXT_C_CADDMETHOD
-
-// --- bind/unbind ---------------------------------------
-
-	/*!	\defgroup FLEXT_C_BIND Methods for binding a flext class to a symbol
-
-		@{ 
-	*/
-
-	//! Bind object to a symbol
-	bool Bind(const t_symbol *sym);
-	//! Unbind object from a symbol
-	bool Unbind(const t_symbol *sym);
-
-	//! Bind object to a symbol (as string)
-	bool Bind(const char *sym) { return Bind(MakeSymbol(sym)); }  
-	//! Unbind object from a symbol (as string)
-	bool Unbind(const char *sym) { return Unbind(MakeSymbol(sym)); }  
-
-    /*! \brief Bind a method to a symbol
-        \param sym Symbol to bind to
-        \param meth Function to bind
-        \param data User data that is passed to the function
-        \return true on success
-    */
-	bool BindMethod(const t_symbol *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data),void *data = NULL);
-    /*! \brief Unbind a method from a symbol
-        \param sym Symbol to unbind from (if NULL... unbind all functions)
-        \param meth Method to unbind (if NULL ... unbind all functions bound to symbol)
-        \param data returns data pointer specified with BindMethod
-        \return true on success
-    */
-	bool UnbindMethod(const t_symbol *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data) = NULL,void **data = NULL);
-    /*! \brief Get data of bound method of a symbol
-        \param sym Symbol to bind to
-        \param meth Function to bind
-        \param data Reference to returned user data
-        \return true on success (symbol/method combination was found)
-    */
-	bool GetBoundMethod(const t_symbol *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data),void *&data);
-
-    //! \brief Bind a method to a symbol (as string)
-    bool BindMethod(const char *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data),void *data = NULL) { return BindMethod(MakeSymbol(sym),meth,data); }
-    //! \brief Unbind a method from a symbol (as string)
-    bool UnbindMethod(const char *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data) = NULL,void **data = NULL) { return UnbindMethod(MakeSymbol(sym),meth,data); }
-    //! \brief Get data of bound method of a symbol (as string)
-    bool GetBoundMethod(const char *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data),void *&data) { return GetBoundMethod(MakeSymbol(sym),meth,data); }
-
-	/*! Unbind all symbol bindings
-		\note Memory associated to data pointers passed by BindMethod will not be freed!
-	*/
-	bool UnbindAll();
-
-//!		@} FLEXT_C_BIND
-
-	// --- thread stuff -----------------------------------------------
-
-#ifdef FLEXT_THREADS
-	/*!	\defgroup FLEXT_C_THREAD Thread handling 
-
-		@{ 
-	*/
-
-	//! Start a thread for this object
-	bool StartThread(void (*meth)(thr_params *p),thr_params *p,const char * = NULL) { p->cl = this; return flext::LaunchThread(meth,p); }
-
-	//! Terminate all threads of this object
-	bool StopThreads();
-#endif // FLEXT_THREADS
-
-//!		@}  FLEXT_C_THREAD
-
-// xxx internal stuff xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
-public: // needed by VC++ 6
-
-    enum xlettype {
-	    xlet_none = 0,
-	    xlet_float,xlet_int,xlet_sym,xlet_list,xlet_any,
-	    xlet_LIST,xlet_ANY, // use AtomList and AtomAnything
-	    xlet_sig
-    };
-
-protected:
-
-	FLEXT_CLASSDEF(flext_base)();
-
-	/*! \brief Set up inlets and outlets, method and attribute lists
-	*/
-	virtual bool Init();
-	
-	/*! \brief Deallocate all kinds of stuff
-	*/
-	virtual void Exit();
-	
-
-	/*!	\defgroup FLEXT_C_ATTR Attribute handling methods (object scope)
-		@{ 
-	*/
-
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,float &),bool (*set)(flext_base *,float &)) { AddAttrib(attr,a_float,(methfun)get,(methfun)set); }
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,int &),bool (*set)(flext_base *,int &)) { AddAttrib(attr,a_int,(methfun)get,(methfun)set); }
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,bool &),bool (*set)(flext_base *,bool &)) { AddAttrib(attr,a_bool,(methfun)get,(methfun)set); }
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,const t_symbol *&),bool (*set)(flext_base *,const t_symbol *&)) { AddAttrib(attr,a_symbol,(methfun)get,(methfun)set); }
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,t_symptr &),bool (*set)(flext_base *,t_symptr &)) { AddAttrib(attr,a_symbol,(methfun)get,(methfun)set); }
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,AtomList *&),bool (*set)(flext_base *,AtomList *&)) { AddAttrib(attr,a_LIST,(methfun)get,(methfun)set); }
-	void AddAttrib(const t_symbol *attr,bool (*get)(flext_base *,AtomAnything *&),bool (*set)(flext_base *,AtomAnything *&)) { AddAttrib(attr,a_ANY,(methfun)get,(methfun)set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,float &),bool (*set)(flext_base *,float &)) { AddAttrib(MakeSymbol(attr),get,set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,int &),bool (*set)(flext_base *,int &)) { AddAttrib(MakeSymbol(attr),get,set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,bool &),bool (*set)(flext_base *,bool &)) { AddAttrib(MakeSymbol(attr),get,set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,const t_symbol *&),bool (*set)(flext_base *,const t_symbol *&)) { AddAttrib(MakeSymbol(attr),get,set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,t_symptr &),bool (*set)(flext_base *,t_symptr &)) { AddAttrib(MakeSymbol(attr),get,set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,AtomList *&),bool (*set)(flext_base *,AtomList *&)) { AddAttrib(MakeSymbol(attr),get,set); }
-	void AddAttrib(const char *attr,bool (*get)(flext_base *,AtomAnything *&),bool (*set)(flext_base *,AtomAnything *&)) { AddAttrib(MakeSymbol(attr),get,set); }
-
-//!		@} FLEXT_C_ATTR
-
-	/*!	\defgroup FLEXT_C_CATTR Attribute handling methods (class scope)
-		@{ 
-	*/
-
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,float &),bool (*set)(flext_base *,float &)) { AddAttrib(c,attr,a_float,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,int &),bool (*set)(flext_base *,int &)) { AddAttrib(c,attr,a_int,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,bool &),bool (*set)(flext_base *,bool &)) { AddAttrib(c,attr,a_bool,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,const t_symbol *&),bool (*set)(flext_base *,const t_symbol *&)) { AddAttrib(c,attr,a_symbol,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,t_symptr &),bool (*set)(flext_base *,t_symptr &)) { AddAttrib(c,attr,a_symbol,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,AtomList *&),bool (*set)(flext_base *,AtomList *&)) { AddAttrib(c,attr,a_LIST,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const t_symbol *attr,bool (*get)(flext_base *,AtomAnything *&),bool (*set)(flext_base *,AtomAnything *&)) { AddAttrib(c,attr,a_ANY,(methfun)get,(methfun)set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,float &),bool (*set)(flext_base *,float &)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,int &),bool (*set)(flext_base *,int &)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,bool &),bool (*set)(flext_base *,bool &)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,const t_symbol *&),bool (*set)(flext_base *,const t_symbol *&)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,t_symptr &),bool (*set)(flext_base *,t_symptr &)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,AtomList *&),bool (*set)(flext_base *,AtomList *&)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-	static void AddAttrib(t_classid c,const char *attr,bool (*get)(flext_base *,AtomAnything *&),bool (*set)(flext_base *,AtomAnything *&)) { AddAttrib(c,MakeSymbol(attr),get,set); }
-
-//!		@} FLEXT_C_CATTR
-
-	//! Dump an attribute to the attribute outlet
-	bool DumpAttrib(const t_symbol *attr) const;
-    //! Dump an attribute to the attribute outlet
-	bool DumpAttrib(const char *attr) const { return DumpAttrib(MakeSymbol(attr)); }
-
-    // check for attribute symbol @
-	static int CheckAttrib(int argc,const t_atom *argv);
-    // check for attribute symbol @
-    static int CheckAttrib(const AtomList &args,int offset = 0) { return CheckAttrib(args.Count()-offset,args.Atoms()+offset)+offset; }
-
-	//! List attributes
-	bool ListAttrib() const;
-	//! List attributes
-	void ListAttrib(AtomList &a) const;
-	//! Get an attribute value
-	bool GetAttrib(const t_symbol *s,AtomList &a) const;
-	//! Set an attribute value
-	bool SetAttrib(const t_symbol *s,int argc,const t_atom *argv);
-	//! Set an attribute value
-	bool SetAttrib(const t_symbol *s,const AtomList &a) { return SetAttrib(s,a.Count(),a.Atoms()); }
-
-	// get and set the attribute
-	bool BangAttrib(const t_symbol *a);
-	// get and set the attribute
-	bool BangAttrib(const char *a) { return BangAttrib(MakeSymbol(a)); }
-	// get and set all (both get- and settables)
-	bool BangAttribAll();
-	// show/hide the attribute
-	bool ShowAttrib(const t_symbol *a,bool show) const;
-	// show/hide the attribute
-	bool ShowAttrib(const char *a,bool show) { return ShowAttrib(MakeSymbol(a),show); }
-
-	//! List methods
-	void ListMethods(AtomList &a,int inlet = 0) const;
-
-/*!		\addtogroup FLEXT_C_INOUT 
-		@{ 
-*/
-
-	//! \brief get a code for a list of inlets or outlets
-	unsigned long XletCode(xlettype tp = xlet_none,...); // end list with 0 (= tp_none) !!
-
-	/*! \brief Add some inlets by a special code representing the types
-		\remark use XletCode function to get code value
-	*/
-	void AddInlets(unsigned long code); 
-
-	//! \brief Add one or more inlet(s)
-	void AddInlet(xlettype tp,int mult = 1,const char *desc = NULL);
-
-	/*! \brief Add some inlets by a special code representing the types
-		\remark use XletCode function to get code value
-	*/
-	void AddOutlets(unsigned long code); 
-
-	//! \brief Add one or more outlet(s)
-	void AddOutlet(xlettype tp,int mult = 1,const char *desc = NULL);
-
-	//! \brief Set the description of an indexed inlet
-	void DescInlet(int ix,const char *desc);
-
-	//! \brief Set the description of an indexed outlet
-	void DescOutlet(int ix,const char *desc);
-
-//!		@} FLEXT_C_INOUT
-
-
-// method handling
-
-	public:
-
-	class AttrItem;
-
-    class Item
-    {
-	public:
-        Item(AttrItem *a): attr(a),nxt(NULL) {}
-        virtual ~Item();
-		
-		bool IsAttr() const { return attr != NULL; }
-
-		AttrItem *attr;
-		Item *nxt;
-	};
-
-    typedef TablePtrMap<const t_symbol *,Item *,8> TablePtrMapDef;
-    
-	class ItemSet
-        :public TablePtrMapDef
-    {
-    public:
-        virtual ~ItemSet();
-        virtual void clear();
-    };
-
-    /*! This class holds hashed item entries
-		\note not thread-safe!
-	*/
-    class FLEXT_SHARE ItemCont
-    {
-	public:
-        ItemCont();
-		~ItemCont();
-
-		int Min() const { return -1; }
-		int Max() const { return size-2; }
-
-        bool Contained(int i) const { return i+1 < size; }
-
-        //! Add an entry
-		void Add(Item *it,const t_symbol *tag,int inlet = 0);
-        //! Remove an entry
-		bool Remove(Item *it,const t_symbol *tag,int inlet,bool free);
-        //! Find an entry list in the Item array
-		Item *FindList(const t_symbol *tag,int inlet = 0);
-		
-        //! Get list for an inlet
-        ItemSet &GetInlet(int inlet = 0)
-		{ 
-			FLEXT_ASSERT(inlet >= Min() && inlet <= Max()); 
-			return *cont[inlet+1]; 
-		}
-
-        //! Get counter for total members (for index of new item)
-        int Members() const { return members; }
-
-    protected:
-
-		void Resize(int nsz);
-
-        int members;
-		int memsize,size;
-		ItemSet **cont;
-	};
-
-    //! \brief This represents an item of the method list
-	class MethItem:
-		public Item 
-    { 
-	public:
-		MethItem(AttrItem *conn = NULL);
-		virtual ~MethItem();
-		
-		void SetArgs(methfun fun,int argc,metharg *args);
-
-		int index;
-		int argc;
-		metharg *args;
-		methfun fun;
-	};
-	
-	//! \brief This represents an item of the attribute list
-	class AttrItem:
-		public Item 
-    { 
-	public:
-		AttrItem(const t_symbol *tag,metharg tp,methfun fun,int flags);
-
-		enum { 
-			afl_get = 0x01, afl_set = 0x02, 
-			afl_getset = afl_get|afl_set,
-			afl_shown = 0x08
-		};
-
-		bool IsGet() const { return (flags&afl_getset) == afl_get; }
-		bool IsSet() const { return (flags&afl_getset) == afl_set; }
-		bool IsShown() const { return (flags&afl_shown) != 0; }
-		bool BothExist() const { return counter != NULL; }
-		AttrItem *Counterpart() { return counter; }
-
-		int index;
-		int flags;
-		metharg argtp;
-		methfun fun;
-		AttrItem *counter;
-		const t_symbol *tag;
-	};
-
-	//! Represent a data value of an attribute
-    class AttrData:
-        public flext_root
-	{
-	public:
-		AttrData(): flags(0) {}
-
-		enum { afl_save = 0x01,afl_init = 0x02,afl_inited = 0x04 };
-
-		void SetSave(bool s) { if(s) flags  |= afl_save; else flags &= ~afl_save; }
-		bool IsSaved() const { return (flags&afl_save) != 0; }
-		void SetInit(bool s) { if(s) flags  |= afl_init; else flags &= ~afl_init; }
-		bool IsInit() const { return (flags&afl_init) != 0; }
-		void SetInitValue(int argc,const t_atom *argv) { init(argc,argv); flags |= afl_inited; }
-		void SetInitValue(const AtomList &l) { SetInitValue(l.Count(),l.Atoms()); }
-		bool IsInitValue() const { return (flags&afl_inited) != 0; }
-		const AtomList &GetInitValue() const { return init; }
-
-		AtomList init;
-		int flags;
-	};
-
-	class AttrDataCont
-        :public TablePtrMap<const t_symbol *,AttrData *,8>
-    {
-    public:
-        virtual ~AttrDataCont();
-        virtual void clear();
-    };
-
-	// these outlet functions don't check for thread but send directly to the real-time system
-    void ToSysBang(int n) const { outlet *o = GetOut(n); if(o) { CRITON(); outlet_bang((t_outlet *)o); CRITOFF(); } }
-    void ToSysFloat(int n,float f) const { outlet *o = GetOut(n); if(o) { CRITON(); outlet_float((t_outlet *)o,f); CRITOFF(); } }
-    void ToSysInt(int n,int f) const { outlet *o = GetOut(n); if(o) { CRITON(); outlet_flint((t_outlet *)o,f); CRITOFF(); } }
-    void ToSysSymbol(int n,const t_symbol *s) const { outlet *o = GetOut(n); if(o) { CRITON(); outlet_symbol((t_outlet *)o,const_cast<t_symbol *>(s)); CRITOFF(); } }
-	void ToSysString(int n,const char *s) const { ToSysSymbol(n,MakeSymbol(s)); }
-    void ToSysList(int n,int argc,const t_atom *argv) const { outlet *o = GetOut(n); if(o) { CRITON(); outlet_list((t_outlet *)o,const_cast<t_symbol *>(sym_list),argc,(t_atom *)argv); CRITOFF(); } }
-	void ToSysList(int n,const AtomList &list) const { ToSysList(n,list.Count(),list.Atoms()); }
-    void ToSysAnything(int n,const t_symbol *s,int argc,const t_atom *argv) const { outlet *o = GetOut(n); if(o) { CRITON(); outlet_anything((t_outlet *)o,const_cast<t_symbol *>(s),argc,(t_atom *)argv); CRITOFF(); } }
-	void ToSysAnything(int n,const AtomAnything &any) const { ToSysAnything(n,any.Header(),any.Count(),any.Atoms()); }
-	void ToSysAnything(int n,const t_symbol *s,const AtomList &list) const { ToSysAnything(n,s,list.Count(),list.Atoms()); }
-
-	void ToSysBool(int n,bool f) const { ToSysInt(n,f?1:0); }
-	void ToSysAtom(int n,const t_atom &at) const;
-	void ToSysDouble(int n,double d) const { t_atom dbl[2]; ToSysList(n,2,SetDouble(dbl,d)); }
-
-	static void ToSysMsg(MsgBundle *mb);
-
-	// add class method handlers
-	static void AddMessageMethods(t_class *c,bool dsp,bool dspin);
-
-private:
-	class pxbnd_object;
-public:
-
-	//! \brief This represents an item of the symbol-bound method list
-    class BindItem:
-		public Item 
-	{ 
-	public:
-		BindItem(bool (*f)(flext_base *,t_symbol *s,int,t_atom *,void *),pxbnd_object *px);
-		virtual ~BindItem();
-
-		void Unbind(const t_symbol *s);
-
-		bool (*fun)(flext_base *,t_symbol *s,int,t_atom *,void *);
-        pxbnd_object *px;
-	};
-	
-	ItemCont *ThMeths() { if(!methhead) methhead = new ItemCont; return methhead; }
-	static ItemCont *ClMeths(t_classid c);
-
-	//! \brief This is the central function to add message handlers. It is used by all other AddMethod incarnations.
-	static void AddMethod(ItemCont *ma,int inlet,const t_symbol *tag,methfun fun,metharg tp,...); 
-
-	ItemCont *ThAttrs() { return attrhead; }
-	static ItemCont *ClAttrs(t_classid c);
-
-    static void AddAttrib(ItemCont *aa,ItemCont *ma,const t_symbol *attr,metharg tp,methfun gfun,methfun sfun);
-    void AddAttrib(const t_symbol *attr,metharg tp,methfun gfun,methfun sfun);
-	static void AddAttrib(t_classid c,const t_symbol *attr,metharg tp,methfun gfun,methfun sfun);
-
-private:
-
-	static inline flext_base *thisObject(flext_hdr *c) { return FLEXT_CAST<flext_base *>(c->data); } 
-
-	static void Setup(t_classid c);
-
-    //! \brief This represents either an inlet or outlet during construction
-	class FLEXT_SHARE xlet {	
-    public:
-        xlet();
-        ~xlet();
-
-        xlettype tp;
-		char *desc;
-
-        void Desc(const char *c);
-	};
-
-	static xlet inlist[];
-    static xlet outlist[];
-
-    //! current message tag
-	static const t_symbol *curtag;
-    //! number of message and signal inlets/outlets
-	unsigned char incnt,outcnt,insigs,outsigs;
-
-	outlet **outlets;
-
-	union t_any {
-		float ft;
-		int it;
-		bool bt;
-		const t_symbol *st;
-#if FLEXT_SYS == FLEXT_SYS_PD
-		t_gpointer *pt;
-#endif
-		void *vt;
-	};
-
-	typedef bool (*methfun_V)(flext_base *c,int argc,t_atom *argv);
-	typedef bool (*methfun_A)(flext_base *c,const t_symbol *s,int argc,t_atom *argv);
-	typedef bool (*methfun_0)(flext_base *c);
-	typedef bool (*methfun_1)(flext_base *c,t_any &);
-	typedef bool (*methfun_2)(flext_base *c,t_any &,t_any &);
-	typedef bool (*methfun_3)(flext_base *c,t_any &,t_any &,t_any &);
-	typedef bool (*methfun_4)(flext_base *c,t_any &,t_any &,t_any &,t_any &);
-	typedef bool (*methfun_5)(flext_base *c,t_any &,t_any &,t_any &,t_any &,t_any &);
-
-	mutable ItemCont *methhead;
-	mutable ItemCont *bindhead;
-	
-	bool FindMeth(int inlet,const t_symbol *s,int argc,const t_atom *argv);
-	bool FindMethAny(int inlet,const t_symbol *s,int argc,const t_atom *argv);
-	bool TryMethTag(Item *lst,const t_symbol *tag,int argc,const t_atom *argv);
-	bool TryMethSym(Item *lst,const t_symbol *s);
-	bool TryMethAny(Item *lst,const t_symbol *s,int argc,const t_atom *argv);
-
-	mutable ItemCont *attrhead;
-	mutable AttrDataCont *attrdata;
-
-	AttrItem *FindAttrib(const t_symbol *tag,bool get,bool msg = false) const;
-
-	bool InitAttrib(int argc,const t_atom *argv);
-
-	bool DumpAttrib(const t_symbol *tag,AttrItem *a) const;
-	bool GetAttrib(const t_symbol *tag,AttrItem *a,AtomList &l) const;
-	bool SetAttrib(const t_symbol *tag,AttrItem *a,int argc,const t_atom *argv);
-	bool SetAttrib(const t_symbol *tag,AttrItem *a,const AtomList &l) { return SetAttrib(tag,a,l.Count(),l.Atoms()); }
-	// get and set the attribute
-	bool BangAttrib(const t_symbol *tag,AttrItem *a);
-	// show/hide the attribute
-	bool ShowAttrib(AttrItem *a,bool show) const;
-
-	static bool cb_ListMethods(flext_base *c,int argc,const t_atom *argv);
-	static bool cb_ListAttrib(flext_base *c) { Locker lock(c); return c->ListAttrib(); }
-
-	// queue stuff
-
-	//! Start message queue
-	static void StartQueue();
-#if FLEXT_QMODE == 2
-    //! Queue worker function
-    static void QWorker(thr_params *);
-#endif
-	//! Flush messages in the queue
-	static void QFlush(flext_base *th = NULL);
-
-    static bool qustarted;
-    
-#if FLEXT_SYS == FLEXT_SYS_PD
-
-	static void SetGfx(t_classid c);
-
-#ifndef FLEXT_NOATTREDIT
-	// attribute editor
-	static bool cb_AttrDialog(flext_base *c,int argc,const t_atom *argv);
-	static void cb_GfxProperties(flext_hdr *c, t_glist *);
-#endif
-
-#ifdef FLEXT_ATTRHIDE
-	static void cb_GfxVis(flext_hdr *c, t_glist *gl, int vis);
-	static void cb_GfxSave(flext_hdr *c, t_binbuf *b);
-	static void cb_GfxSelect(flext_hdr *x, struct _glist *glist, int state);
-
-    void BinbufArgs(t_binbuf *b,t_binbuf *args,bool withname,bool transdoll);
-    void BinbufAttr(t_binbuf *b,bool transdoll);
-#endif
-
-	static void cb_bang(flext_hdr *c);
-	static void cb_float(flext_hdr *c,t_float f);
-	static void cb_symbol(flext_hdr *c,const t_symbol *s);
-//    static void cb_pointer(fltext_hdr *c,const t_gpointer *p);
-	static void cb_anything(flext_hdr *c,const t_symbol *s,int argc,t_atom *argv);
-
-	// proxy object (for additional inlets)
-	static t_class *px_class;
-
-	struct px_object  // no virtual table!
-	{ 
-		t_object obj;			// MUST reside at memory offset 0
-		flext_base *base;
-		int index;
-
-		void init(flext_base *b,int ix) { base = b; index = ix; }
-		static void px_bang(px_object *c);
-		static void px_float(px_object *c,t_float f);
-		static void px_symbol(px_object *c,const t_symbol *s);
-//		static void px_pointer(px_object *c,const t_gpointer *p);
-		static void px_anything(px_object *c,const t_symbol *s,int argc,t_atom *argv);
-	};
-
-	static void cb_px_ft1(flext_hdr *c,t_float f);
-	static void cb_px_ft2(flext_hdr *c,t_float f);
-	static void cb_px_ft3(flext_hdr *c,t_float f);
-	static void cb_px_ft4(flext_hdr *c,t_float f);
-	static void cb_px_ft5(flext_hdr *c,t_float f);
-	static void cb_px_ft6(flext_hdr *c,t_float f);
-	static void cb_px_ft7(flext_hdr *c,t_float f);
-	static void cb_px_ft8(flext_hdr *c,t_float f);
-	static void cb_px_ft9(flext_hdr *c,t_float f);
-	
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-	typedef object px_object;
-	static void cb_bang(flext_hdr *c);
-	static void cb_float(flext_hdr *c,double f);
-	static void cb_int(flext_hdr *c,long v);
-	static void cb_anything(flext_hdr *c,const t_symbol *s,short argc,t_atom *argv);
-
-	static void cb_px_in1(flext_hdr *c,long v);
-	static void cb_px_in2(flext_hdr *c,long v);
-	static void cb_px_in3(flext_hdr *c,long v);
-	static void cb_px_in4(flext_hdr *c,long v);
-	static void cb_px_in5(flext_hdr *c,long v);
-	static void cb_px_in6(flext_hdr *c,long v);
-	static void cb_px_in7(flext_hdr *c,long v);
-	static void cb_px_in8(flext_hdr *c,long v);
-	static void cb_px_in9(flext_hdr *c,long v);
-
-	static void cb_px_ft1(flext_hdr *c,double f);
-	static void cb_px_ft2(flext_hdr *c,double f);
-	static void cb_px_ft3(flext_hdr *c,double f);
-	static void cb_px_ft4(flext_hdr *c,double f);
-	static void cb_px_ft5(flext_hdr *c,double f);
-	static void cb_px_ft6(flext_hdr *c,double f);
-	static void cb_px_ft7(flext_hdr *c,double f);
-	static void cb_px_ft8(flext_hdr *c,double f);
-	static void cb_px_ft9(flext_hdr *c,double f);
-#endif
-
-	px_object **inlets;
-
-	// --------- symbol-bound proxy
-
-	static t_class *pxbnd_class;
-
-    class pxbnd_object:
-        public flext_root
-        // no virtual table!
-	{ 
-    public:
-		t_object obj;			// MUST reside at memory offset 0
-		flext_base *base;
-		BindItem *item;
-        void *data;
-
-		void init(flext_base *b,BindItem *it,void *d) { base = b; item = it; data = d; }
-		static void px_method(pxbnd_object *c,const t_symbol *s,int argc,t_atom *argv);
-	};
-	
-    //! create proxy class for symbol binding
-	static void SetupBindProxy();
-
-	// ---------
-
-    //! set up inlet proxies
-	static void SetProxies(t_class *c,bool dsp);
-
-    //! initialize inlets (according to class or object constructor definitions)
-	bool InitInlets();
-
-    //! initialize outlets (according to class or object constructor definitions)
-	bool InitOutlets();
-
-	// callback functions
-
-	static void cb_loadbang(flext_hdr *c);
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-	char **indesc,**outdesc;
-
-	static void cb_assist(flext_hdr *c,void *b,long msg,long arg,char *s);
-    static void cb_click (flext_hdr *c, Point pt, short mods);
-
-	static void cb_dsp(flext_hdr *c,t_signal **s,short *count);
-#elif FLEXT_SYS == FLEXT_SYS_PD
-	static void cb_click(flext_hdr *z,t_floatarg xpos,t_floatarg ypos,t_floatarg shift,t_floatarg ctrl,t_floatarg alt);
-
-	static void cb_dsp(flext_hdr *c,t_signal **s);
-#endif
-};
-
-#include "flpopns.h"
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flcontainers.h b/externals/grill/trunk/flext/libbuild/include/flext/flcontainers.h
deleted file mode 100755
index 7fe3e16379b243a7751f269d6da49bf37710fe69..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flcontainers.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/* 
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.  
-*/
-
-/*! \file flcontainers.h
-	\brief Lock-free container classes
-*/
-
-#ifndef __FLCONTAINERS_H
-#define __FLCONTAINERS_H
-
-#include "flprefix.h"
-
-#include "lockfree/stack.hpp"
-#include "lockfree/fifo.hpp"
-
-#include "flpushns.h"
-
-class LifoCell: public lockfree::stack_node {};
-
-class Lifo
-	: public lockfree::intrusive_stack<LifoCell>
-{
-public:
-	inline void Push(LifoCell *cell) { this->push(cell); }
-	inline LifoCell *Pop() { return this->pop(); }
-	inline bool Avail() const { return !this->empty(); }
-};
-
-template <typename T>
-class TypedLifo
-    : public Lifo
-{
-public:
-    inline void Push(T *c) { Lifo::Push(static_cast<T *>(c)); }
-    inline T *Pop() { return static_cast<T *>(Lifo::Pop()); }
-};
-
-template <typename T>
-class ValueLifoCell
-	: public LifoCell 
-{
-public:
-	ValueLifoCell(T v): value(v) {}
-	T value;
-};
-
-template <typename T>
-class ValueLifo
-    : public TypedLifo<ValueLifoCell<T> >
-{
-public:
-    inline void Push(T v) 
-	{ 
-		TypedLifo<ValueLifoCell<T> >::Push(new ValueLifoCell<T>(v)); 
-	}
-
-    inline T Pop() 
-	{
-		ValueLifoCell<T> *p = TypedLifo<ValueLifoCell<T> >::Pop(); 
-		T v = p->value;
-		delete p; 
-		return v;
-	}
-};
-
-template <typename T,int M = 2,int O = 1>
-class PooledLifo
-    : public TypedLifo<T>
-{
-public:
-	PooledLifo(): sz(0),resz(0) {}
-
-	void Push(T *c) { TypedLifo<T>::Push(c); ++sz; }
-	T *Pop() { T *r = TypedLifo<T>::Pop(); if(r) --sz; return r; }
-
-    T *New() 
-	{ 
-		T *n = reuse.Pop(); 
-		if(n) {
-			--resz;
-			return n;
-		}
-		else
-			return new T; 
-	}
-
-    inline void Free(T *p) 
-	{ 
-		if(resz < sz*M+O) { reuse.Push(p); ++resz; }
-		else delete p; 
-	}
-private:
-    TypedLifo<T> reuse;
-	size_t sz,resz;
-};
-
-
-class FifoCell: public lockfree::fifo_node {};
-
-class Fifo
-	: public lockfree::intrusive_fifo<FifoCell>
-{
-public:
-	inline void Put(FifoCell *cl) { this->enqueue(cl); }
-	inline FifoCell *Get() { return this->dequeue(); }
-    inline bool Avail() const { return !this->empty(); }
-};
-
-
-template <typename T>
-class TypedFifo
-    : public Fifo
-{
-public:
-    inline void Put(T *c) { Fifo::Put(static_cast<T *>(c)); }
-    inline T *Get() { return static_cast<T *>(Fifo::Get()); }
-};
-
-
-template <typename T>
-class ValueFifoCell
-	: public FifoCell 
-{
-public:
-	ValueFifoCell(T v): value(v) {}
-	T value;
-};
-
-template <typename T>
-class ValueFifo
-    : public TypedFifo<ValueFifoCell<T> >
-{
-public:
-    inline void Put(T v) 
-	{ 
-		TypedFifo<ValueFifoCell<T> >::Put(new ValueFifoCell<T>(v)); 
-	}
-
-    inline T Get() 
-	{
-		ValueFifoCell<T> *p = TypedFifo<ValueFifoCell<T> >::Get(); 
-		T v = p->value;
-		delete p; 
-		return v;
-	}
-};
-
-
-template <typename T,int M = 2,int O = 1>
-class PooledFifo
-    : public TypedFifo<T>
-{
-public:
-    ~PooledFifo() { T *n; while((n = reuse.Get()) != NULL) delete n; }
-
-    inline T *New() { T *n = reuse.Get(); return n?n:new T; }
-    inline void Free(T *p) { if(resz < sz*M+O) reuse.Put(p); else delete p; }
-private:
-    TypedFifo<T> reuse;
-	size_t sz,resz;
-};
-
-#include "flpopns.h"
-
-#endif
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs.h
deleted file mode 100755
index 36adcf842b774dc2687cef66993ac59432e34529..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs.h
-    \brief This file includes all the #define header files 
-*/
-
-#ifndef __FLEXT_DEFS_H
-#define __FLEXT_DEFS_H
-
-/*! \defgroup FLEXT_DEFS Definitions for basic flext functionality
-    @{ 
-*/
-
-/*! \brief Switch for compilation of derived virtual classes
-    \remark These need dynamic type casts (and RTTI, naturally)
-    \ingroup FLEXT_GLOBALS
-*/
-#ifdef FLEXT_VIRT
-#define FLEXT_CAST dynamic_cast
-#else
-#define FLEXT_CAST static_cast
-#endif
-
-//! @}  FLEXT_DEFS
-
-#include "fldefs_hdr.h"
-
-#include "fldefs_setup.h"
-
-
-// ====================================================================================
-
-/*! \defgroup FLEXT_D_METHOD Declarations for flext methods
-    @{ 
-*/
-
-#include "fldefs_methcb.h"
-#include "fldefs_meththr.h"
-#include "fldefs_methadd.h"
-#include "fldefs_methbind.h"
-#include "fldefs_methcall.h"
-
-//! @} FLEXT_D_METHOD
-
-
-
-#ifdef FLEXT_ATTRIBUTES 
-
-/*! \defgroup FLEXT_D_ATTRIB Attribute definition
-    \note These have to reside inside the class declaration
-    @{ 
-*/
-
-#include "fldefs_attrcb.h"
-#include "fldefs_attrvar.h"
-#include "fldefs_attradd.h"
-
-//! @} FLEXT_D_ATTRIB
-
-#endif // FLEXT_ATTRIBUTES
-
-#endif // __FLEXT_DEFS_H
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attradd.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attradd.h
deleted file mode 100755
index a6982bb29570e7d29b009fd3337d9c9517f1f242..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attradd.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_attradd.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_ATTRADD_H
-#define __FLEXT_DEFS_ATTRADD_H
-
-
-/*! \defgroup FLEXT_D_CADDATTR Announce object attributes at class scope
-    \ingroup FLEXT_D_ATTRIB
-    \note These can only be used at class construction time
-    @{ 
-*/
-
-//! Add handler for a gettable attribute
-#define FLEXT_CADDATTR_GET(CL,NAME,GFUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),(FLEXT_GET_PRE(GFUN)),NULL)
-
-//! Add handler for a settable attribute
-#define FLEXT_CADDATTR_SET(CL,NAME,SFUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),NULL,(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable attribute
-#define FLEXT_CADDATTR_VAR(CL,NAME,GFUN,SFUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),(FLEXT_GET_PRE(GFUN)),(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable attribute
-#define FLEXT_CADDATTR_VAR1(CL,NAME,FUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),(FLEXT_GET_PRE(FUN)),(FLEXT_SET_PRE(FUN)))
-
-
-//! Add handler for a gettable enum attribute
-#define FLEXT_CADDATTR_GET_E(CL,NAME,GFUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),(bool (*)(flext_base *,int &))(FLEXT_GET_PRE(GFUN)),NULL)
-
-//! Add handler for a settable enum attribute
-#define FLEXT_CADDATTR_SET_E(CL,NAME,SFUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),NULL,(bool (*)(flext_base *,int &))(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable enum attribute
-#define FLEXT_CADDATTR_VAR_E(CL,NAME,GFUN,SFUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),(bool (*)(flext_base *,int &))(FLEXT_GET_PRE(GFUN)),(bool (*)(flext_base *,int &))(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable enum attribute
-#define FLEXT_CADDATTR_VAR1_E(CL,NAME,FUN) \
-\
-AddAttrib(CL,flext::MakeSymbol(NAME),(bool (*)(flext_base *,int &))(FLEXT_GET_PRE(FUN)),(bool (*)(flext_base *,int &))(FLEXT_SET_PRE(FUN)))
-
-//! @} FLEXT_D_CADDATTR
-
-
-/*! \defgroup FLEXT_D_ADDATTR Announce object attributes 
-    \ingroup FLEXT_D_ATTRIB
-    \note These can only be used at object construction time
-    \note (in constructor or in Init() function before call to parent's Init())
-    @{ 
-*/
-
-//! Add handler for a gettable attribute
-#define FLEXT_ADDATTR_GET(NAME,GFUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),(FLEXT_GET_PRE(GFUN)),NULL)
-
-//! Add handler for a settable attribute
-#define FLEXT_ADDATTR_SET(NAME,SFUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),NULL,(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable attribute
-#define FLEXT_ADDATTR_VAR(NAME,GFUN,SFUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),(FLEXT_GET_PRE(GFUN)),(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable attribute
-#define FLEXT_ADDATTR_VAR1(NAME,FUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),(FLEXT_GET_PRE(FUN)),(FLEXT_SET_PRE(FUN)))
-
-
-//! Add handler for a gettable enum attribute
-#define FLEXT_ADDATTR_GET_E(NAME,GFUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),(bool (*)(flext_base *,int &))(FLEXT_GET_PRE(GFUN)),NULL)
-
-//! Add handler for a settable enum attribute
-#define FLEXT_ADDATTR_SET_E(NAME,SFUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),NULL,(bool (*)(flext_base *,int &))(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable enum attribute
-#define FLEXT_ADDATTR_VAR_E(NAME,GFUN,SFUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),(bool (*)(flext_base *,int &))(FLEXT_GET_PRE(GFUN)),(bool (*)(flext_base *,int &))(FLEXT_SET_PRE(SFUN)))
-
-//! Add handlers for a both get- and settable enum attribute
-#define FLEXT_ADDATTR_VAR1_E(NAME,FUN) \
-\
-AddAttrib(flext::MakeSymbol(NAME),(bool (*)(flext_base *,int &))(FLEXT_GET_PRE(FUN)),(bool (*)(flext_base *,int &))(FLEXT_SET_PRE(FUN)))
-
-//! @} FLEXT_D_ADDATTR
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attrcb.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attrcb.h
deleted file mode 100755
index 0584d16dc08043548c1898ecede381511e76faf2..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attrcb.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_attrcb.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_ATTRCB_H
-#define __FLEXT_DEFS_ATTRCB_H
-
-
-
-/*! \brief Declare a attribute set function
-    \internal
-*/
-#define FLEXT_CALLSET_(FUN,TP) \
-static bool FLEXT_SET_PRE(FUN)(flext_base *c,TP &arg) \
-{ FLEXT_CAST<thisType *>(c)->FUN(arg); return true; }
-
-/*! \brief Declare a attribute get function
-    \internal
-*/
-#define FLEXT_CALLGET_(FUN,TP) \
-static bool FLEXT_GET_PRE(FUN)(flext_base *c,TP &arg) \
-{ FLEXT_CAST<thisType *>(c)->FUN(arg); return true; }
-
-
-
-/*! \defgroup FLEXT_DA_CALLSET Definition of attribute set handlers
-    \ingroup FLEXT_D_ATTRIB
-    @{ 
-*/
-
-//! Declare a set function for a float attribute
-#define FLEXT_CALLSET_F(SFUN) \
-\
-FLEXT_CALLSET_(SFUN,float)
-
-//! Declare a set function for an integer attribute
-#define FLEXT_CALLSET_I(SFUN) \
-\
-FLEXT_CALLSET_(SFUN,int)
-
-//! Declare a set function for a boolean attribute
-#define FLEXT_CALLSET_B(SFUN) \
-\
-FLEXT_CALLSET_(SFUN,bool)
-/*
-static bool FLEXT_SET_PRE(FUN)(flext_base *c,int &arg) \
-{ bool b = arg != 0; FLEXT_CAST<thisType *>(c)->FUN(b); return true; }
-*/
-
-//! Declare a set function for an enum attribute
-#define FLEXT_CALLSET_E(SFUN,TP) \
-\
-FLEXT_CALLSET_(SFUN,TP)
-
-//! Declare a set function for a symbol attribute
-#define FLEXT_CALLSET_S(FUN) \
-static bool FLEXT_SET_PRE(FUN)(flext_base *c,const t_symbol *&arg) \
-{ FLEXT_CAST<thisType *>(c)->FUN(arg); return true; }
-
-//! Declare a set function for a variable list attribute
-#define FLEXT_CALLSET_V(FUN) \
-static bool FLEXT_SET_PRE(FUN)(flext_base *c,AtomList *&arg) \
-{ FLEXT_CAST<thisType *>(c)->FUN(*arg); return true; }
-
-//! @} FLEXT_DA_CALLSET
-
-/*! \defgroup FLEXT_DA_CALLGET Definition of attribute get handlers
-    \ingroup FLEXT_D_ATTRIB
-    @{ 
-*/
-
-//! Declare a get function for a float attribute
-#define FLEXT_CALLGET_F(GFUN) \
-\
-FLEXT_CALLGET_(GFUN,float)
-
-//! Declare a get function for an integer attribute
-#define FLEXT_CALLGET_I(GFUN) \
-\
-FLEXT_CALLGET_(GFUN,int)
-
-//! Declare a get function for a boolean attribute
-#define FLEXT_CALLGET_B(GFUN) \
-\
-FLEXT_CALLGET_(GFUN,bool)
-/*
-static bool FLEXT_GET_PRE(FUN)(flext_base *c,int &arg) \
-{ bool b; FLEXT_CAST<thisType *>(c)->FUN(b); arg = b?1:0; return true; }
-*/
-
-//! Declare a get function for an enum attribute
-#define FLEXT_CALLGET_E(GFUN,TP) \
-\
-FLEXT_CALLGET_(GFUN,TP)
-
-//! Declare a get function for a symbol attribute
-#define FLEXT_CALLGET_S(FUN) \
-static bool FLEXT_GET_PRE(FUN)(flext_base *c,const t_symbol *&arg) \
-{ FLEXT_CAST<thisType *>(c)->FUN(arg); return true; }
-
-//! Declare a get function for a variable list attribute
-#define FLEXT_CALLGET_V(FUN) \
-static bool FLEXT_GET_PRE(FUN)(flext_base *c,AtomList *&arg) \
-{ FLEXT_CAST<thisType *>(c)->FUN(*arg); return true; }
-
-//! @} FLEXT_DA_CALLGET
-
-
-/*! \defgroup FLEXT_DA_CALLVAR Definition of attribute transfer handlers (both get and set)
-    \ingroup FLEXT_D_ATTRIB
-    @{ 
-*/
-
-//! Declare both get and set functions for a float attribute
-#define FLEXT_CALLVAR_F(GFUN,SFUN) \
-\
-FLEXT_CALLGET_F(GFUN) FLEXT_CALLSET_F(SFUN) 
-
-//! Declare both get and set functions for an integer attribute
-#define FLEXT_CALLVAR_I(GFUN,SFUN) \
-\
-FLEXT_CALLGET_I(GFUN) FLEXT_CALLSET_I(SFUN) 
-
-//! Declare both get and set functions for a symbol attribute
-#define FLEXT_CALLVAR_S(GFUN,SFUN) \
-\
-FLEXT_CALLGET_S(GFUN) FLEXT_CALLSET_S(SFUN) 
-
-//! Declare both get and set functions for a boolean attribute
-#define FLEXT_CALLVAR_B(GFUN,SFUN) \
-\
-FLEXT_CALLGET_B(GFUN) FLEXT_CALLSET_B(SFUN) 
-
-//! Declare both get and set functions for an enum attribute
-#define FLEXT_CALLVAR_E(GFUN,SFUN,TP) \
-\
-FLEXT_CALLGET_E(GFUN,TP) FLEXT_CALLSET_E(SFUN,TP) 
-
-//! Declare both get and set functions for a variable list attribute
-#define FLEXT_CALLVAR_V(GFUN,SFUN) \
-\
-FLEXT_CALLGET_V(GFUN) FLEXT_CALLSET_V(SFUN) 
-
-//! @} FLEXT_DA_CALLVAR
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attrvar.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attrvar.h
deleted file mode 100755
index aa2fb412517254ec2fa15ec785f09bac508d9b30..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_attrvar.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_attrvar.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_ATTRVAR_H
-#define __FLEXT_DEFS_ATTRVAR_H
-
-
-/*! \brief Declare an implicit attribute set function
-    \internal
-*/
-#define FLEXT_ATTRSET_(VAR,TP) \
-static bool FLEXT_SET_PRE(VAR)(flext_base *c,TP &arg) \
-{ FLEXT_CAST<thisType *>(c)->VAR = arg; return true; }
-
-/*! \brief Declare an implicit attribute get function
-    \internal
-*/
-#define FLEXT_ATTRGET_(VAR,TP) \
-static bool FLEXT_GET_PRE(VAR)(flext_base *c,TP &arg) \
-{ arg = (TP)FLEXT_CAST<thisType *>(c)->VAR; return true; }
-
-
-
-/*! \defgroup FLEXT_DA_ATTRSET Definition of implicit attribute set handlers
-    \ingroup FLEXT_D_ATTRIB
-    @{ 
-*/
-
-//! Declare an implicit set function for a float attribute
-#define FLEXT_ATTRSET_F(VAR) \
-\
-FLEXT_ATTRSET_(VAR,float)
-
-//! Declare an implicit set function for an integer attribute
-#define FLEXT_ATTRSET_I(VAR) \
-\
-FLEXT_ATTRSET_(VAR,int)
-
-//! Declare an implicit set function for a symbol attribute
-#define FLEXT_ATTRSET_S(VAR) \
-\
-FLEXT_ATTRSET_(VAR,const t_symbol *)
-
-//! Declare an implicit set function for a boolean attribute
-#define FLEXT_ATTRSET_B(VAR) \
-\
-FLEXT_ATTRSET_(VAR,bool)
-/*
-static bool FLEXT_SET_PRE(VAR)(flext_base *c,int &arg) \
-{ FLEXT_CAST<thisType *>(c)->VAR = arg != 0; return true; }
-*/
-
-//! Declare an implicit set function for an enum attribute
-#define FLEXT_ATTRSET_E(VAR,TP) \
-\
-FLEXT_ATTRSET_(VAR,TP)
-
-//! Declare an implicit set function for a variable list attribute
-#define FLEXT_ATTRSET_V(VAR) \
-static bool FLEXT_SET_PRE(VAR)(flext_base *c,AtomList *&arg) \
-{ FLEXT_CAST<thisType *>(c)->VAR = *arg; return true; }
-
-//! @} FLEXT_DA_ATTRSET
-
-/*! \defgroup FLEXT_DA_ATTRGET Definition of implicit attribute get handlers
-    \ingroup FLEXT_D_ATTRIB
-    @{ 
-*/
-
-//! Declare an implicit get function for a float attribute
-#define FLEXT_ATTRGET_F(VAR) \
-\
-FLEXT_ATTRGET_(VAR,float)
-
-//! Declare an implicit get function for an integer attribute
-#define FLEXT_ATTRGET_I(VAR) \
-\
-FLEXT_ATTRGET_(VAR,int)
-
-//! Declare an implicit get function for a symbol attribute
-#define FLEXT_ATTRGET_S(VAR) \
-\
-FLEXT_ATTRGET_(VAR,const t_symbol *)
-
-//! Declare an implicit get function for a boolean attribute
-#define FLEXT_ATTRGET_B(VAR) \
-\
-FLEXT_ATTRGET_(VAR,bool)
-/*
-static bool FLEXT_GET_PRE(VAR)(flext_base *c,int &arg) \
-{ arg = FLEXT_CAST<thisType *>(c)->VAR?1:0; return true; }
-*/
-
-//! Declare an implicit get function for an enum attribute
-#define FLEXT_ATTRGET_E(VAR,TP) \
-\
-FLEXT_ATTRGET_(VAR,TP)
-
-//! Declare an implicit get function for a variable list attribute
-#define FLEXT_ATTRGET_V(VAR) \
-static bool FLEXT_GET_PRE(VAR)(flext_base *c,AtomList *&arg) \
-{ *arg = FLEXT_CAST<thisType *>(c)->VAR; return true; }
-
-//! @} FLEXT_DA_ATTRGET
-
-
-/*! \defgroup FLEXT_DA_ATTRVAR Definition of implicit attribute transfer handlers (both get and set)
-    \ingroup FLEXT_D_ATTRIB
-    @{ 
-*/
-
-//! Declare both implicit get and set functions for a float attribute
-#define FLEXT_ATTRVAR_F(VAR) \
-\
-FLEXT_ATTRGET_F(VAR) FLEXT_ATTRSET_F(VAR) 
-
-//! Declare both implicit get and set functions for an integer attribute
-#define FLEXT_ATTRVAR_I(VAR) \
-\
-FLEXT_ATTRGET_I(VAR) FLEXT_ATTRSET_I(VAR) 
-
-//! Declare both implicit get and set functions for a symbol attribute
-#define FLEXT_ATTRVAR_S(VAR) \
-\
-FLEXT_ATTRGET_S(VAR) FLEXT_ATTRSET_S(VAR) 
-
-//! Declare both implicit get and set functions for a boolean attribute
-#define FLEXT_ATTRVAR_B(VAR) \
-\
-FLEXT_ATTRGET_B(VAR) FLEXT_ATTRSET_B(VAR) 
-
-//! Declare both implicit get and set functions for an enum attribute
-#define FLEXT_ATTRVAR_E(VAR,TP) \
-\
-FLEXT_ATTRGET_(VAR,TP) FLEXT_ATTRSET_(VAR,TP) 
-
-//! Declare both implicit get and set functions for a variable list attribute
-#define FLEXT_ATTRVAR_V(VAR) \
-\
-FLEXT_ATTRGET_V(VAR) FLEXT_ATTRSET_V(VAR) 
-
-
-//! @} FLEXT_DA_ATTRVAR
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_hdr.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_hdr.h
deleted file mode 100755
index 78bd8e659a686fb4dc0588325fd30de71855054b..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_hdr.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_hdr.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_HEADER_H
-#define __FLEXT_DEFS_HEADER_H
-
-
-/*!	\defgroup FLEXT_D_HEADER Flext class header
-	\note One (and only one!) of these definitions is compulsory for the class declaration. 
-	\note It has to be placed somewhere in the class definition (not necessarily in a public section).
-
-	@{ 
-*/
-
-/*! \brief Plain flext class header
-	\param NEW_CLASS name of the current C++ class
-	\param PARENT_CLASS name of the base C++ class (e.g. flext_base or flext_dsp)
-*/
-#define FLEXT_HEADER(NEW_CLASS,PARENT_CLASS) \
-\
-FLEXT_REALHDR(NEW_CLASS, PARENT_CLASS)    	    	
-
-#define FLEXT_HEADER_T(NEW_CLASS,PARENT_CLASS) \
-\
-FLEXT_REALHDR_T(NEW_CLASS, PARENT_CLASS)    	    	
-
-/*! \brief Flext class header with setup function
-	\param NEW_CLASS name of the current C++ class
-	\param PARENT_CLASS name of the base C++ class (e.g. flext_base or flext_dsp)
-	\param SETUPFUN setup function, of type "void (*setupfn)(t_class *)"
-
-	The setup function is called after class creation. It corresponds to the
-	original PD "[object]_setup" function, apart from the
-	fact that all necessary class initializations have already been taken care of by flext. 
-	The setup function can e.g. be used for a message to the console upon first creation of an object.
-*/
-#define FLEXT_HEADER_S(NEW_CLASS, PARENT_CLASS, SETUPFUN)\
-\
-FLEXT_REALHDR_S(NEW_CLASS, PARENT_CLASS, SETUPFUN)    	    	
-
-#define FLEXT_HEADER_TS(NEW_CLASS, PARENT_CLASS, SETUPFUN)\
-\
-FLEXT_REALHDR_TS(NEW_CLASS, PARENT_CLASS, SETUPFUN)    	    	
-
-
-//! @} FLEXT_D_HEADER
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methadd.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methadd.h
deleted file mode 100755
index 0dff4dfb02ddc981a2adcf04c4f0a13d8a181177..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methadd.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_methadd.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_METHADD_H
-#define __FLEXT_DEFS_METHADD_H
-
-
-/*! \defgroup FLEXT_D_CADDMETHOD Add flext methods within class scope
-    \ingroup FLEXT_D_METHOD
-    \note These can only be used at class construction time
-    @{ 
-*/
-
-/*! Add a method handler for bang 
-    \note This is for compatibility - better use the method below
-*/
-#define FLEXT_CADDBANG(CL,IX,M_FUN) \
-\
-AddMethod(CL,IX,FLEXT_CALL_PRE(M_FUN))   
-
-//! Add a handler for a method with either no, list or anything arguments
-#define FLEXT_CADDMETHOD(CL,IX,M_FUN) \
-\
-AddMethod(CL,IX,FLEXT_CALL_PRE(M_FUN))  
-
-//! Add a a handler for a method with implicit arguments
-#define FLEXT_CADDMETHOD_(CL,IX,M_TAG,M_FUN) \
-\
-AddMethod(CL,IX,flext::MakeSymbol(M_TAG),FLEXT_CALL_PRE(M_FUN))    
-
-//! Add a handler for a method with 1 enum type argument
-#define FLEXT_CADDMETHOD_E(CL,IX,M_TAG,M_FUN) \
-\
-AddMethod(ClMeths(CL),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),a_int,a_null)
-
-//! Add a handler for a method with 1 argument
-#define FLEXT_CADDMETHOD_1(CL,IX,M_TAG,M_FUN,TP1) \
-\
-AddMethod(ClMeths(CL),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),a_null)   
-
-//! Add a handler for a method with 2 arguments
-#define FLEXT_CADDMETHOD_2(CL,IX,M_TAG,M_FUN,TP1,TP2) \
-\
-AddMethod(ClMeths(CL),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),a_null)
-
-//! Add a handler for a method with 3 arguments
-#define FLEXT_CADDMETHOD_3(CL,IX,M_TAG,M_FUN,TP1,TP2,TP3) \
-\
-AddMethod(ClMeths(CL),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),FLEXTARG(TP3),a_null)
-
-//! Add a handler for a method with 4 arguments
-#define FLEXT_CADDMETHOD_4(CL,IX,M_TAG,M_FUN,TP1,TP2,TP3,TP4) \
-\
-AddMethod(ClMeths(CL),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),FLEXTARG(TP3),FLEXTARG(TP4),a_null)
-
-//! Add a handler for a method with 5 arguments
-#define FLEXT_CADDMETHOD_5(CL,IX,M_TAG,M_FUN,TP1,TP2,TP3,TP4,TP5) \
-\
-AddMethod(ClMeths(CL),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),FLEXTARG(TP3),FLEXTARG(TP4),FLEXTARG(TP5),a_null)
-
-
-//  Shortcuts
-
-//! Add a handler for a method with a boolean argument
-#define FLEXT_CADDMETHOD_B(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_1(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,bool)
-
-//! Add a handler for a method with 1 float argument
-#define FLEXT_CADDMETHOD_F(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_1(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,float)
-
-//! Add a handler for a method with 2 float arguments
-#define FLEXT_CADDMETHOD_FF(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_2(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,float,float)
-
-//! Add a handler for a method with 3 float arguments
-#define FLEXT_CADDMETHOD_FFF(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_3(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,float,float,float)
-
-//! Add a handler for a method with 1 integer argument
-#define FLEXT_CADDMETHOD_I(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_1(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,int)
-
-//! Add a handler for a method with 2 integer arguments
-#define FLEXT_CADDMETHOD_II(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_2(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,int,int)
-
-//! Add a handler for a method with 3 integer arguments
-#define FLEXT_CADDMETHOD_III(CL,IX,M_TAG,M_FUN) \
-\
-FLEXT_CADDMETHOD_3(CL,IX,flext::MakeSymbol(M_TAG),M_FUN,int,int,int)
-
-//! @} FLEXT_D_CADDMETHOD
-
-
-/*! \defgroup FLEXT_D_ADDMETHOD Add flext methods
-    \ingroup FLEXT_D_METHOD
-    \note These can only be used at object construction time 
-    \note (in constructor or in Init() function before call to parent's Init())
-    @{ 
-*/
-
-//! Set timer callback
-#define FLEXT_ADDTIMER(TMR,M_FUN) \
-\
-TMR.SetCallback(*this,FLEXT_CALL_PRE(M_FUN))
-
-//! Enable list element distribution over inlets (if no better handler found)
-#define FLEXT_ADDDIST() \
-\
-SetDist(true)   
-
-//! Add a method handler for bang 
-#define FLEXT_ADDBANG(IX,M_FUN) \
-\
-AddMethod(IX,"bang",FLEXT_CALL_PRE(M_FUN))  
-
-//! Add a handler for a method with either no, list or anything arguments
-#define FLEXT_ADDMETHOD(IX,M_FUN) \
-\
-AddMethod(IX,FLEXT_CALL_PRE(M_FUN)) 
-
-/*! \brief Add a handler for a method with a (variable argument) list
-    \deprecated This definition obscures that _ indicates the usage of a message tag - use FLEXT_ADDMETHOD instead
-    \note This is already covered by FLEXT_ADDMETHOD, but here for the sake of clarity
-*/
-#define FLEXT_ADDMETHOD_V(IX,M_FUN) \
-\
-AddMethod(IX,FLEXT_CALL_PRE(M_FUN)) 
-
-/*! \brief Add a handler for a method with an anything argument
-    \deprecated This definition obscures that _ indicates the usage of a message tag - use FLEXT_ADDMETHOD instead
-    \note This is already covered by FLEXT_ADDMETHOD, but here for the sake of clarity
-*/
-#define FLEXT_ADDMETHOD_A(IX,M_FUN) \
-\
-AddMethod(IX,FLEXT_CALL_PRE(M_FUN)) 
-
-//! Add a a handler for a tagged method with implicit arguments
-#define FLEXT_ADDMETHOD_(IX,M_TAG,M_FUN) \
-\
-AddMethod(IX,flext::MakeSymbol(M_TAG),FLEXT_CALL_PRE(M_FUN))   
-
-//! Add a handler for a method with 1 enum type argument
-#define FLEXT_ADDMETHOD_E(IX,M_TAG,M_FUN) \
-\
-AddMethod(ThMeths(),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),a_int,a_null)
-
-//! Add a handler for a method with 1 argument
-#define FLEXT_ADDMETHOD_1(IX,M_TAG,M_FUN,TP1) \
-\
-AddMethod(ThMeths(),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),a_null) 
-
-//! Add a handler for a method with 2 arguments
-#define FLEXT_ADDMETHOD_2(IX,M_TAG,M_FUN,TP1,TP2) \
-\
-AddMethod(ThMeths(),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),a_null)
-
-//! Add a handler for a method with 3 arguments
-#define FLEXT_ADDMETHOD_3(IX,M_TAG,M_FUN,TP1,TP2,TP3) \
-\
-AddMethod(ThMeths(),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),FLEXTARG(TP3),a_null)
-
-//! Add a handler for a method with 4 arguments
-#define FLEXT_ADDMETHOD_4(IX,M_TAG,M_FUN,TP1,TP2,TP3,TP4) \
-\
-AddMethod(ThMeths(),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),FLEXTARG(TP3),FLEXTARG(TP4),a_null)
-
-//! Add a handler for a method with 5 arguments
-#define FLEXT_ADDMETHOD_5(IX,M_TAG,M_FUN,TP1,TP2,TP3,TP4,TP5) \
-\
-AddMethod(ThMeths(),IX,flext::MakeSymbol(M_TAG),(methfun)(FLEXT_CALL_PRE(M_FUN)),FLEXTARG(TP1),FLEXTARG(TP2),FLEXTARG(TP3),FLEXTARG(TP4),FLEXTARG(TP5),a_null)
-
-
-//  Shortcuts
-
-//! Add a handler for a method with a boolean argument
-#define FLEXT_ADDMETHOD_B(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_1(IX,flext::MakeSymbol(M_TAG),M_FUN,bool)
-
-//! Add a handler for a method with 1 float argument
-#define FLEXT_ADDMETHOD_F(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_1(IX,flext::MakeSymbol(M_TAG),M_FUN,float)
-
-//! Add a handler for a method with 2 float arguments
-#define FLEXT_ADDMETHOD_FF(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_2(IX,flext::MakeSymbol(M_TAG),M_FUN,float,float)
-
-//! Add a handler for a method with 3 float arguments
-#define FLEXT_ADDMETHOD_FFF(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_3(IX,flext::MakeSymbol(M_TAG),M_FUN,float,float,float)
-
-//! Add a handler for a method with 1 integer argument
-#define FLEXT_ADDMETHOD_I(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_1(IX,flext::MakeSymbol(M_TAG),M_FUN,int)
-
-//! Add a handler for a method with 2 integer arguments
-#define FLEXT_ADDMETHOD_II(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_2(IX,flext::MakeSymbol(M_TAG),M_FUN,int,int)
-
-//! Add a handler for a method with 3 integer arguments
-#define FLEXT_ADDMETHOD_III(IX,M_TAG,M_FUN) \
-\
-FLEXT_ADDMETHOD_3(IX,flext::MakeSymbol(M_TAG),M_FUN,int,int,int)
-
-
-//! @} FLEXT_D_ADDMETHOD
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methbind.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methbind.h
deleted file mode 100755
index 8f8d48363b36b98b019633da6b6e8be24b7b8428..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methbind.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_methbind.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_METHBIND_H
-#define __FLEXT_DEFS_METHBIND_H
-
-
-/*!	\defgroup FLEXT_D_BINDMETHOD Bind flext methods to symbols
-	@{ 
-*/
-
-/*! \brief Bind a handler for a method with an anything argument to a symbol 
-*/
-#define FLEXT_BINDMETHOD(SYM,M_FUN,DATA) \
-\
-BindMethod(SYM,FLEXT_CALL_PRE(M_FUN),DATA)	
-
-/*! \brief Unbind any handler for a method from a symbol 
-    \note Memory associated to the DATA parameter of FLEXT_BINDMETHOD will *not* be freed here.
-*/
-#define FLEXT_UNBINDMETHOD(SYM) \
-\
-UnbindMethod(SYM)
-
-/*! \brief Unbind any handler for a method from a symbol and return user data pointer by DATA
-    \note Memory associated to the DATA parameter of FLEXT_BINDMETHOD will *not* be freed here.
-*/
-#define FLEXT_UNBINDMETHOD_X(SYM,DATA) \
-\
-UnbindMethod(SYM,&DATA)
-
-
-//! @} FLEXT_D_BINDMETHOD
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methcall.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methcall.h
deleted file mode 100755
index 2f24fb9d35c653f61161b69d7ee36f2b621582a1..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methcall.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_methbind.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_METHCALL_H
-#define __FLEXT_DEFS_METHCALL_H
-
-
-/*! \defgroup FLEXT_D_CALLMETHOD Call flext methods manually
-    \ingroup FLEXT_D_METHOD
-    @{ 
-*/
-
-//! Call a (already defined) method with no arguments
-#define FLEXT_CALLMETHOD(M_FUN) \
-\
-FLEXT_CALL_PRE(M_FUN)(this)
-
-//! Call a (already defined) method with variable list arguments
-#define FLEXT_CALLMETHOD_V(M_FUN,ARGC,ARGV) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARGC,(t_atom *)(ARGV))
-
-//! Call a (already defined) method with anything arguments
-#define FLEXT_CALLMETHOD_A(M_FUN,HDR,ARGC,ARGV) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,(t_symbol *)(HDR),ARGC,(t_atom *)(ARGV))
-
-//! Call a (already defined) method with a data package (void *)
-#define FLEXT_CALLMETHOD_X(M_FUN,DATA) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,DATA)
-
-//! Call a (already defined) method with 1 enum type argument
-#define FLEXT_CALLMETHOD_E(M_FUN,ARG) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARG)
-
-//! Call a (already defined) method with 1 argument
-#define FLEXT_CALLMETHOD_1(M_FUN,ARG) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARG)
-
-//! Call a (already defined) method with 2 arguments
-#define FLEXT_CALLMETHOD_2(M_FUN,ARG1,ARG2) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARG1,ARG2)
-
-//! Call a (already defined) method with 3 arguments
-#define FLEXT_CALLMETHOD_3(M_FUN,ARG1,ARG2,ARG3) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARG1,ARG2,ARG3)
-
-//! Call a (already defined) method with 4 arguments
-#define FLEXT_CALLMETHOD_4(M_FUN,ARG1,ARG2,ARG3,ARG4) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARG1,ARG2,ARG3,ARG4)
-
-//! Call a (already defined) method with 5 arguments
-#define FLEXT_CALLMETHOD_5(M_FUN,ARG1,ARG2,ARG3,ARG4,ARG5) \
-\
-FLEXT_CALL_PRE(M_FUN)(this,ARG1,ARG2,ARG3,ARG4,ARG5)
-
-//! @} FLEXT_D_CALLMETHOD
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methcb.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methcb.h
deleted file mode 100755
index 79aa7c1a5819b5418d32a8fc1cc5b5fb8028e39e..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_methcb.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_methcb.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_METHCB_H
-#define __FLEXT_DEFS_METHCB_H
-
-
-/*! \defgroup FLEXT_D_CALLBACK Declare callbacks for class methods
-    \ingroup FLEXT_D_METHOD
-    @{ 
-*/
-
-//! Set up a method callback with no arguments
-#define FLEXT_CALLBACK(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(); return true; }
-
-//! Set up a method callback for an anything argument
-#define FLEXT_CALLBACK_A(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,t_symbol *s,int argc,t_atom *argv) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(s,argc,argv); return true; }
-
-//! Set up a method callback for a variable argument list
-#define FLEXT_CALLBACK_V(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,int argc,t_atom *argv) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(argc,argv); return true; }
-
-//! Set up a method callback for a data package (void *) argument
-#define FLEXT_CALLBACK_X(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,void *data) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(data); return true; }
-
-//! Set up a method callback for an anything argument and a data package (e.g. for symbol-bound methods).
-#define FLEXT_CALLBACK_AX(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,t_symbol *s,int argc,t_atom *argv,void *data) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(s,argc,argv,data); return true; }
-
-//! Set up a timer callback
-#define FLEXT_CALLBACK_T(M_FUN) \
-\
-FLEXT_CALLBACK_X(M_FUN)
-
-//! Set up a method callback for a boolean argument
-#define FLEXT_CALLBACK_B(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,int &arg1) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(arg1 != 0); return true; }
-
-//! Set up a method callback for 1 argument
-#define FLEXT_CALLBACK_1(M_FUN,TP1) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(arg1); return true; }
-
-//! Set up a method callback for 2 arguments
-#define FLEXT_CALLBACK_2(M_FUN,TP1,TP2) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(arg1,arg2); return true; }
-
-//! Set up a method callback for 3 arguments
-#define FLEXT_CALLBACK_3(M_FUN,TP1,TP2,TP3) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(arg1,arg2,arg3); return true; }
-
-//! Set up a method callback for 4 arguments
-#define FLEXT_CALLBACK_4(M_FUN,TP1,TP2,TP3,TP4) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3,TP4 &arg4) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(arg1,arg2,arg3,arg4); return true; }
-
-//! Set up a method callback for 5 arguments
-#define FLEXT_CALLBACK_5(M_FUN,TP1,TP2,TP3,TP4,TP5) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3,TP4 &arg4,TP5 &arg5) \
-{ FLEXT_CAST<thisType *>(c)->M_FUN(arg1,arg2,arg3,arg4,arg5); return true; }
-
-
-//  Shortcuts
-
-//! Set up a method callback for 1 float argument
-#define FLEXT_CALLBACK_F(M_FUN) \
-\
-FLEXT_CALLBACK_1(M_FUN,float)
-
-//! Set up a method callback for 2 float arguments
-#define FLEXT_CALLBACK_FF(M_FUN) \
-\
-FLEXT_CALLBACK_2(M_FUN,float,float)
-
-//! Set up a method callback for 3 float arguments
-#define FLEXT_CALLBACK_FFF(M_FUN) \
-\
-FLEXT_CALLBACK_3(M_FUN,float,float,float)
-
-//! Set up a method callback for 1 integer argument
-#define FLEXT_CALLBACK_I(M_FUN) \
-\
-FLEXT_CALLBACK_1(M_FUN,int)
-
-//! Set up a method callback for 2 integer arguments
-#define FLEXT_CALLBACK_II(M_FUN) \
-\
-FLEXT_CALLBACK_2(M_FUN,int,int)
-
-//! Set up a method callback for 3 integer arguments
-#define FLEXT_CALLBACK_III(M_FUN) \
-\
-FLEXT_CALLBACK_3(M_FUN,int,int,int)
-
-//! Set up a method callback for 1 symbol argument
-#define FLEXT_CALLBACK_S(M_FUN) \
-\
-FLEXT_CALLBACK_1(M_FUN,t_symptr)
-
-
-//! \deprecated
-#define FLEXT_CALLBACK_G FLEXT_CALLBACK_V
-
-//! @} FLEXT_D_CALLBACK
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_meththr.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_meththr.h
deleted file mode 100755
index 4d6a607679b97ee218c2aeea242a2090630366c4..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_meththr.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_meththr.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_METHTHR_H
-#define __FLEXT_DEFS_METHTHR_H
-
-
-#ifdef FLEXT_THREADS
-
-
-/*!	\defgroup FLEXT_D_THREAD Declare threaded method callbacks
-	@{ 
-*/
-
-//! Set up a threaded method callback with no arguments
-#define FLEXT_THREAD(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c) {  \
-	thr_params *p = new thr_params; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(); \
-		th->PopThread(); \
-	} \
-} 
-
-//! Set up a threaded method callback for an anything argument
-#define FLEXT_THREAD_A(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,t_symbol *s,int argc,t_atom *argv) {  \
-	thr_params *p = new thr_params; p->set_any(s,argc,argv); \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	AtomAnything *args = p->var[0]._any; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(args->Header(),args->Count(),args->Atoms()); \
-		th->PopThread(); \
-	} \
-	delete args; \
-} 
-
-//! Set up a threaded method callback for a variable argument list
-#define FLEXT_THREAD_V(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,int argc,t_atom *argv) {  \
-	thr_params *p = new thr_params; p->set_list(argc,argv); \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	AtomList *args = p->var[0]._list; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(args->Count(),args->Atoms()); \
-		th->PopThread(); \
-	} \
-	delete args; \
-} 
-
-/*! \brief Set up a threaded method callback for an arbitrary data struct.
-	\note Data is pure... no destructor is called upon delete
-*/
-#define FLEXT_THREAD_X(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,void *data) {  \
-	thr_params *p = new thr_params; p->var[0]._ext = data; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	void *data = p->var[0]._ext; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(data); \
-		th->PopThread(); \
-	} \
-	/* delete (char *)data; */ \
-} 
-
-//! Set up a threaded method callback for a boolean argument
-#define FLEXT_THREAD_B(M_FUN) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,int &arg1) {  \
-	thr_params *p = new thr_params; p->var[0]._bool = arg1 != 0; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	bool b = p->var[0]._bool; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(b); \
-		th->PopThread(); \
-	} \
-} 
-
-//! Set up a threaded method callback for 1 argument
-#define FLEXT_THREAD_1(M_FUN,TP1) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1) {  \
-	thr_params *p = new thr_params(1); \
-	p->var[0]._ ## TP1 = arg1; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	const TP1 v1 = p->var[0]._ ## TP1; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(v1); \
-		th->PopThread(); \
-	} \
-} 
-
-//! Set up a threaded method callback for 2 arguments
-#define FLEXT_THREAD_2(M_FUN,TP1,TP2) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2) {  \
-	thr_params *p = new thr_params(2); \
-	p->var[0]._ ## TP1 = arg1; \
-	p->var[1]._ ## TP2 = arg2; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	const TP1 v1 = p->var[0]._ ## TP1; \
-	const TP1 v2 = p->var[1]._ ## TP2; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(v1,v2); \
-		th->PopThread(); \
-	} \
-} 
-
-//! Set up a threaded method callback for 3 arguments
-#define FLEXT_THREAD_3(M_FUN,TP1,TP2,TP3) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3) {  \
-	thr_params *p = new thr_params(3); \
-	p->var[0]._ ## TP1 = arg1; \
-	p->var[1]._ ## TP2 = arg2; \
-	p->var[2]._ ## TP3 = arg3; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	const TP1 v1 = p->var[0]._ ## TP1; \
-	const TP2 v2 = p->var[1]._ ## TP2; \
-	const TP3 v3 = p->var[2]._ ## TP3; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(v1,v2,v3); \
-		th->PopThread(); \
-	} \
-} 
-
-//! Set up a threaded method callback for 4 arguments
-#define FLEXT_THREAD_4(M_FUN,TP1,TP2,TP3,TP4) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3,TP4 &arg4) {  \
-	thr_params *p = new thr_params(4); \
-	p->var[0]._ ## TP1 = arg1; \
-	p->var[1]._ ## TP2 = arg2; \
-	p->var[2]._ ## TP3 = arg3; \
-	p->var[3]._ ## TP4 = arg4; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	const TP1 v1 = p->var[0]._ ## TP1; \
-	const TP2 v2 = p->var[1]._ ## TP2; \
-	const TP3 v3 = p->var[2]._ ## TP3; \
-	const TP4 v4 = p->var[3]._ ## TP4; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(v1,v2,v3,v4); \
-		th->PopThread(); \
-	} \
-} 
-
-//! Set up a threaded method callback for 5 arguments
-#define FLEXT_THREAD_5(M_FUN,TP1,TP2,TP3,TP4,TP5) \
-static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3,TP4 &arg4,TP5 &arg5) {  \
-	thr_params *p = new thr_params(5); \
-	p->var[0]._ ## TP1 = arg1; \
-	p->var[1]._ ## TP2 = arg2; \
-	p->var[2]._ ## TP3 = arg3; \
-	p->var[3]._ ## TP4 = arg4; \
-	p->var[4]._ ## TP5 = arg5; \
-	return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
-} \
-static void FLEXT_THR_PRE(M_FUN)(thr_params *p) {  \
-	thisType *th = FLEXT_CAST<thisType *>(p->cl); \
-	bool ok = th->PushThread(); \
-	const TP1 v1 = p->var[0]._ ## TP1; \
-	const TP2 v2 = p->var[1]._ ## TP2; \
-	const TP3 v3 = p->var[2]._ ## TP3; \
-	const TP4 v4 = p->var[3]._ ## TP4; \
-	const TP5 v5 = p->var[4]._ ## TP5; \
-	delete p; \
-	if(ok) { \
-		th->M_FUN(v1,v2,v3,v4,v5); \
-		th->PopThread(); \
-	} \
-} 
-
-
-//!	Shortcuts
-
-//! Set up a threaded method callback for 1 float argument
-#define FLEXT_THREAD_F(M_FUN) \
-\
-FLEXT_THREAD_1(M_FUN,float)
-
-//! Set up a threaded method callback for 2 float arguments
-#define FLEXT_THREAD_FF(M_FUN) \
-\
-FLEXT_THREAD_2(M_FUN,float,float)
-
-//! Set up a threaded method callback for 3 float arguments
-#define FLEXT_THREAD_FFF(M_FUN) \
-\
-FLEXT_THREAD_3(M_FUN,float,float,float)
-
-//! Set up a threaded method callback for 1 integer argument
-#define FLEXT_THREAD_I(M_FUN) \
-\
-FLEXT_THREAD_1(M_FUN,int)
-
-//! Set up a threaded method callback for 2 integer arguments
-#define FLEXT_THREAD_II(M_FUN) \
-\
-FLEXT_THREAD_2(M_FUN,int,int)
-
-//! Set up a threaded method callback for 3 integer arguments
-#define FLEXT_THREAD_III(M_FUN) \
-\
-FLEXT_THREAD_3(M_FUN,int,int,int)
-
-//! Set up a threaded method callback for 1 symbol argument
-#define FLEXT_THREAD_S(M_FUN) \
-\
-FLEXT_THREAD_1(M_FUN,t_symptr)
-
-// deprecated
-#define FLEXT_THREAD_G FLEXT_THREAD_V
-
-//! @} FLEXT_D_THREAD
-
-
-#endif // FLEXT_THREADS
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_setup.h b/externals/grill/trunk/flext/libbuild/include/flext/fldefs_setup.h
deleted file mode 100755
index 45cc6ac7d8f127e0cd3812de345a78aefdb08426..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldefs_setup.h
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldefs_setup.h
-    \brief This file contains all #defines for actual usage
-    
-*/
-
-#ifndef __FLEXT_DEFS_SETUP_H
-#define __FLEXT_DEFS_SETUP_H
-
-// ====================================================================================
-
-/*! \defgroup FLEXT_D_INSTANCE Class instantiation
-    \note For stand-alone externals (not part of a library) the name of your class 
-    \note is of importance! It must be the same as the external (excluded an eventual ~ (tilde))
-
-    There are additional parameters that can be included in the NAME field of FLEXT_NEW etc.:
-
-    - There may be additional names (aliases) appened, separated by spaces
-    - There may be a help path prepended, separated by a colon
-    - This help path doesn't work for Max/MSP. There you'll have to use a object mapping file (Max/MSP version >= 4.2)
-
-    @{
-*/
-
-
-/*! \defgroup FLEXT_D_NEW Stand-alone class instantiation
-    Makes an actual instance of a stand-alone class.
-*/
-
-/*! \defgroup FLEXT_D_NEW_DSP Dsp class instantiation
-    Makes an actual instance of a dsp (aka "tilde") class (with signal processing).
-*/
-
-/*! \defgroup FLEXT_D_LIB Library class instantiation
-    Makes an actual instance of a class which is part of an object library (and not stand-alone).
-*/
-
-/*! \defgroup FLEXT_D_LIB_DSP Dsp library class instantiation
-    Makes an actual instance of a dsp (aka "tilde") class with signal processing
-    which is part of an object library (and not stand-alone).
-*/
-
-// NO ARGUMENTS
-// ----------------------------------------
-
-/*! \brief Implementation of a flext class with no arguments
-    \ingroup FLEXT_D_NEW
-    \param NAME the object's actual name(s) as a string (like "*", "trigger", "noise~", etc.)
-    \param NEW_CLASS the object's C++ class name 
-*/
-#define FLEXT_NEW(NAME,NEW_CLASS)       \
-\
-REAL_NEW(NAME,NEW_CLASS,0,0,0)
-
-/*! \brief Implementation of a flext dsp class with no arguments
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP(NAME,NEW_CLASS)   \
-\
-REAL_NEW(NAME,NEW_CLASS,1,0,0)
-
-/*! \brief Implementation of a flext dsp class with no arguments and no dsp inlet
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP0(NAME,NEW_CLASS)   \
-\
-REAL_NEW(NAME,NEW_CLASS,1,1,0)
-
-/*! \brief Implementation of a flext class (part of a library) with no arguments
-    \ingroup FLEXT_D_LIB
-*/
-#define FLEXT_LIB(NAME,NEW_CLASS) \
-\
-REAL_NEW(NAME,NEW_CLASS,0,0,1) 
-
-/*! \brief Implementation of a flext dsp class (part of a library) with no arguments
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP(NAME,NEW_CLASS)   \
-\
-REAL_NEW(NAME,NEW_CLASS,1,0,1) 
-
-/*! \brief Implementation of a flext dsp class (part of a library) with no arguments and no dsp inlet
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP0(NAME,NEW_CLASS)   \
-\
-REAL_NEW(NAME,NEW_CLASS,1,1,1) 
-
-
-// VARIABLE ARGUMENT LIST
-// ----------------------------------------
-
-/*! \brief Implementation of a flext class with a variable argument list
-    \ingroup FLEXT_D_NEW
-*/
-#define FLEXT_NEW_V(NAME,NEW_CLASS)         \
-\
-REAL_NEW_V(NAME,NEW_CLASS,0,0,0)
-
-/*! \brief Implementation of a flext dsp class with a variable argument list
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP_V(NAME,NEW_CLASS) \
-\
-REAL_NEW_V(NAME,NEW_CLASS,1,0,0)
-
-/*! \brief Implementation of a flext dsp class with a variable argument list and no dsp inlet
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP0_V(NAME,NEW_CLASS) \
-\
-REAL_NEW_V(NAME,NEW_CLASS,1,1,0)
-
-/*! \brief Implementation of a flext class (part of a library) with a variable argument list
-    \ingroup FLEXT_D_LIB
-*/
-#define FLEXT_LIB_V(NAME,NEW_CLASS)         \
-\
-REAL_NEW_V(NAME,NEW_CLASS, 0,0,1) 
-
-/*! \brief Implementation of a flext dsp class (part of a library) with a variable argument list
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP_V(NAME,NEW_CLASS) \
-\
-REAL_NEW_V(NAME,NEW_CLASS, 1,0,1) 
-
-/*! \brief Implementation of a flext dsp class (part of a library) with a variable argument list and no dsp inlet
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP0_V(NAME,NEW_CLASS) \
-\
-REAL_NEW_V(NAME,NEW_CLASS, 1,1,1) 
-
-
-// ONE ARGUMENT
-// ----------------------------------------
-
-/*! \brief Implementation of a flext class with one argument
-    \ingroup FLEXT_D_NEW
-*/
-#define FLEXT_NEW_1(NAME,NEW_CLASS, TYPE)       \
-\
-REAL_NEW_1(NAME,NEW_CLASS, 0,0,0, TYPE)
-
-/*! \brief Implementation of a flext dsp class with one argument
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP_1(NAME,NEW_CLASS, TYPE)   \
-\
-REAL_NEW_1(NAME,NEW_CLASS, 1,0,0, TYPE)
-
-/*! \brief Implementation of a flext dsp class with one argument and no dsp inlet
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP0_1(NAME,NEW_CLASS, TYPE)   \
-\
-REAL_NEW_1(NAME,NEW_CLASS, 1,1,0, TYPE)
-
-/*! \brief Implementation of a flext class (part of a library) with one argument
-    \ingroup FLEXT_D_LIB
-*/
-#define FLEXT_LIB_1(NAME,NEW_CLASS, TYPE) \
-\
-REAL_NEW_1(NAME,NEW_CLASS, 0,0,1, TYPE)
-
-/*! \brief Implementation of a flext dsp class (part of a library) with one argument
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP_1(NAME,NEW_CLASS, TYPE)   \
-\
-REAL_NEW_1(NAME,NEW_CLASS, 1,0,1, TYPE)
-
-/*! \brief Implementation of a flext dsp class (part of a library) with one argument and no dsp inlet
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP0_1(NAME,NEW_CLASS, TYPE)   \
-\
-REAL_NEW_1(NAME,NEW_CLASS, 1,1,1, TYPE)
-
-
-// TWO ARGUMENTS
-// ----------------------------------------
-
-/*! \brief Implementation of a flext class with 2 arguments
-    \ingroup FLEXT_D_NEW
-*/
-#define FLEXT_NEW_2(NAME,NEW_CLASS, TYPE1, TYPE2)           \
-\
-REAL_NEW_2(NAME,NEW_CLASS, 0,0,0, TYPE1, TYPE2)
-
-/*! \brief Implementation of a flext dsp class with 2 arguments
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP_2(NAME,NEW_CLASS, TYPE1, TYPE2)   \
-\
-REAL_NEW_2(NAME,NEW_CLASS, 1,0,0, TYPE1, TYPE2)
-
-/*! \brief Implementation of a flext dsp class with 2 arguments and no dsp inlet
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP0_2(NAME,NEW_CLASS, TYPE1, TYPE2)   \
-\
-REAL_NEW_2(NAME,NEW_CLASS, 1,1,0, TYPE1, TYPE2)
-
-/*! \brief Implementation of a flext class (part of a library) with 2 arguments
-    \ingroup FLEXT_D_LIB
-*/
-#define FLEXT_LIB_2(NAME,NEW_CLASS, TYPE1, TYPE2)       \
-\
-REAL_NEW_2(NAME,NEW_CLASS, 0,0,1, TYPE1, TYPE2)
-
-/*! \brief Implementation of a flext dsp class (part of a library) with 2 arguments
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP_2(NAME,NEW_CLASS, TYPE1, TYPE2)   \
-\
-REAL_NEW_2(NAME,NEW_CLASS, 1,0,1, TYPE1, TYPE2)
-
-/*! \brief Implementation of a flext dsp class (part of a library) with 2 arguments and no dsp inlet
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP0_2(NAME,NEW_CLASS, TYPE1, TYPE2)   \
-\
-REAL_NEW_2(NAME,NEW_CLASS, 1,1,1, TYPE1, TYPE2)
-
-
-// THREE ARGUMENTS
-// ----------------------------------------
-
-/*! \brief Implementation of a flext class with 3 arguments
-    \ingroup FLEXT_D_NEW
-*/
-#define FLEXT_NEW_3(NAME,NEW_CLASS, TYPE1, TYPE2, TYPE3) \
-\
-REAL_NEW_3(NAME,NEW_CLASS, 0,0,0, TYPE1, TYPE2, TYPE3)
-
-/*! \brief Implementation of a flext dsp class with 3 arguments
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP_3(NAME,NEW_CLASS, TYPE1, TYPE2, TYPE3)    \
-\
-REAL_NEW_3(NAME,NEW_CLASS, 1,0,0, TYPE1, TYPE2, TYPE3)
-
-/*! \brief Implementation of a flext dsp class with 3 arguments and no dsp inlet
-    \ingroup FLEXT_D_NEW_DSP
-*/
-#define FLEXT_NEW_DSP0_3(NAME,NEW_CLASS, TYPE1, TYPE2, TYPE3)    \
-\
-REAL_NEW_3(NAME,NEW_CLASS, 1,1,0, TYPE1, TYPE2, TYPE3)
-
-/*! \brief Implementation of a flext class (part of a library) with 3 arguments
-    \ingroup FLEXT_D_LIB
-*/
-#define FLEXT_LIB_3(NAME,NEW_CLASS, TYPE1, TYPE2, TYPE3)        \
-\
-REAL_NEW_3(NAME,NEW_CLASS, 0,0,1, TYPE1, TYPE2, TYPE3)
-
-/*! \brief Implementation of a flext dsp class (part of a library) with 3 arguments
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP_3(NAME,NEW_CLASS, TYPE1, TYPE2, TYPE3)    \
-\
-REAL_NEW_3(NAME,NEW_CLASS, 1,0,1, TYPE1, TYPE2, TYPE3)
-
-/*! \brief Implementation of a flext dsp class (part of a library) with 3 arguments and no dsp inlet
-    \ingroup FLEXT_D_LIB_DSP
-*/
-#define FLEXT_LIB_DSP0_3(NAME,NEW_CLASS, TYPE1, TYPE2, TYPE3)    \
-\
-REAL_NEW_3(NAME,NEW_CLASS, 1,1,1, TYPE1, TYPE2, TYPE3)
-
-
-// deprecated stuff
-
-/*! \defgroup FLEXT_D_DEPRECATED Deprecated definitions 
-    \deprecated
-    @{ 
-*/
-
-#define FLEXT_NEW_G FLEXT_NEW_V
-
-#define FLEXT_NEW_TILDE FLEXT_NEW_DSP
-#define FLEXT_NEW_TILDE_G FLEXT_NEW_DSP_V
-#define FLEXT_NEW_TILDE_1 FLEXT_NEW_DSP_1
-#define FLEXT_NEW_TILDE_2 FLEXT_NEW_DSP_2
-#define FLEXT_NEW_TILDE_3 FLEXT_NEW_DSP_3
-
-#define FLEXT_LIB_G FLEXT_LIB_V
-
-#define FLEXT_LIB_TILDE FLEXT_LIB_DSP
-#define FLEXT_LIB_TILDE_G FLEXT_LIB_DSP_V
-#define FLEXT_LIB_TILDE_1 FLEXT_LIB_DSP_1
-#define FLEXT_LIB_TILDE_2 FLEXT_LIB_DSP_2
-#define FLEXT_LIB_TILDE_3 FLEXT_LIB_DSP_3
-
-#define FLEXT_TILDE_SETUP FLEXT_DSP_SETUP
-
-//! @} FLEXT_D_DEPRECATED
-
-
-/*! \defgroup FLEXT_D_LIBRARY Definitions for library objects
-    @{ 
-*/
-
-/*! \brief Specify that to declare the library itself.
-    \note If you have a library this is compulsory (to register all the objects of the library)
-*/
-#define FLEXT_LIB_SETUP(NAME,SETUPFUN) REAL_LIB_SETUP(NAME,SETUPFUN)
-
-/*! \brief Register an object in the library.
-    \note This is used in the library setup function
-*/
-#define FLEXT_SETUP(cl) REAL_SETUP(cl,0)
-
-/*! \brief Register a DSP object in the library.
-    \note This is used in the library setup function
-*/
-#define FLEXT_DSP_SETUP(cl) REAL_SETUP(cl,1)
-
-//! @} FLEXT_D_LIBRARY 
-
-
-//! @} FLEXT_D_INSTANCE
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldsp.cpp b/externals/grill/trunk/flext/libbuild/include/flext/fldsp.cpp
deleted file mode 100755
index 7fecfe83707ce91fc348a95655dbf37036b2b4b8..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldsp.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldsp.cpp
-    \brief Implementation of the flext dsp base class.
-*/
- 
-#ifndef __FLEXT_DSP_CPP
-#define __FLEXT_DSP_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-#include <cstring>
-
-#include "flpushns.h"
-
-// === flext_dsp ==============================================
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_dsp))::Setup(t_classid id)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-//    add_method1(c,cb_enable,"enable",A_FLOAT);
-    AddMethod(id,0,MakeSymbol("enable"),&cb_enable);
-#endif
-}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_dsp))::FLEXT_CLASSDEF(flext_dsp)()
-    : srate(sys_getsr()),blksz(sys_getblksize())
-    , vecs(NULL)
-#if FLEXT_SYS != FLEXT_SYS_MAX
-    , dspon(true)
-#endif
-{}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_dsp))::Exit()
-{
-    flext_base::Exit();
-    
-    if(vecs) delete[] vecs;
-}
-
-
-FLEXT_TEMPIMPL(t_int *FLEXT_CLASSDEF(flext_dsp))::dspmeth(t_int *w)
-{ 
-    flext_dsp *obj = (flext_dsp *)(size_t)w[1];
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    if(!obj->thisHdr()->z_disabled)
-#else
-    if(LIKELY(obj->dspon))
-#endif
-    {
-        flext_base::indsp = true;
-        obj->CbSignal(); 
-        flext_base::indsp = false;
-    }
-    return w+2;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_dsp))::SetupDsp(t_signal **sp)
-{ 
-    int i;
-    int in = CntInSig();
-    int out = CntOutSig();
-#if FLEXT_SYS == FLEXT_SYS_PD
-    // min. 1 input channel! (CLASS_MAININLET in pd...)
-    if(!in) in = 1;
-#endif
-
-    // store current dsp parameters
-    srate = sys_getsr();   // \TODO need not be stored in each object....
-    // overlap = sp[0]->s_sr/srate;  // currently not used/exposed
-    blksz = sp[0]->s_n;  // is this guaranteed to be the same as sys_getblksize() ?
-
-    // store in and out signal vectors
-
-    if((in+out) && !vecs)
-        vecs = new t_signalvec[in+out];
-
-    for(i = 0; i < in; ++i) 
-        vecs[i] = sp[i]->s_vec;
-    for(i = 0; i < out; ++i) 
-        vecs[in+i] = sp[in+i]->s_vec;
-
-    // with the following call derived classes can do their eventual DSP setup
-    if(CbDsp()) {
-        // set the DSP function
-        dsp_add((t_dspmethod)dspmeth,1,this);  
-    }
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_dsp))::m_dsp(int /*n*/,t_signalvec const * /*insigs*/,t_signalvec const * /*outsigs*/) {}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_dsp))::CbDsp()
-{ 
-	// invoke legacy method
-    m_dsp(Blocksize(),InSig(),OutSig()); 
-    return true;
-}
-
-// this function will be overridden anyway - the probably useless default is clearing all outputs
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_dsp))::m_signal(int n,t_sample *const * /*insigs*/,t_sample *const *outs)
-{
-    for(int i = 0; i < CntOutSig(); ++i) ZeroSamples(outs[i],n);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_dsp))::CbSignal()
-{ 
-	// invoke legacy method
-	m_signal(Blocksize(),InSig(),OutSig()); 
-}
-
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-//void flext_dsp::cb_enable(flext_hdr *c,t_float on) { thisObject(c)->dspon = on != 0; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_dsp))::cb_enable(flext_base *b,float &on)
-{
-    static_cast<flext_dsp *>(b)->dspon = on != 0;
-    return true;
-}
-#endif
-
-#include "flpopns.h"
-
-#endif // __FLEXT_DSP_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fldsp.h b/externals/grill/trunk/flext/libbuild/include/flext/fldsp.h
deleted file mode 100755
index 12fa826a931d52e57c01d145ffd913ab2e56ea3f..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fldsp.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fldsp.h
-    \brief Declares the flext dsp class
-    
-*/
-
-#ifndef __FLDSP_H
-#define __FLDSP_H
-
-// include the header file declaring the base classes
-#include "flext.h"
-
-#include "flpushns.h"
-
-// === flext_dsp ==================================================
-
-FLEXT_TEMPLATE class FLEXT_SHARE FLEXT_CLASSDEF(flext_dsp);
-typedef FLEXT_SHARE FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_dsp)) flext_dsp;
-
-
-/*! \brief Flext dsp enabled base object
-*/
-FLEXT_TEMPLATE
-class FLEXT_SHARE FLEXT_CLASSDEF(flext_dsp):
-	public flext_base
-{
-	FLEXT_HEADER_S(FLEXT_CLASSDEF(flext_dsp),flext_base,Setup)
-	
-	friend class FLEXT_SHARE FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base));
-
-public:
-
-/*!	\defgroup FLEXT_DSP Flext dsp class
-
-	@{ 
-*/
-
-/*!	\defgroup FLEXT_C_DSP Basic dsp functionality
-
-	@{ 
-*/
-
-	//! returns current sample rate
-	float Samplerate() const { return srate; }
-	
-	//! returns current block (aka vector) size
-	int Blocksize() const { return blksz; }
-    
-	//! returns array of input vectors (CntInSig() vectors)
-    t_sample *const *InSig() const { return vecs; }
-
-	//! returns input vector
-    t_sample *InSig(int i) const { return InSig()[i]; }
-
-	//! returns array of output vectors (CntOutSig() vectors)
-    // \todo cache that returned pointer
-    t_sample *const *OutSig() const 
-    { 
-        int i = CntInSig(); 
-        // in PD we have at least one actual dsp in vector
-#if FLEXT_SYS == FLEXT_SYS_PD
-        return vecs+(i?i:1); 
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        return vecs+i; 
-#else
-#error
-#endif
-    }
-
-	//! returns output vector
-    t_sample *OutSig(int i) const { return OutSig()[i]; }
-
-	//! typedef describing a signal vector
-	typedef t_sample *t_signalvec;
-
-//!	@} 
-
-// --- inheritable virtual methods --------------------------------
-
-/*!	\defgroup FLEXT_C_DSP_VIRTUAL Flext virtual dsp functions
-
-	@{ 
-*/
-	/*! \brief Called on every dsp init.
-		\note Don't expect any valid data in the signal vectors!
-        flext_dsp::CbDsp should not be called by the derived class
-
-        \return true (default)... use DSP, false, don't use DSP
-    */
-	virtual bool CbDsp();
-
-	/*! \brief Called with every signal vector - here you do the dsp calculation
-        flext_dsp::CbSignal fills all output vectors with silence
-    */
-	virtual void CbSignal();
-
-
-    /*! \brief Deprecated method for CbSignal
-        \deprecated
-		\param n: frames (aka samples) in one signal vector
-		\param insigs: array of input vectors  (get number with function CntInSig())
-		\param outsigs: array of output vectors  (get number with function CntOutSig())
-	*/
-	virtual void m_dsp(int n,t_signalvec const *insigs,t_signalvec const *outsigs);
-
-    /*! \brief Deprecated method for CbSignal
-        \deprecated
-		\param n: frames (aka samples) in one signal vector
-		\param insigs: array of input vectors  (get number with function CntInSig())
-		\param outsigs: array of output vectors  (get number with function CntOutSig())
-	*/
-	virtual void m_signal(int n,t_sample *const *insigs,t_sample *const *outsigs);
-
-//!	@} 
-
-
-/*!	\defgroup FLEXT_C_DSP_INOUT Flext dsp in-/outlet functions
-	\note These must be called in the class' constructor
-
-	@{ 
-*/
-// --- inlet/outlet stuff -----------------------------------------	
-
-	/*! \brief Add signal inlet(s)
-		\param m Number of inlets to add
-	*/
-	void AddInSignal(int m = 1) { AddInlet(xlet_sig,m); }
-
-	/*! \brief Add signal inlet (with description)
-		\param desc Description of inlet
-	*/
-	void AddInSignal(const char *desc) { AddInlet(xlet_sig,1,desc); }
-
-	/*! \brief Add signal outlet(s)
-		\param m Number of inlets to add
-	*/
-	void AddOutSignal(int m = 1) { AddOutlet(xlet_sig,m); }
-
-	/*! \brief Add signal outlet (with description)
-		\param desc Description of outlet
-	*/
-	void AddOutSignal(const char *desc) { AddOutlet(xlet_sig,1,desc); }
-
-//!	@} 
-
-//!	@} 
-
-protected:
-	
-	FLEXT_CLASSDEF(flext_dsp)();
-
-    virtual void Exit();
-
-private:
-
-	// not static, could be different in different patchers..
-	float srate; 
-	int blksz;
-	t_signalvec *vecs;
-
-	// setup function
-	static void Setup(t_classid c);
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-	static bool cb_enable(flext_base *c,float &on);
-	bool dspon;
-#endif
-
-	static inline flext_dsp *thisObject(flext_hdr *c) { return FLEXT_CAST<flext_dsp *>(c->data); } 
-
-	void SetupDsp(t_signal **sp);
-
-	// dsp stuff
-	static t_int *dspmeth(t_int *w); 
-};
-
-#include "flpopns.h"
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flext.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flext.cpp
deleted file mode 100755
index dceac360f3c1d328b6bc99d8a4a7a04722055e4f..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flext.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flext.cpp
-    \brief Implementation of the flext base class.
-*/
- 
-#ifndef __FLEXT_CPP
-#define __FLEXT_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-#include "fldsp.h"
-#include <cstring>
-
-#include "flpushns.h"
-
-// === flext_base ============================================
-
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext_base))::curtag = NULL;
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::FLEXT_CLASSDEF(flext_base)()
-    : incnt(0),outcnt(0)
-    , insigs(0),outsigs(0)
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-    ,outlets(NULL),inlets(NULL)
-#endif
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    ,indesc(NULL),outdesc(NULL)
-#endif
-{
-    FLEXT_LOG1("%s - flext logging is on",thisName());
-
-    methhead = NULL;
-    bindhead = NULL;
-
-    if(HasAttributes()) {
-        // initialize when attribute processing is enabled
-        attrhead = new ItemCont;
-        attrdata = new AttrDataCont;
-    }
-    else {
-        attrhead = NULL;
-        attrdata = NULL;
-    }
-}
-
-/*! This virtual function is called after the object has been created, that is, 
-    after the constructor has been processed. 
-    It creates the inlets and outlets and the message and attribute lists.
-    \note You can override it in your own class, but be sure to call it, 
-    \note otherwise no inlets/outlets will be created
-    \note All inlet, outlets, method and attribute declarations must be made before a call to Init!
-    \remark Creation of inlets/outlets can't be done upon declaration, as Max/MSP needs creation
-    \remark in reverse.
-*/
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::Init()
-{
-    bool ok = flext_obj::Init();
-
-    if(ok) ok = InitInlets() && InitOutlets();
-
-    if(ok) {
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		// according to the Max/MSP SDK this should be prior to any inlet creation, BUT
-		// that doesn't seem to be true... multiple signal ins and additional inlets don't seem to work then      
-		if(NeedDSP()) dsp_setup(thisHdr(),CntInSig()); // signal inlets   
-#endif
-
-        if(HasAttributes() && m_holdaargc && m_holdaargv) {
-            // initialize creation attributes
-            ok = InitAttrib(m_holdaargc,m_holdaargv);
-        }
-    }
-
-    return ok;
-}
-
-
-/*! This virtual function is called before the destructor.
-    We do this because here we can still call virtual methods.
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::Exit()
-{
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    // according to David Z. one should do that first...
-	if(NeedDSP()) dsp_free(thisHdr());
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_NOATTREDIT)
-    // attribute editor window may still be open -> close it
-    gfxstub_deleteforkey(thisHdr());
-#endif
-
-#ifdef FLEXT_THREADS
-    StopThreads();
-#endif
-
-    // send remaining pending messages for this object
-    QFlush(this);
-
-    // delete message lists
-    if(bindhead) delete bindhead;  // ATTENTION: the object must free all memory associated to bindings itself
-    if(methhead) delete methhead;
-    if(attrhead) delete attrhead;
-    if(attrdata) delete attrdata;
-    
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-    if(outlets) delete[] outlets;
-
-    if(inlets) {
-        FLEXT_ASSERT(incnt > 1);
-        for(int ix = 1; ix < incnt; ++ix)
-            if(inlets[ix-1]) {
-                // release proxy object
-#if FLEXT_SYS == FLEXT_SYS_PD
-                pd_free(&inlets[ix-1]->obj.ob_pd);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-                freeobject((object *)inlets[ix-1]);
-#endif
-            }
-        delete[] inlets;
-    }
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    if(indesc) {
-        for(int i = 0; i < incnt; ++i) if(indesc[i]) delete[] indesc[i];
-        delete[] indesc;
-    }
-    if(outdesc) {
-        for(int i = 0; i < outcnt; ++i) if(outdesc[i]) delete[] outdesc[i];
-        delete[] outdesc;
-    }
-#endif
-
-    flext_obj::Exit();
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddMessageMethods(t_class *c,bool dsp,bool dspin)
-{
-    add_loadbang(c,cb_loadbang);
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    class_addmethod(c,(t_method)cb_click,gensym(const_cast<char *>("click")),A_FLOAT,A_FLOAT,A_FLOAT,A_FLOAT,A_FLOAT,A_NULL);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    add_assist(c,cb_assist);
-    add_dblclick(c,cb_click);
-#endif
-
-    SetProxies(c,dsp);
-    StartQueue();
-    
-    if(dsp) {
-#if FLEXT_SYS == FLEXT_SYS_MAX
-        add_dsp(c,cb_dsp);
-        dsp_initclass();
-#elif FLEXT_SYS == FLEXT_SYS_PD
-        if(dspin)
-            CLASS_MAINSIGNALIN(c,flext_hdr,defsig); // float messages going into the left inlet are converted to signal
-        add_dsp(c,cb_dsp);
-#else
-#error Platform not supported!
-#endif
-    }
-}
-
-
-/*! Set up proxy classes and basic methods at class creation time
-    This ensures that they are processed before the registered flext messages
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::Setup(t_classid id)
-{
-    t_class *c = getClass(id);
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-	if(!IsLib(id))
-#endif
-        AddMessageMethods(c,IsDSP(id),HasDSPIn(id));
-
-    if(HasAttributes(id)) {
-        AddMethod(id,0,"getattributes",cb_ListAttrib);
-        AddMethod(id,0,"getmethods",cb_ListMethods);
-
-#if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_NOATTREDIT)
-        AddMethod(id,0,"attributedialog",cb_AttrDialog);
-#endif
-    }
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    SetGfx(id);
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_loadbang(flext_hdr *c)
-{ 
-    Locker lock(c);
-    thisObject(c)->CbLoadbang(); 
-}   
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::m_loadbang() {}
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::CbLoadbang() { m_loadbang(); }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::CbClick() {}
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_click(flext_hdr *c,t_floatarg xpos,t_floatarg ypos,t_floatarg shift,t_floatarg ctrl,t_floatarg alt)
-{
-    if(shift) {
-        Locker lock(c);
-        thisObject(c)->CbClick();
-    }
-}
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_click(flext_hdr *c, Point pt, short mods)
-{
-    Locker lock(c);
-    thisObject(c)->CbClick();
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_assist(flext_hdr *c,void * /*b*/,long msg,long arg,char *s)
-{ 
-    Locker lock(c);
-    flext_base *th = thisObject(c); 
-
-    switch(msg) {
-    case 1: //ASSIST_INLET:
-        if(arg < th->incnt && th->indesc[arg]) strcpy(s,th->indesc[arg]);
-        break;
-    case 2: //ASSIST_OUTLET:
-        if(arg < th->outcnt) {
-            if(th->outdesc[arg]) strcpy(s,th->outdesc[arg]);
-        }
-        else
-            if(arg == th->outcnt && th->HasAttributes()) strcpy(s,"Attributes");
-        break;
-    }
-}
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_dsp(flext_hdr *c,t_signal **sp,short *count)
-#else
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_dsp(flext_hdr *c,t_signal **sp)
-#endif
-{ 
-    Locker lock(c);
-    flext_base *bobj = thisObject(c); 
-	
-#if FLEXT_SYS == FLEXT_SYS_MAX
-	// we must extra-check here if it is really a DSP object
-	// obviously, for objects that are part of a library, one dsp_initclass enables DSP for all
-	if(!bobj->IsDSP()) return;
-#endif
-
-	flext_dsp *obj;
-#ifdef FLEXT_DEBUG
-    obj = dynamic_cast<flext_dsp *>(bobj);
-#else
-    obj = static_cast<flext_dsp *>(bobj); 
-#endif
-
-    FLEXT_ASSERT(obj);
-	obj->SetupDsp(sp);
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::CbIdle() { return 0; }
-
-#include "flpopns.h"
-
-#endif // __FLEXT_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flext.h b/externals/grill/trunk/flext/libbuild/include/flext/flext.h
deleted file mode 100755
index 5c735ff8e3c81db24eb198c7fbc2845593b62360..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flext.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flext.h 
-    \brief This is the main flext include file.
-    
-    The basic definitions are set here and the necessary header files are included
-*/
-
-#ifndef __FLEXT_H
-#define __FLEXT_H
-
-
-/*!	\defgroup FLEXT_GLOBAL Flext global definitions
-	@{
-*/
-
-//! \brief flext version number
-#define FLEXT_VERSION 600
-
-//! \brief flext version string
-#define FLEXT_VERSTR "0.6.0 alpha"
-
-//! @}
-
-// determine System/OS/CPU
-#include "flprefix.h"
-
-// include headers necessary for multi-threading
-#ifdef FLEXT_THREADS
-	#if FLEXT_THREADS == FLEXT_THR_POSIX
-		extern "C" {
-			#include <pthread.h>
-			#include <sched.h>
-		}
-	#elif FLEXT_THREADS == FLEXT_THR_MP
-		#include <multiprocessing.h>
-	#elif FLEXT_THREADS == FLEXT_THR_WIN32
-        #if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x500
-    		#include <windows.h>
-            #include <process.h>
-        #else
-            #error "Win32 threading model only supported for Win2000/XP or newer"
-        #endif
-	#else
-		#error "Thread model not supported"
-	#endif
-#endif
-
-
-// include all the flext interface definitions
-#include "fldefs.h"
-
-// include the basic flext object classes
-#include "flclass.h"
-
-// include the flext dsp class
-#include "fldsp.h"
-
-#ifdef FLEXT_INLINE
-// include all source code files
-#   include "flatom.cpp"
-#   include "flatom_part.cpp"
-#   include "flatom_pr.cpp"
-#   include "flattr.cpp"
-#   include "flattr_ed.cpp"
-#   include "flbase.cpp"
-#   include "flbind.cpp"
-#   include "flbuf.cpp"
-#   include "fldsp.cpp"
-#   include "flext.cpp"
-#   include "flitem.cpp"
-#   include "fllib.cpp"
-#   include "flmap.cpp"
-#   include "flmeth.cpp"
-#   include "flmsg.cpp"
-#   include "flout.cpp"
-#   include "flproxy.cpp"
-#   include "flqueue.cpp"
-#   include "flsimd.cpp"
-#   include "flsupport.cpp"
-#   include "flthr.cpp"
-#   include "fltimer.cpp"
-#   include "flutil.cpp"
-#   include "flxlet.cpp"
-#endif
-
-#endif // FLEXT_H
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flfeatures.h b/externals/grill/trunk/flext/libbuild/include/flext/flfeatures.h
deleted file mode 100755
index 0a904f2956887a991f1fe2b6e413b1f0c5e6c0b0..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flfeatures.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flfeatures.h
-    \brief Detect version-specific features.
-*/
- 
-#ifndef __FLFEATURES_H
-#define __FLFEATURES_H
-
-// check if PD API supports buffer dirty time
-#if defined(PD_DEVEL_VERSION) && defined(PD_MAJOR_VERSION) && defined(PD_MINOR_VERSION)
-#if PD_MINOR_VERSION >= 36 && PD_MINOR_VERSION <= 38
-// array locks have been removed in devel_0_39
-	#define _FLEXT_HAVE_PD_GARRAYLOCKS
-#endif
-#if PD_MINOR_VERSION >= 36
-    #define _FLEXT_HAVE_PD_GARRAYUPDATETIME
-#endif
-#endif
-
-#if defined(MAC_VERSION) || defined(WIN_VERSION) 
-    // not for OS9
-    #define _FLEXT_HAVE_MAX_INUSEFLAG
-#endif
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flinternal.h b/externals/grill/trunk/flext/libbuild/include/flext/flinternal.h
deleted file mode 100755
index f9c508ab4a9fabc37af7a82d021fa5000a0dca99..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flinternal.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flinternal.h
-    \brief Definitions for internal flext usage
-    \internal
-    
-    Here, a few shortcuts for common Max/MSP or PD library calls and type definitions 
-    are declared
-*/
-
-#ifndef __FLEXT_INTERNALS_H
-#define __FLEXT_INTERNALS_H
-
-#include "flstdc.h"
-
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-
-#define object_new(clss) pd_new(clss)
-#define object_free(obj) pd_free(&(obj)->ob_pd)
-                
-
-
-#define add_dsp(clss,meth) class_addmethod(clss, (t_method)meth,gensym(const_cast<char *>("dsp")),A_NULL)
-#define add_bang(clss,meth) class_addbang(clss, (t_method)meth)
-#define add_float(clss,meth) class_addfloat(clss, (t_method)meth)
-#define add_floatn(clss,meth,n) class_addmethod(clss, (t_method)meth,gensym(const_cast<char *>("ft" #n)),A_FLOAT,A_NULL)
-#define add_flint(clss,meth) class_addfloat(clss, (t_method)meth)
-#define add_flintn(clss,meth,n) class_addmethod(clss, (t_method)meth,gensym(const_cast<char *>("ft" #n)),A_FLOAT,A_NULL)
-#define add_method(clss,meth,text) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), A_NULL)
-#define add_methodG(clss,meth,text) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), A_GIMME,A_NULL)
-#define add_method1(clss,meth,text,a1) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), a1,A_NULL)
-#define add_method2(clss,meth,text,a1,a2) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), a1,a2,A_NULL)
-#define add_method3(clss,meth,text,a1,a2,a3) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), a1,a2,a3,A_NULL)
-#define add_method4(clss,meth,text,a1,a2,a3,a4) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), a1,a2,a3,a4,A_NULL)
-#define add_method5(clss,meth,text,a1,a2,a3,a5) class_addmethod(clss, (t_method)meth, gensym(const_cast<char *>(text)), a1,a2,a3,a4,a5,A_NULL)
-#define add_loadbang(clss,meth) class_addmethod(clss,(t_method)meth, gensym(const_cast<char *>("loadbang")), A_NULL)
-#define add_anything(clss,meth) class_addanything(clss,meth)
-
-
-#define newout_signal(clss) outlet_new(clss,const_cast<t_symbol *>(flext::sym_signal))
-#define newout_float(clss) outlet_new(clss,const_cast<t_symbol *>(flext::sym_float))
-#define newout_flint(clss) outlet_new(clss,const_cast<t_symbol *>(flext::sym_float))
-#define newout_list(clss) outlet_new(clss,const_cast<t_symbol *>(flext::sym_list))
-#define newout_symbol(clss) outlet_new(clss,const_cast<t_symbol *>(flext::sym_symbol))
-#define newout_anything(clss) outlet_new(clss,const_cast<t_symbol *>(flext::sym_anything))
-
-#define outlet_flint(o,v) outlet_float(o,(float)(v))
-
-typedef t_perfroutine t_dspmethod;
-
-#define qelem_new clock_new
-#define qelem_free clock_free
-#define qelem_set clock_delay
-#define qelem_front clock_delay
-#define qelem_unset clock_unset
-
-#define CRITON() 
-#define CRITOFF() 
-
-
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-
-typedef void t_outlet;
-
-
-//#define object_new(clss) newobject(clss)
-#define object_free(obj) freeobject((object *)(obj))
-
-#define add_dsp(clss,meth) addmess((method)meth,const_cast<char *>("dsp"),A_CANT,A_NOTHING)
-#define add_bang(clss,meth) addbang((method)meth)
-#define add_float(clss,meth) addfloat((method)meth)
-#define add_floatn(clss,meth,n) addftx((method)meth,n)
-#define add_flint(clss,meth) addint((method)meth)
-#define add_flintn(clss,meth,n) addinx((method)meth,n)
-#define add_method(clss,meth,text) addmess((method)meth, text, A_NOTHING)
-#define add_methodG(clss,meth,text) addmess((method)meth, text, A_GIMME,A_NOTHING)
-#define add_method1(clss,meth,text,a1) addmess((method)meth, text, a1,A_NOTHING)
-#define add_method2(clss,meth,text,a1,a2) addmess((method)meth, text, a1,a2,A_NOTHING)
-#define add_method3(clss,meth,text,a1,a2,a3) addmess((method)meth, text, a1,a2,a3,A_NOTHING)
-#define add_method4(clss,meth,text,a1,a2,a3,a4) addmess((method)meth, text, a1,a2,a3,a4,A_NOTHING)
-#define add_method5(clss,meth,text,a1,a2,a3,a5) addmess((method)meth, text, a1,a2,a3,a4,a5,A_NOTHING)
-#define add_anything(clss,meth) addmess((method)meth, const_cast<char *>("anything"), A_GIMME,A_NOTHING)
-
-#define add_assist(clss,meth) addmess((method)meth, const_cast<char *>("assist"), A_CANT, A_NULL)
-#define add_loadbang(clss,meth) addmess((method)meth, const_cast<char *>("loadbang"), A_CANT, A_NULL)
-#define add_dblclick(clss,meth) addmess((method)meth, const_cast<char *>("dblclick"), A_CANT, A_NULL)
-
-#define newout_signal(clss) outlet_new(clss,"signal")
-#define newout_float(clss) outlet_new(clss,"float")
-#define newout_flint(clss) outlet_new(clss,"int")
-#define newout_list(clss) outlet_new(clss,"list")
-#define newout_symbol(clss) outlet_new(clss,"symbol")
-#define newout_anything(clss) outlet_new(clss,0)
-
-#define outlet_flint(o,v) outlet_int(o,(int)(v))
-#define outlet_symbol(o,s) outlet_anything(o,s,0,NULL)
-
-typedef t_perfroutine t_dspmethod;
-
-#define CRITON() short state = lockout_set(1)
-#define CRITOFF() lockout_set(state) 
-
-
-#elif FLEXT_SYS == FLEXT_SYS_JMAX
-
-
-#endif
-
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flitem.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flitem.cpp
deleted file mode 100755
index b148ec849bf588981551e041143e0a8f7933d2f5..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flitem.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flitem.cpp
-    \brief Processing of method and attribute lists.
-*/
- 
-#ifndef __FLEXT_ITEM_CPP
-#define __FLEXT_ITEM_CPP
-
-#include "flext.h"
-#include <cstring>
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::ItemSet::~ItemSet() { clear(); }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ItemSet::clear()
-{
-    for(FLEXT_TEMP_TYPENAME TablePtrMapDef::iterator it(*this); it; ++it) delete it.data();
-    TablePtrMap<const t_symbol *,Item *,8>::clear();
-}
-
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::Item::~Item()
-{
-    if(nxt) delete nxt;
-}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::ItemCont::ItemCont():
-    members(0),memsize(0),size(0),cont(NULL)
-{}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::ItemCont::~ItemCont()
-{
-    if(cont) {
-        for(int i = 0; i < size; ++i) delete cont[i];
-        delete[] cont;
-    }
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ItemCont::Resize(int nsz)
-{
-    if(nsz > memsize) {
-        int nmemsz = nsz+10;  // increment maximum allocation size
-        ItemSet **ncont = new ItemSet *[nmemsz]; // make new array
-        if(cont) {
-            memcpy(ncont,cont,size*sizeof(*cont)); // copy existing entries
-            delete[] cont; 
-        }
-        cont = ncont;  // set current array
-        memsize = nmemsz;  // set new allocation size
-    }
-
-    // make new items
-    while(size < nsz) cont[size++] = new ItemSet;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ItemCont::Add(Item *item,const t_symbol *tag,int inlet)
-{
-    FLEXT_ASSERT(tag);
-
-    if(!Contained(inlet)) Resize(inlet+2);
-    ItemSet &set = GetInlet(inlet);
-    Item *lst = set.find(tag);
-    if(!lst) { 
-        Item *old = set.insert(tag,lst = item);
-        FLEXT_ASSERT(!old);
-    }
-    else
-        for(;;)
-            if(!lst->nxt) { lst->nxt = item; break; }
-            else lst = lst->nxt;
-    members++;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::ItemCont::Remove(Item *item,const t_symbol *tag,int inlet,bool free)
-{
-    FLEXT_ASSERT(tag);
-
-    if(Contained(inlet)) {
-        ItemSet &set = GetInlet(inlet);
-        Item *lit = set.find(tag);
-        for(Item *prv = NULL; lit; prv = lit,lit = lit->nxt) {
-            if(lit == item) {
-                if(prv) prv->nxt = lit->nxt;
-                else if(lit->nxt) {
-                    Item *old = set.insert(tag,lit->nxt);
-                    FLEXT_ASSERT(!old);
-                }
-                else {
-                    Item *l = set.remove(tag);
-                    FLEXT_ASSERT(l == lit);
-                }
-
-                lit->nxt = NULL; 
-                if(free) delete lit;
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::Item *FLEXT_CLASSDEF(flext_base))::ItemCont::FindList(const t_symbol *tag,int inlet)
-{
-    FLEXT_ASSERT(tag);
-    return Contained(inlet)?GetInlet(inlet).find(tag):NULL;
-}
-
-// --- class item lists (methods and attributes) ----------------
-
-/*
-typedef TablePtrMap<FLEXT_CLASSDEF(flext_base)::t_classid,FLEXT_CLASSDEF(flext_base)::ItemCont *,8> ClassMap;
-
-static ClassMap classarr[2];
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::ItemCont *FLEXT_CLASSDEF(flext_base))::GetClassArr(t_classid c,int ix)
-{
-    ClassMap &map = classarr[ix];
-    ItemCont *cont = map.find(c);
-    if(!cont) map.insert(c,cont = new ItemCont);
-    return cont;
-}
-*/
-
-#include "flpopns.h"
-
-#endif // __FLEXT_ITEM_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fllib.cpp b/externals/grill/trunk/flext/libbuild/include/flext/fllib.cpp
deleted file mode 100755
index 331a8a4cfa8df5e75d8cd4a83a3edf71066c1a39..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fllib.cpp
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fllib.cpp
-    \brief Code for handling of object (and library) creation functions.
-*/
-
-#ifndef __FLEXT_LIB_CPP
-#define __FLEXT_LIB_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-
-#include <cstdarg>
-#include <cstring>
-#include <cctype>
-#include <map>
-
-#include "flpushns.h"
-
-#define ALIASDEL ','
-
-#define ALIASSLASHES ":/\\"
-#if FLEXT_OS == FLEXT_OS_MAC
-	#define ALIASSLASH ':'
-#elif FLEXT_OS == FLEXT_OS_WIN
-	#if FLEXT_SYS == FLEXT_SYS_PD
-		#define ALIASSLASH '/'
-	#elif FLEXT_SYS == FLEXT_SYS_MAX
-		#define ALIASSLASH '/'
-	#else
-		#error "Undefined"
-	#endif
-#else
-	// default to "/"
-	#define ALIASSLASH '/'
-#endif
-
-//! Extract space-delimited words from a string
-FLEXT_TEMPLATE
-const char *extract(const char *name,int ix = 0)
-{
-	static char tmp[1024];
-	const char *n = name;
-	
-	const char *del = strchr(name,ALIASDEL);
-
-	if(del) {
-#if 0
-		char *t = tmp;
-		while(n < del && (isspace(*n) || strchr(ALIASSLASHES,*n))) ++n;
-		while(n < del && !isspace(*n)) {
-			char c = *(n++);
-			*(t++) = strchr(ALIASSLASHES,c)?ALIASSLASH:c;
-		}
-		while(*t == ALIASSLASH && t > tmp) --t;
-		*t = 0;
-#endif
-		if(ix < 0) {
-			// eat white space in front of help definition
-			++del;
-			while(*del && isspace(*del)) ++del;
-			return del;
-		}
-
-		strncpy(tmp,name,del-name);
-		tmp[del-name] = 0;
-		n = tmp;
-	}
-	else if(ix < 0)
-		return NULL; // no explicit help name
-
-	while(*n && isspace(*n)) ++n;
-	
-	for(int i = 0; n && *n; ++i) {
-		if(i == ix) {
-			char *t = tmp;
-
-			for(; *n && !isspace(*n); ++t,++n) *t = *n;
-			*t = 0;
-			return *tmp?tmp:NULL;
-		}
-		else {
-			while(*n && !isspace(*n)) ++n;
-			while(*n && isspace(*n)) ++n;		
-		}
-	}
-
-	return NULL;
-}
-
-
-//! Check if object's name ends with a tilde
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::chktilde(const char *objname)
-{
-//	int stplen = strlen(setupfun);
-	bool tilde = true; //!strncmp(setupfun,"_tilde",6);
-
-	if((objname[strlen(objname)-1] == '~'?1:0)^(tilde?1:0)) {
-		if(tilde) 
-			error("flext: %s (no trailing ~) is defined as a tilde object",objname);
-		else
-			error("flext::check_tilde: %s is no tilde object",objname);
-		return true;
-	} 
-	else
-		return false;
-}
-
-// this class stands for one library of objects
-// there can be more if flext is a shared library
-class flext_library
-{
-public:
-	flext_library(const t_symbol *nm)
-		: name(nm)
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		, clss(NULL),dsp(false)
-#endif
-	{}
-
-	const t_symbol *name;
-#if FLEXT_SYS == FLEXT_SYS_MAX
-	t_class *clss;
-	bool dsp;
-#endif
-};
-
-// this class stands for one registered object
-// it holds the class, type flags, constructor and destructor of the object and the creation arg types
-// it will never be destroyed
-FLEXT_TEMPLATE
-class flext_class:
-    public flext_root
-{
-public:
-    flext_class(t_class *&cl,flext_obj *(*newf)(int,t_atom *),void (*freef)(flext_hdr *));
-	
-	t_class *const &clss;
-
-	flext_obj *(*newfun)(int,t_atom *);
-	void (*freefun)(flext_hdr *c);
-
-	int argc;
-	int *argv;
-
-	flext_library *lib;
-    bool dsp:1,noi:1,attr:1,dist:1;
-
-    flext_base::ItemCont meths,attrs;
-};
-
-FLEXT_TEMPIMPL(flext_class)::flext_class(t_class *&cl,flext_obj *(*newf)(int,t_atom *),void (*freef)(flext_hdr *)):
-	clss(cl),
-	newfun(newf),freefun(freef),
-	argc(0),argv(NULL) 
-    , dist(false)
-{}
-
-FLEXT_TEMPIMPL(LibMap *FLEXT_CLASSDEF(flext_obj))::libnames = NULL;
-
-//! Store or retrieve registered classes
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(flext_class) *FLEXT_CLASSDEF(flext_obj))::FindName(const t_symbol *s,FLEXT_TEMPINST(flext_class) *o)
-{
-	if(!libnames) libnames = new LibMap;
-	LibMap::iterator it = libnames->find(s);
-	if(it != libnames->end())
-		return it->second;
-	else if(o) {
-		(*libnames)[s] = o;
-		return o;
-	}
-	else
-		return NULL;
-}
-
-
-FLEXT_TEMPIMPL(t_class *FLEXT_CLASSDEF(flext_obj))::getClass(t_classid cl) { return cl->clss; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::HasAttributes(t_classid cl) { return cl->attr; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::IsDSP(t_classid cl) { return cl->dsp; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::HasDSPIn(t_classid cl) { return !cl->noi; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::IsLib(t_classid cl) { return cl->lib != NULL; }
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::HasAttributes() const { return clss->attr; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::IsDSP() const { return clss->dsp; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::HasDSPIn() const { return !clss->noi; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::IsLib() const { return clss->lib != NULL; }
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_obj))::NeedDSP() const { return clss->dsp || (clss->lib && clss->lib->dsp); }
-#endif
-
-
-FLEXT_TEMPIMPL(flext_library *FLEXT_CLASSDEF(flext_obj))::curlib = NULL;
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::lib_init(const char *name,void setupfun())
-{
-	// make new library instance
-    curlib = new flext_library(MakeSymbol(name));
-
-    flext::Setup();
-
-	// first register all classes
-    try {
-	    setupfun();
-    }
-    catch(std::exception &x) {
-        error("%s - %s",name,x.what());
-		return;
-    }
-    catch(char *txt) {
-    	error("%s - %s",name,txt);
-		return;
-    }
-    catch(...) {
-    	error("%s - Unknown exception at library setup",name);
-		return;
-    }
-	
-#if FLEXT_SYS == FLEXT_SYS_MAX
-	// then see if we got DSP classes
-
-	// for Max/MSP, the library is represented by a special object (class) registered at startup
-	// all objects in the library are clones of that library object - they share the same class
-	::setup(
-		(t_messlist **)&curlib->clss,
-		(t_newmethod)obj_new,(t_method)obj_free,
-		sizeof(flext_hdr),NULL,A_GIMME,A_NULL);
-	
-	// for all classes in library add methods
-	flext_base::AddMessageMethods(curlib->clss,curlib->dsp,true);
-#endif
-
-    curlib = NULL;
-}
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-FLEXT_TEMPIMPL(t_class *FLEXT_CLASSDEF(flext_obj))::buf_class = NULL;
-#endif
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::obj_add(bool lib,bool dsp,bool noi,bool attr,const char *idname,const char *names,void setupfun(t_classid),FLEXT_CLASSDEF(flext_obj) *(*newfun)(int,t_atom *),void (*freefun)(flext_hdr *),int argtp1,...)
-{
-    Locker lock;
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-	// register buffer helper class (if not present already)
-	if(!buf_class) {
-		buf_class = ::class_new(gensym(const_cast<char *>(" flext buffer helper ")),NULL,NULL,sizeof(t_object),CLASS_PD|CLASS_NOINLET,A_NULL);
-		add_dsp(buf_class,cb_buffer_dsp);
-		// make an instance
-		::pd_new(buf_class);
-	}
-#endif
-
-	// get first possible object name
-	const t_symbol *nsym = MakeSymbol(FLEXT_TEMPINST(extract)(names));
-	
-#ifdef FLEXT_DEBUG
-	if(dsp) chktilde(GetString(nsym));
-#endif
-
-	if(lib) {
-        FLEXT_ASSERT(curlib);
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		curlib->dsp |= dsp;
-#endif
-	}
-	else {
-        FLEXT_ASSERT(!curlib);
-//		process_attributes = attr;
-	}
-
-	// set dynamic class pointer
-	t_class **cl = 
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		lib?&curlib->clss:
-#endif
-		new t_class *;
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-	// register object class
-    *cl = ::class_new(
-		(t_symbol *)nsym,
-    	(t_newmethod)obj_new,(t_method)obj_free,
-     	sizeof(flext_hdr),CLASS_DEFAULT,A_GIMME,A_NULL);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-	if(!lib) {
-		::setup(
-			(t_messlist **)cl,
-    		(t_newmethod)obj_new,(t_method)obj_free,
-     		sizeof(flext_hdr),NULL,A_GIMME,A_NULL);
-     	// attention: in Max/MSP the *cl variable is not initialized after that call.
-     	// just the address is stored, the initialization then occurs with the first object instance!
-	}
-#else
-#error Platform not implemented
-#endif
-
-	// make new dynamic object
-	FLEXT_TEMPINST(flext_class) *lo = new FLEXT_TEMPINST(flext_class)(*cl,newfun,freefun);
-    lo->lib = curlib;
-	lo->dsp = dsp;
-	lo->noi = noi;
-	lo->attr = attr;
-
-//	post("ADDCLASS %s,%s = %p -> LIBOBJ %p -> %p (lib=%i,dsp=%i)",idname,names,*cl,lo,lo->clss,lib?1:0,dsp?1:0);
-
-	// parse the argument type list and store it with the object
-	if(argtp1 == FLEXTTPN_VAR)
-		lo->argc = -1;
-	else {
-		int argtp,i;
-		va_list marker;
-		
-		// parse a first time and count only
-		va_start(marker,argtp1);
-		for(argtp = argtp1; argtp != FLEXTTPN_NULL; ++lo->argc) argtp = (int)va_arg(marker,int); 
-		va_end(marker);
-
-		lo->argv = new int[lo->argc];
-	
-		// now parse and store
-		va_start(marker,argtp1);
-		for(argtp = argtp1,i = 0; i < lo->argc; ++i) {
-			lo->argv[i] = argtp;
-			argtp = (int)va_arg(marker,int); 
-		}
-		va_end(marker);
-	}
-
-	// get unique class id
-	t_classid clid = lo;
-
-	// make help reference
-	const char *helptxt = FLEXT_TEMPINST(extract)(names,-1);
-	if(helptxt) {
-		const char *sl = strchr(helptxt,'/');
-		if(sl && !sl[1])
-			// helptxt is only the path (path with trailing /)
-			flext_obj::DefineHelp(clid,idname,helptxt,dsp);
-		else 
-			// helptxt is path and patch name
-			flext_obj::DefineHelp(clid,helptxt,NULL,dsp);
-	}
-
-	for(int ix = 0; ; ++ix) {
-		// in this loop register all the possible aliases of the object
-	
-		const char *c = ix?FLEXT_TEMPINST(extract)(names,ix):GetString(nsym);
-		if(!c || !*c) break;
-
-		// add to name list
-        const t_symbol *lsym = MakeSymbol(c);
-		FindName(lsym,lo);
-	
-#if FLEXT_SYS == FLEXT_SYS_PD
-		if(ix > 0) 
-			// in PD the first name is already registered with class creation
-			::class_addcreator((t_newmethod)obj_new,(t_symbol *)lsym,A_GIMME,A_NULL);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-		if(ix > 0 || lib) 
-			// in Max/MSP the first alias gets its name from the name of the object file,
-			// unless it is a library (then the name can be different)
-			::alias(const_cast<char *>(c));  
-#else
-#error
-#endif	
-	}
-
-    try {
-	    // call class setup function
-        setupfun(clid);
-    }
-    catch(std::exception &x) {
-        error("%s: %s",idname,x.what());
-    }
-    catch(char *txt) {
-        error("%s: %s",idname,txt);
-    }
-    catch(...) {
-    	error("%s - Unknown exception while initializing class",idname);
-    }
-}
-	
-
-#define NEWARGS 256 // must be larger than FLEXT_NEWARGS = 5
-
-typedef FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_obj)) *(*libfun)(int,t_atom *);
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(flext_hdr *FLEXT_CLASSDEF(flext_obj))::obj_new(const t_symbol *s,short _argc_,t_atom *argv)
-#else
-FLEXT_TEMPIMPL(flext_hdr *FLEXT_CLASSDEF(flext_obj))::obj_new(const t_symbol *s,int _argc_,t_atom *argv)
-#endif
-{
-    Locker lock;
-
-	flext_hdr *obj = NULL;
-	FLEXT_TEMPINST(flext_class) *lo = FindName(s);
-
-	if(lo) {
-//		post("NEWOBJ %s = %p -> %p",GetString(s),lo,lo->clss);
-
-		bool ok = true;
-		t_atom args[NEWARGS]; 
-
-		int argc = _argc_;
-		if(lo->attr) {
-			argc = flext_base::CheckAttrib(argc,argv);
-		}
-
-		if(lo->argc >= 0) {
-#ifdef FLEXT_DEBUG
-			if(lo->argc > FLEXT_MAXNEWARGS) { ERRINTERNAL(); ok = false; }
-#endif
-
-			int misnum = 0;
-			if(argc > lo->argc) { ok = false; misnum = 1; }
-
-			for(int i = 0; ok && i < lo->argc; ++i) {
-				switch(lo->argv[i]) {
-#if FLEXT_SYS != FLEXT_SYS_PD
-				case FLEXTTPN_INT:
-				case FLEXTTPN_DEFINT:
-					if(i >= argc)
-						if(lo->argv[i] == FLEXTTPN_DEFINT) SetInt(args[i],0);
-						else { misnum = -1,ok = false; break; }
-					else if(IsInt(argv[i])) args[i] = argv[i];
-					else if(IsFloat(argv[i])) SetInt(args[i],(int)GetFloat(argv[i]));
-					else ok = false;
-					break;
-#endif
-				case FLEXTTPN_FLOAT:
-				case FLEXTTPN_DEFFLOAT:
-					if(i >= argc)
-						if(lo->argv[i] == FLEXTTPN_DEFFLOAT) SetFloat(args[i],0);
-						else { misnum = -1,ok = false; break; }
-					else if(IsInt(argv[i])) SetFloat(args[i],(float)GetInt(argv[i]));
-					else if(IsFloat(argv[i])) args[i] = argv[i];
-					else ok = false;
-					break;
-				case FLEXTTPN_SYM:
-				case FLEXTTPN_DEFSYM:
-					// \todo shall we analyze the patcher args????... should already be done!
-					if(i >= argc)
-						if(lo->argv[i] == FLEXTTPN_DEFSYM) SetSymbol(args[i],sym__);
-						else { misnum = -1,ok = false; break; }
-					else if(IsSymbol(argv[i]))
-//							SetSymbol(args[i],GetParamSym(GetSymbol(argv[i]),NULL));
-						args[i] = argv[i];
-					else ok = false;
-					break;
-				}	
-			}
-
-			if(!ok) {
-				if(misnum)
-					error("%s: %s creation arguments",GetString(s),misnum < 0?"Not enough":"Too many");
-				else
-					error("%s: Creation arguments do not match",GetString(s));
-			}
-		}
-
-
-		if(ok) {
-            flext_obj::initing = true;
-
-            try {
-#if FLEXT_SYS == FLEXT_SYS_PD
-			    obj = (flext_hdr *)::pd_new(lo->clss);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-			    obj = (flext_hdr *)::newobject(lo->clss);
-#else
-#error
-#endif
-                flext_obj::m_holder = obj;
-			    flext_obj::m_holdclass = lo;
-			    flext_obj::m_holdname = s;
-                flext_obj::init_ok = true;
-
-			    // get actual flext object (newfun calls "new flext_obj()")
-			    if(lo->argc >= 0)
-				    obj->data = lo->newfun(lo->argc,args); 
-			    else
-				    obj->data = lo->newfun(argc,argv); 
-    	
-			    flext_obj::m_holder = NULL;
-			    flext_obj::m_holdclass = NULL;
-			    flext_obj::m_holdname = NULL;
-
-			    ok = obj->data &&
-				    // check constructor exit flag
-				    flext_obj::init_ok;
-
-			    if(ok) {
-				    if(lo->attr) {
-					    // DON'T convert eventual patcher args here... this is done by the actual attribute stuff
-					    // so that the initial $- or #- be preserved!
-
-					    // store creation args for attribute initialization (inside flext_base::Init())
-					    flext_obj::m_holdaargc = _argc_-argc;
-					    flext_obj::m_holdaargv = argv+argc;
-				    }
-				    else {
-					    flext_obj::m_holdaargc = 0;
-					    flext_obj::m_holdaargv = NULL;
-				    }
-
-				    // call virtual init function 
-				    // here, inlets, outlets, methods and attributes can be set up
-				    ok = obj->data->Init();
-
-                    flext_obj::initing = false;
-
-				    // call another virtual init function 
-				    if(ok) ok = obj->data->Finalize();
-
-				    flext_obj::m_holdaargc = 0;
-				    flext_obj::m_holdaargv = NULL;
-			    }
-
-            } //try
-            catch(std::exception &x) {
-                error("%s - Exception while creating object: %s",GetString(s),x.what());
-                ok = false;
-            }
-            catch(char *txt) {
-    		    error("%s - Exception while creating object: %s",GetString(s),txt);
-                ok = false;
-            }
-            catch(...) {
-    		    error("%s - Unknown exception while creating object",GetString(s));
-                ok = false;
-            }
-
-            flext_obj::initing = false;
-
-            if(ok) {
-#if FLEXT_SYS == FLEXT_SYS_MAX
-                // create object-specific thread lock
-                critical_new(&obj->data->lock);
-#endif
-            }
-            else { 
-				// there was some init error, free object
-				lo->freefun(obj); 
-				obj = NULL; 
-			}
-		}
-	}
-#ifdef FLEXT_DEBUG
-	else
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		// in Max/MSP an object with the name of the library exists, even if not explicitly declared!
-//		if(!lo->lib || s != lo->lib->name) 
-#endif
-		error("Class %s not found in library!",s->s_name);
-#endif
-
-	return obj;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_obj))::obj_free(flext_hdr *h)
-{
-    Locker lock;
-
-	flext_hdr *hdr = (flext_hdr *)h;
-	const t_symbol *name = hdr->data->thisNameSym();
-	FLEXT_TEMPINST(flext_class) *lcl = FindName(name);
-
-	if(lcl) {
-        flext_obj::exiting = true;
-
-		try {
-		    // call virtual exit function
-		    hdr->data->Exit();
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-            // free object-specific thread lock
-            critical_free(hdr->data->lock);
-#endif
-
-		    // now call object destructor and deallocate
-		    lcl->freefun(hdr);
-        }
-        catch(std::exception &x) {
-            error("%s - Exception while destroying object: %s",GetString(name),x.what());
-        }
-        catch(char *txt) {
-    		error("%s - Exception while destroying object: %s",GetString(name),txt);
-        }
-        catch(...) {
-    		error("%s - Unknown exception while destroying object",GetString(name));
-        }
-
-		flext_obj::exiting = false;
-    }
-#ifdef FLEXT_DEBUG
-	else 
-#if FLEXT_SYS == FLEXT_SYS_MAX
-		// in Max/MSP an object with the name of the library exists, even if not explicitly declared!
-//		if(!lo->lib || s != lo->lib->name) 
-#endif
-		error("Class %s not found in library!",name);
-#endif
-}
-
-
-FLEXT_TEMPIMPL(t_class *FLEXT_CLASSDEF(flext_obj))::thisClass() const
-{
-    FLEXT_ASSERT(x_obj);
-    return thisClassId()->clss;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::SetDist(t_classid c,bool d) { c->dist = d; }
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::DoDist() const { return thisClassId()->dist; }
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::ItemCont *FLEXT_CLASSDEF(flext_base))::ClMeths(t_classid c) { return &c->meths; }
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::ItemCont *FLEXT_CLASSDEF(flext_base))::ClAttrs(t_classid c) { return &c->attrs; }
-
-#include "flpopns.h"
-
-#endif // __FLEXT_LIB_CPP
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flmap.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flmap.cpp
deleted file mode 100755
index 87a46daf582b67e73b01d3cc17257574a580e0b4..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flmap.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flmap.cpp
-    \brief flext container classes.
-*/
-
-#ifndef __FLEXT_MAP_CPP
-#define __FLEXT_MAP_CPP
-
-#include "flext.h"
-#include "flmap.h"
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(TableAnyMap)::~TableAnyMap() { clear(); }
-
-FLEXT_TEMPIMPL(void TableAnyMap)::clear()
-{
-    if(left) { _delmap(left); left = NULL; }
-    if(right) { _delmap(right); right = NULL; }
-    n = 0;
-}
-
-FLEXT_TEMPIMPL(void *TableAnyMap)::_set(int tsize,size_t k,void *t)
-{
-    FLEXT_ASSERT(n);
-
-    if(n < tsize) {
-        // fall through
-    }
-    else if(k < data[0].key)
-        return _toleft(tsize,k,t);
-    else if(k > data[tsize-1].key)
-        return _toright(tsize,k,t);
-
-    int ix = _tryix(k);
-    if(ix >= n) {
-        FLEXT_ASSERT(ix == n);
-        // after last entry
-        data[n++](k,t);
-        return NULL;
-    }
-
-    size_t dk = data[ix].key;
-    if(k == dk) {
-        // update data in existing slot (same key)
-        void *a = data[ix].value;
-        data[ix] = t;
-        return a;
-    }
-    else {
-        // insert new slot by shifting the higher ones
-        FLEXT_ASSERT(k < dk);
-        void *a;
-        if(n == tsize)
-            a = _toright(tsize,data[tsize-1]);
-        else {
-            ++n;
-            a = NULL;
-        }
-
-        Data *tg = data+ix;
-        for(Data *d = data+n-1; d > tg; d--) d[0] = d[-1];
-        (*tg)(k,t);
-        return a;
-    }
-}
-
-FLEXT_TEMPIMPL(void *TableAnyMap)::_find(int tsize,size_t k) const
-{
-    FLEXT_ASSERT(n);
-    if(n < tsize) {
-        // fall through
-    }
-    else if(k < data[0].key)
-        return left?left->_find(tsize,k):NULL;
-    else if(k > data[n-1].key)
-        return right?right->_find(tsize,k):NULL;
-
-    const int ix = _tryix(k);
-    return ix < n && data[ix].key == k?data[ix].value:NULL;
-}
-
-#ifdef FLEXT_DEBUG
-FLEXT_TEMPIMPL(void TableAnyMap)::_check(int tsize)
-{
-    FLEXT_ASSERT(n);
-
-    size_t k = data[0].key;
-    for(int i = 1; i < n; ++i) {
-        size_t k2 = data[i].key;
-        FLEXT_ASSERT(k < k2);
-        k = k2;
-    }
-
-    if(left || right) FLEXT_ASSERT(n == tsize);
-
-    if(left) { 
-        FLEXT_ASSERT(flext::MemCheck(left)); 
-        left->_check(tsize); 
-    }
-    if(right) { 
-        FLEXT_ASSERT(flext::MemCheck(right)); 
-        right->_check(tsize); 
-    }
-}
-#endif
-
-FLEXT_TEMPIMPL(void *TableAnyMap)::_remove(int tsize,size_t k)
-{
-    FLEXT_ASSERT(n);
-    if(n < tsize) {
-        // fall through
-    }
-    else if(k < data[0].key) {
-        void *r = left?left->_remove(tsize,k):NULL;
-        if(r) _eraseempty(left);
-        return r;
-    }
-    else if(k > data[n-1].key) {
-        void *r = right?right->_remove(tsize,k):NULL;
-        if(r) _eraseempty(right);
-        return r;
-    }
-
-    const int ix = _tryix(k);
-    if(ix >= n || data[ix].key != k)
-        return NULL;
-    else {
-        // found key in this map
-        void *ret = data[ix].value;
-
-        Data dt;
-        bool fnd,ins = false;
-        if(n >= tsize) {
-            // if this table is full get fill-in elements from branches
-            if(left) {
-                // try to get biggest element from left branch
-                left->_getbig(dt);
-                _eraseempty(left);
-                fnd = true,ins = true;
-            }
-            else if(right) {
-                // try to get smallest element from right branch
-                right->_getsmall(dt);
-                _eraseempty(right);
-                fnd = true;
-            }
-            else
-                fnd = false;
-        }
-        else fnd = false;
-
-        if(ins) {
-            // insert smaller element from left
-            for(int i = ix; i; --i) data[i] = data[i-1];
-            data[0] = dt;
-        }
-        else {
-            // shift elements
-            for(int i = ix+1; i < n; ++i) data[i-1] = data[i];
-            // insert bigger element from right or reduce table size
-            if(fnd)
-                data[n-1] = dt;
-            else
-                --n;
-        }
-
-        return ret;
-    }
-}
-
-FLEXT_TEMPIMPL(void TableAnyMap)::_getbig(Data &dt)
-{
-    FLEXT_ASSERT(n);
-
-    if(right) {
-        right->_getbig(dt);
-        _eraseempty(right);
-    }
-    else {
-        dt = data[n-1];
-        if(left) {
-            for(int i = n-1; i; --i) data[i] = data[i-1];
-            left->_getbig(data[0]);
-            _eraseempty(left);
-        }
-        else
-            --n;
-    }
-}
-
-FLEXT_TEMPIMPL(void TableAnyMap)::_getsmall(Data &dt)
-{
-    FLEXT_ASSERT(n);
-
-    if(left) {
-        left->_getsmall(dt);
-        _eraseempty(left);
-    }
-    else {
-        dt = data[0];
-        for(int i = 1; i < n; ++i) data[i-1] = data[i];
-        if(right) {
-            right->_getsmall(data[n-1]);
-            _eraseempty(right);
-        }
-        else
-            --n;
-    }
-}
-
-FLEXT_TEMPIMPL(void TableAnyMap)::iterator::forward()
-{ 
-    FLEXT_ASSERT(map || ix >= map->n);
-	
-	if(++ix >= map->n) {
-		TableAnyMap *nmap;
-
-		// we reached the end of the slots
-		if(map->right) {
-			// climb up one
-			map = map->right;
-			leftmost();
-			ix = 0;
-		}
-		else {
-			// fall back
-			for(;;) {
-				nmap = map->parent;
-				if(!nmap) break; // no parent
-				if(nmap->left == map) {
-					// ok, we are in front of the slots now
-					ix = 0;
-					map = nmap;
-					break;
-				}
-				else {
-					FLEXT_ASSERT(nmap->right == map);
-					ix = (map = nmap)->n;
-				}
-			}
-		}
-	}
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_MAP_CPP
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flmap.h b/externals/grill/trunk/flext/libbuild/include/flext/flmap.h
deleted file mode 100755
index 55f7df57e39de5941a39f516a19b17b8b0769007..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flmap.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flmap.h
-	\brief special map class (faster and less memory-consuming than std::map)   
-*/
-
-#ifndef __FLMAP_H
-#define __FLMAP_H
-
-#include "flprefix.h"
-
-/*!	\defgroup FLEXT_SUPPORT Flext support classes
-	@{
-*/
-
-#include "flpushns.h"
-
-FLEXT_TEMPLATE
-class FLEXT_SHARE TableAnyMap
-{
-public:
-
-    virtual TableAnyMap *_newmap(TableAnyMap *parent) = 0;
-    virtual void _delmap(TableAnyMap *map) = 0;
-
-    struct Data {
-        void operator()(size_t k,void *v) { key = k,value = v; }
-        void operator =(void *v) { value = v; }
-
-        size_t key;
-        void *value;
-    };
-
-protected:
-    // constructor and destructor are protected so that they can't be directly instantiated 
-
-    TableAnyMap(TableAnyMap *p,Data *dt)
-        : data(dt)
-        , parent(p),left(0),right(0) 
-        , n(0)
-    {}
-
-    virtual ~TableAnyMap();
-
-public:
-
-#if 0 // set 1 for asserting the map structure (very cpu-intensive!)
-    void check(int tsize) { if(n) _check(tsize); }
-#else
-//    void check(int tsize) {}
-#endif
-
-    void *insert(int tsize,size_t k,void *t)
-    {
-        void *r;
-        if(LIKELY(n)) 
-            r = _set(tsize,k,t);
-        else {
-            data[n++](k,t);
-            r = 0;
-        }
-//        check(tsize);
-        return r;
-    }
-
-    void *find(int tsize,size_t k) const { return LIKELY(n)?_find(tsize,k):0; }
-
-    void *remove(int tsize,size_t k) 
-	{ 
-		void *r = LIKELY(n)?_remove(tsize,k):0; 
-//		check(tsize); 
-		return r; 
-	}
-
-    virtual void clear();
-
-    class FLEXT_SHARE iterator
-    {
-    public:
-        iterator(): map(0) {}
-        iterator(const TableAnyMap &m): map(&m),ix(0) { leftmost(); }
-        iterator(const iterator &it): map(it.map),ix(it.ix) {}
-    
-        iterator &operator =(const iterator &it) { map = it.map,ix = it.ix; return *this; }
-
-        operator bool() const { return map && ix < map->n; }
-
-        // no checking here!
-        void *data() const { return map->data[ix].value; }
-        size_t key() const { return map->data[ix].key; }
-
-        iterator &operator ++() { forward(); return *this; }  
-
-    protected:
-        void leftmost()
-        {
-            // search smallest branch (go left as far as possible)
-            const TableAnyMap *nmap;
-            while((nmap = map->left) != 0) map = nmap;
-        }
-
-        void forward();
-
-		// pointers to map and index within
-        const TableAnyMap *map;
-        int ix;
-    };
-
-    void _init(size_t k,void *t) { data[0](k,t); n = 1; }
-
-    void *_toleft(int tsize,size_t k,void *t)
-    {
-        if(left)
-            return left->_set(tsize,k,t);
-        else {
-            (left = _newmap(this))->_init(k,t);
-            return 0;
-        }
-    }
-
-    void *_toright(int tsize,size_t k,void *t)
-    {
-        if(right)
-            return right->_set(tsize,k,t);
-        else {
-            (right = _newmap(this))->_init(k,t);
-            return 0;
-        }
-    }
-
-    void *_toleft(int tsize,Data &v) { return _toleft(tsize,v.key,v.value); }
-    void *_toright(int tsize,Data &v) { return _toright(tsize,v.key,v.value); }
-
-    void *_set(int tsize,size_t k,void *t);
-    void *_find(int tsize,size_t k) const;
-    void *_remove(int tsize,size_t k);
-
-#ifdef FLEXT_DEBUG
-    void _check(int tsize);
-#endif
-
-    Data *data;
-    TableAnyMap *parent,*left,*right;
-    int n;
-
-    //! return index of data item with key <= k
-    //! \note index can point past the last item!
-    unsigned int _tryix(size_t k) const
-    {
-        unsigned int ix = 0,b = n;
-		while(ix != b) {
-			const unsigned int c = (ix+b)>>1;
-			const size_t dk = data[c].key;
-			if(k == dk)
-				return c;
-			else if(k < dk)
-				b = c;
-			else if(ix < c)
-				ix = c;
-			else
-				return b;
-		}
-        return ix;
-    }
-
-    void _eraseempty(TableAnyMap *&b)
-    {
-        if(!b->n) { 
-            // remove empty branch
-            _delmap(b); b = 0; 
-        }
-    }
-
-    void _getsmall(Data &dt);
-    void _getbig(Data &dt);
-
-private:
-    // hide, so that it can't be used.....
-    explicit TableAnyMap(const TableAnyMap &): data(NULL) {}
-    TableAnyMap &operator =(const TableAnyMap &) { return *this; }
-};
-
-template <typename K,typename T,int N = 8>
-class TablePtrMap
-    : 
-#if (defined(_MSC_VER) && _MSC_VER < 1300) || defined(__BORLANDC__) || defined(__MWERKS__)
-    public  // necessary for VC6
-#endif
-    FLEXT_TEMPINST(TableAnyMap)
-{
-public:
-    TablePtrMap(): TableAnyMap(0,slots),count(0) {}
-    virtual ~TablePtrMap() { clear(); }
-
-    virtual void clear() { TableAnyMap::clear(); count = 0; }
-
-    inline int size() const { return count; }
-
-    inline T insert(K k,T t) 
-    { 
-        void *d = TableAnyMap::insert(N,*(size_t *)&k,(void *)t); 
-        if(!d) ++count;
-        return (T)d;
-    }
-
-    inline T find(K k) const { return (T)TableAnyMap::find(N,*(size_t *)&k); }
-
-    inline T remove(K k) 
-    { 
-        void *d = TableAnyMap::remove(N,*(size_t *)&k); 
-        if(LIKELY(d)) --count;
-        return (T)d;
-    }
-
-
-    class iterator
-        : TableAnyMap::iterator
-    {
-    public:
-        iterator() {}
-        iterator(const TablePtrMap &m): TableAnyMap::iterator(m) {}
-        iterator(const iterator &it): TableAnyMap::iterator(it) {}
-
-        // this ugly syntax (cast to parent class) is needed for MSVC6 
-
-        inline iterator &operator =(const iterator &it) { ((TableAnyMap::iterator &)*this) = it; return *this; }
-
-        inline operator bool() const { return (bool)((TableAnyMap::iterator &)*this); } 
-        inline T data() const { return (T)(((TableAnyMap::iterator &)*this).data()); }
-        inline K key() const { return (K)(((TableAnyMap::iterator &)*this).key()); }
-
-        inline iterator &operator ++() { ++((TableAnyMap::iterator &)*this); return *this; }  
-    };
-
-protected:
-    TablePtrMap(TableAnyMap *p): TableAnyMap(p,slots),count(0) {}
-
-    virtual TableAnyMap *_newmap(TableAnyMap *parent) { return new TablePtrMap(parent); }
-    virtual void _delmap(TableAnyMap *map) { delete (TablePtrMap *)map; }
-
-    int count;
-    Data slots[N];
-
-private:
-    explicit TablePtrMap(const TableAnyMap &p) {}
-};
-            
-#include "flpopns.h"
-
-//! @} // FLEXT_SUPPORT
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flmeth.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flmeth.cpp
deleted file mode 100755
index 554f4066af1d50768f0b74e5324f6bfc46a857fb..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flmeth.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flmeth.cpp
-    \brief Method processing of flext base class.
-*/
- 
-#ifndef __FLEXT_METH_CPP
-#define __FLEXT_METH_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-#include <cstring>
-#include <cstdarg>
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::MethItem::MethItem(AttrItem *conn):
-    Item(conn),index(0),
-    argc(0),args(NULL)
-    ,fun(NULL)
-{}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::MethItem::~MethItem()
-{ 
-    if(args) delete[] args; 
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MethItem::SetArgs(methfun _fun,int _argc,metharg *_args)
-{
-    fun = _fun;
-    if(args) delete[] args;
-    argc = _argc,args = _args;
-}
-
-/*! \brief Add a method to the queue
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddMethod(ItemCont *ma,int inlet,const t_symbol *tag,methfun fun,metharg tp,...)
-{
-#ifdef FLEXT_LOG_MSGS
-	post("addmethod %i:%s",inlet,GetString(tag));
-#endif
-
-    va_list marker; 
-
-    // at first just count the arg type list (in argc)
-    int argc = 0;
-    va_start(marker,tp);
-    metharg *args = NULL,arg = tp;
-    for(; arg != a_null; ++argc) arg = (metharg)va_arg(marker,int); //metharg);
-    va_end(marker);
-    
-    if(argc > 0) {
-        if(argc > FLEXT_MAXMETHARGS) {
-            error("flext - method %s: only %i arguments are type-checkable: use variable argument list for more",tag?GetString(tag):"?",FLEXT_MAXMETHARGS);
-            argc = FLEXT_MAXMETHARGS;
-        }
-
-        args = new metharg[argc];
-
-        va_start(marker,tp);
-        metharg a = tp;
-        for(int ix = 0; ix < argc; ++ix) {
-#ifdef FLEXT_DEBUG
-            if(a == a_list && ix > 0) {
-                ERRINTERNAL();
-            }
-#endif
-#if FLEXT_SYS == FLEXT_SYS_PD && defined(FLEXT_COMPATIBLE)
-            if(a == a_pointer) {
-                post("Pointer arguments are not allowed in compatibility mode"); 
-            }
-#endif
-            args[ix] = a;
-            a = (metharg)va_arg(marker,int); //metharg);
-        }
-        va_end(marker);
-    }
-    
-    MethItem *mi = new MethItem;
-    mi->index = ma->Members();
-    mi->SetArgs(fun,argc,args);
-    ma->Add(mi,tag,inlet);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ListMethods(AtomList &la,int inlet) const
-{
-	typedef TablePtrMap<int,const t_symbol *,32> MethList;
-    MethList list[2];
-    ItemCont *clmethhead = ClMeths(thisClassId());
-
-    int i;
-    for(i = 0; i <= 1; ++i) {
-        ItemCont *a = i?methhead:clmethhead;
-        if(a && a->Contained(inlet)) {
-            ItemSet &ai = a->GetInlet(inlet);
-            for(FLEXT_TEMP_TYPENAME ItemSet::iterator as(ai); as; ++as) {
-                for(Item *al = as.data(); al; al = al->nxt) {
-                    MethItem *aa = (MethItem *)al;
-                    // check it's not related to an attribute
-                    if(!aa->IsAttr()) {
-                        list[i].insert(aa->index,as.key());
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    la((int)list[0].size()+(int)list[1].size());
-    int ix = 0;
-    for(i = 0; i <= 1; ++i)
-        for(MethList::iterator it(list[i]); it; ++it) 
-            SetSymbol(la[ix++],it.data());
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::cb_ListMethods(flext_base *c,int argc,const t_atom *argv)
-{ 
-    Locker lock(c);
-    if(c->HasAttributes() && (argc == 0 || (argc == 1 && CanbeInt(argv[0])))) {
-        // defined in flsupport.cpp
-        int inlet = argc?GetAInt(argv[0]):0;
-        AtomListStatic<32> la;
-        c->ListMethods(la,inlet);
-        c->ToOutAnything(c->GetOutAttr(),sym_methods,la.Count(),la.Atoms());
-        return true;
-    }
-    else
-        return false;
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_METH_CPP
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flmsg.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flmsg.cpp
deleted file mode 100755
index 2900c115833095c69ab5b8fb720c1769912871a6..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flmsg.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flmsg.cpp
-    \brief Message processing of flext base class.
-*/
- 
-#ifndef __FLEXT_MSG_CPP
-#define __FLEXT_MSG_CPP
-
-#include "flext.h"
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::TryMethTag(Item *lst,const t_symbol *tag,int argc,const t_atom *argv)
-{
-    for(; lst; lst = lst->nxt) {
-        MethItem *m = (MethItem *)lst;
-
-//        FLEXT_LOG3("found method tag %s: inlet=%i, argc=%i",GetString(tag),m->inlet,argc);
-    
-        if(m->attr) {
-            // attributes are treated differently
-
-            if(m->attr->IsGet())
-                return DumpAttrib(tag,m->attr);
-            else
-                return SetAttrib(tag,m->attr,argc,argv);
-        }
-        else {
-            if(m->argc == 1) {
-                if(m->args[0] == a_list) {
-                    // try list
-                    if(((methfun_V)m->fun)(this,argc,const_cast<t_atom *>(argv))) return true;
-                }
-                else if(m->args[0] == a_any) {
-                    // try anything
-                    if(((methfun_A)m->fun)(this,tag,argc,const_cast<t_atom *>(argv))) return true;
-                }
-            }
-
-            // try matching number of args
-            if(m->argc == argc) {
-                int ix;
-                t_any aargs[FLEXT_MAXMETHARGS];
-                bool ok = true;
-                for(ix = 0; ix < argc && ok; ++ix) {
-                    switch(m->args[ix]) {
-                    case a_float: {
-                        if(IsFloat(argv[ix])) aargs[ix].ft = GetFloat(argv[ix]);
-                        else if(IsInt(argv[ix])) aargs[ix].ft = (float)GetInt(argv[ix]);
-                        else ok = false;
-                        
-                        if(ok) FLEXT_LOG2("int arg %i = %f",ix,aargs[ix].ft);
-                        break;
-                    }
-                    case a_int: {
-                        if(IsFloat(argv[ix])) aargs[ix].it = (int)GetFloat(argv[ix]);
-                        else if(IsInt(argv[ix])) aargs[ix].it = GetInt(argv[ix]);
-                        else ok = false;
-                        
-                        if(ok) FLEXT_LOG2("float arg %i = %i",ix,aargs[ix].it);
-                        break;
-                    }
-                    case a_symbol: {
-                        if(IsSymbol(argv[ix])) aargs[ix].st = GetSymbol(argv[ix]);
-                        else ok = false;
-                        
-                        if(ok) FLEXT_LOG2("symbol arg %i = %s",ix,GetString(aargs[ix].st));
-                        break;
-                    }
-#if FLEXT_SYS == FLEXT_SYS_PD
-                    case a_pointer: {
-                        if(IsPointer(argv[ix])) aargs[ix].pt = (t_gpointer *)GetPointer(argv[ix]);
-                        else ok = false;
-                        break;
-                    }
-#endif
-                    default:
-                        error("Argument type illegal");
-                        ok = false;
-                    }
-                }
-
-                if(ok && ix == argc) {
-                    switch(argc) {
-                    case 0: return ((methfun_0)m->fun)(this); 
-                    case 1: return ((methfun_1)m->fun)(this,aargs[0]); 
-                    case 2: return ((methfun_2)m->fun)(this,aargs[0],aargs[1]); 
-                    case 3: return ((methfun_3)m->fun)(this,aargs[0],aargs[1],aargs[2]); 
-                    case 4: return ((methfun_4)m->fun)(this,aargs[0],aargs[1],aargs[2],aargs[3]); 
-                    case 5: return ((methfun_5)m->fun)(this,aargs[0],aargs[1],aargs[2],aargs[3],aargs[4]); 
-                    default:
-                        FLEXT_ASSERT(false);
-                    }
-                }
-            }
-        }
-    }
-    return false;
-}
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::TryMethAny(Item *lst,const t_symbol *s,int argc,const t_atom *argv)
-{
-    for(; lst; lst = lst->nxt) {
-        MethItem *m = (MethItem *)lst;
-
-        if(!m->IsAttr() && m->argc == 1 && m->args[0] == a_any) {
-//          FLEXT_LOG4("found any method for %s: inlet=%i, symbol=%s, argc=%i",GetString(m->tag),m->inlet,GetString(s),argc);
-
-            if(((methfun_A)m->fun)(this,s,argc,const_cast<t_atom *>(argv))) return true;
-        }
-    }
-    return false;
-}
-
-/*! \brief Find a method item for a specific tag and arguments
-    \remark All attributes are also stored in the method list and retrieved by a member of the method item
-*/
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::FindMeth(int inlet,const t_symbol *s,int argc,const t_atom *argv)
-{
-    Item *lst;
-    ItemCont *clmethhead = ClMeths(thisClassId());
-
-    // search for exactly matching tag
-    if(UNLIKELY(methhead) && (lst = methhead->FindList(s,inlet)) != NULL && TryMethTag(lst,s,argc,argv)) return true;
-    if((lst = clmethhead->FindList(s,inlet)) != NULL && TryMethTag(lst,s,argc,argv)) return true;
-
-    // if nothing found try any inlet
-    if(UNLIKELY(methhead) && (lst = methhead->FindList(s,-1)) != NULL && TryMethTag(lst,s,argc,argv)) return true;
-    if((lst = clmethhead->FindList(s,-1)) != NULL && TryMethTag(lst,s,argc,argv)) return true;
-
-    return false;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::FindMethAny(int inlet,const t_symbol *s,int argc,const t_atom *argv)
-{
-    Item *lst;
-    ItemCont *clmethhead = ClMeths(thisClassId());
-
-    if(UNLIKELY(methhead) && (lst = methhead->FindList(sym_anything,inlet)) != NULL && TryMethAny(lst,s,argc,argv)) return true;
-    if((lst = clmethhead->FindList(sym_anything,inlet)) != NULL && TryMethAny(lst,s,argc,argv)) return true;
-
-    // if nothing found try any inlet
-    if(UNLIKELY(methhead) && (lst = methhead->FindList(sym_anything,-1)) != NULL && TryMethAny(lst,s,argc,argv)) return true;
-    if((lst = clmethhead->FindList(sym_anything,-1)) != NULL && TryMethAny(lst,s,argc,argv)) return true;
-
-    return false;
-}
-
-/*! \brief All the message processing
-    The messages of all the inlets go here and are promoted to the registered callback functions
-*/
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::CbMethodHandler(int inlet,const t_symbol *s,int argc,const t_atom *argv)
-{
-    static bool trap = false;
-    bool ret;
-
-    curtag = s;
-
-#ifdef FLEXT_LOG_MSGS
-	post("methodmain inlet:%i args:%i symbol:%s",inlet,argc,s?GetString(s):"");
-#endif
-
-    try {
-        ret = FindMeth(inlet,s,argc,argv);
-#ifdef FLEXT_LOG_MSGS
-		if(ret) post("found %s message in %s,%i",GetString(s),__FILE__,__LINE__);
-#endif
-        if(ret) goto end;
-
-        if(argc == 1) {
-            if(s == sym_list) {
-                // for 1-element lists try the single atom (this is the format output by [route])
-                if(IsFloat(argv[0]))
-                    ret = FindMeth(inlet,sym_float,1,argv);
-                else if(IsInt(argv[0]))
-                    ret = FindMeth(inlet,sym_int,1,argv);
-                else if(IsSymbol(argv[0]))
-                    ret = FindMeth(inlet,sym_symbol,1,argv);
-    #if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_COMPATIBLE)
-                else if(IsPointer(argv[0]))
-                    ret = FindMeth(inlet,sym_pointer,1,argv);
-    #endif
-                if(ret) goto end;
-            }
-            else {
-                if(s == sym_float) {
-    #if FLEXT_SYS == FLEXT_SYS_MAX
-                    t_atom at;
-                    // If float message is not explicitly handled: try int handler instead
-                    SetInt(at,(int)GetFloat(argv[0]));
-                    ret = FindMeth(inlet,sym_int,1,&at);
-                    if(ret) goto end;
-    #endif
-                    // If not explicitly handled: try list handler instead
-                    ret = FindMeth(inlet,sym_list,1,argv);
-                    if(ret) goto end;
-                }
-    #if FLEXT_SYS == FLEXT_SYS_MAX
-                else if(s == sym_int) {
-                    t_atom at;
-                    // If int message is not explicitly handled: try float handler instead
-                    SetFloat(at,(float)GetInt(argv[0]));
-                    ret = FindMeth(inlet,sym_float,1,&at);
-                    if(ret) goto end;
-                    // If not explicitly handled: try list handler instead
-                    ret = FindMeth(inlet,sym_list,1,argv);
-                    if(ret) goto end;
-                }
-    #endif
-                else if(s == sym_symbol) {
-                    ret = FindMeth(inlet,sym_list,1,argv);
-                    if(ret) goto end;
-                }
-    #if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_COMPATIBLE)
-                else if(s == sym_pointer) {
-                    ret = FindMeth(inlet,sym_list,1,argv);
-                    if(ret) goto end;
-                }
-    #endif
-            }
-        }
-        else if(argc == 0) {
-            // If symbol message (pure anything without args) is not explicitly handled: try list handler instead
-            if(s == sym_bang)
-                // bang is equal to an empty list
-                ret = FindMeth(inlet,sym_list,0,NULL);
-            else {
-                t_atom at;
-                SetSymbol(at,s);
-                ret = FindMeth(inlet,sym_list,1,&at);
-            }
-#ifdef FLEXT_LOG_MSGS
-			if(ret) post("found %s message in %s,%i",GetString(sym_list),__FILE__,__LINE__);
-#endif
-            if(ret) goto end;
-        }
-
-        // if distmsgs is switched on then distribute list elements over inlets (Max/MSP behavior)
-        if(DoDist() && inlet == 0 && s == sym_list && insigs <= 1 && !trap) {
-            int i = incnt;
-            if(i > argc) i = argc;
-            for(--i; i >= 0; --i) { // right to left distribution
-                const t_symbol *sym = NULL;
-                if(IsFloat(argv[i])) sym = sym_float;
-                else if(IsInt(argv[i])) sym = sym_int;
-                else if(IsSymbol(argv[i])) sym = sym_symbol;
-    #if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_COMPATIBLE)
-                else if(IsPointer(argv[i])) sym = sym_pointer;  // can pointer atoms occur here?
-    #endif
-
-                if(sym) {
-                    trap = true;
-                    CbMethodHandler(i,sym,1,argv+i);
-                    trap = false;
-                }
-            }
-            
-            goto end;
-        }
-        
-        ret = FindMethAny(inlet,s,argc,argv);
-
-        if(!ret) ret = CbMethodResort(inlet,s,argc,argv);
-    }
-    catch(std::exception &x) {
-        error("%s - %s: %s",thisName(),GetString(s),x.what());
-        ret = false;
-    }
-    catch(const char *txt) {
-        error("%s - %s: %s",thisName(),GetString(s),txt);
-        ret = false;
-    }
-    catch(...) {
-        error("%s - %s : Unknown exception while processing method",thisName(),GetString(s));
-        ret = false;
-    }
-
-end:
-    curtag = NULL;
-
-    return ret; // true if appropriate handler was found and called
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::m_method_(int inlet,const t_symbol *s,int argc,const t_atom *argv)
-{
-    post("%s: message unhandled - inlet:%i args:%i symbol:%s",thisName(),inlet,argc,s?GetString(s):"");
-    return false;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::CbMethodResort(int inlet,const t_symbol *s,int argc,const t_atom *argv)
-{
-    // call deprecated version
-    return m_method_(inlet,s,argc,argv);
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_MSG_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flout.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flout.cpp
deleted file mode 100755
index ad5caa26f3771d0ff18b2d95e0f7d6ecf77a84bb..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flout.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flout.cpp
-    \brief Implementation of the flext outlet functionality.
-*/
-
-#ifndef __FLEXT_OUT_CPP
-#define __FLEXT_OUT_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-#include <cstring>
- 
-#include "flpushns.h"
-
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToSysAtom(int n,const t_atom &at) const
-{ 
-    outlet *o = GetOut(n); 
-    if(LIKELY(o)) { 
-        CRITON(); 
-        if(IsSymbol(at))
-            outlet_symbol((t_outlet *)o,const_cast<t_symbol *>(GetSymbol(at))); 
-        else if(IsFloat(at))
-            outlet_float((t_outlet *)o,GetFloat(at)); 
-#if FLEXT_SYS == FLEXT_SYS_MAX
-        else if(IsInt(at))
-            outlet_flint((t_outlet *)o,GetInt(at));
-#endif
-#if FLEXT_SYS == FLEXT_SYS_PD
-        else if(IsPointer(at))
-            outlet_pointer((t_outlet *)o,GetPointer(at)); 
-#endif
-        else
-            error("Atom type not supported");
-        CRITOFF(); 
-    } 
-}
-#else
-#error Not implemented
-#endif
-
-#if defined(FLEXT_THREADS)
-    #if FLEXT_QMODE == 2
-        #define CHKTHR() (LIKELY((!IsThreadRegistered() || IsThread(flext::thrmsgid)) && !InDSP()))
-    #else
-        #define CHKTHR() (LIKELY(!IsThreadRegistered() && !InDSP()))
-    #endif
-#else
-    #define CHKTHR() (LIKELY(!InDSP()))
-#endif
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutBang(int n) const
-{
-    if(CHKTHR()) ToSysBang(n); else ToQueueBang(n);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutFloat(int n,float f) const
-{
-    if(CHKTHR()) ToSysFloat(n,f); else ToQueueFloat(n,f);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutInt(int n,int f) const
-{
-    if(CHKTHR()) ToSysInt(n,f); else ToQueueInt(n,f);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutSymbol(int n,const t_symbol *s) const
-{
-    if(CHKTHR()) ToSysSymbol(n,s); else ToQueueSymbol(n,s);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutAtom(int n,const t_atom &at) const
-{
-    if(CHKTHR()) ToSysAtom(n,at); else ToQueueAtom(n,at);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutList(int n,int argc,const t_atom *argv) const
-{
-    if(CHKTHR()) ToSysList(n,argc,argv); else ToQueueList(n,argc,argv);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToOutAnything(int n,const t_symbol *s,int argc,const t_atom *argv) const
-{
-    if(CHKTHR()) ToSysAnything(n,s,argc,argv); else ToQueueAnything(n,s,argc,argv);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ToOutMsg(MsgBundle *mb)
-{
-    if(CHKTHR()) ToSysMsg(mb); else ToQueueMsg(mb);
-}
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::Forward(const t_symbol *recv,const t_symbol *s,int argc,const t_atom *argv)
-{
-    return CHKTHR()?SysForward(recv,s,argc,argv):QueueForward(recv,s,argc,argv); 
-}
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::InitInlets()
-{
-    bool ok = true;
-
-    // incnt has number of inlets (any type)
-    // insigs should be 0
-
-    FLEXT_ASSERT(!insigs && !inlets);
-
-    // ----------------------------------
-    // create inlets
-    // ----------------------------------
-
-#if FLEXT_SYS == FLEXT_SYS_MAX      
-    // copy inlet descriptions
-    indesc = new char *[incnt];
-    for(int i = 0; i < incnt; ++i) {
-        xlet &x = inlist[i];
-        indesc[i] = x.desc;
-        x.desc = NULL;
-    }
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-    inlets = incnt > 1?new px_object *[incnt-1]:NULL;
-#endif
-    
-    // type info is now in list array
-#if FLEXT_SYS == FLEXT_SYS_PD
-    {
-        int cnt = 0;
-        if(incnt >= 1) {
-            xlet &xi = inlist[0]; // points to first inlet
-            if(xi.tp == xlet_sig) ++insigs;
-            // else leftmost inlet is already there...
-            ++cnt;
-
-#if PD_MINOR_VERSION >= 37 && defined(PD_DEVEL_VERSION)
-            // set tooltip
-// this is on a per-class basis... we cannot really use it here
-//            if(xi.desc && *xi.desc) class_settip(thisClass(),gensym(xi.desc));
-#endif
-        }       
-
-        for(int ix = 1; ix < incnt; ++ix,++cnt) {
-            xlet &xi = inlist[ix]; // points to first inlet
-            t_inlet *in = NULL;
-            switch(xi.tp) {
-                case xlet_float:
-                case xlet_int: {
-                    if(ix > 9) { 
-                        // proxy inlet needed
-                        (inlets[ix-1] = (px_object *)pd_new(px_class))->init(this,ix);  // proxy for 2nd inlet messages 
-                        in = inlet_new(&x_obj->obj,&inlets[ix-1]->obj.ob_pd, (t_symbol *)sym_float, (t_symbol *)sym_float);  
-                    }
-                    else { 
-                        inlets[ix-1] = NULL;
-                        static char sym[] = " ft ?";
-                        sym[4] = '0'+ix;  
-                        in = inlet_new(&x_obj->obj, &x_obj->obj.ob_pd, (t_symbol *)sym_float, gensym(sym)); 
-                    }
-                    break;
-                }
-                case xlet_sym: 
-                    (inlets[ix-1] = (px_object *)pd_new(px_class))->init(this,ix);  // proxy for 2nd inlet messages 
-                    in = inlet_new(&x_obj->obj,&inlets[ix-1]->obj.ob_pd, (t_symbol *)sym_symbol, (t_symbol *)sym_symbol);  
-                    break;
-                case xlet_list:
-                    (inlets[ix-1] = (px_object *)pd_new(px_class))->init(this,ix);  // proxy for 2nd inlet messages 
-                    in = inlet_new(&x_obj->obj,&inlets[ix-1]->obj.ob_pd, (t_symbol *)sym_list, (t_symbol *)sym_list);  
-                    break;
-                case xlet_any:
-                    (inlets[ix-1] = (px_object *)pd_new(px_class))->init(this,ix);  // proxy for 2nd inlet messages 
-                    in = inlet_new(&x_obj->obj,&inlets[ix-1]->obj.ob_pd, 0, 0);  
-                    break;
-                case xlet_sig:
-                    inlets[ix-1] = NULL;
-#ifdef FLEXT_COMPATIBLE
-                    if(inlist[ix-1].tp != xlet_sig) {
-                        post("%s: All signal inlets must be left-aligned in compatibility mode",thisName());
-                        ok = false;
-                    }
-                    else 
-#endif
-                    {
-                        // pd is not able to handle signals and messages into the same inlet...
-                        in = inlet_new(&x_obj->obj, &x_obj->obj.ob_pd, (t_symbol *)sym_signal, (t_symbol *)sym_signal);  
-                        ++insigs;
-                    }
-                    break;
-                default:
-                    inlets[ix-1] = NULL;
-                    error("%s: Wrong type for inlet #%i: %i",thisName(),ix,(int)inlist[ix].tp);
-                    ok = false;
-            } 
-
-#if PD_MINOR_VERSION >= 37 && defined(PD_DEVEL_VERSION)
-            // set tooltip
-            if(in && xi.desc && *xi.desc) inlet_settip(in,gensym(xi.desc));
-#endif
-        }
-
-        incnt = cnt;
-    }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    {
-        int ix,cnt;
-        // count leftmost signal inlets
-        while(insigs < incnt && inlist[insigs].tp == xlet_sig) ++insigs;
-        
-        for(cnt = 0,ix = incnt-1; ix >= insigs; --ix,++cnt) {
-            xlet &xi = inlist[ix];
-            if(!ix) {
-                if(xi.tp != xlet_any) {
-                    error("%s: Leftmost inlet must be of type signal or anything",thisName());
-                    ok = false;
-                }
-            }
-            else {
-                FLEXT_ASSERT(inlets);
-                switch(xi.tp) {
-                    case xlet_sig:
-                        inlets[ix-1] = NULL;
-                        error("%s: All signal inlets must be left-aligned",thisName());
-                        ok = false;
-                        break;
-                    case xlet_float: {
-						if(ix < 10) {
-							inlets[ix-1] = NULL;
-                            floatin(x_obj,ix);
-							break;
-						}
-						else
-							goto makeproxy;
-					}
-                    case xlet_int: {
-						if(ix < 10) {
-							inlets[ix-1] = NULL;
-                            intin(x_obj,ix);
-							break;
-						}
-						else
-							goto makeproxy;
-					}
-					makeproxy:
-                    case xlet_any: // non-leftmost
-                    case xlet_sym:
-                    case xlet_list:
-                        inlets[ix-1] = (px_object *)proxy_new(x_obj,ix,&((flext_hdr *)x_obj)->curinlet);  
-                        break;
-                    default:
-                        inlets[ix-1] = NULL;
-                        error("%s: Wrong type for inlet #%i: %i",thisName(),ix,(int)xi.tp);
-                        ok = false;
-                } 
-            }
-        }
-        
-        if(inlets)
-            while(ix >= 0) inlets[ix--] = NULL;
-	}
-#else
-#error
-#endif
-
-    return ok;  
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::InitOutlets()
-{
-    bool ok = true;
-    int procattr = HasAttributes()?1:0;
-
-    // outcnt has number of inlets (any type)
-    // outsigs should be 0
-
-    FLEXT_ASSERT(outsigs == 0);
-
-    // ----------------------------------
-    // create outlets
-    // ----------------------------------
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    // for Max/MSP the rightmost outlet has to be created first
-    outlet *attrtmp = NULL;
-    if(procattr) 
-        attrtmp = (outlet *)newout_anything(thisHdr());
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_MAX      
-    // copy outlet descriptions
-    outdesc = new char *[outcnt];
-    for(int i = 0; i < outcnt; ++i) {
-        xlet &xi = outlist[i];
-        outdesc[i] = xi.desc; 
-        xi.desc = NULL;
-    }
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-    if(outcnt+procattr)
-        outlets = new outlet *[outcnt+procattr];
-    else
-        outlets = NULL;
-
-    // type info is now in list array
-#if FLEXT_SYS == FLEXT_SYS_PD
-    for(int ix = 0; ix < outcnt; ++ix) 
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    for(int ix = outcnt-1; ix >= 0; --ix) 
-#else
-#error
-#endif
-    {
-        switch(outlist[ix].tp) {
-            case xlet_float:
-                outlets[ix] = (outlet *)newout_float(&x_obj->obj);
-                break;
-            case xlet_int: 
-                outlets[ix] = (outlet *)newout_flint(&x_obj->obj);
-                break;
-            case xlet_sig:
-                outlets[ix] = (outlet *)newout_signal(&x_obj->obj);
-                ++outsigs;
-                break;
-            case xlet_sym:
-                outlets[ix] = (outlet *)newout_symbol(&x_obj->obj);
-                break;
-            case xlet_list:
-                outlets[ix] = (outlet *)newout_list(&x_obj->obj);
-                break;
-            case xlet_any:
-                outlets[ix] = (outlet *)newout_anything(&x_obj->obj);
-                break;
-            default:
-                ;
-#ifdef FLEXT_DEBUG
-                ERRINTERNAL();
-#endif
-                ok = false;
-        } 
-    }
-#else
-#error
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-    if(procattr) {
-        // attribute dump outlet is the last one
-        outlets[outcnt] = 
-#if FLEXT_SYS == FLEXT_SYS_PD
-        // attribute dump outlet is the last one
-            (outlet *)newout_anything(&x_obj->obj);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-            attrtmp;
-#endif
-
-    }
-#endif
-    
-    return ok;
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_OUT_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flpopns.h b/externals/grill/trunk/flext/libbuild/include/flext/flpopns.h
deleted file mode 100755
index d5dfa5a9b4f773290a9a367935b15c38f2e055c1..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flpopns.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-#ifdef FLEXT_USE_NAMESPACE
-
-#ifndef _FLEXT_IN_NAMESPACE
-    #error flext namespace pop is unbalanced
-#endif
-
-#define __FLEXT_IN_NAMESPACE (_FLEXT_IN_NAMESPACE-1)
-#undef _FLEXT_IN_NAMESPACE
-#define _FLEXT_IN_NAMESPACE __FLEXT_IN_NAMESPACE
-#undef __FLEXT_IN_NAMESPACE
-
-#if _FLEXT_IN_NAMESPACE == 0
-
-    #if 1 //defined(FLEXT_SHARED)
-    } // namespace
-    using namespace flext_ns;
-    #elif defined(__GNUC__)
-    } // anonymous namespace (don't export symbols)
-    #endif
-    
-    #undef _FLEXT_IN_NAMESPACE
-    
-#endif
-    
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flprefix.h b/externals/grill/trunk/flext/libbuild/include/flext/flprefix.h
deleted file mode 100755
index edcb1d8a75d20b4da03de992e008c6cc3c0364e8..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flprefix.h
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flprefix.h
-    \brief Try to find out the platform.
-*/
- 
-#ifndef __FLEXT_PREFIX_H
-#define __FLEXT_PREFIX_H
-
-// --- definitions for FLEXT_SYS ---------------------
-#define FLEXT_SYS_UNKNOWN   0
-
-#ifndef FLEXT_SYS_MAX
-    #define FLEXT_SYS_MAX   1
-#else
-    // already defined
-    #undef FLEXT_SYS_MAX
-    #define FLEXT_SYS_MAX   1
-    #define FLEXT_SYS FLEXT_SYS_MAX
-#endif
-
-#ifndef FLEXT_SYS_PD
-    #define FLEXT_SYS_PD    2
-#else
-    // already defined
-    #undef FLEXT_SYS_PD
-    #define FLEXT_SYS_PD    2
-    #define FLEXT_SYS FLEXT_SYS_PD
-#endif
-
-#ifndef FLEXT_SYS_JMAX
-    #define FLEXT_SYS_JMAX  3
-#else
-    // already defined
-    #undef FLEXT_SYS_JMAX
-    #define FLEXT_SYS_JMAX  3
-    #define FLEXT_SYS FLEXT_SYS_JMAX
-#endif
-
-// --- definitions for FLEXT_OS ----------------------
-#define FLEXT_OS_UNKNOWN    0
-#define FLEXT_OS_WIN    1
-#define FLEXT_OS_MAC    2  
-#define FLEXT_OS_LINUX  3
-#define FLEXT_OS_IRIX   4
-
-// --- definitions for FLEXT_OS_API ---------------------
-#define FLEXT_OSAPI_UNKNOWN 0
-
-#define FLEXT_OSAPI_UNIX_POSIX 1
-
-#define FLEXT_OSAPI_MAC_CLASSIC 2
-#define FLEXT_OSAPI_MAC_CARBON 3
-#define FLEXT_OSAPI_MAC_MACH 4
-
-#define FLEXT_OSAPI_WIN_NATIVE 5  // WIN32 Platform
-#define FLEXT_OSAPI_WIN_POSIX 6    // POSIX API (e.g. cygwin)
-
-// --- definitions for FLEXT_CPU ---------------------
-#define FLEXT_CPU_UNKNOWN   0
-#define FLEXT_CPU_IA32   1
-#define FLEXT_CPU_PPC    2
-#define FLEXT_CPU_MIPS   3
-#define FLEXT_CPU_ALPHA  4
-
-#define FLEXT_CPU_IA64   5 // Itanium
-#define FLEXT_CPU_X86_64 6 // AMD-K8, EMT64
-#define FLEXT_CPU_PPC64  7 // G5 in 64 bit mode
-
-// compatibility
-#define FLEXT_CPU_INTEL FLEXT_CPU_IA32
-
-// --- definitions for FLEXT_THREADS -----------------
-#define FLEXT_THR_POSIX 1 // pthreads
-#define FLEXT_THR_WIN32 2 // Win32 native
-#define FLEXT_THR_MP    3 // MacOS MPThreads
-
-// ---------------------------------------------------
-// support old definitions
-
-#ifndef FLEXT_SYS
-    #if defined(MAXMSP)
-        #define FLEXT_SYS FLEXT_SYS_MAX
-    //  #undef MAXMSP
-    #elif defined(PD)
-        #define FLEXT_SYS FLEXT_SYS_PD
-    //  #undef PD
-    //  #undef NT
-    #endif
-#endif
-
-#if defined(_DEBUG) && !defined(FLEXT_DEBUG)
-    #define FLEXT_DEBUG
-#endif
-
-// ---------------------------------------------------
-
-// Definition of supported real-time systems
-#if FLEXT_SYS == FLEXT_SYS_MAX || FLEXT_SYS == FLEXT_SYS_PD
-#else
-    #error "System must be defined by either FLEXT_SYS_MAX or FLEXT_SYS_PD"
-#endif
-
-// Definition of OS/CPU
-#if defined(_MSC_VER) || (defined(__ICC) && (FLEXT_OS == FLEXT_OS_WIN || defined(_WIN32)))
-    // Microsoft C++
-    // and Intel C++ (as guessed)
-    
-    #ifndef FLEXT_CPU
-        #if defined(_M_AMD64)
-            #define FLEXT_CPU FLEXT_CPU_X86_64
-        #elif defined(_M_IA64)
-            #define FLEXT_CPU FLEXT_CPU_IA64
-        #elif defined(_M_IX86)
-            #define FLEXT_CPU FLEXT_CPU_IA32
-        #elif defined(_M_PPC)
-            #define FLEXT_CPU FLEXT_CPU_PPC
-        #elif defined(_M_MRX000)
-            #define FLEXT_CPU FLEXT_CPU_MIPS
-        #elif defined(_M_ALPHA)
-            #define FLEXT_CPU FLEXT_CPU_ALPHA
-        #else
-            #define FLEXT_CPU FLEXT_CPU_UNKNOWN
-        #endif
-    #endif
-
-    #ifndef FLEXT_OS
-        #if defined(_WIN32) || defined(_WIN64)
-            #define FLEXT_OS FLEXT_OS_WIN
-            #define FLEXT_OSAPI FLEXT_OSAPI_WIN_NATIVE
-        #else
-            #define FLEXT_OS FLEXT_OS_UNKNOWN
-            #define FLEXT_OSAPI FLEXT_OSAPI_UNKNOWN
-        #endif
-    #endif
-
-
-#elif defined(__BORLANDC__) 
-    // Borland C++
-
-    #ifndef FLEXT_CPU
-        #define FLEXT_CPU FLEXT_CPU_INTEL
-    #endif
-    #ifndef FLEXT_OS
-        #define FLEXT_OS FLEXT_OS_WIN
-        #define FLEXT_OSAPI FLEXT_OSAPI_WIN_NATIVE
-    #else   
-        #define FLEXT_OSAPI FLEXT_OSAPI_UNKNOWN
-    #endif
-
-
-#elif defined(__MWERKS__)
-    // Metrowerks CodeWarrior
-
-    #ifdef __MACH__
-        // quick fix for OSX Mach-O
-        #ifdef __POWERPC__
-            #ifdef __LP64__
-                #define TARGET_CPU_PPC64 1
-            #else
-                #define TARGET_CPU_PPC 1
-            #endif
-        #else
-            #ifdef __LP64__
-                #define TARGET_CPU_X86_64 1
-            #else
-                #define TARGET_CPU_IA32 1
-            #endif
-        #endif
-        #define TARGET_OS_MAC 1
-        #define TARGET_API_MAC_OSX 1
-    #else
-        #ifndef __CONDITIONALMACROS__
-        #include <ConditionalMacros.h>
-        #endif
-    #endif
-
-    #ifndef FLEXT_CPU
-        #if TARGET_CPU_X86_64
-            #define FLEXT_CPU FLEXT_CPU_X86_64
-        #elif TARGET_CPU_X86
-            #define FLEXT_CPU FLEXT_CPU_IA32
-        #elif TARGET_CPU_PPC64
-            #define FLEXT_CPU FLEXT_CPU_PPC64
-        #elif TARGET_CPU_PPC
-            #define FLEXT_CPU FLEXT_CPU_PPC
-        #elif TARGET_CPU_MIPS
-            #define FLEXT_CPU FLEXT_CPU_MIPS
-        #elif TARGET_CPU_ALPHA
-            #define FLEXT_CPU FLEXT_CPU_ALPHA
-        #else
-            #define FLEXT_CPU FLEXT_CPU_UNKNOWN
-        #endif
-    #endif
-
-    #ifndef FLEXT_OS
-        #if TARGET_OS_MAC
-            #define FLEXT_OS FLEXT_OS_MAC
-        #elif TARGET_OS_WIN32
-            // assume Windows
-            #define FLEXT_OS FLEXT_OS_WIN
-        #else
-            #define FLEXT_OS FLEXT_OS_UNKNOWN
-        #endif
-    #endif
-    
-    #ifndef FLEXT_OSAPI
-        #if TARGET_API_MAC_MACH
-            // this is for Mach-O
-            // this has the precedence (MACH also supports Carbon, of course)
-            #define FLEXT_OSAPI FLEXT_OSAPI_MAC_MACH
-        #elif TARGET_API_MAC_CARBON
-            // this is for CFM
-            #define FLEXT_OSAPI FLEXT_OSAPI_MAC_CARBON
-        #else
-            #define FLEXT_OSAPI FLEXT_OSAPI_UNKNOWN
-        #endif
-    #endif
-    
-    // This is important for method and attribute callbacks
-    #pragma enumsalwaysint on
-    // This is important for everything
-    #pragma bool on
-
-#elif defined(__GNUG__) || (defined(__ICC) && (FLEXT_OS == FLEXT_OS_LINUX || defined(linux) || defined(__linux__)))
-
-    // GNU C++
-    // and Intel (as suggested by Tim Blechmann)
-
-    #ifndef FLEXT_CPU
-        #if defined(__x86_64__)
-            #define FLEXT_CPU FLEXT_CPU_X86_64
-        #elif defined(_X86_) || defined(__i386__) || defined(__i586__) || defined(__i686__)
-            #define FLEXT_CPU FLEXT_CPU_IA32
-        #elif defined(__ppc64__)
-            #define FLEXT_CPU FLEXT_CPU_PPC64
-        #elif defined(__ppc__)
-            #define FLEXT_CPU FLEXT_CPU_PPC
-        #elif defined(__MIPS__)
-            #define FLEXT_CPU FLEXT_CPU_MIPS
-        #else
-            #define FLEXT_CPU FLEXT_CPU_UNKNOWN
-        #endif
-    #endif
-
-    #ifndef FLEXT_OS
-        #if defined(linux) || defined(__linux__)
-            #define FLEXT_OS FLEXT_OS_LINUX
-        #elif defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__MINGW32__)
-            #define FLEXT_OS FLEXT_OS_WIN
-        #elif defined(__APPLE__) && defined(__MACH__)
-            #define FLEXT_OS FLEXT_OS_MAC
-        // how about IRIX??
-        #else
-            #define FLEXT_OS FLEXT_OS_UNKNOWN
-        #endif
-    #endif
-
-    #ifndef FLEXT_OSAPI
-        #if FLEXT_OS == FLEXT_OS_MAC
-            #define FLEXT_OSAPI FLEXT_OSAPI_MAC_MACH
-        #elif FLEXT_OS == FLEXT_OS_WIN
-            #if defined(__MINGW32__)
-                #define FLEXT_OSAPI FLEXT_OSAPI_WIN_NATIVE
-            #else
-                #define FLEXT_OSAPI FLEXT_OSAPI_WIN_POSIX
-            #endif
-        #elif FLEXT_OS == FLEXT_OS_LINUX || FLEXT_OS == FLEXT_OS_IRIX
-            #define FLEXT_OSAPI FLEXT_OSAPI_UNIX_POSIX
-        #else
-            #define FLEXT_OSAPI FLEXT_OSAPI_UNKNOWN
-        #endif
-    #endif
-
-#elif defined(__MRC__) && defined(MPW_CPLUS)
-    // Apple MPW MrCpp
-
-    #if __MRC__ < 0x500
-        #error Apple MPW MrCpp v.5.0.0 or later compiler required
-    #endif
-
-    #ifndef FLEXT_CPU
-        #if defined(__POWERPC__)
-            #define FLEXT_CPU FLEXT_CPU_PPC
-        #else
-            #define FLEXT_CPU FLEXT_CPU_UNKNOWN
-        #endif
-    #endif
-
-    #ifndef FLEXT_OS
-        #if defined(macintosh)
-            #define FLEXT_OS FLEXT_OS_MAC
-        #else
-            #define FLEXT_OS FLEXT_OS_UNKNOWN
-        #endif
-    #endif
-
-    #ifndef FLEXT_OSAPI
-        #if FLEXT_OS == FLEXT_OS_MAC
-            #define FLEXT_OSAPI FLEXT_OSAPI_MAC_CLASSIC
-        #else
-            #define FLEXT_OSAPI FLEXT_OSAPI_UNKNOWN
-        #endif
-    #endif
-#endif
-
-
-
-#if FLEXT_OS == FLEXT_OS_WIN
-//  #pragma message("Compiling for Windows")
-
-    #if FLEXT_SYS == FLEXT_SYS_MAX
-//      #define WIN_VERSION 1
-    #elif FLEXT_SYS == FLEXT_SYS_PD
-//      #define PD
-//      #define NT
-    #endif
-#elif FLEXT_OS == FLEXT_OS_LINUX
-//  #pragma message("Compiling for Linux")
-
-    #if FLEXT_SYS == FLEXT_SYS_PD
-//      #define PD
-    #else
-        #error "Flext SYS/OS combination unknown"
-    #endif
-#elif FLEXT_OS == FLEXT_OS_IRIX
-//  #pragma message("Compiling for Irix")
-
-    #if FLEXT_SYS == FLEXT_SYS_PD
-//      #define PD
-    #else
-        #error "Flext SYS/OS combination unknown"
-    #endif
-#elif FLEXT_OS == FLEXT_OS_MAC
-//  #pragma message("Compiling for MacOS")
-
-    #if FLEXT_SYS == FLEXT_SYS_PD
-//      #define PD
-    #endif
-#else
-    #error "Operating system could not be determined"
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-//  #pragma message("Compiling for Max/MSP")
-#elif FLEXT_SYS == FLEXT_SYS_PD
-//  #pragma message("Compiling for PD")
-#endif
-
-// ----- set threading model -----
-// shared builds are always threaded
-#ifdef FLEXT_SHARED
-    #undef FLEXT_THREADS
-    #define FLEXT_THREADS
-#endif
-
-#ifdef FLEXT_THREADS
-    #undef FLEXT_THREADS
-    #if FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_MAC && FLEXT_OSAPI != FLEXT_OSAPI_MAC_MACH
-        // Max for CFM doesn't like posix threads
-        #define FLEXT_THREADS FLEXT_THR_MP      
-    #elif FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_WIN
-        // for wmax use native Windows threads
-        #define FLEXT_THREADS FLEXT_THR_WIN32
-    #else
-        #define FLEXT_THREADS FLEXT_THR_POSIX
-    #endif
-#endif
-
-// ----- macros for class names -----
-/*
-        With linux (flat linker namespace) and more than one flext-based external loaded all calls to static 
-        exported functions refer to the first instance loaded!
-        Therefore different class names are used so that the correct type of flext function is called.
-*/
-#ifdef __DOXYGEN__
-    #define FLEXT_CLASSDEF(CL) CL
-#elif defined(FLEXT_DEBUG)
-    #if defined(FLEXT_SHARED)
-        #define FLEXT_CLASSDEF(CL) CL##_shared_d
-    #elif defined(FLEXT_THREADS)
-        #define FLEXT_CLASSDEF(CL) CL##_multi_d
-    #else
-        #define FLEXT_CLASSDEF(CL) CL##_single_d
-    #endif
-#else
-    #if defined(FLEXT_SHARED)
-        #define FLEXT_CLASSDEF(CL) CL##_shared
-    #elif defined(FLEXT_THREADS)
-        #define FLEXT_CLASSDEF(CL) CL##_multi
-    #else
-        #define FLEXT_CLASSDEF(CL) CL##_single
-    #endif
-#endif
-
-
-/* Set the right calling convention (and exporting) for the OS */
-
-#if defined(_MSC_VER)
-	#ifdef FLEXT_SHARED
-        // for compiling a shared flext library FLEXT_EXPORTS must be defined
-        #ifdef FLEXT_EXPORTS
-		    #define FLEXT_SHARE __declspec(dllexport)
-        #else
-		    #define FLEXT_SHARE __declspec(dllimport)
-        #endif
-	#else
-		#define FLEXT_SHARE
-	#endif
-	#define FLEXT_EXT __declspec(dllexport)
-#else                   // other OS's
-	#define FLEXT_SHARE
-	#define FLEXT_EXT
-#endif
-
-
-// std namespace
-#ifdef __MWERKS__
-#	define STD std
-#else
-#	define STD
-#endif
-
-// branching hints
-#if __GNUC__ >= 3
-#	ifndef LIKELY
-#		define LIKELY(expression) (__builtin_expect(!!(expression), 1))
-#	endif
-#	ifndef UNLIKELY
-#		define UNLIKELY(expression) (__builtin_expect(!!(expression), 0))
-#	endif
-#else
-#	ifndef LIKELY
-#		define LIKELY(expression) (expression)
-#	endif
-#	ifndef UNLIKELY
-#		define UNLIKELY(expression) (expression)
-#	endif
-#endif
-
-// macro definitions for inline flext usage
-#ifdef FLEXT_INLINE
-#   define FLEXT_TEMPLATE template<typename flext_T>
-#   define FLEXT_TEMPIMPL(fun) template<typename flext_T> fun<flext_T>
-#   define FLEXT_TEMPINST(fun) fun<void>
-#   define FLEXT_TEMPSUB(fun) typename fun<flext_T>
-#   define FLEXT_TEMP_TYPENAME typename
-#else
-#   define FLEXT_TEMPLATE
-#   define FLEXT_TEMPIMPL(fun) fun
-#   define FLEXT_TEMPINST(fun) fun
-#   define FLEXT_TEMPSUB(fun) fun
-#   define FLEXT_TEMP_TYPENAME
-#endif
-
-#endif // __FLEXT_PREFIX_H
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flproxy.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flproxy.cpp
deleted file mode 100755
index 71b78a8e25ed744dc1b8c67e83297f602844f6b1..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flproxy.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flproxy.cpp
-    \brief Proxy classes for the flext base class.
-*/
- 
-#ifndef __FLEXT_PROXY_CPP
-#define __FLEXT_PROXY_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-
-#include "flpushns.h"
-
-// === proxy class for flext_base ============================
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-
-FLEXT_TEMPIMPL(t_class *FLEXT_CLASSDEF(flext_base))::px_class = NULL;
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::px_object::px_bang(px_object *obj)
-{
-    Locker lock(obj->base);
-    obj->base->CbMethodHandler(obj->index,sym_bang,0,NULL);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::px_object::px_float(px_object *obj,t_float f)
-{
-    t_atom a; SetFloat(a,f);
-    Locker lock(obj->base);
-    obj->base->CbMethodHandler(obj->index,sym_float,1,&a);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::px_object::px_symbol(px_object *obj,const t_symbol *s)
-{
-    t_atom a; SetSymbol(a,s);
-    Locker lock(obj->base);
-    obj->base->CbMethodHandler(obj->index,sym_symbol,1,&a);
-}
-
-/*
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::px_object::px_pointer(px_object *obj,const t_gpointer *p)
-{
-    t_atom a; SetPointer(a,p);
-    Locker lock(obj->base);
-    obj->base->CbMethodHandler(obj->index,sym_pointer,1,&a);
-}
-*/
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::px_object::px_anything(px_object *obj,const t_symbol *s,int argc,t_atom *argv)
-{
-    Locker lock(obj->base);
-    obj->base->CbMethodHandler(obj->index,s,argc,argv);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_bang(flext_hdr *c)
-{
-    Locker lock(c);
-    thisObject(c)->CbMethodHandler(0,sym_bang,0,NULL);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_float(flext_hdr *c,t_float f)
-{
-    t_atom a; SetFloat(a,f);
-    Locker lock(c);
-    thisObject(c)->CbMethodHandler(0,sym_float,1,&a);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_symbol(flext_hdr *c,const t_symbol *s)
-{
-    t_atom a; SetSymbol(a,s);
-    Locker lock(c);
-    thisObject(c)->CbMethodHandler(0,sym_symbol,1,&a);
-}
-
-/*
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_pointer(flext_hdr *c,const t_gpointer *p)
-{
-    t_atom a; SetPointer(a,p);
-    Locker lock(c);
-    thisObject(c)->CbMethodHandler(0,sym_pointer,1,&a);
-}
-*/
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_anything(flext_hdr *c,const t_symbol *s,int argc,t_atom *argv)
-{
-    Locker lock(c);
-    if(UNLIKELY(!s)) {
-        // apparently, this happens only in one case... object is a DSP object, but has no main DSP inlet...
-
-        // interpret tag from args
-        if(!argc)
-            s = sym_bang;
-        else if(argc == 1) {
-            if(IsFloat(*argv))
-                s = sym_float;
-            else if(IsSymbol(*argv))
-                s = sym_symbol;
-            else if(IsPointer(*argv))
-                s = sym_pointer;
-            else
-                FLEXT_ASSERT(false);
-        }
-        else
-            s = sym_list;
-    }
-
-    thisObject(c)->CbMethodHandler(0,s,argc,argv);
-}
-
-#define DEF_PROXYMSG(IX) \
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_px_ft ## IX(flext_hdr *c,t_float v) { t_atom atom; SetFloat(atom,v); Locker lock(c); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
-
-#define ADD_PROXYMSG(c,IX) \
-add_method1(c,cb_px_ft ## IX," ft " #IX,A_FLOAT)
-
-//AddMethod(c,0,flext::MakeSymbol("ft" #IX),cb_px_ft ## IX) 
-
-
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_anything(flext_hdr *c,const t_symbol *s,short argc,t_atom *argv)
-{
-    Locker lock(c);
-    int const ci = proxy_getinlet((t_object *)&c->obj);
-//    post("%s %i, cb_anything(%i)",__FILE__,__LINE__,ci);
-    thisObject(c)->CbMethodHandler(ci,s,argc,argv);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_int(flext_hdr *c,long v)
-{
-    t_atom atom; SetInt(atom,v);
-    Locker lock(c);
-    int const ci = proxy_getinlet((t_object *)&c->obj);
-    thisObject(c)->CbMethodHandler(ci,sym_int,1,&atom);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_float(flext_hdr *c,double v)
-{
-    t_atom atom; SetFloat(atom,v);
-    Locker lock(c);
-    int const ci = proxy_getinlet((t_object *)&c->obj);
-    thisObject(c)->CbMethodHandler(ci,sym_float,1,&atom);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_bang(flext_hdr *c)
-{
-    Locker lock(c);
-    int const ci = proxy_getinlet((t_object *)&c->obj);
-    thisObject(c)->CbMethodHandler(ci,sym_bang,0,NULL);
-}
-
-
-#define DEF_PROXYMSG(IX) \
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_px_in ## IX(flext_hdr *c,long v) { t_atom atom; SetInt(atom,v); Locker lock(c); thisObject(c)->CbMethodHandler(IX,sym_int,1,&atom); } \
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_px_ft ## IX(flext_hdr *c,double v) { t_atom atom; SetFloat(atom,v); Locker lock(c); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
-
-/*
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_px_in ## IX(flext_hdr *c,long v) { t_atom atom; SetInt(atom,v); Locker lock(c); thisObject(c)->CbMethodHandler(IX,sym_int,1,&atom); } \
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::cb_px_ft ## IX(flext_hdr *c,double v) { t_atom atom; SetFloat(atom,v); Locker lock(c); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
-*/
-
-#define ADD_PROXYMSG(c,IX) \
-addinx((method)(cb_px_in ## IX),IX); \
-addftx((method)(cb_px_ft ## IX),IX)
-
-/*
-add_method1(c,cb_px_in ## IX,"in" #IX,A_INT); \
-add_method1(c,cb_px_ft ## IX,"ft" #IX,A_FLOAT)
-
-AddMethod(c,0,flext::MakeSymbol("in" #IX),cb_px_in ## IX); \
-AddMethod(c,0,flext::MakeSymbol("ft" #IX),cb_px_ft ## IX) 
-*/
-
-#endif 
-
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
-
-DEF_PROXYMSG(1)
-DEF_PROXYMSG(2)
-DEF_PROXYMSG(3)
-DEF_PROXYMSG(4)
-DEF_PROXYMSG(5)
-DEF_PROXYMSG(6)
-DEF_PROXYMSG(7)
-DEF_PROXYMSG(8)
-DEF_PROXYMSG(9)
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::SetProxies(t_class *c,bool dsp)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    // for leftmost inlet
-    class_addbang(c,cb_bang);
-    if(!dsp) class_addfloat(c,cb_float);
-    class_addsymbol(c,cb_symbol);
-//    class_addpointer(c,cb_pointer);
-    class_addlist(c,cb_anything);
-    class_addanything(c,cb_anything);
-
-    // proxy for extra inlets
-    if(UNLIKELY(!px_class)) {
-        // only once
-        px_class = class_new(gensym(const_cast<char *>(" flext_base proxy ")),NULL,NULL,sizeof(px_object),CLASS_PD|CLASS_NOINLET, A_NULL);
-        class_addbang(px_class,px_object::px_bang); // for other inlets
-        class_addfloat(px_class,px_object::px_float); // for other inlets
-        class_addsymbol(px_class,px_object::px_symbol); // for other inlets
-//        class_addpointer(px_class,px_object::px_pointer); // for other inlets
-        class_addlist(px_class,px_object::px_anything); // for other inlets
-        class_addanything(px_class,px_object::px_anything); // for other inlets
-    }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    addbang((method)cb_bang);
-    addint((method)cb_int);  
-    addfloat((method)cb_float);  
-    addmess((method)cb_anything,const_cast<char *>("list"),A_GIMME,A_NOTHING); // must be explicitly given, otherwise list elements are distributed over inlets
-    addmess((method)cb_anything,const_cast<char *>("anything"),A_GIMME,A_NOTHING);
-#else
-#error Not implemented!
-#endif  
-
-    // setup non-leftmost ints and floats
-    ADD_PROXYMSG(c,1);
-    ADD_PROXYMSG(c,2);
-    ADD_PROXYMSG(c,3);
-    ADD_PROXYMSG(c,4);
-    ADD_PROXYMSG(c,5);
-    ADD_PROXYMSG(c,6);
-    ADD_PROXYMSG(c,7);
-    ADD_PROXYMSG(c,8);
-    ADD_PROXYMSG(c,9);
-}
-#endif
-
-#include "flpopns.h"
-
-#endif // __FLEXT_PROXY_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flpushns.h b/externals/grill/trunk/flext/libbuild/include/flext/flpushns.h
deleted file mode 100755
index 9f7ad812e8f9b15807d66784a284f34be111c16d..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flpushns.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-#ifdef FLEXT_USE_NAMESPACE
-
-#ifndef _FLEXT_IN_NAMESPACE
-    #define _FLEXT_IN_NAMESPACE 0
-#endif
-
-#if _FLEXT_IN_NAMESPACE == 0
-
-    #if 1 //defined(FLEXT_SHARED)
-    namespace flext_ns {
-    #elif defined(__GNUC__)
-    namespace {  // anonymous namespace (don't export symbols)
-    #endif
-
-#endif
-
-#define __FLEXT_IN_NAMESPACE (_FLEXT_IN_NAMESPACE+1)
-#undef _FLEXT_IN_NAMESPACE
-#define _FLEXT_IN_NAMESPACE __FLEXT_IN_NAMESPACE
-#undef __FLEXT_IN_NAMESPACE
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flqueue.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flqueue.cpp
deleted file mode 100755
index 831bce55f1be25835d44bb6fa80c0b0af440bb5f..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flqueue.cpp
+++ /dev/null
@@ -1,704 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flqueue.cpp
-    \brief Implementation of the flext message queuing functionality.
-
-    \todo Let's see if queuing can be implemented for Max/MSP with defer_low
-
-    if FLEXT_PDLOCK is defined, the new PD thread lock functions are used
-*/
-
-#ifndef __FLEXT_QUEUE_CPP
-#define __FLEXT_QUEUE_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-#include "flcontainers.h"
-#include <cstring> // for memcpy
-
-#include "flpushns.h"
-
-#ifdef FLEXT_THREADS
-//! Thread id of message queue thread
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(FLEXT_CLASSDEF(flext))::thrid_t FLEXT_CLASSDEF(flext))::thrmsgid;
-#endif
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::qustarted = false;
-    
-#ifdef FLEXT_SHARED
-/*
-    For the shared version it _should_ be possible to have only one queue for all externals.
-    Yet I don't know how to do this cross-platform
-*/
-#define PERMANENTIDLE
-#endif
-
-FLEXT_TEMPLATE void Trigger();
-
-FLEXT_TEMPLATE
-class QueueFifo
-    : public PooledFifo<flext::MsgBundle>
-{
-public:
-    ~QueueFifo();
-};
-
-FLEXT_TEMPLATE
-class Queue:
-    public flext,
-    public FLEXT_TEMPINST(QueueFifo)
-{
-public:
-    inline bool Empty() const { return !Avail(); }
-    
-    void Push(MsgBundle *m); // defined after MsgBundle (gcc 3.3. won't take it otherwise...)
-};
-
-FLEXT_TEMPLATE
-struct QVars {
-#if FLEXT_QMODE == 2
-    static flext::ThrCond *qthrcond;
-#elif FLEXT_QMODE == 0
-    static t_clock *qclk;
-#endif
-    static FLEXT_TEMPINST(Queue) *queue;
-};
-
-#if FLEXT_QMODE == 2
-FLEXT_TEMPIMPL(flext::ThrCond *QVars)::qthrcond = NULL;
-#elif FLEXT_QMODE == 0
-FLEXT_TEMPIMPL(t_clock *QVars)::qclk = NULL;
-#endif
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(Queue) *QVars)::queue = NULL;
-
-
-
-#define STATSIZE 8
-
-FLEXT_TEMPIMPL(class FLEXT_CLASSDEF(flext))::MsgBundle:
-    public flext,
-    public FifoCell
-{
-public:
-    static MsgBundle *New()
-    {
-        MsgBundle *m = FLEXT_TEMPINST(QVars)::queue->New();
-        m->msg.Init();
-        return m;
-    }
-
-    static void Free(MsgBundle *m)
-    {       
-        for(Msg *mi = m->msg.nxt; mi; ) {
-            Msg *mn = mi->nxt;
-            mi->Free();
-            delete mi;
-            mi = mn;
-        }
-        m->msg.Free();
-        FLEXT_TEMPINST(QVars)::queue->Free(m);
-    }
-
-    bool BelongsTo(flext_base *t) const
-    {
-        return !msg.nxt && msg.BelongsTo(t);
-    }
-
-    void Idle(flext_base *t)
-    {
-        Get()->Idle(t);
-    }
-
-    void Idle(bool (*idlefun)(int argc,const t_atom *argv),int argc,const t_atom *argv)
-    {
-        Get()->Idle(idlefun,argc,argv);
-    }
-
-    inline MsgBundle &Add(flext_base *t,int o,const t_symbol *s,int ac,const t_atom *av)
-    {
-        Get()->Set(t,o,s,ac,av);
-        return *this;
-    }
-
-    inline MsgBundle &Add(const t_symbol *r,const t_symbol *s,int ac,const t_atom *av)
-    {
-        Get()->Set(r,s,ac,av);
-        return *this;
-    }
-
-    inline MsgBundle &Add(flext_base *th,int o) // bang
-    { 
-        return Add(th,o,sym_bang,0,NULL);
-    }
-
-    inline MsgBundle &Add(flext_base *th,int o,float dt) 
-    { 
-        t_atom at; 
-        SetFloat(at,dt);
-        return Add(th,o,sym_float,1,&at);
-    }
-
-    inline MsgBundle &Add(flext_base *th,int o,int dt) 
-    { 
-        t_atom at; 
-        SetInt(at,dt);
-        const t_symbol *sym;
-#if FLEXT_SYS == FLEXT_SYS_PD
-        sym = sym_float;
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        sym = sym_int;
-#else
-#error Not implemented!
-#endif
-        return Add(th,o,sym,1,&at);
-    }
-
-    inline MsgBundle &Add(flext_base *th,int o,const t_symbol *dt) 
-    { 
-        t_atom at; 
-        SetSymbol(at,dt);
-        return Add(th,o,sym_symbol,1,&at);
-    }
-
-    inline MsgBundle &Add(flext_base *th,int o,const t_atom &a) 
-    { 
-        const t_symbol *sym;
-        if(IsSymbol(a))
-            sym = sym_symbol;
-        else if(IsFloat(a))
-            sym = sym_float;
-#if FLEXT_SYS == FLEXT_SYS_MAX
-        else if(IsInt(a))
-            sym = sym_int;
-#endif
-#if FLEXT_SYS == FLEXT_SYS_PD
-        else if(IsPointer(a))
-            sym = sym_pointer;
-#endif
-        else {
-            error("atom type not supported");
-            return *this;
-        }
-        return Add(th,o,sym,1,&a);
-    }
-
-    inline MsgBundle &Add(flext_base *th,int o,int argc,const t_atom *argv) 
-    {
-        return Add(th,o,sym_list,argc,argv);
-    }
-
-    // \note PD sys lock must already be held by caller
-    inline bool Send() const
-    {
-        if(!msg.Ok()) return false; // Empty!
-
-        const Msg *m = &msg;
-        do {
-            if(m->Send()) {
-                // we should re-enqeue the message... it can't be a real bundle then, only a solo message
-                FLEXT_ASSERT(!m->nxt);
-                return true;
-            }
-            m = m->nxt;
-        } while(m);
-        return false;
-    }
-
-private:
-
-    class Msg {
-    public:
-        inline bool Ok() const { return th || recv; }
-
-        void Init()
-        {
-            th = NULL;
-            recv = NULL;
-            nxt = NULL;
-            argc = 0;
-        }
-
-        void Free()
-        {
-            if(argc > STATSIZE) {
-                FLEXT_ASSERT(argv);
-                delete[] argv;
-            }
-        }
-
-        //! Attention: works only for solo messages, not real bundles!!
-        bool BelongsTo(flext_base *t) const
-        {
-            FLEXT_ASSERT(!nxt);
-            return th == t; 
-        }
-
-        void Set(flext_base *t,int o,const t_symbol *s,int ac,const t_atom *av)
-        {
-            FLEXT_ASSERT(t);
-            th = t;
-            out = o;
-            SetMsg(s,ac,av);
-        }
-
-        void Set(const t_symbol *r,const t_symbol *s,int ac,const t_atom *av)
-        {
-            FLEXT_ASSERT(r);
-            th = NULL;
-            recv = r;
-            SetMsg(s,ac,av);
-        }
-
-        void Idle(flext_base *t)
-        {
-            FLEXT_ASSERT(t);
-            th = t;
-            SetMsg(NULL,0,NULL);
-        }
-
-        void Idle(bool (*idlefun)(int argc,const t_atom *argv),int argc,const t_atom *argv)
-        {
-            FLEXT_ASSERT(idlefun);
-            th = NULL;
-            fun = idlefun;
-            SetMsg(NULL,argc,argv);
-        }
-
-        bool Send() const
-        {
-            if(LIKELY(sym)) {
-                // messages
-                if(th) {
-                    if(UNLIKELY(out < 0))
-                        // message to self
-                        th->CbMethodHandler(-1-out,sym,argc,argc > STATSIZE?argv:argl); 
-                    else
-                        // message to outlet
-                        th->ToSysAnything(out,sym,argc,argc > STATSIZE?argv:argl);
-                }
-                else
-                    flext::SysForward(recv,sym,argc,argc > STATSIZE?argv:argl);
-                return false;
-            }
-            else {
-                // idle processing
-                if(th)
-                    // call virtual method
-                    return th->CbIdle();
-                else
-                    // call static function
-                    return (*fun)(argc,argc > STATSIZE?argv:argl);
-            }
-        }
-
-        Msg *nxt;
-
-    protected:
-        flext_base *th;
-        union {
-            int out;
-            const t_symbol *recv;
-            bool (*fun)(int argc,const t_atom *argv);
-        };
-        const t_symbol *sym;
-        int argc;
-        union {
-            t_atom *argv;
-            t_atom argl[STATSIZE];
-        };
-
-        void SetMsg(const t_symbol *s,int cnt,const t_atom *lst)
-        {
-            sym = s;
-            argc = cnt;
-            if(UNLIKELY(cnt > STATSIZE)) {
-                argv = new t_atom[cnt];
-                flext::CopyAtoms(cnt,argv,lst);
-            }
-            else
-                flext::CopyAtoms(cnt,argl,lst);
-        }
-
-    } msg;
-
-    Msg *Get()
-    {
-        Msg *m = &msg;
-        if(LIKELY(m->Ok())) {
-            for(; m->nxt; m = m->nxt) {}
-            m = m->nxt = new Msg;
-            m->Init();
-        }
-        return m;
-    }
-};
-
-FLEXT_TEMPIMPL(QueueFifo)::~QueueFifo()
-{ 
-    flext::MsgBundle *n; 
-    while((n = Get()) != NULL) delete n; 
-}
-
-FLEXT_TEMPIMPL(void Queue)::Push(MsgBundle *m)
-{
-    if(LIKELY(m)) {
-        Put(m);
-        FLEXT_TEMPINST(Trigger)();
-    }
-}
-
-#define CHUNK 10
-
-#if FLEXT_QMODE == 1
-FLEXT_TEMPLATE bool QWork(bool syslock,flext_base *flushobj = NULL)
-{
-    // Since qcnt can only be increased from any other function than QWork
-    // qc will be a minimum guaranteed number of present queue elements.
-    // On the other hand, if new queue elements are added by the methods called
-    // in the loop, these will be sent in the next tick to avoid recursion overflow.
-    flext::MsgBundle *q;
-    if((q = queue.Get()) == NULL) 
-        return false;
-    else if(q->Send()) {
-        if(!flushobj || !q->BelongsTo(flushobj))
-            queue.Push(q);  // remember messages to be processed again
-        else
-            flext::MsgBundle::Free(q);
-        return true;
-    }
-    else {
-        flext::MsgBundle::Free(q);
-        return false;
-    }
-}
-#else
-FLEXT_TEMPLATE bool QWork(bool syslock,flext_base *flushobj = NULL)
-{
-    FLEXT_TEMPINST(Queue) newmsgs;
-    flext::MsgBundle *q;
-
-#if 0
-    static int counter = 0;
-    fprintf(stderr,"QWORK %i\n",counter++);
-#endif
-
-    for(;;) {
-        // Since qcnt can only be increased from any other function than QWork
-        // qc will be a minimum guaranteed number of present queue elements.
-        // On the other hand, if new queue elements are added by the methods called
-        // in the loop, these will be sent in the next tick to avoid recursion overflow.
-        if(!FLEXT_TEMPINST(QVars)::queue->Avail()) break;
-
-    #if FLEXT_QMODE == 2
-        if(syslock) flext::Lock();
-    #endif
-
-        while((q = FLEXT_TEMPINST(QVars)::queue->Get()) != NULL) {
-            if(q->Send())
-                newmsgs.Push(q);  // remember messages to be processed again
-            else
-                flext::MsgBundle::Free(q);
-        }
-
-    #if FLEXT_QMODE == 2
-        if(syslock) flext::Unlock();
-    #endif
-
-    }
-
-    // enqueue messages that have to be processed again
-    while((q = newmsgs.Get()) != NULL)
-        if(!flushobj || !q->BelongsTo(flushobj))
-            FLEXT_TEMPINST(QVars)::queue->Push(q);
-        else
-            flext::MsgBundle::Free(q);
-
-    return FLEXT_TEMPINST(QVars)::queue->Avail();
-}
-#endif
-
-#if FLEXT_QMODE == 0
-#if FLEXT_SYS == FLEXT_SYS_JMAX
-FLEXT_TEMPLATE void QTick(fts_object_t *c,int winlet, fts_symbol_t s, int ac, const fts_atom_t *at)
-{
-#else
-FLEXT_TEMPLATE void QTick(flext_base *c)
-{
-#endif
-    FLEXT_TEMPINST(QWork)(false);
-}
-
-#elif FLEXT_QMODE == 1
-#   ifndef PERMANENTIDLE
-        static bool qtickactive = false;
-#   endif
-FLEXT_TEMPLATE t_int QTick(t_int *)
-{
-#ifndef PERMANENTIDLE
-    qtickactive = false;
-#endif
-
-    if(QWork(false))
-        return 1;
-    else {
-#       ifdef PERMANENTIDLE
-            // will be run in the next idle cycle
-            return 2;
-#       else
-            // won't be run again
-            // for non-shared externals assume that there's rarely a message waiting
-            // so it's better to delete the callback meanwhile
-            return 0; 
-#       endif
-    }
-}
-#endif
-
-/*
-It would be sufficient to only flush messages belonging to object th
-But then the order of sent messages is not as intended
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::QFlush(flext_base *th)
-{
-    FLEXT_ASSERT(!IsThreadRegistered());
-    while(!FLEXT_TEMPINST(QVars)::queue->Empty()) FLEXT_TEMPINST(QWork)(false,th);
-}
-
-FLEXT_TEMPLATE void Trigger()
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-#   if FLEXT_QMODE == 2
-        // wake up worker thread
-        FLEXT_TEMPINST(QVars)::qthrcond->Signal();
-#   elif FLEXT_QMODE == 1 && !defined(PERMANENTIDLE)
-        if(!qtickactive) {
-            sys_callback(FLEXT_TEMPINST(QTick),NULL,0);
-            qtickactive = true;
-        }
-#   elif FLEXT_QMODE == 0
-#   ifdef FLEXT_THREADS
-        bool sys = flext::IsThread(flext::GetSysThreadId());
-#   else
-        bool sys = true;
-#   endif
-        if(!sys) flext::Lock();
-        clock_delay(FLEXT_TEMPINST(QVars)::qclk,0);
-        if(!sys) flext::Unlock();
-#   endif
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-#   if FLEXT_QMODE == 0
-//        qelem_front(FLEXT_TEMPINST(QVars)::qclk);
-        clock_delay(FLEXT_TEMPINST(QVars)::qclk,0);
-#   endif
-#else
-#   error Not implemented
-#endif
-}
-
-#if FLEXT_QMODE == 2
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::QWorker(thr_params *)
-{
-    thrmsgid = GetThreadId();
-    qustarted = true;
-    for(;;) {
-        // we need a timed wait so that idle processing can take place
-        FLEXT_TEMPINST(QVars)::qthrcond->TimedWait(0.001);
-        FLEXT_TEMPINST(QWork)(true);
-    }
-}
-#endif
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::StartQueue()
-{
-#if FLEXT_QMODE == 2
-    FLEXT_TEMPINST(QVars)::qthrcond = new FLEXT_CLASSDEF(flext)::ThrCond;
-#endif
-    FLEXT_TEMPINST(QVars)::queue = new FLEXT_TEMPINST(Queue);
-
-    if(qustarted) return;
-#if FLEXT_QMODE == 1
-#   ifdef PERMANENTIDLE
-        sys_callback(FLEXT_TEMPINST(QTick),NULL,0);
-        qustarted = true;
-#   endif
-#elif FLEXT_QMODE == 2
-    LaunchThread(QWorker,NULL);
-    // very unelegant... but waiting should be ok, since happens only on loading
-    while(!qustarted) Sleep(0.001);
-#elif FLEXT_QMODE == 0 && (FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX)
-//    qclk = (t_qelem *)(qelem_new(NULL,(t_method)FLEXT_TEMPINST(QTick)));
-    FLEXT_TEMPINST(QVars)::qclk = (t_clock *)(clock_new(NULL,(t_method)FLEXT_TEMPINST(QTick)));
-    qustarted = true;
-#else
-#   error Not implemented!
-#endif
-}
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext))::MsgBundle *FLEXT_CLASSDEF(flext))::MsgNew()
-{ 
-    return MsgBundle::New(); 
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::MsgFree(MsgBundle *m)
-{ 
-    MsgBundle::Free(m); 
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ToSysMsg(MsgBundle *m)
-{
-    m->Send();
-    FLEXT_TEMPINST(QVars)::queue->Free(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ToQueueMsg(MsgBundle *m)
-{
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueBang(int o) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueFloat(int o,float f) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o,f);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueInt(int o,int f) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o,f);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueSymbol(int o,const t_symbol *s) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o,s);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueAtom(int o,const t_atom &at) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o,at);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueList(int o,int argc,const t_atom *argv) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o,argc,argv);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::ToQueueAnything(int o,const t_symbol *s,int argc,const t_atom *argv) const
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(const_cast<flext_base *>(this),o,s,argc,argv);
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddBang(MsgBundle *m,int n) const
-{ 
-    m->Add(const_cast<flext_base *>(this),n);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddFloat(MsgBundle *m,int n,float f) const
-{
-    m->Add(const_cast<flext_base *>(this),n,f);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddInt(MsgBundle *m,int n,int f) const
-{
-    m->Add(const_cast<flext_base *>(this),n,f);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddSymbol(MsgBundle *m,int n,const t_symbol *s) const
-{
-    m->Add(const_cast<flext_base *>(this),n,s);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddAtom(MsgBundle *m,int n,const t_atom &at) const
-{
-    m->Add(const_cast<flext_base *>(this),n,at);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddList(MsgBundle *m,int n,int argc,const t_atom *argv) const
-{
-    m->Add(const_cast<flext_base *>(this),n,argc,argv);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::MsgAddAnything(MsgBundle *m,int n,const t_symbol *s,int argc,const t_atom *argv) const
-{
-    m->Add(const_cast<flext_base *>(this),n,s,argc,argv);
-}
-
-
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::SysForward(const t_symbol *recv,const t_symbol *s,int argc,const t_atom *argv)
-{
-    void *cl = recv->s_thing;
-    if(UNLIKELY(!cl)) return false;
-    
-#if FLEXT_SYS == FLEXT_SYS_PD
-    pd_typedmess((t_class **)cl,(t_symbol *)s,argc,(t_atom *)argv);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    typedmess(recv->s_thing,(t_symbol *)s,argc,(t_atom *)argv);
-#else
-#   error Not implemented
-#endif
-    return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::QueueForward(const t_symbol *recv,const t_symbol *s,int argc,const t_atom *argv)
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Add(recv,s,argc,argv);
-    // send over queue
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-    return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::MsgForward(MsgBundle *m,const t_symbol *recv,const t_symbol *s,int argc,const t_atom *argv)
-{
-    m->Add(recv,s,argc,argv);
-    return true;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddIdle()
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Idle(const_cast<flext_base *>(this));
-    // send over queue
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddIdle(bool (*idlefun)(int argc,const t_atom *argv),int argc,const t_atom *argv)
-{
-    MsgBundle *m = MsgBundle::New();
-    m->Idle(idlefun,argc,argv);
-    // send over queue
-    FLEXT_TEMPINST(QVars)::queue->Push(m);
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_QUEUE_CPP
-    
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flsimd.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flsimd.cpp
deleted file mode 100755
index 69d8c39c32ca5ff7803ffe3659b3e45ad8ffcf43..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flsimd.cpp
+++ /dev/null
@@ -1,2013 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flsimd.cpp
-    \brief flext SIMD support functions
-
-    If FLEXT_USE_SIMD is defined at compilation, SIMD instructions are used wherever feasible.
-    If used with MSVC++ 6 the "Processor Pack" must be installed.
-
-    If FLEXT_USE_IPP is defined the Intel Performance Package is used.
-*/
-
-#ifndef __FLEXT_SIMD_CPP
-#define __FLEXT_SIMD_CPP
-
-#include "flext.h"
-#include <cstring>
-
-#if FLEXT_OS == FLEXT_OS_WIN
-#include <windows.h>
-#endif
-
-#ifdef FLEXT_USE_IPP
-#include <ipps.h>
-#endif
-
-#ifdef FLEXT_USE_SIMD
-    #ifdef _MSC_VER
-        // include MSVC SIMD header files
-        #include <mmintrin.h> // MMX
-        #include <xmmintrin.h> // SSE
-        #include <emmintrin.h> // SSE2
-        #include <mm3dnow.h> // 3DNow!
-    #elif defined(__APPLE__)  && defined(__VEC__)
-        #ifdef __MWERKS__
-            #if FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH
-                #include <sys/sysctl.h> 
-                #include <vDSP.h>
-            #else
-                #include <Gestalt.h> 
-            #endif
-    
-            #pragma altivec_model on
-
-            #include <altivec.h>
-            #include <vectorOps.h>
-        #elif defined(__GNUC__)
-            #include <sys/sysctl.h> 
-            #include <vecLib/vecLib.h>
-        #endif
-    #endif
-
-#endif // FLEXT_USE_SIMD
-
-#include "flpushns.h"
-
-FLEXT_TEMPLATE unsigned long setsimdcaps();
-
-/*! \brief Holds SIMD capability flags
-    \internal
-*/
-FLEXT_TEMPIMPL(unsigned long FLEXT_CLASSDEF(flext))::simdcaps = FLEXT_TEMPINST(setsimdcaps)();
-
-FLEXT_TEMPIMPL(unsigned long FLEXT_CLASSDEF(flext))::GetSIMDCapabilities() { return simdcaps; }
-
-
-#ifdef FLEXT_USE_SIMD
-
-#if FLEXT_CPU == FLEXT_CPU_IA32 || FLEXT_CPU == FLEXT_CPU_X86_64
-
-#define _CPU_FEATURE_MMX    0x0001
-#define _CPU_FEATURE_SSE    0x0002
-#define _CPU_FEATURE_SSE2   0x0004
-#define _CPU_FEATURE_3DNOW  0x0008
-
-typedef struct _processor_info {
-    int family;                         // family of the processor
-                                        // e.g. 6 = Pentium-Pro architecture
-    int model;                          // model of processor
-                                        // e.g. 1 = Pentium-Pro for family = 6
-    int stepping;                       // processor revision number
-    int feature;                        // processor feature
-                                        // (same as return value from _cpuid)
-    int os_support;                     // does OS Support the feature?
-    int checks;                         // mask of checked bits in feature
-                                        // and os_support fields
-} _p_info;
-
-// These are the bit flags that get set on calling cpuid
-// with register eax set to 1
-#define _MMX_FEATURE_BIT        0x00800000
-#define _SSE_FEATURE_BIT        0x02000000
-#define _SSE2_FEATURE_BIT       0x04000000
-
-// This bit is set when cpuid is called with
-// register set to 80000001h (only applicable to AMD)
-#define _3DNOW_FEATURE_BIT      0x80000000
-
-#ifdef _MSC_VER
-inline int IsCPUID()
-{
-    __try {
-        _asm {
-            xor eax, eax
-            cpuid
-        }
-    }
-    __except (EXCEPTION_EXECUTE_HANDLER) {
-        return 0;
-    }
-    return 1;
-}
-
-inline int _os_support(int feature)
-{
-    __try {
-        switch (feature) {
-        case _CPU_FEATURE_SSE:
-            __asm {
-                xorps xmm0, xmm0        // executing SSE instruction
-            }
-            break;
-        case _CPU_FEATURE_SSE2:
-            __asm {
-                xorpd xmm0, xmm0        // executing SSE2 instruction
-            }
-            break;
-        case _CPU_FEATURE_3DNOW:
-            __asm {
-                pfrcp mm0, mm0          // executing 3DNow! instruction
-                emms
-            }
-            break;
-        case _CPU_FEATURE_MMX:
-            __asm {
-                pxor mm0, mm0           // executing MMX instruction
-                emms
-            }
-            break;
-        }
-    }
-    __except (EXCEPTION_EXECUTE_HANDLER) {
-        if (_exception_code() == STATUS_ILLEGAL_INSTRUCTION) {
-            return 0;
-        }
-        return 0;
-    }
-    return 1;
-}
-
-inline int _cpuid (_p_info *pinfo)
-{
-    DWORD dwStandard = 0;
-    DWORD dwFeature = 0;
-    DWORD dwMax = 0;
-    DWORD dwExt = 0;
-    int feature = 0;
-    int os_support = 0;
-    union {
-        struct {
-            DWORD dw0;
-            DWORD dw1;
-            DWORD dw2;
-        } s;
-    } Ident;
-
-    if (!IsCPUID()) {
-        return 0;
-    }
-
-    _asm {
-        push ebx
-        push ecx
-        push edx
-
-        // get the vendor string
-        xor eax, eax
-        cpuid
-        mov dwMax, eax
-        mov Ident.s.dw0, ebx
-        mov Ident.s.dw1, edx
-        mov Ident.s.dw2, ecx
-
-        // get the Standard bits
-        mov eax, 1
-        cpuid
-        mov dwStandard, eax
-        mov dwFeature, edx
-
-        // get AMD-specials
-        mov eax, 80000000h
-        cpuid
-        cmp eax, 80000000h
-        jc notamd
-        mov eax, 80000001h
-        cpuid
-        mov dwExt, edx
-
-notamd:
-        pop ecx
-        pop ebx
-        pop edx
-    }
-
-    if (dwFeature & _MMX_FEATURE_BIT) {
-        feature |= _CPU_FEATURE_MMX;
-        if (_os_support(_CPU_FEATURE_MMX))
-            os_support |= _CPU_FEATURE_MMX;
-    }
-    if (dwExt & _3DNOW_FEATURE_BIT) {
-        feature |= _CPU_FEATURE_3DNOW;
-        if (_os_support(_CPU_FEATURE_3DNOW))
-            os_support |= _CPU_FEATURE_3DNOW;
-    }
-    if (dwFeature & _SSE_FEATURE_BIT) {
-        feature |= _CPU_FEATURE_SSE;
-        if (_os_support(_CPU_FEATURE_SSE))
-            os_support |= _CPU_FEATURE_SSE;
-    }
-    if (dwFeature & _SSE2_FEATURE_BIT) {
-        feature |= _CPU_FEATURE_SSE2;
-        if (_os_support(_CPU_FEATURE_SSE2))
-            os_support |= _CPU_FEATURE_SSE2;
-    }
-
-    if (pinfo) {
-        memset(pinfo, 0, sizeof(_p_info));
-
-        pinfo->os_support = os_support;
-        pinfo->feature = feature;
-        pinfo->family = (dwStandard >> 8) & 0xF; // retrieve family
-        if (pinfo->family == 15) {               // retrieve extended family
-            pinfo->family |= (dwStandard >> 16) & 0xFF0;
-        }
-        pinfo->model = (dwStandard >> 4) & 0xF;  // retrieve model
-        if (pinfo->model == 15) {                // retrieve extended model
-            pinfo->model |= (dwStandard >> 12) & 0xF;
-        }
-        pinfo->stepping = (dwStandard) & 0xF;    // retrieve stepping
-
-        pinfo->checks = _CPU_FEATURE_MMX |
-                        _CPU_FEATURE_SSE |
-                        _CPU_FEATURE_SSE2 |
-                        _CPU_FEATURE_3DNOW;
-    }
-
-    return feature;
-}
-
-inline bool IsVectorAligned(const void *where) 
-{
-    return (reinterpret_cast<size_t>(where)&(__alignof(__m128)-1)) == 0;
-}
-
-inline bool VectorsAligned(const void *v1,const void *v2) 
-{
-    return (
-        (reinterpret_cast<size_t>(v1)|reinterpret_cast<size_t>(v2))
-        &(__alignof(__m128)-1)
-    ) == 0; 
-}
-
-inline bool VectorsAligned(const void *v1,const void *v2,const void *v3) 
-{
-    return (
-        (reinterpret_cast<size_t>(v1)|reinterpret_cast<size_t>(v2)|reinterpret_cast<size_t>(v3))
-        &(__alignof(__m128)-1)
-    ) == 0; 
-}
-
-inline bool VectorsAligned(const void *v1,const void *v2,const void *v3,const void *v4)
-{
-    return (
-        (reinterpret_cast<size_t>(v1)|reinterpret_cast<size_t>(v2)|reinterpret_cast<size_t>(v3)|reinterpret_cast<size_t>(v4))
-        &(__alignof(__m128)-1)
-    ) == 0; 
-}
-
-#else
-// not MSVC
-inline int _cpuid (_p_info *pinfo)
-{
-    if(pinfo) memset(pinfo,0,sizeof *pinfo);
-    return 0;
-}
-#endif
-
-#endif
-
-
-/*! \brief Determine SIMD capabilities
-    \internal
-*/
-inline unsigned long setsimdcaps()
-{
-    unsigned long simdflags = flext::simd_none;
-#if FLEXT_CPU == FLEXT_CPU_IA32 || FLEXT_CPU == FLEXT_CPU_X86_64
-    _p_info cpuinfo;
-    _cpuid(&cpuinfo);
-    if(cpuinfo.os_support&_CPU_FEATURE_MMX) simdflags += flext::simd_mmx;
-    if(cpuinfo.os_support&_CPU_FEATURE_3DNOW) simdflags += flext::simd_3dnow;
-    if(cpuinfo.os_support&_CPU_FEATURE_SSE) simdflags += flext::simd_sse;
-    if(cpuinfo.os_support&_CPU_FEATURE_SSE2) simdflags += flext::simd_sse2;
-#elif defined(__APPLE__) && defined(__VEC__) 
-    #if FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH
-
-    int selectors[2] = { CTL_HW, HW_VECTORUNIT }; 
-    int hasVectorUnit = 0; 
-    size_t length = sizeof(hasVectorUnit); 
-    int error = sysctl(selectors, 2, &hasVectorUnit, &length, NULL, 0); 
-
-    if(!error && hasVectorUnit != 0) simdflags += flext::simd_altivec; 
-        
-    #else
-
-    long cpuAttributes; 
-    Boolean hasAltiVec = false; 
-    OSErr err = Gestalt( gestaltPowerPCProcessorFeatures, &cpuAttributes ); 
-
-    if( noErr == err ) 
-    if(( 1 << gestaltPowerPCHasVectorInstructions) & cpuAttributes) simdflags += flext::simd_altivec; 
-
-    #endif
-#endif
-    return simdflags;
-}
-
-
-#if (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64)  && defined(__VEC__)
-
-/* functions for misaligned vector data - taken from the Altivec tutorial of Ian Ollmann, Ph.D. */
-
-//! Load a vector from an unaligned location in memory
-inline vector unsigned char LoadUnaligned( vector unsigned char *v )
-{
-    vector unsigned char permuteVector = vec_lvsl( 0, (int*) v );
-    vector unsigned char low = vec_ld( 0, v );
-    vector unsigned char high = vec_ld( 15, v );
-    return vec_perm( low, high, permuteVector );
-}
-
-/*
-//! Store a vector to an unaligned location in memory
-inline void StoreUnaligned( vector unsigned char v, vector unsigned char *where)
-{
-    // Load the surrounding area
-    vector unsigned char low = vec_ld( 0, where );
-    vector unsigned char high = vec_ld( 16, where );
-    // Prepare the constants that we need
-    vector unsigned char permuteVector = vec_lvsr( 0, (int*) where );
-
-    vector unsigned char oxFF = (vector unsigned char)vec_splat_s8( -1 );
-    vector unsigned char ox00 = (vector unsigned char)vec_splat_s8( 0 );
-    // Make a mask for which parts of the vectors to swap out
-    vector unsigned char mask = vec_perm( ox00, oxFF, permuteVector );
-    // Right rotate our input data
-    v = vec_perm( v, v, permuteVector );
-    // Insert our data into the low and high vectors
-    low = vec_sel( v, low, mask );
-    high = vec_sel( high, v, mask );
-    // Store the two aligned result vectors
-    vec_st( low, 0, where );
-    vec_st( high, 16, where );
-}
-*/
-
-inline vector float LoadUnaligned(const float *v )
-{
-    return (vector float)LoadUnaligned((vector unsigned char *)v);
-}
-
-/*
-inline void StoreUnaligned( vector float v,float *where)
-{
-    return StoreUnaligned((vector unsigned char)v,(vector unsigned char *)where);
-}
-*/
-
-inline bool IsVectorAligned(const void *where) 
-{
-    return (reinterpret_cast<size_t>(where)&(sizeof(vector float)-1)) == 0; 
-}
-
-inline bool VectorsAligned(const void *v1,const void *v2) 
-{
-    return (
-        (reinterpret_cast<size_t>(v1)|reinterpret_cast<size_t>(v2))
-        &(sizeof(vector float)-1)
-    ) == 0; 
-}
-
-inline bool VectorsAligned(const void *v1,const void *v2,const void *v3) 
-{
-    return (
-        (reinterpret_cast<size_t>(v1)|reinterpret_cast<size_t>(v2)|reinterpret_cast<size_t>(v3))
-        &(sizeof(vector float)-1)
-    ) == 0; 
-}
-
-inline bool VectorsAligned(const void *v1,const void *v2,const void *v3,const void *v4)
-{
-    return (
-        (reinterpret_cast<size_t>(v1)|reinterpret_cast<size_t>(v2)|reinterpret_cast<size_t>(v3)|reinterpret_cast<size_t>(v4))
-        &(sizeof(vector float)-1)
-    ) == 0; 
-}
-
-inline vector float LoadValue(const float &f)
-{
-    return vec_splat(IsVectorAligned(&f)?vec_ld(0,(vector float *)&f):LoadUnaligned(&f),0);
-}
-#endif
-
-
-#else // FLEXT_USE_SIMD
-inline unsigned long setsimdcaps() { return 0; }
-#endif // FLEXT_USE_SIMD
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::CopySamples(t_sample *dst,const t_sample *src,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4)
-        ippsCopy_32f((const float *)src,(float *)dst,cnt); 
-    else if(sizeof(t_sample) == 8)
-        ippsCopy_64f((const double *)src,(double *)dst,cnt); 
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,dword ptr [src]
-            prefetcht0 [eax+0]
-            prefetcht0 [eax+32]
-        }
-
-        if(IsVectorAligned(src)) {
-            if(IsVectorAligned(dst)) {
-                // aligned src, aligned dst
-                __asm {
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ecx,[n]
-loopaa:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [eax+96]
-                    movaps  xmm0,xmmword ptr[eax]
-                    movaps  xmmword ptr[edx],xmm0
-                    movaps  xmm1,xmmword ptr[eax+4*4]
-                    movaps  xmmword ptr[edx+4*4],xmm1
-                    movaps  xmm2,xmmword ptr[eax+8*4]
-                    movaps  xmmword ptr[edx+8*4],xmm2
-                    movaps  xmm3,xmmword ptr[eax+12*4]
-                    movaps  xmmword ptr[edx+12*4],xmm3
-
-                    add     eax,16*4
-                    add     edx,16*4
-                    loop    loopaa
-                }
-            }
-            else {
-                // aligned src, unaligned dst
-                __asm {
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ecx,[n]
-loopau:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [eax+96]
-                    movaps  xmm0,xmmword ptr[eax]
-                    movups  xmmword ptr[edx],xmm0
-                    movaps  xmm1,xmmword ptr[eax+4*4]
-                    movups  xmmword ptr[edx+4*4],xmm1
-                    movaps  xmm2,xmmword ptr[eax+8*4]
-                    movups  xmmword ptr[edx+8*4],xmm2
-                    movaps  xmm3,xmmword ptr[eax+12*4]
-                    movups  xmmword ptr[edx+12*4],xmm3
-
-                    add     eax,16*4
-                    add     edx,16*4
-                    loop    loopau
-                }
-            }
-        }
-        else {
-            if(IsVectorAligned(dst)) {
-                // unaligned src, aligned dst
-                __asm {
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ecx,[n]
-loopua:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [eax+96]
-                    movups  xmm0,xmmword ptr[eax]
-                    movaps  xmmword ptr[edx],xmm0
-                    movups  xmm1,xmmword ptr[eax+4*4]
-                    movaps  xmmword ptr[edx+4*4],xmm1
-                    movups  xmm2,xmmword ptr[eax+8*4]
-                    movaps  xmmword ptr[edx+8*4],xmm2
-                    movups  xmm3,xmmword ptr[eax+12*4]
-                    movaps  xmmword ptr[edx+12*4],xmm3
-
-                    add     eax,16*4
-                    add     edx,16*4
-                    loop    loopua
-                }
-            }
-            else {
-                // unaligned src, unaligned dst
-                __asm {
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ecx,[n]
-loopuu:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [eax+96]
-                    movups  xmm0,xmmword ptr[eax]
-                    movups  xmmword ptr[edx],xmm0
-                    movups  xmm1,xmmword ptr[eax+4*4]
-                    movups  xmmword ptr[edx+4*4],xmm1
-                    movups  xmm2,xmmword ptr[eax+8*4]
-                    movups  xmmword ptr[edx+8*4],xmm2
-                    movups  xmm3,xmmword ptr[eax+12*4]
-                    movups  xmmword ptr[edx+12*4],xmm3
-
-                    add     eax,16*4
-                    add     edx,16*4
-                    loop    loopuu
-                }
-            }
-        }
-
-        src += n<<4,dst += n<<4;
-zero:   
-        while(cnt--) *(dst++) = *(src++); 
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VECTOROPS__)
-    if(true) {
-        int n = cnt>>2,n4 = n<<2;
-        vScopy(n4,(vector float *)src,(vector float *)dst);
-        cnt -= n4,src += n4,dst += n4;
-        while(cnt--) *(dst++) = *(src++); 
-    }
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-        while(n--) {
-            dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3];
-            dst[4] = src[4]; dst[5] = src[5]; dst[6] = src[6]; dst[7] = src[7];
-            src += 8,dst += 8;
-        }
-        while(cnt--) *(dst++) = *(src++); 
-    }
-#endif
-}
-
-#if defined(FLEXT_USE_SIMD) && (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-// because of some frame code Altivec stuff should be in seperate functions....
-
-FLEXT_TEMPLATE const vector float zero = (vector float)(0);
-
-FLEXT_TEMPLATE void SetAltivec(t_sample *dst,int cnt,t_sample s)
-{
-    vector float svec = LoadValue(s);
-    int n = cnt>>4;
-    cnt -= n<<4;
-
-    while(n--) {
-        vec_st(svec,0,dst);
-        vec_st(svec,16,dst);
-        vec_st(svec,32,dst);
-        vec_st(svec,48,dst);
-        dst += 16;
-    }
-
-    while(cnt--) *(dst++) = s; 
-}
-
-FLEXT_TEMPLATE void MulAltivec(t_sample *dst,const t_sample *src,t_sample op,int cnt)
-{
-    const vector float arg = LoadValue(op);
-    int n = cnt>>4;
-    cnt -= n<<4;
-
-    for(; n--; src += 16,dst += 16) {
-        vector float a1 = vec_ld( 0,src);
-        vector float a2 = vec_ld(16,src);
-        vector float a3 = vec_ld(32,src);
-        vector float a4 = vec_ld(48,src);
-        
-        a1 = vec_madd(a1,arg,zero);
-        a2 = vec_madd(a2,arg,zero);
-        a3 = vec_madd(a3,arg,zero);
-        a4 = vec_madd(a4,arg,zero);
-
-        vec_st(a1, 0,dst);
-        vec_st(a2,16,dst);
-        vec_st(a3,32,dst);
-        vec_st(a4,48,dst);
-    }
-
-    while(cnt--) *(dst++) = *(src++)*op; 
-}
-
-FLEXT_TEMPLATE void MulAltivec(t_sample *dst,const t_sample *src,const t_sample *op,int cnt)
-{
-    int n = cnt>>4;
-    cnt -= n<<4;
-    
-    for(; n--; src += 16,op += 16,dst += 16) {
-        vector float a1 = vec_ld( 0,src),b1 = vec_ld( 0,op);
-        vector float a2 = vec_ld(16,src),b2 = vec_ld(16,op);
-        vector float a3 = vec_ld(32,src),b3 = vec_ld(32,op);
-        vector float a4 = vec_ld(48,src),b4 = vec_ld(48,op);
-        
-        a1 = vec_madd(a1,b1,zero);
-        a2 = vec_madd(a2,b2,zero);
-        a3 = vec_madd(a3,b3,zero);
-        a4 = vec_madd(a4,b4,zero);
-
-        vec_st(a1, 0,dst);
-        vec_st(a2,16,dst);
-        vec_st(a3,32,dst);
-        vec_st(a4,48,dst);
-    }
-    while(cnt--) *(dst++) = *(src++) * *(op++); 
-}
-
-FLEXT_TEMPLATE void AddAltivec(t_sample *dst,const t_sample *src,t_sample op,int cnt)
-{
-    const vector float arg = LoadValue(op);
-    int n = cnt>>4;
-    cnt -= n<<4;
-
-    for(; n--; src += 16,dst += 16) {
-        vector float a1 = vec_ld( 0,src);
-        vector float a2 = vec_ld(16,src);
-        vector float a3 = vec_ld(32,src);
-        vector float a4 = vec_ld(48,src);
-        
-        a1 = vec_add(a1,arg);
-        a2 = vec_add(a2,arg);
-        a3 = vec_add(a3,arg);
-        a4 = vec_add(a4,arg);
-
-        vec_st(a1, 0,dst);
-        vec_st(a2,16,dst);
-        vec_st(a3,32,dst);
-        vec_st(a4,48,dst);
-    }
-
-    while(cnt--) *(dst++) = *(src++)+op; 
-}
-
-FLEXT_TEMPLATE void AddAltivec(t_sample *dst,const t_sample *src,const t_sample *op,int cnt)
-{
-    int n = cnt>>4;
-    cnt -= n<<4;
-    
-    for(; n--; src += 16,op += 16,dst += 16) {
-        vector float a1 = vec_ld( 0,src),b1 = vec_ld( 0,op);
-        vector float a2 = vec_ld(16,src),b2 = vec_ld(16,op);
-        vector float a3 = vec_ld(32,src),b3 = vec_ld(32,op);
-        vector float a4 = vec_ld(48,src),b4 = vec_ld(48,op);
-        
-        a1 = vec_add(a1,b1);
-        a2 = vec_add(a2,b2);
-        a3 = vec_add(a3,b3);
-        a4 = vec_add(a4,b4);
-
-        vec_st(a1, 0,dst);
-        vec_st(a2,16,dst);
-        vec_st(a3,32,dst);
-        vec_st(a4,48,dst);
-    }
-    while(cnt--) *(dst++) = *(src++) + *(op++); 
-}
-
-FLEXT_TEMPLATE void ScaleAltivec(t_sample *dst,const t_sample *src,t_sample opmul,t_sample opadd,int cnt)
-{
-    const vector float argmul = LoadValue(opmul);
-    const vector float argadd = LoadValue(opadd);
-    int n = cnt>>4;
-    cnt -= n<<4;
-
-    for(; n--; src += 16,dst += 16) {
-        vec_st(vec_madd(vec_ld( 0,src),argmul,argadd), 0,dst);
-        vec_st(vec_madd(vec_ld(16,src),argmul,argadd),16,dst);
-        vec_st(vec_madd(vec_ld(32,src),argmul,argadd),32,dst);
-        vec_st(vec_madd(vec_ld(48,src),argmul,argadd),48,dst);
-    }
-
-    while(cnt--) *(dst++) = *(src++)*opmul+opadd; 
-}
-
-FLEXT_TEMPLATE void ScaleAltivec(t_sample *dst,const t_sample *src,t_sample opmul,const t_sample *add,int cnt)
-{
-    const vector float argmul = LoadValue(opmul);
-    int n = cnt>>4;
-    cnt -= n<<4;
-
-    for(; n--; src += 16,dst += 16,add += 16) {
-        vec_st(vec_madd(vec_ld( 0,src),argmul,vec_ld( 0,add)), 0,dst);
-        vec_st(vec_madd(vec_ld(16,src),argmul,vec_ld(16,add)),16,dst);
-        vec_st(vec_madd(vec_ld(32,src),argmul,vec_ld(32,add)),32,dst);
-        vec_st(vec_madd(vec_ld(48,src),argmul,vec_ld(48,add)),48,dst);
-    }
-
-    while(cnt--) *(dst++) = *(src++) * opmul + *(add++); 
-}
-
-FLEXT_TEMPLATE void ScaleAltivec(t_sample *dst,const t_sample *src,const t_sample *mul,const t_sample *add,int cnt)
-{
-    int n = cnt>>4;
-    cnt -= n<<4;
-
-    for(; n--; src += 16,dst += 16,mul += 16,add += 16) {
-        vec_st(vec_madd(vec_ld( 0,src),vec_ld( 0,mul),vec_ld( 0,add)), 0,dst);
-        vec_st(vec_madd(vec_ld(16,src),vec_ld(16,mul),vec_ld(16,add)),16,dst);
-        vec_st(vec_madd(vec_ld(32,src),vec_ld(32,mul),vec_ld(32,add)),32,dst);
-        vec_st(vec_madd(vec_ld(48,src),vec_ld(48,mul),vec_ld(48,add)),48,dst);
-    }
-
-    while(cnt--) *(dst++) = *(src++) * *(mul++) + *(add++); 
-}
-#endif
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::SetSamples(t_sample *dst,int cnt,t_sample s)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4)
-        ippsSet_32f((float)s,(float *)dst,cnt); 
-    else if(sizeof(t_sample) == 8)
-        ippsSet_64f((double)s,(double *)dst,cnt); 
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            movss   xmm0,xmmword ptr [s]
-            shufps  xmm0,xmm0,0
-        }
-
-        if(IsVectorAligned(dst)) {
-            // aligned version
-            __asm {
-                mov     ecx,[n]
-                mov     edx,dword ptr [dst]
-loopa:
-                movaps  xmmword ptr[edx],xmm0
-                movaps  xmmword ptr[edx+4*4],xmm0
-                movaps  xmmword ptr[edx+8*4],xmm0
-                movaps  xmmword ptr[edx+12*4],xmm0
-
-                add     edx,16*4
-                loop    loopa
-            }
-        }
-        else {
-            // unaligned version
-            __asm {
-                mov     ecx,[n]
-                mov     edx,dword ptr [dst]
-loopu:
-                movups  xmmword ptr[edx],xmm0
-                movups  xmmword ptr[edx+4*4],xmm0
-                movups  xmmword ptr[edx+8*4],xmm0
-                movups  xmmword ptr[edx+12*4],xmm0
-
-                add     edx,16*4
-                loop    loopu
-            }
-        }
-
-        dst += n<<4;
-zero:
-        while(cnt--) *(dst++) = s; 
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && IsVectorAligned(dst)) 
-        SetAltivec(dst,cnt,s);
-    else
-#endif
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-        while(n--) {
-            dst[0] = dst[1] = dst[2] = dst[3] = dst[4] = dst[5] = dst[6] = dst[7] = s;
-            dst += 8;
-        }
-        
-        while(cnt--) *(dst++) = s; 
-    }
-#endif
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::MulSamples(t_sample *dst,const t_sample *src,t_sample op,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsMulC_32f((const float *)src,(float)op,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsMulC_64f((const double *)src,(double)op,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-        __m128 a = _mm_load1_ps(&op);
-
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,dword ptr [src]
-            prefetcht0 [eax+0]
-            prefetcht0 [eax+32]
-
-            movss   xmm0,xmmword ptr [op]
-            shufps  xmm0,xmm0,0
-        }
-
-        if(VectorsAligned(src,dst)) {
-            // aligned version
-            __asm {
-                mov     ecx,[n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-loopa:
-                prefetcht0 [eax+64]
-                prefetcht0 [eax+96]
-
-                movaps  xmm1,xmmword ptr[eax]
-                mulps   xmm1,xmm0
-                movaps  xmmword ptr[edx],xmm1
-
-                movaps  xmm2,xmmword ptr[eax+4*4]
-                mulps   xmm2,xmm0
-                movaps  xmmword ptr[edx+4*4],xmm2
-
-                movaps  xmm3,xmmword ptr[eax+8*4]
-                mulps   xmm3,xmm0
-                movaps  xmmword ptr[edx+8*4],xmm3
-
-                movaps  xmm4,xmmword ptr[eax+12*4]
-                mulps   xmm4,xmm0
-                movaps  xmmword ptr[edx+12*4],xmm4
-
-                add     eax,16*4
-                add     edx,16*4
-                loop    loopa
-            }
-        }
-        else {
-            // unaligned version
-            __asm {
-                mov     ecx,[n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-loopu:
-                prefetcht0 [eax+64]
-                prefetcht0 [eax+96]
-
-                movups  xmm1,xmmword ptr[eax]
-                mulps   xmm1,xmm0
-                movups  xmmword ptr[edx],xmm1
-
-                movups  xmm2,xmmword ptr[eax+4*4]
-                mulps   xmm2,xmm0
-                movups  xmmword ptr[edx+4*4],xmm2
-
-                movups  xmm3,xmmword ptr[eax+8*4]
-                mulps   xmm3,xmm0
-                movups  xmmword ptr[edx+8*4],xmm3
-
-                movups  xmm4,xmmword ptr[eax+12*4]
-                mulps   xmm4,xmm0
-                movups  xmmword ptr[edx+12*4],xmm4
-
-                add     eax,16*4
-                add     edx,16*4
-                loop    loopu
-            }
-        }
-
-        src += n<<4,dst += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++)*op; 
-    }
-    else
-#elif defined(__APPLE__) && defined(__VDSP__)
-    if(true) {
-        vDSP_vsmul(src,1,&op,dst,1,cnt);
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,dst)) 
-        MulAltivec(dst,src,op,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-
-        if(src == dst) {
-            while(n--) {
-                dst[0] *= op; dst[1] *= op; dst[2] *= op; dst[3] *= op; 
-                dst[4] *= op; dst[5] *= op; dst[6] *= op; dst[7] *= op; 
-                dst += 8;
-            }
-            while(cnt--) *(dst++) *= op; 
-        }
-        else {
-            while(n--) {
-                dst[0] = src[0]*op; dst[1] = src[1]*op; 
-                dst[2] = src[2]*op; dst[3] = src[3]*op; 
-                dst[4] = src[4]*op; dst[5] = src[5]*op; 
-                dst[6] = src[6]*op; dst[7] = src[7]*op; 
-                src += 8,dst += 8;
-            }
-            while(cnt--) *(dst++) = *(src++)*op; 
-        }
-    }
-#endif
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::MulSamples(t_sample *dst,const t_sample *src,const t_sample *op,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsMul_32f((const float *)src,(const float *)op,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsMul_32f((const double *)src,(const double *)op,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,[src]
-            mov     ebx,[op]
-            prefetcht0 [eax+0]
-            prefetcht0 [ebx+0]
-            prefetcht0 [eax+32]
-            prefetcht0 [ebx+32]
-        }
-
-        if(VectorsAligned(src,dst)) {
-            if(IsVectorAligned(op)) {
-                __asm {
-                    mov     ecx,[n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopaa:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movaps  xmm0,xmmword ptr[eax]
-                    movaps  xmm1,xmmword ptr[ebx]
-                    mulps   xmm0,xmm1
-                    movaps  xmmword ptr[edx],xmm0
-
-                    movaps  xmm2,xmmword ptr[eax+4*4]
-                    movaps  xmm3,xmmword ptr[ebx+4*4]
-                    mulps   xmm2,xmm3
-                    movaps  xmmword ptr[edx+4*4],xmm2
-
-                    movaps  xmm4,xmmword ptr[eax+8*4]
-                    movaps  xmm5,xmmword ptr[ebx+8*4]
-                    mulps   xmm4,xmm5
-                    movaps  xmmword ptr[edx+8*4],xmm4
-
-                    movaps  xmm6,xmmword ptr[eax+12*4]
-                    movaps  xmm7,xmmword ptr[ebx+12*4]
-                    mulps   xmm6,xmm7
-                    movaps  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopaa
-                }
-            }
-            else {
-                __asm {
-                    mov     ecx,[n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopau:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movaps  xmm0,xmmword ptr[eax]
-                    movups  xmm1,xmmword ptr[ebx]
-                    mulps   xmm0,xmm1
-                    movaps  xmmword ptr[edx],xmm0
-
-                    movaps  xmm2,xmmword ptr[eax+4*4]
-                    movups  xmm3,xmmword ptr[ebx+4*4]
-                    mulps   xmm2,xmm3
-                    movaps  xmmword ptr[edx+4*4],xmm2
-
-                    movaps  xmm4,xmmword ptr[eax+8*4]
-                    movups  xmm5,xmmword ptr[ebx+8*4]
-                    mulps   xmm4,xmm5
-                    movaps  xmmword ptr[edx+8*4],xmm4
-
-                    movaps  xmm6,xmmword ptr[eax+12*4]
-                    movups  xmm7,xmmword ptr[ebx+12*4]
-                    mulps   xmm6,xmm7
-                    movaps  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopau
-                }
-            }
-        }
-        else {
-            if(IsVectorAligned(op)) {
-                __asm {
-                    mov     ecx,[n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopua:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movups  xmm0,xmmword ptr[eax]
-                    movaps  xmm1,xmmword ptr[ebx]
-                    mulps   xmm0,xmm1
-                    movups  xmmword ptr[edx],xmm0
-
-                    movups  xmm2,xmmword ptr[eax+4*4]
-                    movaps  xmm3,xmmword ptr[ebx+4*4]
-                    mulps   xmm2,xmm3
-                    movups  xmmword ptr[edx+4*4],xmm2
-
-                    movups  xmm4,xmmword ptr[eax+8*4]
-                    movaps  xmm5,xmmword ptr[ebx+8*4]
-                    mulps   xmm4,xmm5
-                    movups  xmmword ptr[edx+8*4],xmm4
-
-                    movups  xmm6,xmmword ptr[eax+12*4]
-                    movaps  xmm7,xmmword ptr[ebx+12*4]
-                    mulps   xmm6,xmm7
-                    movups  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopua
-                }
-            }
-            else {
-                __asm {
-                    mov     ecx,[n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-loopuu:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movups  xmm0,xmmword ptr[eax]
-                    movups  xmm1,xmmword ptr[ebx]
-                    mulps   xmm0,xmm1
-                    movups  xmmword ptr[edx],xmm0
-
-                    movups  xmm2,xmmword ptr[eax+4*4]
-                    movups  xmm3,xmmword ptr[ebx+4*4]
-                    mulps   xmm2,xmm3
-                    movups  xmmword ptr[edx+4*4],xmm2
-
-                    movups  xmm4,xmmword ptr[eax+8*4]
-                    movups  xmm5,xmmword ptr[ebx+8*4]
-                    mulps   xmm4,xmm5
-                    movups  xmmword ptr[edx+8*4],xmm4
-
-                    movups  xmm6,xmmword ptr[eax+12*4]
-                    movups  xmm7,xmmword ptr[ebx+12*4]
-                    mulps   xmm6,xmm7
-                    movups  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopuu
-                }
-            }
-        }
-
-        src += n<<4,dst += n<<4,op += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++) * *(op++); 
-    }
-    else
-#elif defined(__APPLE__) && defined(__VDSP__)
-    if(true) {
-        vDSP_vmul(src,1,op,1,dst,1,cnt);
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,op,dst)) 
-        MulAltivec(dst,src,op,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-
-        if(src == dst) {
-            while(n--) {
-                dst[0] *= op[0]; dst[1] *= op[1]; 
-                dst[2] *= op[2]; dst[3] *= op[3]; 
-                dst[4] *= op[4]; dst[5] *= op[5]; 
-                dst[6] *= op[6]; dst[7] *= op[7]; 
-                dst += 8,op += 8;
-            }
-            while(cnt--) *(dst++) *= *(op++); 
-        }
-        else {
-            while(n--) {
-                dst[0] = src[0]*op[0]; dst[1] = src[1]*op[1]; 
-                dst[2] = src[2]*op[2]; dst[3] = src[3]*op[3]; 
-                dst[4] = src[4]*op[4]; dst[5] = src[5]*op[5]; 
-                dst[6] = src[6]*op[6]; dst[7] = src[7]*op[7]; 
-                src += 8,dst += 8,op += 8;
-            }
-            while(cnt--) *(dst++) = *(src++) * *(op++); 
-        }
-    }
-#endif
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AddSamples(t_sample *dst,const t_sample *src,t_sample op,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsAddC_32f((const float *)src,(float)op,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsAddC_64f_I((const double *)src,(double)op,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,[src]
-            prefetcht0 [eax+0]
-            prefetcht0 [eax+32]
-
-            movss   xmm0,xmmword ptr [op]
-            shufps  xmm0,xmm0,0
-        }
-
-        if(VectorsAligned(src,dst)) {
-            // aligned version
-                __asm {
-                mov     ecx,[n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-loopa:
-                prefetcht0 [eax+64]
-                prefetcht0 [eax+96]
-
-                movaps  xmm1,xmmword ptr[eax]
-                addps   xmm1,xmm0
-                movaps  xmmword ptr[edx],xmm1
-
-                movaps  xmm2,xmmword ptr[eax+4*4]
-                addps   xmm2,xmm0
-                movaps  xmmword ptr[edx+4*4],xmm2
-
-                movaps  xmm3,xmmword ptr[eax+8*4]
-                addps   xmm3,xmm0
-                movaps  xmmword ptr[edx+8*4],xmm3
-
-                movaps  xmm4,xmmword ptr[eax+12*4]
-                addps   xmm4,xmm0
-                movaps  xmmword ptr[edx+12*4],xmm4
- 
-                add     eax,16*4
-                add     edx,16*4
-                loop    loopa
-           }
-        }
-        else {
-            // unaligned version
-            __asm {
-                mov     ecx,[n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-loopu:
-                prefetcht0 [eax+64]
-                prefetcht0 [eax+96]
-
-                movups  xmm1,xmmword ptr[eax]
-                addps   xmm1,xmm0
-                movups  xmmword ptr[edx],xmm1
-
-                movups  xmm2,xmmword ptr[eax+4*4]
-                addps   xmm2,xmm0
-                movups  xmmword ptr[edx+4*4],xmm2
-
-                movups  xmm3,xmmword ptr[eax+8*4]
-                addps   xmm3,xmm0
-                movups  xmmword ptr[edx+8*4],xmm3
-
-                movups  xmm4,xmmword ptr[eax+12*4]
-                addps   xmm4,xmm0
-                movups  xmmword ptr[edx+12*4],xmm4
-
-                add     eax,16*4
-                add     edx,16*4
-                loop    loopu
-            }
-        }
-        src += n<<4,dst += n<<4,op += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++)+op; 
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,dst)) 
-        AddAltivec(dst,src,op,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-
-        if(src == dst) {
-            while(n--) {
-                dst[0] += op; dst[1] += op; dst[2] += op; dst[3] += op; 
-                dst[4] += op; dst[5] += op; dst[6] += op; dst[7] += op; 
-                dst += 8;
-            }
-            while(cnt--) *(dst++) += op; 
-        }
-        else {
-            while(n--) {
-                dst[0] = src[0]+op; dst[1] = src[1]+op; 
-                dst[2] = src[2]+op; dst[3] = src[3]+op; 
-                dst[4] = src[4]+op; dst[5] = src[5]+op; 
-                dst[6] = src[6]+op; dst[7] = src[7]+op; 
-                src += 8,dst += 8;
-            }
-            while(cnt--) *(dst++) = *(src++)+op; 
-        }
-    }
-#endif
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::AddSamples(t_sample *dst,const t_sample *src,const t_sample *op,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsAdd_32f((const float *)src,(const float *)op,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsAdd_64f((const double *)src,(const double *)op,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // Prefetch cache
-        __asm {
-            mov     eax,dword ptr [src]
-            mov     ebx,dword ptr [op]
-            prefetcht0 [eax]
-            prefetcht0 [ebx]
-            prefetcht0 [eax+32]
-            prefetcht0 [ebx+32]
-        }
-
-        // single precision
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        if(VectorsAligned(src,dst)) {
-            if(IsVectorAligned(op)) {
-                __asm {
-                    mov     ecx,dword ptr [n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopaa:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movaps  xmm0,xmmword ptr[eax]
-                    movaps  xmm1,xmmword ptr[ebx]
-                    addps   xmm0,xmm1
-                    movaps  xmmword ptr[edx],xmm0
-
-                    movaps  xmm2,xmmword ptr[eax+4*4]
-                    movaps  xmm3,xmmword ptr[ebx+4*4]
-                    addps   xmm2,xmm3
-                    movaps  xmmword ptr[edx+4*4],xmm2
-
-                    movaps  xmm4,xmmword ptr[eax+8*4]
-                    movaps  xmm5,xmmword ptr[ebx+8*4]
-                    addps   xmm4,xmm5
-                    movaps  xmmword ptr[edx+8*4],xmm4
-
-                    movaps  xmm6,xmmword ptr[eax+12*4]
-                    movaps  xmm7,xmmword ptr[ebx+12*4]
-                    addps   xmm6,xmm7
-                    movaps  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopaa
-                }
-            }
-            else {
-                __asm {
-                    mov     ecx,dword ptr [n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopau:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movaps  xmm0,xmmword ptr[eax]
-                    movups  xmm1,xmmword ptr[ebx]
-                    addps   xmm0,xmm1
-                    movaps  xmmword ptr[edx],xmm0
-
-                    movaps  xmm2,xmmword ptr[eax+4*4]
-                    movups  xmm3,xmmword ptr[ebx+4*4]
-                    addps   xmm2,xmm3
-                    movaps  xmmword ptr[edx+4*4],xmm2
-
-                    movaps  xmm4,xmmword ptr[eax+8*4]
-                    movups  xmm5,xmmword ptr[ebx+8*4]
-                    addps   xmm4,xmm5
-                    movaps  xmmword ptr[edx+8*4],xmm4
-
-                    movaps  xmm6,xmmword ptr[eax+12*4]
-                    movups  xmm7,xmmword ptr[ebx+12*4]
-                    addps   xmm6,xmm7
-                    movaps  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopau
-                }
-            }
-        }
-        else {
-            if(IsVectorAligned(op)) {
-                __asm {
-                    mov     ecx,dword ptr [n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopua:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movups  xmm0,xmmword ptr[eax]
-                    movaps  xmm1,xmmword ptr[ebx]
-                    addps   xmm0,xmm1
-                    movups  xmmword ptr[edx],xmm0
-
-                    movups  xmm2,xmmword ptr[eax+4*4]
-                    movaps  xmm3,xmmword ptr[ebx+4*4]
-                    addps   xmm2,xmm3
-                    movups  xmmword ptr[edx+4*4],xmm2
-
-                    movups  xmm4,xmmword ptr[eax+8*4]
-                    movaps  xmm5,xmmword ptr[ebx+8*4]
-                    addps   xmm4,xmm5
-                    movups  xmmword ptr[edx+8*4],xmm4
-
-                    movups  xmm6,xmmword ptr[eax+12*4]
-                    movaps  xmm7,xmmword ptr[ebx+12*4]
-                    addps   xmm6,xmm7
-                    movups  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopua
-                }
-            }
-            else {
-                __asm {
-                    mov     ecx,dword ptr [n]
-                    mov     eax,dword ptr [src]
-                    mov     edx,dword ptr [dst]
-                    mov     ebx,dword ptr [op]
-    loopuu:
-                    prefetcht0 [eax+64]
-                    prefetcht0 [ebx+64]
-                    prefetcht0 [eax+96]
-                    prefetcht0 [ebx+96]
-
-                    movups  xmm0,xmmword ptr[eax]
-                    movups  xmm1,xmmword ptr[ebx]
-                    addps   xmm0,xmm1
-                    movups  xmmword ptr[edx],xmm0
-
-                    movups  xmm2,xmmword ptr[eax+4*4]
-                    movups  xmm3,xmmword ptr[ebx+4*4]
-                    addps   xmm2,xmm3
-                    movups  xmmword ptr[edx+4*4],xmm2
-
-                    movups  xmm4,xmmword ptr[eax+8*4]
-                    movups  xmm5,xmmword ptr[ebx+8*4]
-                    addps   xmm4,xmm5
-                    movups  xmmword ptr[edx+8*4],xmm4
-
-                    movups  xmm6,xmmword ptr[eax+12*4]
-                    movups  xmm7,xmmword ptr[ebx+12*4]
-                    addps   xmm6,xmm7
-                    movups  xmmword ptr[edx+12*4],xmm6
-
-                    add     eax,16*4
-                    add     ebx,16*4
-                    add     edx,16*4
-                    loop    loopuu
-                }
-            }
-        }
-
-        src += n<<4,dst += n<<4,op += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++) + *(op++); 
-    }
-    else
-#elif defined(__APPLE__) && defined(__VDSP__)
-    if(true) {
-        vDSP_vadd(src,1,op,1,dst,1,cnt);
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,op,dst))
-        AddAltivec(dst,src,op,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-
-        if(dst == src) {
-            while(n--) {
-                dst[0] += op[0]; dst[1] += op[1]; 
-                dst[2] += op[2]; dst[3] += op[3]; 
-                dst[4] += op[4]; dst[5] += op[5]; 
-                dst[6] += op[6]; dst[7] += op[7]; 
-                dst += 8,op += 8;
-            }
-            while(cnt--) *(dst++) += *(op++); 
-        }
-        else {
-            while(n--) {
-                dst[0] = src[0]+op[0]; dst[1] = src[1]+op[1]; 
-                dst[2] = src[2]+op[2]; dst[3] = src[3]+op[3]; 
-                dst[4] = src[4]+op[4]; dst[5] = src[5]+op[5]; 
-                dst[6] = src[6]+op[6]; dst[7] = src[7]+op[7]; 
-                src += 8,dst += 8,op += 8;
-            }
-            while(cnt--) *(dst++) = *(src++) + *(op++); 
-        }
-    }
-#endif
-}
-
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ScaleSamples(t_sample *dst,const t_sample *src,t_sample opmul,t_sample opadd,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsMulC_32f((const float *)src,(float)opmul,(float *)dst,cnt); 
-        ippsAddC_32f_I((float)opadd,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsMulC_64f((const double *)src,(double)opmul,(double *)dst,cnt); 
-        ippsAddC_64f_I((double)opadd,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,dword ptr [src]
-            prefetcht0 [eax+0]
-            prefetcht0 [eax+32]
-
-            movss   xmm0,xmmword ptr [opadd]
-            shufps  xmm0,xmm0,0
-            movss   xmm1,xmmword ptr [opmul]
-            shufps  xmm1,xmm1,0
-        }
-
-        if(VectorsAligned(src,dst)) {
-            // aligned version
-            __asm {
-                mov     ecx,dword ptr [n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-loopa:
-                prefetcht0 [eax+64]
-                prefetcht0 [eax+96]
-
-                movaps  xmm2,xmmword ptr[eax]
-                mulps   xmm2,xmm1
-                addps   xmm2,xmm0
-                movaps  xmmword ptr[edx],xmm2
-
-                movaps  xmm3,xmmword ptr[eax+4*4]
-                mulps   xmm3,xmm1
-                addps   xmm3,xmm0
-                movaps  xmmword ptr[edx+4*4],xmm3
-
-                movaps  xmm4,xmmword ptr[eax+8*4]
-                mulps   xmm4,xmm1
-                addps   xmm4,xmm0
-                movaps  xmmword ptr[edx+8*4],xmm4
-
-                movaps  xmm5,xmmword ptr[eax+12*4]
-                mulps   xmm5,xmm1
-                addps   xmm5,xmm0
-                movaps  xmmword ptr[edx+12*4],xmm5
-
-                add     eax,16*4
-                add     edx,16*4
-                loop    loopa
-            }
-        }
-        else {
-            // unaligned version
-            __asm {
-                mov     ecx,dword ptr [n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-loopu:
-                prefetcht0 [eax+64]
-                prefetcht0 [eax+96]
-
-                movups  xmm2,xmmword ptr[eax]
-                mulps   xmm2,xmm1
-                addps   xmm2,xmm0
-                movups  xmmword ptr[edx],xmm2
-
-                movups  xmm3,xmmword ptr[eax+4*4]
-                mulps   xmm3,xmm1
-                addps   xmm3,xmm0
-                movups  xmmword ptr[edx+4*4],xmm3
-
-                movups  xmm4,xmmword ptr[eax+8*4]
-                mulps   xmm4,xmm1
-                addps   xmm4,xmm0
-                movups  xmmword ptr[edx+8*4],xmm4
-
-                movups  xmm5,xmmword ptr[eax+12*4]
-                mulps   xmm5,xmm1
-                addps   xmm5,xmm0
-                movups  xmmword ptr[edx+12*4],xmm5
-
-                add     eax,16*4
-                add     edx,16*4
-                loop    loopu
-            }
-        }
-
-        src += n<<4,dst += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++)*opmul+opadd; 
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,dst)) 
-        ScaleAltivec(dst,src,opmul,opadd,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-        while(n--) {
-            dst[0] = src[0]*opmul+opadd; dst[1] = src[1]*opmul+opadd; 
-            dst[2] = src[2]*opmul+opadd; dst[3] = src[3]*opmul+opadd; 
-            dst[4] = src[4]*opmul+opadd; dst[5] = src[5]*opmul+opadd; 
-            dst[6] = src[6]*opmul+opadd; dst[7] = src[7]*opmul+opadd; 
-            src += 8,dst += 8;
-        }
-        while(cnt--) *(dst++) = *(src++)*opmul+opadd; 
-    }
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ScaleSamples(t_sample *dst,const t_sample *src,t_sample opmul,const t_sample *opadd,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsMulC_32f((const float *)src,(float)opmul,(float *)dst,cnt); 
-        ippsAdd_32f_I((float *)opadd,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsMulC_64f((const double *)src,(double)opmul,(double *)dst,cnt); 
-        ippsAdd_64f_I((double *)opadd,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,dword ptr [src]
-            prefetcht0 [eax+0]
-            prefetcht0 [eax+32]
-
-            movss   xmm0,xmmword ptr [opmul]
-            shufps  xmm0,xmm0,0
-        }
-
-        if(VectorsAligned(src,dst,opadd)) {
-            // aligned version
-            __asm {
-                mov     ecx,dword ptr [n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-                mov     ebx,dword ptr [opadd]
-loopa:
-                prefetcht0 [eax+64]
-                prefetcht0 [ebx+64]
-                prefetcht0 [eax+96]
-                prefetcht0 [ebx+96]
-
-                movaps  xmm2,xmmword ptr[eax]
-                movaps  xmm1,xmmword ptr[ebx]
-                mulps   xmm2,xmm0
-                addps   xmm2,xmm1
-                movaps  xmmword ptr[edx],xmm2
-
-                movaps  xmm3,xmmword ptr[eax+4*4]
-                movaps  xmm1,xmmword ptr[ebx+4*4]
-                mulps   xmm3,xmm0
-                addps   xmm3,xmm1
-                movaps  xmmword ptr[edx+4*4],xmm3
-
-                movaps  xmm4,xmmword ptr[eax+8*4]
-                movaps  xmm1,xmmword ptr[ebx+8*4]
-                mulps   xmm4,xmm0
-                addps   xmm4,xmm1
-                movaps  xmmword ptr[edx+8*4],xmm4
-
-                movaps  xmm5,xmmword ptr[eax+12*4]
-                movaps  xmm1,xmmword ptr[ebx+12*4]
-                mulps   xmm5,xmm0
-                addps   xmm5,xmm1
-                movaps  xmmword ptr[edx+12*4],xmm5
-
-                add     eax,16*4
-                add     edx,16*4
-                add     ebx,16*4
-                loop    loopa
-            }
-        }
-        else {
-            // unaligned version
-            __asm {
-                mov     ecx,dword ptr [n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-                mov     ebx,dword ptr [opadd]
-loopu:
-                prefetcht0 [eax+64]
-                prefetcht0 [ebx+64]
-                prefetcht0 [eax+96]
-                prefetcht0 [ebx+96]
-
-                movups  xmm2,xmmword ptr[eax]
-                movups  xmm1,xmmword ptr[ebx]
-                mulps   xmm2,xmm0
-                addps   xmm2,xmm1
-                movups  xmmword ptr[edx],xmm2
-
-                movups  xmm3,xmmword ptr[eax+4*4]
-                movups  xmm1,xmmword ptr[ebx+4*4]
-                mulps   xmm3,xmm0
-                addps   xmm3,xmm1
-                movups  xmmword ptr[edx+4*4],xmm3
-
-                movups  xmm4,xmmword ptr[eax+8*4]
-                movups  xmm1,xmmword ptr[ebx+8*4]
-                mulps   xmm4,xmm0
-                addps   xmm4,xmm1
-                movups  xmmword ptr[edx+8*4],xmm4
-
-                movups  xmm5,xmmword ptr[eax+12*4]
-                movups  xmm1,xmmword ptr[ebx+12*4]
-                mulps   xmm5,xmm0
-                addps   xmm5,xmm1
-                movups  xmmword ptr[edx+12*4],xmm5
-
-                add     eax,16*4
-                add     edx,16*4
-                add     ebx,16*4
-                loop    loopu
-            }
-        }
-
-        src += n<<4,dst += n<<4,opadd += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++) * opmul + *(opadd++); 
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,dst,opadd)) 
-        ScaleAltivec(dst,src,opmul,opadd,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-        if(dst == opadd) {
-            while(n--) {
-                dst[0] += src[0]*opmul; dst[1] += src[1]*opmul; 
-                dst[2] += src[2]*opmul; dst[3] += src[3]*opmul; 
-                dst[4] += src[4]*opmul; dst[5] += src[5]*opmul; 
-                dst[6] += src[6]*opmul; dst[7] += src[7]*opmul; 
-                src += 8,dst += 8;
-            }
-            while(cnt--) *(dst++) += *(src++)*opmul; 
-        }
-        else {
-            while(n--) {
-                dst[0] = src[0]*opmul+opadd[0]; dst[1] = src[1]*opmul+opadd[1]; 
-                dst[2] = src[2]*opmul+opadd[2]; dst[3] = src[3]*opmul+opadd[3]; 
-                dst[4] = src[4]*opmul+opadd[4]; dst[5] = src[5]*opmul+opadd[5]; 
-                dst[6] = src[6]*opmul+opadd[6]; dst[7] = src[7]*opmul+opadd[7]; 
-                src += 8,dst += 8,opadd += 8;
-            }
-            while(cnt--) *(dst++) = *(src++)*opmul+*(opadd++); 
-        }
-    }
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ScaleSamples(t_sample *dst,const t_sample *src,const t_sample *opmul,const t_sample *opadd,int cnt)
-{
-#ifdef FLEXT_USE_IPP
-    if(sizeof(t_sample) == 4) {
-        ippsMul_32f((const float *)src,(const float *)opmul,(float *)dst,cnt); 
-        ippsAdd_32f_I((const float *)opadd,(float *)dst,cnt); 
-    }
-    else if(sizeof(t_sample) == 8) {
-        ippsMul_64f((const double *)src,(const double *)opmul,(double *)dst,cnt); 
-        ippsAdd_64f_I((const double *)opadd,(double *)dst,cnt); 
-    }
-    else
-        ERRINTERNAL();
-#else
-#ifdef FLEXT_USE_SIMD
-#ifdef _MSC_VER
-    if(GetSIMDCapabilities()&simd_sse) {
-        // single precision
-        int n = cnt>>4;
-        if(!n) goto zero;
-        cnt -= n<<4;
-
-        __asm {
-            mov     eax,dword ptr [src]
-            prefetcht0 [eax+0]
-            prefetcht0 [eax+32]
-        }
-
-        if(VectorsAligned(src,dst,opmul,opadd)) {
-            // aligned version
-            __asm {
-                mov     ecx,dword ptr [n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-                mov     esi,dword ptr [opmul]
-                mov     ebx,dword ptr [opadd]
-loopa:
-                prefetcht0 [eax+64]
-                prefetcht0 [ebx+64]
-                prefetcht0 [esi+64]
-                prefetcht0 [eax+96]
-                prefetcht0 [ebx+96]
-                prefetcht0 [esi+96]
-
-                movaps  xmm2,xmmword ptr[eax]
-                movaps  xmm0,xmmword ptr[esi]
-                movaps  xmm1,xmmword ptr[ebx]
-                mulps   xmm2,xmm0
-                addps   xmm2,xmm1
-                movaps  xmmword ptr[edx],xmm2
-
-                movaps  xmm3,xmmword ptr[eax+4*4]
-                movaps  xmm0,xmmword ptr[esi+4*4]
-                movaps  xmm1,xmmword ptr[ebx+4*4]
-                mulps   xmm3,xmm0
-                addps   xmm3,xmm1
-                movaps  xmmword ptr[edx+4*4],xmm3
-
-                movaps  xmm4,xmmword ptr[eax+8*4]
-                movaps  xmm0,xmmword ptr[esi+8*4]
-                movaps  xmm1,xmmword ptr[ebx+8*4]
-                mulps   xmm4,xmm0
-                addps   xmm4,xmm1
-                movaps  xmmword ptr[edx+8*4],xmm4
-
-                movaps  xmm5,xmmword ptr[eax+12*4]
-                movaps  xmm0,xmmword ptr[esi+12*4]
-                movaps  xmm1,xmmword ptr[ebx+12*4]
-                mulps   xmm5,xmm0
-                addps   xmm5,xmm1
-                movaps  xmmword ptr[edx+12*4],xmm5
-
-                add     eax,16*4
-                add     edx,16*4
-                add     ebx,16*4
-                add     esi,16*4
-                loop    loopa
-            }
-        }
-        else {
-            // unaligned version
-            __asm {
-                mov     ecx,dword ptr [n]
-                mov     eax,dword ptr [src]
-                mov     edx,dword ptr [dst]
-                mov     esi,dword ptr [opmul]
-                mov     ebx,dword ptr [opadd]
-loopu:
-                prefetcht0 [eax+64]
-                prefetcht0 [ebx+64]
-                prefetcht0 [esi+64]
-                prefetcht0 [eax+96]
-                prefetcht0 [ebx+96]
-                prefetcht0 [esi+96]
-
-                movups  xmm2,xmmword ptr[eax]
-                movups  xmm0,xmmword ptr[esi]
-                movups  xmm1,xmmword ptr[ebx]
-                mulps   xmm2,xmm0
-                addps   xmm2,xmm1
-                movups  xmmword ptr[edx],xmm2
-
-                movups  xmm3,xmmword ptr[eax+4*4]
-                movups  xmm0,xmmword ptr[esi+4*4]
-                movups  xmm1,xmmword ptr[ebx+4*4]
-                mulps   xmm3,xmm0
-                addps   xmm3,xmm1
-                movups  xmmword ptr[edx+4*4],xmm3
-
-                movups  xmm4,xmmword ptr[eax+8*4]
-                movups  xmm0,xmmword ptr[esi+8*4]
-                movups  xmm1,xmmword ptr[ebx+8*4]
-                mulps   xmm4,xmm0
-                addps   xmm4,xmm1
-                movups  xmmword ptr[edx+8*4],xmm4
-
-                movups  xmm5,xmmword ptr[eax+12*4]
-                movups  xmm0,xmmword ptr[esi+12*4]
-                movups  xmm1,xmmword ptr[ebx+12*4]
-                mulps   xmm5,xmm0
-                addps   xmm5,xmm1
-                movups  xmmword ptr[edx+12*4],xmm5
-
-                add     eax,16*4
-                add     edx,16*4
-                add     ebx,16*4
-                add     esi,16*4
-                loop    loopu
-            }
-        }
-        src += n<<4,dst += n<<4,opmul += n<<4,opadd += n<<4;
-zero:
-        while(cnt--) *(dst++) = *(src++) * *(opmul++) + *(opadd++); 
-    }
-    else
-#elif (FLEXT_CPU == FLEXT_CPU_PPC || FLEXT_CPU == FLEXT_CPU_PPC64) && defined(__VEC__)
-    if(GetSIMDCapabilities()&simd_altivec && VectorsAligned(src,dst,opmul,opadd)) 
-        ScaleAltivec(dst,src,opmul,opadd,cnt);
-    else
-#endif // _MSC_VER
-#endif // FLEXT_USE_SIMD
-    {
-        int n = cnt>>3;
-        cnt -= n<<3;
-        if(dst == opadd) {
-            while(n--) {
-                dst[0] += src[0]*opmul[0]; dst[1] += src[1]*opmul[1]; 
-                dst[2] += src[2]*opmul[2]; dst[3] += src[3]*opmul[3]; 
-                dst[4] += src[4]*opmul[4]; dst[5] += src[5]*opmul[5]; 
-                dst[6] += src[6]*opmul[6]; dst[7] += src[7]*opmul[7]; 
-                src += 8,dst += 8,opmul += 8;
-            }
-            while(cnt--) *(dst++) += *(src++) * *(opmul++); 
-        }
-        else {
-            while(n--) {
-                dst[0] = src[0]*opmul[0]+opadd[0]; dst[1] = src[1]*opmul[1]+opadd[1]; 
-                dst[2] = src[2]*opmul[2]+opadd[2]; dst[3] = src[3]*opmul[3]+opadd[3]; 
-                dst[4] = src[4]*opmul[4]+opadd[4]; dst[5] = src[5]*opmul[5]+opadd[5]; 
-                dst[6] = src[6]*opmul[6]+opadd[6]; dst[7] = src[7]*opmul[7]+opadd[7]; 
-                src += 8,dst += 8,opmul += 8,opadd += 8;
-            }
-            while(cnt--) *(dst++) = *(src++)* *(opmul++) + *(opadd++); 
-        }
-    }
-#endif
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_SIMD_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flstdc.h b/externals/grill/trunk/flext/libbuild/include/flext/flstdc.h
deleted file mode 100755
index c18d544530150a35b70efa9e7f1e26b3b224b844..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flstdc.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flstdc.h
-	\brief Definitions to unite Max/MSP and PD notions
-    
-	This file contains a few definitions to unite a few of the notions that 
-	once drifted apart in Max and PD. It is not elegant but helps.
-*/
-
-#ifndef __FLEXT_STDC_H
-#define __FLEXT_STDC_H
-
-#if defined(_MSC_VER) && (_MSC_VER < 0x1300)
-/* 
-    include math.h here - when included with PD or Max/MSP headers,  
-    C linkage would be used which disturbs MSVC6
-*/
-#include <cmath>
-#endif
-
-#ifdef _MSC_VER
-#include <crtdbg.h>
-#endif
-#include <cassert>
-
-// PD stuff
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-
-/* PD definitions start here */
-
-#ifdef _MSC_VER
-	#pragma warning (push)
-	#pragma warning (disable:4091 4005)
-#endif
-
-#if FLEXT_OS == FLEXT_OS_WIN && !defined(NT)
-#define NT
-#endif
-
-extern "C" {	    	    
-	// Include the relevant PD header files
-	#ifdef FLEXT_DEBUG
-        /*  PD header file structure has changed with version 0.37
-            from then on m_imp.h needs m_pd.h to be included before
-            on the other hand versions < 0.37 don't like that....
-            (they want m_imp.h solely as m_pd.h is included therein)
-            So better use the m_pd.h here also for the debug version.
-            Change that if really needed for debugging PD internals...
-        */
-
-		#ifndef PD_VERSION
-			// include only if not already included
-			#include <m_pd.h>
-		#endif
-//		#include <m_imp.h>  // for easier debugging
-    #else
-		#ifndef PD_VERSION
-			// include only if not already included
-			#include <m_pd.h>
-		#endif
-	#endif
-}
-
-#ifdef _MSC_VER
-	#pragma warning (pop)
-#endif
-
-#include "flpushns.h"
-
-#ifdef cabs
-#undef cabs // this is defined in m_pd.h (clashes with math.h in MacOSX)
-#endif
-
-typedef t_object t_sigobj;
-typedef t_gpointer *t_ptrtype;
-
-typedef t_float t_flint;
-typedef t_symbol *t_symtype;
-typedef t_class **t_thing;
-
-typedef t_clock t_qelem;
-
-#define A_NOTHING A_NULL
-#define A_FLINT A_FLOAT
-#define A_DEFFLINT A_DEFFLOAT
-#define A_DEFSYMBOL A_DEFSYM
-
-#include "flpopns.h"
-
-
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-
-/* -------------- Max/MSP ------------------- */
-
-// 2-byte alignment for Max/MSP structures
-#ifdef _MSC_VER
-#pragma pack(push,flext_maxsdk)
-#pragma pack(2)
-#endif
-
-// Include the relevant Max/MSP header files
-
-#if FLEXT_OS == FLEXT_OS_MAC
-	#if FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH
-		// MachO version - must insert prefix header
-         #include <Carbon/Carbon.h>
-	#else
-		// CFM version
-		#ifndef __MRC__
-			#define powerc
-		#endif
-		#define __MOTO__ 0
-
-		#include <MacTypes.h>
-	#endif
-#elif FLEXT_OS == FLEXT_OS_WIN
-	#define WIN_VERSION 1
-	#define WIN_EXT_VERSION 1
-#endif
-
-// necessary for the old OS9 SDK
-extern "C" {
-
-#include "ext.h"
-#include "ext_user.h"
-#if FLEXT_OS != FLEXT_OS_MAC || defined(MAC_VERSION)
-// doesn't exist for OS9
-#include "ext_critical.h"
-#include "buffer.h"
-#else
-// for OS9 include "inofficial" header file
-#include "flmspbuffer.h"
-#endif
-#include "z_dsp.h"
-#include "ext_obex.h"
-
-// check for Max5 SDK
-#include "commonsyms.h"
-#if C74_MAX_SDK_VERSION >= 0x0500 || COMMON_SYMBOLS_VERSION >= 500 
-    #define _FLEXT_MAX5SDK
-#endif
-
-} // extern "C"
-
-#include "flpushns.h"
-
-#undef WIN_VERSION
-
-typedef t_pxobject t_sigobj;  // that's the all-in-one object type of Max/MSP (not very memory-efficent, i guess)
-typedef t_patcher t_canvas;
-
-typedef t_int t_flint;
-typedef t_symbol *t_symtype;
-typedef t_object *t_thing;
-
-#ifndef _FLEXT_MAX5SDK
-    // for the following to work you should have the latest SDK
-    #if FLEXT_OS == FLEXT_OS_MAC //&& !defined(MAC_VERSION)
-    typedef struct qelem t_qelem;
-    #else
-    typedef void *t_qelem;
-    #endif
-#endif
-
-typedef method t_method;
-typedef method t_newmethod;
-typedef int t_atomtype;
-
-#ifndef _FLEXT_MAX5SDK
-typedef struct clock t_clock;  // this is defined in the Max5 SDK
-#endif
-
-typedef void t_binbuf;
-
-#undef clock_free
-#define clock_free(tick) freeobject((object *)tick)
-
-#define A_NULL A_NOTHING
-#define A_DEFFLINT A_DEFLONG
-
-#ifndef A_INT
-#define A_INT A_LONG
-#endif
-
-#ifndef A_DEFINT
-#define A_DEFINT A_DEFLONG
-#endif
-
-#ifndef A_SYMBOL
-#define A_SYMBOL A_SYM
-#endif
-
-#ifndef A_DEFSYMBOL
-#define A_DEFSYMBOL A_DEFSYM
-#endif
-
-#if FLEXT_OS == FLEXT_OS_MAC && !defined(MAC_VERSION)
-// simulate non-existing functions for OS9
-#define critical_enter(N)
-#define critical_exit(N)
-#endif
-
-#ifdef _MSC_VER
-#pragma pack(pop,flext_maxsdk)
-#endif
-
-#include "flpopns.h"
-
-#else
-#error Platform not supported
-#endif // FLEXT_SYS
-
-
-// general definitions
-
-#include "flpushns.h"
-
-typedef t_symbol *t_symptr;
-
-// -------------------------
-
-#ifdef FLEXT_LOGGING
-/* If FLEXT_LOGGING is defined implement logging */
-
-#ifdef _MSC_VER
-#define FLEXT_LOG(s) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s)
-#define FLEXT_LOG1(s,v1) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1)
-#define FLEXT_LOG2(s,v1,v2) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2)
-#define FLEXT_LOG3(s,v1,v2,v3) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3)
-#define FLEXT_LOG4(s,v1,v2,v3,v4) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3,v4)
-#define FLEXT_LOG5(s,v1,v2,v3,v4,v5) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3,v4,v5)
-#define FLEXT_LOG6(s,v1,v2,v3,v4,v5,v6) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3,v4,v5,v6)
-#define FLEXT_LOG7(s,v1,v2,v3,v4,v5,v6,v7) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3,v4,v5,v6,v7)
-#define FLEXT_LOG8(s,v1,v2,v3,v4,v5,v6,v7,v8) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3,v4,v5,v6,v7,v8)
-#define FLEXT_LOG9(s,v1,v2,v3,v4,v5,v6,v7,v8,v9) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",s,v1,v2,v3,v4,v5,v6,v7,v8,v9)
-#else
-#define FLEXT_LOG(s) post(s)
-#define FLEXT_LOG1(s,v1) post(s,v1)
-#define FLEXT_LOG2(s,v1,v2) post(s,v1,v2)
-#define FLEXT_LOG3(s,v1,v2,v3) post(s,v1,v2,v3)
-#define FLEXT_LOG4(s,v1,v2,v3,v4) post(s,v1,v2,v3,v4)
-#define FLEXT_LOG5(s,v1,v2,v3,v4,v5) post(s,v1,v2,v3,v4,v5)
-#define FLEXT_LOG6(s,v1,v2,v3,v4,v5,v6) post(s,v1,v2,v3,v4,v5,v6)
-#define FLEXT_LOG7(s,v1,v2,v3,v4,v5,v6,v7) post(s,v1,v2,v3,v4,v5,v6,v7)
-#define FLEXT_LOG8(s,v1,v2,v3,v4,v5,v6,v7,v8) post(s,v1,v2,v3,v4,v5,v6,v7,v8)
-#define FLEXT_LOG9(s,v1,v2,v3,v4,v5,v6,v7,v8,v9) post(s,v1,v2,v3,v4,v5,v6,v7,v8,v9)
-#endif
-
-#else
-
-/* If FLEXT_LOGGING is not defined avoid logging */
-#define FLEXT_LOG(s) ((void)0)
-#define FLEXT_LOG1(s,v1) ((void)0)
-#define FLEXT_LOG2(s,v1,v2) ((void)0)
-#define FLEXT_LOG3(s,v1,v2,v3) ((void)0)
-#define FLEXT_LOG4(s,v1,v2,v3,v4) ((void)0)
-#define FLEXT_LOG5(s,v1,v2,v3,v4,v5) ((void)0)
-#define FLEXT_LOG6(s,v1,v2,v3,v4,v5,v6) ((void)0)
-#define FLEXT_LOG7(s,v1,v2,v3,v4,v5,v6,v7) ((void)0)
-#define FLEXT_LOG8(s,v1,v2,v3,v4,v5,v6,v7,v8) ((void)0)
-#define FLEXT_LOG9(s,v1,v2,v3,v4,v5,v6,v7,v8,v9) ((void)0)
-
-#endif
-
-#ifdef FLEXT_DEBUG
-#ifdef _MSC_VER
-#define FLEXT_ASSERT(b) do { if(!(b)) _CrtDbgReport(_CRT_ASSERT,__FILE__,__LINE__,"flext",#b); } while(false)
-#define FLEXT_WARN(str) _CrtDbgReport(_CRT_WARN,__FILE__,__LINE__,"flext",NULL)
-#define FLEXT_ERROR(str) _CrtDbgReport(_CRT_ERROR,__FILE__,__LINE__,"flext",NULL)
-#else
-#define FLEXT_ASSERT(b) assert(b)
-//#define FLEXT_ASSERT(b) do { if(!(b)) error("Assertion failed: " #b " - in " __FILE__ " line %i",(int)__LINE__); } while(false)
-#define FLEXT_WARN(str) error("Warning: in " __FILE__ " line %i",(int)__LINE__)
-#define FLEXT_ERROR(str) error("Error: in " __FILE__ " line %i",(int)__LINE__)
-#endif
-#else
-#define FLEXT_ASSERT(b) assert(1)
-#define FLEXT_WARN(str) assert(1)
-#define FLEXT_ERROR(str) error("Error: in " __FILE__ " line %i",(int)__LINE__)
-#endif
-
-#define ERRINTERNAL() error("flext: Internal error in file " __FILE__ ", line %i - please report",(int)__LINE__)
-
-
-// ----- disable attribute editor for PD version < devel_0_36 or 0.37
-#ifndef PD_MAJOR_VERSION
-#	undef FLEXT_NOATTREDIT
-#	define FLEXT_NOATTREDIT
-#endif
-
-
-// ----- set message queue mode -----
-#if FLEXT_SYS == FLEXT_SYS_PD && PD_MINOR_VERSION >= 37
-//	for PD version >= 0.37test10 FLEXT_PDLOCK is standard
-#	undef FLEXT_PDLOCK
-#	define FLEXT_PDLOCK
-#endif
-
-#ifndef FLEXT_QMODE
-#	if FLEXT_SYS == FLEXT_SYS_PD && PD_MINOR_VERSION >= 38 && defined(PD_DEVEL_VERSION)
-//		use idle callback
-#		define FLEXT_QMODE 1
-#	elif defined(FLEXT_PDLOCK)
-//		new PD thread locking functionality shall be used
-#		if FLEXT_SYS == FLEXT_SYS_PD
-#			ifdef FLEXT_THREADS
-//				can only be used with PD and threaded build
-#				define FLEXT_QMODE 2
-#			else
-#				define FLEXT_QMODE 0
-#			endif
-#		else
-#			error FLEXT_PDLOCK can only be defined with PD
-#		endif
-#	else
-#		define FLEXT_QMODE 0
-#	endif
-#endif
-
-#ifndef FLEXT_QMODE
-#	error Internal error: Queueing mode not defined
-#endif
-
-#include "flpopns.h"
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flsupport.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flsupport.cpp
deleted file mode 100755
index ae02443f20a04f7f46a9f476e4ae2368a13ce0b3..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flsupport.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flsupport.cpp
-    \brief flext support functions and classes.
-*/
-
-#ifndef __FLEXT_SUPPORT_CPP
-#define __FLEXT_SUPPORT_CPP
-
-#include "flext.h"
-
-#include <cstdio>
-#include <cstdarg>
-#include <cstdlib>
-#include <cstring>
-#include <new>
-
-#include "flpushns.h"
-
-#ifdef _MSC_VER
-#define vsnprintf _vsnprintf
-#define snprintf _snprintf
-#endif
-
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym__ = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_float = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_symbol = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_bang = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_list = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_pointer = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_int = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_signal = NULL;
-
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_anything = NULL;
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_buffer = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_size = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_dirty = NULL;
-#endif
-
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_attributes = NULL;
-FLEXT_TEMPIMPL(const t_symbol *FLEXT_CLASSDEF(flext))::sym_methods = NULL;
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::indsp = false;
-
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::Version() { return FLEXT_VERSION; }
-FLEXT_TEMPIMPL(const char *FLEXT_CLASSDEF(flext))::VersionStr() { return FLEXT_VERSTR; }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::Setup()
-{
-	if(sym__) return;
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-	sym__ = &s_;
-	sym_anything = &s_anything;
-	sym_pointer = &s_pointer;
-	sym_float = &s_float;
-	sym_symbol = &s_symbol;
-	sym_bang = &s_bang;
-	sym_list = &s_list;
-	sym_signal = &s_signal;
-	sym_int = flext::MakeSymbol("int");
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-	sym__ = flext::MakeSymbol("");
-	sym_int = flext::MakeSymbol("int");
-	sym_float = flext::MakeSymbol("float");
-	sym_symbol = flext::MakeSymbol("symbol");
-	sym_bang = flext::MakeSymbol("bang");
-	sym_list = flext::MakeSymbol("list");
-	sym_anything = flext::MakeSymbol("anything");
-	sym_signal = flext::MakeSymbol("signal");
-
-    sym_buffer = flext::MakeSymbol("buffer~");
-    sym_size = flext::MakeSymbol("size");
-    sym_dirty = flext::MakeSymbol("dirty");
-#endif
-    
-    sym_attributes = flext::MakeSymbol("attributes");
-    sym_methods = flext::MakeSymbol("methods");
-
-#ifdef FLEXT_THREADS
-	thrid = GetThreadId();
-    StartHelper();
-#endif
-}
-
-
-#if FLEXT_SYS == FLEXT_SYS_PD && defined(FLEXT_THREADED) && defined(FLEXT_PDLOCK)
-#define SYSLOCK() sys_lock()
-#define SYSUNLOCK() sys_unlock()
-#else
-#define SYSLOCK() (void)0
-#define SYSUNLOCK() (void)0
-#endif
-
-
-/////////////////////////////////////////////////////////
-// overloaded new/delete memory allocation methods
-//
-/////////////////////////////////////////////////////////
-
-#define LARGEALLOC 32000
-
-#ifndef FLEXT_USE_CMEM
-
-#ifdef FLEXT_DEBUGMEM
-static const size_t memtest = 0x12345678L;
-#endif
-
-FLEXT_TEMPIMPL(void *FLEXT_CLASSDEF(flext_root))::operator new(size_t bytes)
-{
-	bytes += sizeof(size_t);
-#ifdef FLEXT_DEBUGMEM
-    bytes += sizeof(memtest)*2;
-#endif
-    char *blk;
-    if(UNLIKELY(bytes >= LARGEALLOC)) {
-#if FLEXT_SYS == FLEXT_SYS_MAX && defined(_SYSMEM_H_)
-        blk = (char *)sysmem_newptr(bytes);
-#else
-        // use C library function for large memory blocks
-        blk = (char *)malloc(bytes);
-#endif
-    }
-    else {
-    	//! We need system locking here for secondary threads!
-        SYSLOCK();
-	    blk = (char *)getbytes(bytes);
-        SYSUNLOCK();
-    }
-
-	FLEXT_ASSERT(blk);
-
-	*(size_t *)blk = bytes;
-#ifdef FLEXT_DEBUGMEM
-    *(size_t *)(blk+sizeof(size_t)) = memtest;
-    *(size_t *)(blk+bytes-sizeof(memtest)) = memtest;
-	return blk+sizeof(size_t)+sizeof(memtest);
-#else
-	return blk+sizeof(size_t);
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_root))::operator delete(void *blk)
-{
-    if(!blk) return;
-
-    FLEXT_ASSERT(MemCheck(blk));
-
-#ifdef FLEXT_DEBUGMEM
-	char *ori = (char *)blk-sizeof(size_t)-sizeof(memtest);
-#else
-    char *ori = (char *)blk-sizeof(size_t);
-#endif
-	size_t bytes = *(size_t *)ori;
-
-    if(UNLIKELY(bytes >= LARGEALLOC)) {
-#if FLEXT_SYS == FLEXT_SYS_MAX && defined(_SYSMEM_H_)
-        sysmem_freeptr(ori);
-#else
-        // use C library function for large memory blocks
-        free(ori);
-#endif
-    }
-    else {
-	    //! We need system locking here for secondary threads!
-        SYSLOCK();
-	    freebytes(ori,bytes);
-        SYSUNLOCK();
-    }
-}
-
-#ifdef FLEXT_DEBUGMEM
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_root))::MemCheck(void *blk)
-{
-	char *ori = (char *)blk-sizeof(size_t)-sizeof(memtest);
-	size_t bytes = *(size_t *)ori;
-
-    return 
-        *(size_t *)((char *)ori+sizeof(size_t)) == memtest && 
-        *(size_t *)((char *)ori+bytes-sizeof(memtest)) == memtest;
-}
-#endif
-
-#endif
-
-FLEXT_TEMPIMPL(void *FLEXT_CLASSDEF(flext_root))::NewAligned(size_t bytes,int bitalign)
-{
-	const size_t ovh = sizeof(size_t)+sizeof(char *);
-	const size_t alignovh = bitalign/8-1;
-	bytes += ovh+alignovh;
-
-    char *blk;
-    if(UNLIKELY(bytes >= LARGEALLOC)) {
-#if FLEXT_SYS == FLEXT_SYS_MAX && defined(_SYSMEM_H_)
-        blk = (char *)sysmem_newptr(bytes);
-#else
-        // use C library function for large memory blocks
-        blk = (char *)malloc(bytes);
-#endif
-    }
-    else {
-	//! We need system locking here for secondary threads!
-        SYSLOCK();
-
-#if defined(FLEXT_USE_CMEM)
-	    blk = (char *)malloc(bytes);
-#else
-	    blk = (char *)getbytes(bytes);
-#endif
-        SYSUNLOCK();
-    }
-	FLEXT_ASSERT(blk);
-
-	char *ablk = reinterpret_cast<char *>((reinterpret_cast<size_t>(blk)+ovh+alignovh) & ~alignovh);
-	*(char **)(ablk-sizeof(size_t)-sizeof(char *)) = blk;
-	*(size_t *)(ablk-sizeof(size_t)) = bytes;
-	return ablk;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_root))::FreeAligned(void *blk)
-{
-	FLEXT_ASSERT(blk);
-
-	char *ori = *(char **)((char *)blk-sizeof(size_t)-sizeof(char *));
-	size_t bytes = *(size_t *)((char *)blk-sizeof(size_t));
-
-    if(UNLIKELY(bytes >= LARGEALLOC)) {
-#if FLEXT_SYS == FLEXT_SYS_MAX && defined(_SYSMEM_H_)
-        sysmem_freeptr(ori);
-#else
-        // use C library function for large memory blocks
-        free(ori);
-#endif
-    }
-    else {
-	//! We need system locking here for secondary threads!
-        SYSLOCK();
-
-#if defined(FLEXT_USE_CMEM)
-	    free(ori);
-#else
-	    freebytes(ori,bytes);
-#endif
-        SYSUNLOCK();
-    }
-}
-
-// ------------------------------------------
-
-/*! \todo there is probably also a shortcut for Max and jMax
-    \todo size checking
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::GetAString(const t_atom &a,char *buf,size_t szbuf)
-{ 
-#if FLEXT_SYS == FLEXT_SYS_PD
-	atom_string(const_cast<t_atom *>(&a),buf,(int)szbuf);
-#else
-    if(IsSymbol(a)) STD::strncpy(buf,GetString(a),szbuf);
-	else if(IsFloat(a)) STD::snprintf(buf,szbuf,"%f",GetFloat(a));
-	else if(IsInt(a)) STD::snprintf(buf,szbuf,"%i",GetInt(a));
-    else *buf = 0;
-#endif
-}  
-
-FLEXT_TEMPIMPL(unsigned long FLEXT_CLASSDEF(flext))::AtomHash(const t_atom &a)
-{
-#if FLEXT_SYS == FLEXT_SYS_MAX || FLEXT_SYS == FLEXT_SYS_PD
-	return ((unsigned long)a.a_type<<28)^*(unsigned long *)&a.a_w;
-#else
-#error Not implemented
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_root))::post(const char *fmt, ...)
-{
-	va_list ap;
-    va_start(ap, fmt);
-
-	char buf[1024];
-    vsnprintf(buf,sizeof buf,fmt, ap);
-	buf[sizeof buf-1] = 0; // in case of full buffer
-	
-#if FLEXT_SYS == FLEXT_SYS_MAX && C74_MAX_SDK_VERSION >= 0x0500
-    ::object_post(NULL,buf);
-#else
-	::post(buf);
-#endif
-
-    va_end(ap);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_root))::error(const char *fmt,...)
-{
-	va_list ap;
-    va_start(ap, fmt);
-
-	char buf[1024];
-    STD::strcpy(buf,"error: ");
-    vsnprintf(buf+7,sizeof buf-7,fmt, ap);
-	buf[sizeof buf-1] = 0; // in case of full buffer
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    #if C74_MAX_SDK_VERSION >= 0x0500
-        ::object_error(NULL,buf);
-    #else
-    	::error(buf);
-    #endif
-#else
-	::post(buf);
-#endif
-
-    va_end(ap);
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_SUPPORT_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flsupport.h b/externals/grill/trunk/flext/libbuild/include/flext/flsupport.h
deleted file mode 100755
index 0bd61e7de4195f8f9a549a649b6d289e7ba543b8..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flsupport.h
+++ /dev/null
@@ -1,1405 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flsupport.h
-    \brief flext support functions and classes   
-*/
-
-#ifndef __FLSUPPORT_H
-#define __FLSUPPORT_H
-
-#include "flstdc.h"
-#include <new>
-#include <cstring>
-
-
-#include "flpushns.h"
-
-#if C74_MAX_SDK_VERSION >= 0x0610
-// really bad: post and error are #defines in Max SDK >= 610
-#undef post
-#undef error
-#endif
-
-/*! \defgroup FLEXT_SUPPORT Flext support classes
-    @{
-*/
-
-FLEXT_TEMPLATE class FLEXT_SHARE FLEXT_CLASSDEF(flext_root);
-
-typedef FLEXT_TEMPINST(FLEXT_SHARE FLEXT_CLASSDEF(flext_root)) flext_root;
-
-/*! \brief Flext root support class
-
-    Moved memory functions and console output here so that all the classes
-    contained in flext can use them
-*/
-FLEXT_TEMPLATE
-class FLEXT_SHARE FLEXT_CLASSDEF(flext_root) {
-public:
-// --- console output -----------------------------------------------   
-
-    //! post message to console, with line feed (limited to 1k chars!)
-    static void post(const char *fmt,...);
-    //! post error message to console (limited to 1k chars!)
-    static void error(const char *fmt,...);
-
-// --- memory -------------------------------------------------------   
-
-    /*! \defgroup FLEXT_S_MEMORY Memory allocation functions
-        @{ 
-    */
-
-#ifdef FLEXT_NOGLOBALNEW
-#error FLEXT_NOGLOBALNEW is deprecated, define FLEXT_USE_CMEM instead
-#define FLEXT_USE_CMEM
-#endif
-
-#ifdef FLEXT_USE_CMEM
-    inline void *operator new(size_t bytes) { return ::operator new(bytes); }
-    inline void operator delete(void *blk) { ::operator delete(blk); }
-
-    inline void *operator new[](size_t bytes) { return ::operator new[](bytes); }
-    inline void operator delete[](void *blk) { ::operator delete[](blk); }
-
-    static bool MemCheck(void *) { return true; }
-#else
-    /*! Overloaded new memory allocation method
-        \note this uses a fast allocation method of the real-time system
-        \warning Max/MSP (or MacOS) allows only 32K in overdrive mode!
-    */
-    void *operator new(size_t bytes);
-    //! Overloaded delete method
-    void operator delete(void *blk);
-
-#ifndef __MRC__ // doesn't allow new[] overloading?!
-    inline void *operator new[](size_t bytes) { return operator new(bytes); }
-    inline void operator delete[](void *blk) { operator delete(blk); }
-#endif
-
-#ifdef FLEXT_DEBUGMEM
-    static bool MemCheck(void *blk);
-#else
-    static bool MemCheck(void *) { return true; }
-#endif
-
-#endif // USECMEM
-
-#ifndef __BORLANDC__
-    inline void *operator new(size_t,void *p) { return p; }
-    inline void operator delete(void *,void *) {}
-#ifndef __MRC__
-    inline void *operator new[](size_t,void *p) { return p; }
-    inline void operator delete[](void *,void *) {}
-#endif
-#endif
-
-    //! Get an aligned memory block
-    static void *NewAligned(size_t bytes,int bitalign = 128);
-    // same with templated type
-    template<typename T>
-    static T *NewAligned(size_t times,int bitalign = 128) { return static_cast<T *>(NewAligned(times*sizeof(T),bitalign)); }
-    //! Free an aligned memory block
-    static void FreeAligned(void *blk);
-    //! Test for alignment
-    static bool IsAligned(void *ptr,int bitalign = 128) { 
-        return (reinterpret_cast<size_t>(ptr)&(bitalign-1)) == 0; 
-    }
-    //! @}  FLEXT_S_MEMORY      
-};
-
-#ifndef FLEXT_USE_CMEM
-/************************************************************************/
-// MFC doesn't like global overloading of allocators
-// anyway, who likes MFC
-
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
-#define NEWTHROW throw(std::bad_alloc)
-#define DELTHROW throw()
-#else
-#define NEWTHROW
-#define DELTHROW
-#endif
-
-// define global new/delete operators
-inline void *operator new(size_t bytes) NEWTHROW { return flext_root::operator new(bytes); }
-inline void operator delete(void *blk) DELTHROW { flext_root::operator delete(blk); }
-#ifndef __MRC__ // doesn't allow new[] overloading?!
-inline void *operator new[](size_t bytes) NEWTHROW { return flext_root::operator new[](bytes); }
-inline void operator delete[](void *blk) DELTHROW { flext_root::operator delete[](blk); }
-#endif
-
-#endif // FLEXT_USE_CMEM
-
-/************************************************************************/
-
-FLEXT_TEMPLATE class FLEXT_SHARE FLEXT_CLASSDEF(flext);
-
-typedef FLEXT_TEMPINST(FLEXT_CLASSDEF(flext)) flext;
-
-FLEXT_TEMPLATE class FLEXT_SHARE FLEXT_CLASSDEF(flext_base);
-
-/*! \brief Flext support class
-
-    A number of methods (most are static functions) are defined here for convenience.
-    This class doesn't define any data members, hence it can be inherited to all
-    classes (not only PD objects) to profit from the cross-platform functionality.
-    Examples are the overloaded memory allocation, atom and atom list functions,
-    thread functions and classes, the sample buffer class and others.
-
-    This class can also be used for a non-object class (not representing an external object)
-    and won't give any extra burden to it.
-*/
-
-FLEXT_TEMPLATE
-class FLEXT_SHARE FLEXT_CLASSDEF(flext):
-    public flext_root
-{
-    /*! \defgroup FLEXT_SUPPORT Flext support class
-        @{ 
-    */
-public:
-
-// --- version -----------------------------------------------  
-
-    /*! \brief Flext version number 
-
-        Return the version number of the flext library.
-        For statically linked flext this is identical to the header definition FLEXT_VERSION,
-        otherwise it reflects the version number of the shared flext library.
-    */
-    static int Version();
-
-    //! Flext version string
-    static const char *VersionStr();
-
-// --- special typedefs ---------------------------------------------   
-
-// later!
-#if 0
-    typedef t_float Float;
-    typedef t_int Int;
-    typedef t_sample Sample;
-    typedef const t_symbol *Symbol;
-    typedef t_atom Atom;
-#endif
-
-// --- buffer/array stuff ----------------------------------------- 
-
-    /*! \defgroup FLEXT_S_BUFFER Buffer handling
-        @{ 
-    */
-
-    //! Class for platform independent buffer handling
-    class FLEXT_SHARE buffer:
-        public flext_root
-    {
-    public:
-    
-#if FLEXT_SYS == FLEXT_SYS_PD
-        typedef bool lock_t;
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        typedef long lock_t;
-#else
-#error Not implemented
-#endif
-
-
-// PD 64-bit buffer handling macros
-#if FLEXT_SYS == FLEXT_SYS_PD
-#       if PD_MINOR_VERSION >= 41
-                /* use new garray support that is 64-bit safe */
-#               define FLEXT_PD_ARRAYGRAB garray_getfloatwords
-#               define FLEXT_ARRAYTYPE t_word
-#               define FLEXT_GETSAMPLE(x) ((x).w_float)
-
-#       else
-                /* use old garray support, not 64-bit safe */
-#               define FLEXT_PD_ARRAYGRAB garray_getfloatarray
-#               define FLEXT_ARRAYTYPE t_sample
-#               define FLEXT_GETSAMPLE(x) (x)
-#       endif
-
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-#       define FLEXT_ARRAYTYPE t_sample
-#       define FLEXT_GETSAMPLE(x) (x)
-#endif
-
-		class Element {
-		public:
-			Element() {}
-			Element(t_sample s) { FLEXT_GETSAMPLE(el) = s; }
-			operator t_sample &() { return FLEXT_GETSAMPLE(el); }
-			operator t_sample () const { return FLEXT_GETSAMPLE(el); }
-		protected:
-			FLEXT_ARRAYTYPE el;
-		};
-
-        /*! \brief Construct buffer.
-            \param s: symbol name, can be NULL
-            \param delayed = true: only sets name, needs another Set(NULL) to really initialize the buffer 
-            \remark As externals can be created prior to the buffer objects they are pointing to, initialization should be done at loadbang!
-        */
-        buffer(const t_symbol *s = NULL,bool delayed = false);
-        
-        //! Destroy buffer
-        ~buffer();
-
-        /*! \brief Check if the buffer is valid for use
-            \note This must be true to use any of the other functions except set
-        */
-        bool Ok() const 
-        { 
-            return sym  
-#if FLEXT_SYS == FLEXT_SYS_PD
-                && arr
-#endif
-                && data; 
-        }
-        
-        /*! \brief Check if buffer content is valid (not in state of content change)
-            \note buffer must be Ok()
-        */
-        bool Valid() const
-        {
-            FLEXT_ASSERT(sym);
-#if FLEXT_SYS == FLEXT_SYS_PD
-            return true;
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-            const t_buffer *p = (const t_buffer *)sym->s_thing;
-            return p && p->b_valid;
-#else
-#error not implemented
-#endif
-        }
-        
-        /*! \brief Check and update if the buffer has been changed (e.g. resized)
-            \note buffer must be Ok()
-        */
-        bool Update();
-        
-        /*! \brief Lock buffer
-            \return previous state (needed for Unlock)
-            \note buffer must be Ok()
-        */
-        lock_t Lock();
-        
-        /*! \brief Unlock buffer
-            \param prv: Previous state is returned by Lock()
-            \note buffer must be Ok()
-        */
-        void Unlock(lock_t prv);
-        
-        /*! \brief Set to specified buffer.
-            \param nameonly: if true sets name only, but doesn't look at buffer actually
-            \return -1 on failure, 0 on success, 1 if parameters (length, data ptr, channels) have changed
-        */
-        int Set(const t_symbol *s = NULL,bool nameonly = false);
-        
-        /*! \brief Declare buffer content as dirty.
-            \param refr: if true forces immediate graphics refresh
-        */
-        void Dirty(bool refr = false);
-
-        //! Clear the dirty flag.
-        void ClearDirty();
-
-        /*! Query whether the buffer content has been changed since the last ClearDirty()
-            \note With mainstream versions of PD this will always return true, since the dirtiness can't be judged
-        */
-        bool IsDirty() const;
-
-        //! Get symbol of buffer 
-        const t_symbol *Symbol() const { return sym; }
-
-        //! Get literal name of buffer 
-        const char *Name() const { return sym?GetString(sym):""; }
-        
-        /*! \brief Get pointer to buffer, channel and frame count.
-            \remark Channels are interleaved
-        */
-        Element *Data() { return data; }
-
-    	const Element *Data() const { return data; }
-
-        //! Get channel count
-        int Channels() const { return chns; }
-        //! Get frame count
-        int Frames() const { return frames; }
-        //! Set frame count
-        void Frames(int fr,bool keep = false,bool zero = true);
-
-        //! Get data value in a platform-independent way
-        inline t_sample operator [](int index) const { return data[index]; }
-
-        //! Reference data value in a platform-independent way
-        inline t_sample &operator [](int index) { return data[index]; }
-        
-        //! Graphic auto refresh interval
-        void SetRefrIntv(float intv);
-
-        //! Buffer locking class
-        class Locker
-        {
-        public:
-            Locker(buffer &b): buf(b),lock(b.Lock()) {}
-            ~Locker() { buf.Unlock(lock); }
-        private:
-            buffer &buf;
-            lock_t lock;
-        };
-
-    protected:
-        //! buffer name
-        const t_symbol *sym;
-        //! array holding audio data
-        Element *data;
-        //! number of audio channels
-        int chns;
-        //! number of frames (multiplied by chns for the number of samples)
-        int frames;
-#if FLEXT_SYS == FLEXT_SYS_PD
-        //! pointer to the PD array structure
-        t_garray *arr;
-        //! update interval
-        float interval;
-        //! flag signaling that the data has been changed
-        bool isdirty;
-        //! flag showing that the update clock is active
-        bool ticking;
-        //! update clock
-        t_clock *tick;
-        //! last time the dirty flag was cleared (using the clock_getlogicaltime function)
-        double cleantime;
-
-    private:
-        //! update clock callback
-        static void cb_tick(buffer *b);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        //! last time the dirty flag was cleared (using the gettime function)
-        long cleantime;
-#endif
-    };
-
-
-//!     @} FLEXT_S_BUFFER
-
-// --- utilities --------------------------------------------------
-
-    /*! \defgroup FLEXT_S_UTIL Utility functions
-        @{ 
-    */
-
-    //! Copy an atom
-    static void CopyAtom(t_atom *dst,const t_atom *src) { *dst = *src; }
-
-    //! Copy atoms
-    static void CopyAtoms(int cnt,t_atom *dst,const t_atom *src);
-
-    //! Print an atom
-    static bool PrintAtom(const t_atom &a,char *buf,size_t bufsz);
-
-    /*! Scan an atom until whitespace
-        \return next token position, or NULL on failure
-    */
-    static const char *ScanAtom(t_atom &a,const char *buf);
-
-    //! Copy a list of atoms
-    static t_atom *CopyList(int argc,const t_atom *argv);
-    
-    //! Print an atom list
-    static bool PrintList(int argc,const t_atom *argv,char *buf,size_t bufsz);
-    
-    /*! Scan an atom list
-        \param argc ... maximum amount of atoms scanned
-        \param argv ... array of atoms
-        \param buf ... char buffer
-    */
-    static int ScanList(int argc,t_atom *argv,const char *buf);
-
-    //! Copy a memory region
-    static void CopyMem(void *dst,const void *src,int bytes);
-    //! Copy a sample array
-    static void CopySamples(t_sample *dst,const t_sample *src,int cnt);
-    template<typename T> static void CopySamples(T *dst,const T *src,int cnt) { CopyMem(dst,src,sizeof(*src)*cnt); }
-    //! Set a memory region
-    static void ZeroMem(void *dst,int bytes);
-    //! Set a sample array to a fixed value
-    static void SetSamples(t_sample *dst,int cnt,t_sample s);
-    template<typename T> static void SetSamples(T *dst,int cnt,t_sample s) { for(int i = 0; i < cnt; ++i) dst[i] = s; }
-    //! Set a sample array to 0
-    static void ZeroSamples(t_sample *dst,int cnt) { SetSamples(dst,cnt,0); }   
-    template<typename T> static void ZeroSamples(T *dst,int cnt) { ZeroMem(dst,sizeof(*dst)*cnt); }
-
-
-    //! Get a 32 bit hash value from an atom
-    static unsigned long AtomHash(const t_atom &a);
-
-//!     @} FLEXT_S_UTIL
-
-// --- various symbols --------------------------------------------
-
-    /*! \defgroup FLEXT_S_ATOM Atom/list handling
-        @{ 
-    */
-
-    //! Symbol constant for ""
-    static const t_symbol *sym__;
-    //! Symbol constant for "float"
-    static const t_symbol *sym_float;
-    //! Symbol constant for "symbol"
-    static const t_symbol *sym_symbol;
-    //! Symbol constant for "bang"
-    static const t_symbol *sym_bang;
-    //! Symbol constant for "list"
-    static const t_symbol *sym_list;
-    //! Symbol constant for "anything"
-    static const t_symbol *sym_anything;
-
-    /*! \brief Symbol constant for "int"
-        \note Only the Max/MSP system has this defined as an internal type
-    */
-    static const t_symbol *sym_int;
-
-    /*! Symbol constant for "pointer" 
-        \note Only PD has this defined as an internal type
-    */
-    static const t_symbol *sym_pointer;
-
-    //! Symbol constant for "signal"
-    static const t_symbol *sym_signal;
-
-    //! \note This is used in macros where the type of the arg is not clear
-    static const t_symbol *MakeSymbol(const t_symbol *s) { return s; }
-
-    //! Make a symbol from a string
-    static const t_symbol *MakeSymbol(const char *s) { return ::gensym(const_cast<char *>(s)); }
-    //! Get symbol string
-    static const char *GetString(const t_symbol *s) { return s->s_name; }  
-    //! Check for symbol and get string
-    static const char *GetAString(const t_symbol *s,const char *def = NULL) { return s?GetString(s):def; }
-
-// --- atom stuff ----------------------------------------
-        
-    //! Set atom from another atom
-    static void SetAtom(t_atom &a,const t_atom &b) { CopyAtom(&a,&b); }
-    //! Compare two atoms
-    static int CmpAtom(const t_atom &a,const t_atom &b);
-
-    // there are some more comparison functions for t_atom types outside the class
-
-    //! Set atom from another atom
-    static int GetType(const t_atom &a) { return a.a_type; }
-
-    //! Check whether the atom is nothing
-    static bool IsNothing(const t_atom &a) { return a.a_type == A_NULL; }
-    //! Set the atom to represent nothing
-    static void SetNothing(t_atom &a) { a.a_type = A_NULL; }
-
-    //! Check whether the atom is a float
-    static bool IsFloat(const t_atom &a) { return a.a_type == A_FLOAT; }
-
-    //! Check whether the atom can be represented as a float
-    static bool CanbeFloat(const t_atom &a) { return IsFloat(a) || IsInt(a); }
-
-    //! Access the float value (without type check)
-    static float GetFloat(const t_atom &a) { return a.a_w.w_float; }
-    //! Set the atom to represent a float 
-    static void SetFloat(t_atom &a,float v) { a.a_type = A_FLOAT; a.a_w.w_float = v; }
-
-    //! Check whether the atom is a symbol
-    static bool IsSymbol(const t_atom &a) { return a.a_type == A_SYMBOL; }
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    //! Access the symbol value (without type check)
-    static const t_symbol *GetSymbol(const t_atom &a) { return const_cast<const t_symbol *>(a.a_w.w_symbol); }
-    //! Set the atom to represent a symbol
-    static void SetSymbol(t_atom &a,const t_symbol *s) { a.a_type = A_SYMBOL; a.a_w.w_symbol = const_cast<t_symbol *>(s); }
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    //! Access the symbol value (without type check)
-    static const t_symbol *GetSymbol(const t_atom &a) { return const_cast<const t_symbol *>(a.a_w.w_sym); }
-    //! Set the atom to represent a symbol
-    static void SetSymbol(t_atom &a,const t_symbol *s) { a.a_type = A_SYMBOL; a.a_w.w_sym = const_cast<t_symbol *>(s); }
-#else
-#error
-#endif
-    //! Check for a symbol and get its value 
-    static const t_symbol *GetASymbol(const t_atom &a,const t_symbol *def = NULL) { return IsSymbol(a)?GetSymbol(a):def; }  // NULL or empty symbol?
-
-    //! Check whether the atom is a string
-    static bool IsString(const t_atom &a) { return IsSymbol(a); }
-    //! Access the string value (without type check)
-    static const char *GetString(const t_atom &a) { const t_symbol *s = GetSymbol(a); return s?GetString(s):NULL; }  
-    //! Check for a string and get its value 
-    static const char *GetAString(const t_atom &a,const char *def = NULL) { return IsSymbol(a)?GetAString(GetSymbol(a),def):def; }
-    //! Check for a string and get its value 
-    static void GetAString(const t_atom &a,char *buf,size_t szbuf);
-    //! Set the atom to represent a string
-    static void SetString(t_atom &a,const char *c) { SetSymbol(a,MakeSymbol(c)); }
-
-    //! Check whether the atom can be represented as an integer
-    static bool CanbeInt(const t_atom &a) { return IsFloat(a) || IsInt(a); }
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    //! Check for a float and get its value 
-    static float GetAFloat(const t_atom &a,float def = 0) { return IsFloat(a)?GetFloat(a):def; }
-
-    //! Check whether the atom is an integer
-    static bool IsInt(const t_atom &) { return false; }
-    //! Access the integer value (without type check)
-    static int GetInt(const t_atom &a) { return (int)GetFloat(a); }
-    //! Check for an integer and get its value 
-    static int GetAInt(const t_atom &a,int def = 0) { return (int)GetAFloat(a,(float)def); }
-    //! Set the atom to represent a integer (depending on the system)
-    static void SetInt(t_atom &a,int v) { a.a_type = A_FLOAT; a.a_w.w_float = (float)v; }
-
-#ifndef FLEXT_COMPATIBLE
-    //! Check whether the atom strictly is a pointer
-    static bool IsPointer(const t_atom &a) { return a.a_type == A_POINTER; }
-    //! Check whether the atom can be a pointer
-    static bool CanbePointer(const t_atom &a) { return IsPointer(a); }
-    //! Access the pointer value (without type check)
-    static t_gpointer *GetPointer(const t_atom &a) { return a.a_w.w_gpointer; }
-    //! Check for a pointer and get its value 
-    static t_gpointer *GetAPointer(const t_atom &a,t_gpointer *def = NULL) { return IsPointer(a)?GetPointer(a):def; }
-    //! Set the atom to represent a pointer
-    static void SetPointer(t_atom &a,t_gpointer *p) { a.a_type = A_POINTER; a.a_w.w_gpointer = (t_gpointer *)p; }
-#endif
-
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    //! Check for a float and get its value 
-    static float GetAFloat(const t_atom &a,float def = 0) { return IsFloat(a)?GetFloat(a):(IsInt(a)?GetInt(a):def); }
-
-    //! Check whether the atom is an int
-    static bool IsInt(const t_atom &a) { return a.a_type == A_INT; }
-    //! Access the integer value (without type check)
-    static int GetInt(const t_atom &a) { return a.a_w.w_long; }
-    //! Check for an integer and get its value 
-    static int GetAInt(const t_atom &a,int def = 0) { return IsInt(a)?GetInt(a):(IsFloat(a)?(int)GetFloat(a):def); }
-    //! Set the atom to represent an integer
-    static void SetInt(t_atom &a,int v) { a.a_type = A_INT; a.a_w.w_long = v; }
-#else
-#error "Platform not supported"
-#endif
-
-    // bool type - based on int
-
-    //! Set the atom to represent a boolean
-    static void SetBool(t_atom &a,bool v) { SetInt(a,v?1:0); }
-    //! Check whether the atom can be represented as a boolean
-    static bool CanbeBool(const t_atom &a) { return CanbeInt(a); }
-    //! Check for an boolean and get its value 
-    static bool GetABool(const t_atom &a) { return GetAInt(a) != 0; }
-    //! Check for an boolean and get its value 
-    static bool GetBool(const t_atom &a) { return GetInt(a) != 0; }
-
-// --- atom list stuff -------------------------------------------
-
-    //! Class representing a list of atoms
-    class FLEXT_SHARE AtomList
-        : public flext_root
-    {
-    public:
-        //! Construct list
-        AtomList(): cnt(0),lst(NULL) {}
-        //! Construct list
-        explicit AtomList(int argc,const t_atom *argv = NULL): cnt(0),lst(NULL) { operator()(argc,argv); }
-        //! Construct list
-        AtomList(const AtomList &a): cnt(0),lst(NULL) { operator =(a); }
-        //! Destroy list
-        virtual ~AtomList();
-
-        //! Clear list
-        AtomList &Clear() { return operator()(); }
-
-        //! Set list
-        AtomList &Set(int argc,const t_atom *argv,int offs = 0,bool resize = false);
-        //! Get list
-        int Get(t_atom *argv,int mxsz = -1) const;
-
-        //! Set list
-        AtomList &operator()(int argc = 0,const t_atom *argv = NULL) { return Set(argc,argv,0,true); }
-        //! Set list by another AtomList
-        AtomList &operator =(const AtomList &a) { return operator()(a.Count(),a.Atoms()); }
-
-        //! Compare list to another AtomList ( -1..< , 0..==, 1...> )
-        int Compare(const AtomList &a) const;
-
-        bool operator <(const AtomList &a) const { return Compare(a) < 0; }
-        bool operator <=(const AtomList &a) const { return Compare(a) <= 0; }
-        bool operator >(const AtomList &a) const { return Compare(a) > 0; }
-        bool operator >=(const AtomList &a) const { return Compare(a) >= 0; }
-        bool operator ==(const AtomList &a) const { return Compare(a) == 0; }
-        bool operator !=(const AtomList &a) const { return Compare(a) != 0; }
-
-        //! Get number of atoms in the list
-        int Count() const { return cnt; }
-        //! Get a reference to an indexed atom
-        t_atom &operator [](int ix) { return lst[ix]; }
-        //! Get a reference to an indexed atom
-        const t_atom &operator [](int ix) const { return lst[ix]; }
-
-        //! Get a pointer to the list of atoms
-        t_atom *Atoms() { return lst; }
-        //! Get a pointer to the list of atoms
-        const t_atom *Atoms() const { return lst; }
-
-        //! Append an atom list to the list
-        AtomList &Append(int argc,const t_atom *argv = NULL)
-        {
-            int c = Count();
-            Alloc(c+argc,0,c);
-            Set(argc,argv,c);
-            return *this;
-        }
-
-        //! Prepend an atom list to the list
-        AtomList &Prepend(int argc,const t_atom *argv = NULL)
-        {
-            int c = Count();
-            Alloc(c+argc,0,c,argc);
-            Set(argc,argv);
-            return *this;
-        }
-
-        //! Append an atom to the list
-        AtomList &Append(const t_atom &a) { return Append(1,&a); }
-        //! Append an atom list to the list
-        AtomList &Append(const AtomList &a) { return Append(a.Count(),a.Atoms()); }
-        //! Prepend an atom to the list
-        AtomList &Prepend(const t_atom &a) { return Prepend(1,&a); }
-        //! Prepend an atom list to the list
-        AtomList &Prepend(const AtomList &a) { return Prepend(a.Count(),a.Atoms()); }
-
-        //! Get a part of the list
-        void GetPart(int offs,int len,AtomList &ret) const;
-        //! Set to a part of the list
-        AtomList &Part(int offs,int len) { GetPart(offs,len,*this); return *this; }
-
-        //! Represent as a string
-        bool Print(char *buffer,int buflen) const { return flext::PrintList(Count(),Atoms(),buffer,buflen); }
-
-        /*! Read from string
-            \note: doesn't clear or reallocate the list
-        */
-        int Scan(const char *buffer) { return flext::ScanList(Count(),Atoms(),buffer); }
-
-    protected:
-        virtual void Alloc(int sz,int keepix = -1,int keeplen = -1,int keepto = 0);
-        virtual void Free();
-
-        int cnt;
-        t_atom *lst;
-    };
-
-    class FLEXT_SHARE AtomListStaticBase
-        : public AtomList
-    {
-    protected:
-        explicit AtomListStaticBase(int pc,t_atom *dt): precnt(pc),predata(dt) {}
-        virtual ~AtomListStaticBase();
-        virtual void Alloc(int sz,int keepix = -1,int keeplen = -1,int keepto = 0);
-        virtual void Free();
-
-        AtomListStaticBase &operator =(const AtomList &a) { AtomList::operator =(a); return *this; }
-        AtomListStaticBase &operator =(const AtomListStaticBase &a) { AtomList::operator =(a); return *this; }
-
-        const int precnt;
-        t_atom *const predata;
-    };
-
-    template<int PRE>
-    class AtomListStatic
-        : public AtomListStaticBase
-    {
-    public:
-        //! Construct list
-        explicit AtomListStatic(): AtomListStaticBase(PRE,pre) {}
-        //! Construct list
-        explicit AtomListStatic(int argc,const t_atom *argv = NULL): AtomListStaticBase(PRE,pre) { AtomList::operator()(argc,argv); }
-        //! Construct list
-        explicit AtomListStatic(const AtomList &a): AtomListStaticBase(PRE,pre) { operator =(a); }
-
-        //! Set list by another AtomList
-        AtomListStatic &operator =(const AtomList &a) { AtomListStaticBase::operator =(a); return *this; }
-        AtomListStatic &operator =(const AtomListStatic &a) { AtomListStaticBase::operator =(a); return *this; }
-    protected:
-        t_atom pre[PRE];
-    };
-
-    //! Class representing an "anything"
-    class FLEXT_SHARE AtomAnything: 
-        public AtomList
-    {
-    public:
-        explicit AtomAnything(): hdr(NULL) {}
-
-        //! Construct anything
-        explicit AtomAnything(const t_symbol *h,int argc = 0,const t_atom *argv = NULL)
-            : AtomList(argc,argv),hdr(h?h:sym__) 
-        {}
-
-        //! Construct anything
-        explicit AtomAnything(const char *h,int argc = 0,const t_atom *argv = NULL)
-            : AtomList(argc,argv),hdr(MakeSymbol(h)) 
-        {}
-
-        //! Construct anything
-        AtomAnything(const AtomAnything &a)
-            : AtomList(a),hdr(a.hdr) 
-        {}
-
-        //! Clear anything
-        AtomAnything &Clear() { return operator()(); }
-
-        //! Get header symbol of anything
-        const t_symbol *Header() const { return hdr; }
-
-        //! Set header symbol of anything
-        void Header(const t_symbol *h) { hdr = h; }
-        
-        //! Set anything
-        AtomAnything &operator()(const t_symbol *h = NULL,int argc = 0,const t_atom *argv = NULL)
-        { 
-            hdr = h; AtomList::operator()(argc,argv);   
-            return *this; 
-        }
-
-        //! Set list by another AtomAnything
-        AtomAnything &operator =(const AtomAnything &a) { return operator()(a.Header(),a.Count(),a.Atoms()); }
-
-    protected:
-        const t_symbol *hdr;
-    };
-
-
-    // double type - based on two floats
-
-#ifdef _MSC_VER
-#pragma optimize("p",off)  // improve floating point precision consistency
-#endif
-    static t_atom *SetDouble(t_atom *dbl,double d)
-    {
-        float f = static_cast<float>(d);
-        float r = static_cast<float>(d-f);
-        SetFloat(dbl[0],f);
-        SetFloat(dbl[1],r);
-        return dbl;
-    }
-#ifdef _MSC_VER
-#pragma optimize("p",on)
-#endif
-
-    static double GetDouble(int argc,const t_atom *argv)
-    {
-        double d = argc >= 1?GetAFloat(argv[0]):0;
-        return argc >= 2?d+GetAFloat(argv[1]):d;
-    }
-
-    static AtomList &SetDouble(AtomList &l,double d) { SetDouble(l(2).Atoms(),d); return l; }
-
-    static double GetDouble(const AtomList &l) { return GetDouble(l.Count(),l.Atoms()); }
-
-    //! @} FLEXT_S_ATOM
-
-
-// --- messages ------------------------------------------------------- 
-
-    /*! \defgroup FLEXT_S_MSGBUNDLE Flext message handling 
-        @{ 
-    */
-
-    class MsgBundle;
-
-    //! Make new message bundle
-    static MsgBundle *MsgNew();
-
-    //! Destroy message bundle
-    static void MsgFree(MsgBundle *mb);
-
-    //! Send (and destroy) message bundle
-    static void ToSysMsg(MsgBundle *mb);
-
-    //! Send (and destroy) message bundle
-    static void ToOutMsg(MsgBundle *mb);
-
-    //! Send low priority (and destroy) message bundle
-    static void ToQueueMsg(MsgBundle *mb);
-
-    //! @} FLEXT_S_MSGBUNDLE
-
-
-    /*! \defgroup FLEXT_S_MSG Flext message handling 
-        @{ 
-    */
-
-    static bool Forward(const t_symbol *sym,const t_symbol *s,int argc,const t_atom *argv);
-    static bool Forward(const t_symbol *sym,const AtomAnything &args) { return Forward(sym,args.Header(),args.Count(),args.Atoms()); }
-    static bool Forward(const char *sym,const AtomAnything &args) { return Forward(MakeSymbol(sym),args.Header(),args.Count(),args.Atoms()); }
-    static bool Forward(const t_symbol *sym,int argc,const t_atom *argv) { return Forward(sym,sym_list,argc,argv); }
-    static bool Forward(const t_symbol *sym,const AtomList &args) { return Forward(sym,args.Count(),args.Atoms()); }
-    static bool Forward(const char *sym,const AtomList &args) { return Forward(MakeSymbol(sym),args.Count(),args.Atoms()); }
-
-    static bool SysForward(const t_symbol *sym,const t_symbol *s,int argc,const t_atom *argv);
-    static bool SysForward(const t_symbol *sym,const AtomAnything &args) { return SysForward(sym,args.Header(),args.Count(),args.Atoms()); }
-    static bool SysForward(const char *sym,const AtomAnything &args) { return SysForward(MakeSymbol(sym),args.Header(),args.Count(),args.Atoms()); }
-    static bool SysForward(const t_symbol *sym,int argc,const t_atom *argv) { return SysForward(sym,sym_list,argc,argv); }
-    static bool SysForward(const t_symbol *sym,const AtomList &args) { return SysForward(sym,args.Count(),args.Atoms()); }
-    static bool SysForward(const char *sym,const AtomList &args) { return SysForward(MakeSymbol(sym),args.Count(),args.Atoms()); }
-
-    static bool QueueForward(const t_symbol *sym,const t_symbol *s,int argc,const t_atom *argv);
-    static bool QueueForward(const t_symbol *sym,const AtomAnything &args) { return QueueForward(sym,args.Header(),args.Count(),args.Atoms()); }
-    static bool QueueForward(const char *sym,const AtomAnything &args) { return QueueForward(MakeSymbol(sym),args.Header(),args.Count(),args.Atoms()); }
-    static bool QueueForward(const t_symbol *sym,int argc,const t_atom *argv) { return QueueForward(sym,sym_list,argc,argv); }
-    static bool QueueForward(const t_symbol *sym,const AtomList &args) { return QueueForward(sym,args.Count(),args.Atoms()); }
-    static bool QueueForward(const char *sym,const AtomList &args) { return QueueForward(MakeSymbol(sym),args.Count(),args.Atoms()); }
-
-    static bool MsgForward(MsgBundle *mb,const t_symbol *sym,const t_symbol *s,int argc,const t_atom *argv);
-    static bool MsgForward(MsgBundle *mb,const t_symbol *sym,const AtomAnything &args) { return MsgForward(mb,sym,args.Header(),args.Count(),args.Atoms()); }
-    static bool MsgForward(MsgBundle *mb,const char *sym,const AtomAnything &args) { return MsgForward(mb,MakeSymbol(sym),args.Header(),args.Count(),args.Atoms()); }
-    static bool MsgForward(MsgBundle *mb,const t_symbol *sym,int argc,const t_atom *argv) { return MsgForward(mb,sym,sym_list,argc,argv); }
-    static bool MsgForward(MsgBundle *mb,const t_symbol *sym,const AtomList &args) { return MsgForward(mb,sym,args.Count(),args.Atoms()); }
-    static bool MsgForward(MsgBundle *mb,const char *sym,const AtomList &args) { return MsgForward(mb,MakeSymbol(sym),args.Count(),args.Atoms()); }
-
-    //! @} FLEXT_S_MSG
-
-    
-
-// --- thread stuff -----------------------------------------------
-
-    /*! \defgroup FLEXT_S_LOCK Global system locking
-        @{ 
-    */
-
-#if FLEXT_SYS == FLEXT_SYS_PD
-    #if PD_MINOR_VERSION >= 38 || (PD_MINOR_VERSION >= 37 && defined(PD_DEVEL_VERSION))
-        static void Lock() { sys_lock(); }
-        static void Unlock() { sys_unlock(); }
-    #else
-        // no system locking for old PD versions
-        static void Lock() {}
-        static void Unlock() {}
-    #endif
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    // Max 4.2 upwards!
-    static void Lock() { critical_enter(0); }
-    static void Unlock() { critical_exit(0); }
-#else
-#error
-#endif
-
-//!     @} FLEXT_S_LOCK
-
-    /*! \defgroup FLEXT_S_THREAD Flext thread handling 
-        @{ 
-    */
-
-    //! Check if current thread is registered to be a secondary thread
-#ifdef FLEXT_THREADS
-    static bool IsThreadRegistered();
-#else
-    static bool IsThreadRegistered() { return false; }
-#endif
-
-#ifdef FLEXT_THREADS
-
-    //! thread type
-#   if FLEXT_THREADS == FLEXT_THR_MP
-    typedef MPTaskID thrid_t;
-#   elif FLEXT_THREADS == FLEXT_THR_POSIX
-    typedef pthread_t thrid_t;
-#   elif FLEXT_THREADS == FLEXT_THR_WIN32
-    typedef DWORD thrid_t;
-#   else
-#       error Threading model not supported
-#   endif
-
-    /*! \brief Get current thread id
-    */
-    static thrid_t GetThreadId() { 
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-        return pthread_self(); 
-#elif FLEXT_THREADS == FLEXT_THR_MP
-        return MPCurrentTaskID();
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-        return GetCurrentThreadId();
-#else
-#error
-#endif
-    }
-
-    /*! \brief Get system thread id
-    */
-    static thrid_t GetSysThreadId() { return thrid; }
-
-    //! Check if current thread should terminate
-    static bool ShouldExit();
-
-    //! Check if current thread is the realtime system's thread
-    static bool IsThread(thrid_t t,thrid_t ref = GetThreadId()) { 
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-        return pthread_equal(ref,t) != 0; 
-#else
-        return ref == t;
-#endif
-    }
-
-
-    /*! \brief Thread parameters
-        \internal
-    */
-    class FLEXT_SHARE thr_params:
-        public flext_root
-    {
-    public:
-        thr_params(int n = 1): cl(NULL),var(new _data[n]) {}
-        ~thr_params() { delete[] var; }
-
-        void set_any(const t_symbol *s,int argc,const t_atom *argv) { var[0]._any = new AtomAnything(s,argc,argv); }
-        void set_list(int argc,const t_atom *argv) { var[0]._list = new AtomList(argc,argv); }
-
-        FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) *cl;
-        union _data {
-            bool _bool;
-            float _float;
-            int _int;
-            t_symptr _t_symptr;
-            AtomAnything *_any;
-            AtomList *_list;
-            void *_ext;
-        } *var;
-    };
-
-protected:
-
-    static thrid_t thrhelpid;
-    static thrid_t thrmsgid;
-    static void ThrHelper(void *);
-
-    //! the system's thread id
-    static thrid_t thrid;  // the system thread
-
-private:
-    static bool StartHelper(); // used in flext::Setup()
-
-public:
-
-    /*! \brief Yield to other threads
-        \remark A call to this is only needed for systems with cooperative multitasking like MacOS<=9
-    */
-    static void ThrYield() { 
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-        // for a preemptive system this should do nothing
-        sched_yield(); 
-#elif FLEXT_THREADS == FLEXT_THR_MP
-        MPYield();
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-        SwitchToThread();
-#else
-#error
-#endif
-    }
-
-    /*! \brief Query whether task is preemptive
-    */
-    static bool IsThreadPreemptive(thrid_t t = GetThreadId()) {
-#if FLEXT_THREADS == FLEXT_THR_POSIX || FLEXT_THREADS == FLEXT_THR_WIN32
-        return true;
-#elif FLEXT_THREADS == FLEXT_THR_MP
-        return MPTaskIsPreemptive(t);
-#else
-#error
-#endif
-    }
-    
-
-    /*! \brief Increase/Decrease priority of a thread
-    */
-    static bool RelPriority(int dp,thrid_t ref = GetSysThreadId(),thrid_t thr = GetThreadId());
-
-    /*! \brief Get priority of a thread
-    */
-    static int GetPriority(thrid_t thr = GetThreadId());
-
-    /*! \brief Set priority of a thread
-    */
-    static bool SetPriority(int p,thrid_t thr = GetThreadId());
-
-    /*! \brief Thread mutex
-        \sa pthreads documentation
-    */
-    class FLEXT_SHARE ThrMutex:
-        public flext_root
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-    {
-    public:
-        //! Construct thread mutex
-        ThrMutex() { pthread_mutex_init(&mutex,NULL); }
-        //! Destroy thread mutex
-        ~ThrMutex() { pthread_mutex_destroy(&mutex); }
-
-        //! Lock thread mutex
-        bool Lock() { return pthread_mutex_lock(&mutex) == 0; }
-        /*! Wait to lock thread mutex.
-            \todo Implement!
-        */
-//      bool WaitForLock(double tm) { return pthread_mutex_lock(&mutex) == 0; }
-        //! Try to lock, but don't wait
-        bool TryLock() { return pthread_mutex_trylock(&mutex) == 0; }
-        //! Unlock thread mutex
-        bool Unlock() { return pthread_mutex_unlock(&mutex) == 0; }
-
-    protected:
-        pthread_mutex_t mutex;
-//      int cnt;
-    };
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-    {
-    public:
-        //! Construct thread mutex
-        ThrMutex() { ::InitializeCriticalSection(&mutex); }
-        //! Destroy thread mutex
-        ~ThrMutex() { ::DeleteCriticalSection(&mutex); }
-
-        //! Lock thread mutex
-        bool Lock() { ::EnterCriticalSection(&mutex); return true; }
-        /*! Wait to lock thread mutex.
-            \todo Implement!
-        */
-//      bool WaitForLock(double tm) { return pthread_mutex_lock(&mutex) == 0; }
-        //! Try to lock, but don't wait
-        bool TryLock() { return ::TryEnterCriticalSection(&mutex) != 0; }
-        //! Unlock thread mutex
-        bool Unlock() { ::LeaveCriticalSection(&mutex); return true; }
-
-    protected:
-        CRITICAL_SECTION mutex;
-    };
-#elif FLEXT_THREADS == FLEXT_THR_MP
-    {
-    public:
-        //! Construct thread mutex
-        ThrMutex() { MPCreateCriticalRegion(&crit); }
-        //! Destroy thread mutex
-        ~ThrMutex() { MPDeleteCriticalRegion(crit); }
-
-        //! Lock thread mutex
-        bool Lock() { return MPEnterCriticalRegion(crit,kDurationForever) == noErr; }
-        //! Wait to lock thread mutex
-//      bool WaitForLock(double tm) { return MPEnterCriticalRegion(crit,tm*kDurationMicrosecond*1.e6) == noErr; }
-        //! Try to lock, but don't wait
-        bool TryLock() { return MPEnterCriticalRegion(crit,kDurationImmediate) == noErr; }
-        //! Unlock thread mutex
-        bool Unlock() { return MPExitCriticalRegion(crit) == noErr; }
-        
-    protected:
-        MPCriticalRegionID crit;
-    };
-#else
-#error "Not implemented"
-#endif
-
-    /*! \brief Thread conditional
-        \sa pthreads documentation
-    */
-    class FLEXT_SHARE ThrCond
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-        :public ThrMutex
-    {
-    public:
-        //! Construct thread conditional
-        ThrCond() { pthread_cond_init(&cond,NULL); }
-        //! Destroy thread conditional
-        ~ThrCond() { pthread_cond_destroy(&cond); }
-
-        //! Wait for condition 
-        bool Wait();
-
-        /*! Wait for condition (for a certain time).
-            \param ftime Wait time in seconds
-            \ret true = signalled, false = timed out 
-            \remark If ftime = 0 this may suck away your cpu if used in a signalled loop.
-            \remark The time resolution of the implementation is required to be at least ms.
-        */
-        bool TimedWait(double ftime);
-
-        //! Signal condition
-        bool Signal() { return pthread_cond_signal(&cond) == 0; }
-
-    protected:
-        pthread_cond_t cond;
-    };
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-    {
-    public:
-        //! Construct thread conditional
-        ThrCond() { cond = CreateEvent(NULL,FALSE,FALSE,NULL); }
-        //! Destroy thread conditional
-        ~ThrCond() { CloseHandle(cond); }
-
-        //! Wait for condition 
-        bool Wait() { return WaitForSingleObject(cond,INFINITE) == WAIT_OBJECT_0; }
-
-        /*! Wait for condition (for a certain time).
-            \param ftime Wait time in seconds
-            \ret true = signalled, false = timed out 
-            \remark If ftime = 0 this may suck away your cpu if used in a signalled loop.
-            \remark The time resolution of the implementation is required to be at least ms.
-        */
-        bool TimedWait(double ftime) { return WaitForSingleObject(cond,(LONG)(ftime*1000)) == WAIT_OBJECT_0; }
-
-        //! Signal condition
-        bool Signal() { return SetEvent(cond) != 0; }
-
-    protected:
-        HANDLE cond;
-    };
-#elif FLEXT_THREADS == FLEXT_THR_MP
-    {
-    public:
-        //! Construct thread conditional
-        ThrCond() { MPCreateEvent(&ev); }
-        //! Destroy thread conditional
-        ~ThrCond() { MPDeleteEvent(ev); }
-
-        //! Wait for condition 
-        bool Wait() { return MPWaitForEvent(ev,NULL,kDurationForever) == noErr; }
-
-        /*! \brief Wait for condition (for a certain time).
-            \param time Wait time in seconds
-        */
-        bool TimedWait(double tm) { return MPWaitForEvent(ev,NULL,tm*kDurationMicrosecond*1.e6) == noErr; }
-
-        //! Signal condition
-        bool Signal() { return MPSetEvent(ev,1) == noErr; } // one bit needs to be set at least
-
-    protected:
-        MPEventID ev;
-    };
-#else
-#error "Not implemented"
-#endif
-
-    protected:
-    /*! \brief Add current thread to list of active threads.
-        \note Calls RegisterThread automatically
-        \return true on success
-        \internal
-    */
-    static bool PushThread();
-
-    /*! \brief Remove current thread from list of active threads.
-        \note Calls UnregisterThread automatically
-        \internal
-    */
-    static void PopThread();
-
-    public:
-    /*! \brief Launch a thread.
-        \param meth Thread function
-        \param params Parameters to pass to the thread, may be NULL if not needed.
-        \return Thread id on success, NULL on failure
-    */
-    static bool LaunchThread(void (*meth)(thr_params *p),thr_params *params = NULL);
-
-    /*! \brief Terminate a thread.
-        \param meth Thread function
-        \param params Parameters to pass to the thread, may be NULL if not needed.
-        \return True if at least one matching thread has been found.
-        \remark Terminates all running threads with matching meth and params.
-        \note Function doesn NOT wait for termination
-    */
-    static bool StopThread(void (*meth)(thr_params *p),thr_params *params = NULL,bool wait = false);
-
-
-    //! \brief Register current thread to be allowed to execute flext functions.
-    static void RegisterThread(thrid_t id = GetThreadId());
-
-    //! \brief Unregister current thread 
-    static void UnregisterThread(thrid_t id = GetThreadId());
-
-#endif // FLEXT_THREADS
-
-//!     @} FLEXT_S_THREAD
-
-
-    public:
-// --- timer stuff -----------------------------------------------
-
-/*! \defgroup FLEXT_S_TIMER Flext timer handling 
-        @{ 
-        
-    \remark The clock of the real-time system is used for most of these functions. 
-    \remark Since this clock can be synchronized to an external clock (or e.g. the audio card) 
-    \remark it may differ from the clock of the operating system
-*/
-
-    /*! \brief Get time since real-time system startup.
-        \note This is not the time of the operating system but of the real-time system.
-        \note It may depend on the time source the system is synchronized to (e.g. audio sample rate).
-    */
-    static double GetTime()
-    {
-    #if FLEXT_SYS == FLEXT_SYS_PD
-        return clock_gettimesince(0)*0.001;
-    #elif FLEXT_SYS == FLEXT_SYS_MAX
-        double tm;
-        clock_getftime(&tm);
-        return tm*0.001;
-    #else
-        #error Not implemented
-    #endif
-    }
-    
-    /*! \brief Get time granularity of the GetTime function.
-        \note This can be zero if not determined.
-    */
-    static double GetTimeGrain()
-    {
-    #if FLEXT_SYS == FLEXT_SYS_PD
-        return 0;
-    #elif FLEXT_SYS == FLEXT_SYS_MAX
-        return 0.001;
-    #else
-        #error Not implemented
-    #endif
-    }
-
-    /*! \brief Get operating system time since flext startup.
-    */
-    static double GetOSTime();
-    
-    /*! \brief Sleep for an amount of time.
-        \remark The OS clock is used for that.
-        \note Clearly in a real-time system this should only be used in a detached thread.
-    */
-    static void Sleep(double s);
-
-    /*! \brief Class encapsulating a timer with callback functionality.
-        This class can either be used with FLEXT_ADDTIMER or used as a base class with an overloaded virtual Work function.
-    */ 
-    class FLEXT_SHARE Timer:
-        public flext_root
-    {
-    public:
-        Timer(bool queued = false);
-        virtual ~Timer();
-
-        //! Set timer callback function.
-        void SetCallback(void (*cb)(void *data)) { clss = NULL,cback = cb; }
-        //! Set timer callback function (with class pointer).
-        void SetCallback(FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) &th,bool (*cb)(FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) *th,void *data)) { clss = &th,cback = (void (*)(void *))cb; }
-
-        //! Clear timer.
-        bool Reset();
-        //! Trigger a one shot at an absolute time.
-        bool At(double time,void *data = NULL,bool dopast = true);
-        //! Trigger a one shot interval.
-        bool Delay(double time,void *data = NULL);
-        //! Trigger a periodic interval.
-        bool Periodic(double time,void *data = NULL);
-        //! Trigger immediately.
-        bool Now(void *data = NULL) { return Delay(0,data); }
-
-        //! Worker function, called on every timer event.
-        virtual void Work();
-        
-    protected:
-        static void callback(Timer *tmr);
-    
-#if FLEXT_SYS == FLEXT_SYS_PD
-        t_clock *clk;
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        static void queuefun(Timer *tmr);
-        t_clock *clk;
-        t_qelem *qelem;
-#else
-#error Not implemented
-#endif
-
-        const bool queued;
-        void (*cback)(void *data);
-        FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) *clss;
-        void *userdata;
-        double period;
-    };
-
-//!     @} FLEXT_S_TIMER
-
-    //! Check if we are in DSP time
-    static bool InDSP() { return indsp; }
-
-// --- SIMD functionality -----------------------------------------------
-
-/*! \defgroup FLEXT_S_SIMD Cross platform SIMD support for modern CPUs 
-        @{ 
-*/      
-        enum simd_type {
-            simd_none = 0,
-            simd_mmx = 0x01,
-            simd_3dnow = 0x02,
-            simd_sse = 0x04,
-            simd_sse2 = 0x08,
-            simd_altivec = 0x10
-        };
-        
-        /*! Check for SIMD capabilities of the CPU */
-        static unsigned long GetSIMDCapabilities();
-
-
-        static void MulSamples(t_sample *dst,const t_sample *src,t_sample mul,int cnt);
-        static void MulSamples(t_sample *dst,const t_sample *src,const t_sample *mul,int cnt);
-        static void AddSamples(t_sample *dst,const t_sample *src,t_sample add,int cnt);
-        static void AddSamples(t_sample *dst,const t_sample *src,const t_sample *add,int cnt);
-        static void ScaleSamples(t_sample *dst,const t_sample *src,t_sample mul,t_sample add,int cnt);
-        static void ScaleSamples(t_sample *dst,const t_sample *src,t_sample mul,const t_sample *add,int cnt);
-        static void ScaleSamples(t_sample *dst,const t_sample *src,const t_sample *mul,const t_sample *add,int cnt);
-
-//!     @} FLEXT_S_SIMD
-
-        
-//!     @} FLEXT_SUPPORT
-
-protected:
-#ifdef __MRC__
-    friend class flext_obj;
-#endif
-
-    static void Setup();
-
-    static bool chktilde(const char *objname);
-
-    static unsigned long simdcaps;
-
-    static const t_symbol *sym_attributes;
-    static const t_symbol *sym_methods;
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    static const t_symbol *sym_buffer;
-    static const t_symbol *sym_size;
-    static const t_symbol *sym_dirty;
-#endif
-
-    //! flag if we are within DSP
-    static bool indsp;
-};
-
-
-// gcc doesn't like these to be included into the flext class (even if static)
-inline bool operator ==(const t_atom &a,const t_atom &b) { return flext::CmpAtom(a,b) == 0; }
-inline bool operator !=(const t_atom &a,const t_atom &b) { return flext::CmpAtom(a,b) != 0; }
-inline bool operator <(const t_atom &a,const t_atom &b) { return flext::CmpAtom(a,b) < 0; }
-inline bool operator <=(const t_atom &a,const t_atom &b) { return flext::CmpAtom(a,b) <= 0; }
-inline bool operator >(const t_atom &a,const t_atom &b) { return flext::CmpAtom(a,b) > 0; }
-inline bool operator >=(const t_atom &a,const t_atom &b) { return flext::CmpAtom(a,b) >= 0; }
-
-//! @} // FLEXT_SUPPORT
-
-#include "flpopns.h"
-
-#endif
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flthr.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flthr.cpp
deleted file mode 100755
index 3ca3ed87ce920eb41ad78e7e8c21b432597cb153..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flthr.cpp
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flthr.cpp
-    \brief Implementation of the flext thread functionality.
-*/
- 
-#ifndef __FLEXT_THR_CPP
-#define __FLEXT_THR_CPP
-
-#include "flext.h"
-
-#ifdef FLEXT_THREADS
-
-// maximum wait time for threads to finish (in ms)
-#define MAXIMUMWAIT 100
-
-
-#include "flinternal.h"
-#include "flcontainers.h"
-#include <set>
-#include <ctime>
-
-#if FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH || FLEXT_OSAPI == FLEXT_OSAPI_UNIX_POSIX || FLEXT_OSAPI == FLEXT_OSAPI_WIN_POSIX
-#include <sys/time.h>
-#include <unistd.h>
-#elif FLEXT_OS == FLEXT_OS_WIN
-#include <sys/timeb.h>
-#endif
-
-#if FLEXT_THREADS == FLEXT_THR_WIN32 && WINVER < 0x0500
-#error WIN32 threads need Windows SDK version >= 0x500
-#endif
-
-#include <cerrno>
-
-#include "flpushns.h"
-
-//! Thread id of system thread - will be initialized in flext::Setup
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(FLEXT_CLASSDEF(flext))::thrid_t FLEXT_CLASSDEF(flext))::thrid;
-
-//! Thread id of helper thread - will be initialized in flext::Setup
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(FLEXT_CLASSDEF(flext))::thrid_t FLEXT_CLASSDEF(flext))::thrhelpid;
-
-
-//! \brief This represents an entry to the list of active method threads
-class thr_entry
-    : public flext
-    , public LifoCell
-{
-public:
-    void Set(void (*m)(thr_params *),thr_params *p,thrid_t id = GetThreadId())
-    {
-        th = p?p->cl:NULL;
-        meth = m,params = p,thrid = id;
-        shouldexit = false;
-#if FLEXT_THREADS == FLEXT_THR_MP
-	    weight = 100; // MP default weight
-#endif
-    }
-
-	//! \brief Check if this class represents the current thread
-	bool Is(thrid_t id = GetThreadId()) const { return IsThread(thrid,id); }
-
-	FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) *This() const { return th; }
-	thrid_t Id() const { return thrid; }
-
-	FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base)) *th;
-	void (*meth)(thr_params *);
-	thr_params *params;
-	thrid_t thrid;
-	bool shouldexit;
-#if FLEXT_THREADS == FLEXT_THR_MP
-	int weight;
-#endif
-};
-
-template<class T>
-class ThrFinder:
-    public T
-{
-public:
-    ~ThrFinder() { thr_entry *e; while((e = Pop()) != NULL) delete e; }
-
-    void Push(thr_entry *e) { T::Push(e); }
-    thr_entry *Pop() { return T::Pop(); }
-
-    thr_entry *Find(flext::thrid_t id,bool pop = false) 
-    {
-        TypedLifo<thr_entry> qutmp;
-        thr_entry *fnd;
-        while((fnd = Pop()) && !fnd->Is(id)) qutmp.Push(fnd);
-        // put back entries
-        for(thr_entry *ti; (ti = qutmp.Pop()) != NULL; ) Push(ti);
-        if(fnd && !pop) Push(fnd);
-        return fnd;
-    }
-};
-
-FLEXT_TEMPLATE
-struct ThrRegistry
-{
-    typedef ThrFinder< PooledLifo<thr_entry,1,10> > RegPooledLifo;
-    typedef ThrFinder< TypedLifo<thr_entry> > RegFinder;
-    static RegPooledLifo pending;
-    static RegFinder active,stopped;
-};
-
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(ThrRegistry)::RegPooledLifo ThrRegistry)::pending;
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(ThrRegistry)::RegFinder ThrRegistry)::active;
-FLEXT_TEMPIMPL(FLEXT_TEMPINST(ThrRegistry)::RegFinder ThrRegistry)::stopped;
-
-
-class ThrId
-	: public flext
-{
-public:
-	ThrId(const thrid_t &_id): id(_id) {}
-	thrid_t id;
-
-	bool operator <(const ThrId &tid) const 
-	{ 
-		if(sizeof(id) == sizeof(unsigned))
-			return (unsigned *)&id < (unsigned *)&tid;
-		else
-			return memcmp(&id,&tid,sizeof(id)) < 0;
-	}
-};
-
-FLEXT_TEMPLATE
-struct ThrVars {
-    // this should _definitely_ be a hashmap....
-    // \TODO above all it should be populated immediately, otherwise it could easily happen 
-    // that the passing on to the set happens too late! We need that lockfree set!
-    static std::set<ThrId> regthreads;
-
-    //! Registry lock
-    static flext::ThrMutex *thrregmtx;
-
-    //! Helper thread conditional
-    static flext::ThrCond *thrhelpcond;
-
-    static bool initialized;
-};
-
-FLEXT_TEMPIMPL(std::set<ThrId> ThrVars)::regthreads;
-FLEXT_TEMPIMPL(flext::ThrMutex *ThrVars)::thrregmtx = NULL;
-FLEXT_TEMPIMPL(flext::ThrCond *ThrVars)::thrhelpcond = NULL;
-FLEXT_TEMPIMPL(bool ThrVars)::initialized = false;
-
-FLEXT_TEMPLATE void LaunchHelper(thr_entry *e)
-{
-    e->thrid = flext::GetThreadId();
-    flext::RegisterThread(e->thrid);
-    e->meth(e->params);
-    flext::UnregisterThread(e->thrid);
-}
-
-//! Start helper thread
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::StartHelper()
-{
-	bool ok = false;
-    FLEXT_TEMPINST(ThrVars)::initialized = false;
-
-    FLEXT_TEMPINST(ThrVars)::thrregmtx = new ThrMutex;
-
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	pthread_attr_t attr;
-	pthread_attr_init(&attr);
-	pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
-
-    pthread_t tmp;
-	ok = pthread_create (&tmp,&attr,(void *(*)(void *))ThrHelper,NULL) == 0;
-#elif FLEXT_THREADS == FLEXT_THR_MP
-	if(!MPLibraryIsLoaded())
-		error("Thread library is not loaded");
-	else {
-        MPTaskID tmp;
-		OSStatus ret = MPCreateTask((TaskProc)ThrHelper,NULL,0,0,0,0,0,&tmp);
-		ok = ret == noErr;
-	}
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-    ok = _beginthread(ThrHelper,0,NULL) >= 0;
-#else
-#error
-#endif
-	if(!ok)
-		error("flext - Could not launch helper thread!"); 
-    else {
-        // now we have to wait for thread helper to initialize
-        while(!FLEXT_TEMPINST(ThrVars)::initialized) Sleep(0.001);
-
-        // we are ready for threading now!
-    }
-    
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	pthread_attr_destroy(&attr);
-#endif    
-	return ok;
-}
-
-//! Static helper thread function
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ThrHelper(void *)
-{
-    thrhelpid = GetThreadId();
-
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	// set prototype thread attributes
-	pthread_attr_t attr;
-	pthread_attr_init(&attr);
-	pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
-#endif
-
-	// set thread priority one point below normal
-	// so thread construction won't disturb real-time audio
-	RelPriority(-1);
-
-	FLEXT_TEMPINST(ThrVars)::thrhelpcond = new ThrCond;
-
-    FLEXT_TEMPINST(ThrVars)::initialized = true;
-
-	// helper loop
-	for(;;) {
-		FLEXT_TEMPINST(ThrVars)::thrhelpcond->Wait();
-
-   		// start all inactive threads
-        thr_entry *ti;
-        while((ti = FLEXT_TEMPINST(ThrRegistry)::pending.Pop()) != NULL) {
-		    bool ok;
-    		
-    #if FLEXT_THREADS == FLEXT_THR_POSIX
-            thrid_t dummy;
-		    ok = pthread_create (&dummy,&attr,(void *(*)(void *))FLEXT_TEMPINST(LaunchHelper),ti) == 0;
-    #elif FLEXT_THREADS == FLEXT_THR_MP
-            thrid_t dummy;
-		    ok = MPCreateTask((TaskProc)FLEXT_TEMPINST(LaunchHelper),ti,0,0,0,0,0,&dummy) == noErr;
-    #elif FLEXT_THREADS == FLEXT_THR_WIN32
-		    ok = _beginthread((void (*)(void *))FLEXT_TEMPINST(LaunchHelper),0,ti) >= 0;
-    #else
-    #error
-    #endif
-		    if(!ok) { 
-			    error("flext - Could not launch thread!");
-			    FLEXT_TEMPINST(ThrRegistry)::pending.Free(ti); ti = NULL;
-		    }
-		    else
-			    // insert into queue of active threads
-                FLEXT_TEMPINST(ThrRegistry)::active.Push(ti);
-        }
-	}
-
-    FLEXT_ASSERT(false);
-/*
-    // Never reached!
-
-	delete thrhelpcond;
-	thrhelpcond = NULL;
-	
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	pthread_attr_destroy(&attr);
-#endif
-*/
-}
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::LaunchThread(void (*meth)(thr_params *p),thr_params *p)
-{
-	FLEXT_ASSERT(FLEXT_TEMPINST(ThrVars)::thrhelpcond);
-
-	// make an entry into thread list
-    thr_entry *e = FLEXT_TEMPINST(ThrRegistry)::pending.New();
-    e->Set(meth,p);
-	FLEXT_TEMPINST(ThrRegistry)::pending.Push(e);
-	// signal thread helper
-	FLEXT_TEMPINST(ThrVars)::thrhelpcond->Signal();
-
-	return true;
-}
-
-FLEXT_TEMPLATE bool waitforstopped(TypedLifo<thr_entry> &qufnd,float wait = 0)
-{
-    TypedLifo<thr_entry> qutmp;
-
-    double until;
-    if(wait) until = flext::GetOSTime()+wait;
-
-    for(;;) {
-        thr_entry *fnd = qufnd.Pop();
-        if(!fnd) break; // no more entries -> done!
-
-        thr_entry *ti;
-        // search for entry
-        while((ti = FLEXT_TEMPINST(ThrRegistry)::stopped.Pop()) != NULL && ti != fnd) qutmp.Push(ti);
-        // put back entries
-        while((ti = qutmp.Pop()) != NULL) FLEXT_TEMPINST(ThrRegistry)::stopped.Push(ti);
-
-        if(ti) { 
-            // still in ThrRegistry::stopped queue
-            qufnd.Push(fnd);
-            // yield to other threads
-            flext::ThrYield();
-            
-            if(wait && flext::GetOSTime() > until) 
-                // not successful -> remaining thread are still in qufnd queue
-                return false;
-        }
-    }
-    return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::StopThread(void (*meth)(thr_params *p),thr_params *p,bool wait)
-{
-	FLEXT_ASSERT(FLEXT_TEMPINST(ThrVars)::thrhelpcond);
-
-    TypedLifo<thr_entry> qutmp;
-    thr_entry *ti;
-
-    // first search pending queue
-    // --------------------------
-
-    {
-        bool found = false;
-        while((ti = FLEXT_TEMPINST(ThrRegistry)::pending.Pop()) != NULL)
-            if(ti->meth == meth && ti->params == p) {
-                // found -> thread hasn't started -> just delete
-                FLEXT_TEMPINST(ThrRegistry)::pending.Free(ti);
-                found = true;
-            }
-            else
-                qutmp.Push(ti);
-
-        // put back into pending queue (order doesn't matter)
-        while((ti = qutmp.Pop()) != NULL) FLEXT_TEMPINST(ThrRegistry)::pending.Push(ti);
-
-        if(found) return true;
-    }
-
-    // now search active queue
-    // -----------------------
-
-    TypedLifo<thr_entry> qufnd;
-
-    while((ti = FLEXT_TEMPINST(ThrRegistry)::active.Pop()) != NULL)
-        if(ti->meth == meth && ti->params == p) {
-            FLEXT_TEMPINST(ThrRegistry)::stopped.Push(ti);
-            FLEXT_TEMPINST(ThrVars)::thrhelpcond->Signal();
-            qufnd.Push(ti);
-        }
-        else
-            qutmp.Push(ti);
-
-    // put back into pending queue (order doesn't matter)
-    while((ti = qutmp.Pop()) != NULL) FLEXT_TEMPINST(ThrRegistry)::active.Push(ti);
-
-    // wakeup helper thread
-    FLEXT_TEMPINST(ThrVars)::thrhelpcond->Signal();
-
-    // now wait for entries in qufnd to have vanished from ThrRegistry::stopped
-    if(wait) 
-        return FLEXT_TEMPINST(waitforstopped)(qufnd);
-    else
-        return !qufnd.Avail();
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::ShouldExit()
-{
-    return FLEXT_TEMPINST(ThrRegistry)::stopped.Find(GetThreadId()) != NULL;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::PushThread()
-{
-	// set priority of newly created thread one point below the system thread's
-	RelPriority(-1);
-	RegisterThread();
-	return true;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::PopThread()
-{
-    thrid_t id = GetThreadId();
-	UnregisterThread(id);
-    thr_entry *fnd = FLEXT_TEMPINST(ThrRegistry)::stopped.Find(id,true);
-    if(!fnd) fnd = FLEXT_TEMPINST(ThrRegistry)::active.Find(id,true);
-
-    if(fnd) 
-        FLEXT_TEMPINST(ThrRegistry)::pending.Free(fnd);
-#ifdef FLEXT_DEBUG
-	else
-		post("flext - INTERNAL ERROR: Thread not found!");
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::RegisterThread(thrid_t id)
-{
-#if 1
-    FLEXT_ASSERT(FLEXT_TEMPINST(ThrVars)::thrregmtx);
-    FLEXT_TEMPINST(ThrVars)::thrregmtx->Lock();
-    FLEXT_TEMPINST(ThrVars)::regthreads.insert(id);
-    FLEXT_TEMPINST(ThrVars)::thrregmtx->Unlock();
-#else
-	regqueue.Push(new ThrIdCell(id));
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::UnregisterThread(thrid_t id)
-{
-#if 1
-    FLEXT_ASSERT(FLEXT_TEMPINST(ThrVars)::thrregmtx);
-    FLEXT_TEMPINST(ThrVars)::thrregmtx->Lock();
-    FLEXT_TEMPINST(ThrVars)::regthreads.erase(id);
-    FLEXT_TEMPINST(ThrVars)::thrregmtx->Unlock();
-#else
-	unregqueue.Push(new ThrIdCell(id));
-#endif
-}
-
-#if 0
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ThreadRegistryWorker()
-{
-	ThrIdCell *pid;
-	while((pid = regqueue.Pop()) != NULL) { regthreads.insert(pid->id); delete pid; }
-	while((pid = unregqueue.Pop()) != NULL) { regthreads.erase(pid->id); delete pid; }
-}
-#endif
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::IsThreadRegistered()
-{
-    FLEXT_ASSERT(FLEXT_TEMPINST(ThrVars)::thrregmtx);
-    FLEXT_TEMPINST(ThrVars)::thrregmtx->Lock();
-	bool fnd = FLEXT_TEMPINST(ThrVars)::regthreads.find(GetThreadId()) != FLEXT_TEMPINST(ThrVars)::regthreads.end();
-    FLEXT_TEMPINST(ThrVars)::thrregmtx->Unlock();
-    return fnd;
-}
-
-//! Terminate all object threads
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext_base))::StopThreads()
-{
-	FLEXT_ASSERT(FLEXT_TEMPINST(ThrVars)::thrhelpcond);
-
-    TypedLifo<thr_entry> qutmp;
-    thr_entry *ti;
-
-    // first search pending queue
-    // --------------------------
-
-    while((ti = FLEXT_TEMPINST(ThrRegistry)::pending.Pop()) != NULL)
-        if(ti->This() == this)
-            // found -> thread hasn't started -> just delete
-            FLEXT_TEMPINST(ThrRegistry)::pending.Free(ti);
-        else
-            qutmp.Push(ti);
-
-    // put back into pending queue (order doesn't matter)
-    while((ti = qutmp.Pop()) != NULL) FLEXT_TEMPINST(ThrRegistry)::pending.Push(ti);
-
-    // now search active queue
-    // -----------------------
-
-    TypedLifo<thr_entry> qufnd;
-
-    while((ti = FLEXT_TEMPINST(ThrRegistry)::active.Pop()) != NULL)
-        if(ti->This() == this) {
-            FLEXT_TEMPINST(ThrRegistry)::stopped.Push(ti);
-            FLEXT_TEMPINST(ThrVars)::thrhelpcond->Signal();
-            qufnd.Push(ti);
-        }
-        else
-            qutmp.Push(ti);
-
-    // put back into pending queue (order doesn't matter)
-    while((ti = qutmp.Pop()) != NULL) FLEXT_TEMPINST(ThrRegistry)::active.Push(ti);
-
-    // wakeup helper thread
-    FLEXT_TEMPINST(ThrVars)::thrhelpcond->Signal();
-
-    // now wait for entries in qufnd to have vanished from ThrRegistry::stopped
-    if(!FLEXT_TEMPINST(waitforstopped)(qufnd,MAXIMUMWAIT*0.001f)) {
-#ifdef FLEXT_DEBUG
-		post("flext - doing hard thread termination");
-#endif
-
-		// timeout -> hard termination
-        while((ti = qufnd.Pop()) != NULL) {
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-			if(pthread_cancel(ti->thrid)) 
-                post("%s - Thread could not be terminated!",thisName());
-#elif FLEXT_THREADS == FLEXT_THR_MP
-			MPTerminateTask(ti->thrid,0);
-			// here, we should use a task queue to check whether the task has really terminated!!
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-            // can't use the c library function _endthread.. memory leaks will occur
-            HANDLE hnd = OpenThread(THREAD_ALL_ACCESS,TRUE,ti->thrid);
-            TerminateThread(hnd,0);
-#else
-# error Not implemented
-#endif
-            FLEXT_TEMPINST(ThrRegistry)::pending.Free(ti);
-        }
-        return false;
-	}
-    else
-	    return true;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::RelPriority(int dp,thrid_t ref,thrid_t id)
-{
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	sched_param parm;
-	int policy;
-	if(pthread_getschedparam(ref,&policy,&parm) < 0) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to get thread priority");
-# endif
-		return false;
-	}
-	else {
-		parm.sched_priority += dp;
-
-		// MSVC++ 6 produces wrong code with the following lines!!!
-//		int schmin = sched_get_priority_min(policy);
-//		int schmax = sched_get_priority_max(policy);
-
-		if(parm.sched_priority < sched_get_priority_min(policy)) {
-# ifdef FLEXT_DEBUG
-			post("flext - minimum thread priority reached");
-# endif
-			parm.sched_priority = sched_get_priority_min(policy);
-		}
-		else if(parm.sched_priority > sched_get_priority_max(policy)) {
-# ifdef FLEXT_DEBUG
-			post("flext - maximum thread priority reached");
-# endif
-			parm.sched_priority = sched_get_priority_max(policy);
-		}
-		
-		if(pthread_setschedparam(id,policy,&parm) < 0) {
-# ifdef FLEXT_DEBUG
-			post("flext - failed to change thread priority");
-# endif
-			return false;
-		}
-	}
-	return true;
-
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-    HANDLE href = OpenThread(THREAD_ALL_ACCESS,TRUE,ref);
-    HANDLE hid = OpenThread(THREAD_ALL_ACCESS,TRUE,id);
-    int pr = GetThreadPriority(href);
-
-    if(pr == THREAD_PRIORITY_ERROR_RETURN) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to get thread priority");
-# endif
-		return false;
-	}
-
-    pr += dp;
-	if(pr < THREAD_PRIORITY_IDLE) {
-# ifdef FLEXT_DEBUG
-		post("flext - minimum thread priority reached");
-# endif
-		pr = THREAD_PRIORITY_IDLE;
-	}
-	else if(pr > THREAD_PRIORITY_TIME_CRITICAL) {
-# ifdef FLEXT_DEBUG
-		post("flext - maximum thread priority reached");
-# endif
-		pr = THREAD_PRIORITY_TIME_CRITICAL;
-	}
-	
-	if(SetThreadPriority(hid,pr) == 0) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to change thread priority");
-# endif
-		return false;
-	}
-    return true;
-
-#elif FLEXT_THREADS == FLEXT_THR_MP
-    thr_entry *ti = FLEXT_TEMPINST(ThrRegistry)::pending.Find(id);
-    if(!ti) ti = FLEXT_TEMPINST(ThrRegistry)::active.Find(id);
-	if(ti) {
-		// thread found in list
-		int w = GetPriority(id);
-		if(dp < 0) w /= 1<<(-dp);
-		else w *= 1<<dp;
-		if(w < 1) {
-# ifdef FLEXT_DEBUG
-			post("flext - minimum thread priority reached");
-# endif
-			w = 1;
-		}
-		else if(w > 10000) {
-# ifdef FLEXT_DEBUG
-			post("flext - maximum thread priority reached");
-# endif
-			w = 10000;
-		}
-		ti->weight = w;
-		return MPSetTaskWeight(id,w) == noErr;
-	}
-	else return false;
-#else
-# error
-#endif
-}
-
-
-FLEXT_TEMPIMPL(int FLEXT_CLASSDEF(flext))::GetPriority(thrid_t id)
-{
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	sched_param parm;
-	int policy;
-	if(pthread_getschedparam(id,&policy,&parm) < 0) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to get parms");
-# endif
-		return -1;
-	}
-	return parm.sched_priority;
-
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-    HANDLE hid = OpenThread(THREAD_ALL_ACCESS,TRUE,id);
-    int pr = GetThreadPriority(hid);
-
-    if(pr == THREAD_PRIORITY_ERROR_RETURN) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to get thread priority");
-# endif
-		return -1;
-	}
-    return pr;
-
-#elif FLEXT_THREADS == FLEXT_THR_MP
-    thr_entry *ti = FLEXT_TEMPINST(ThrRegistry)::pending.Find(id);
-    if(!ti) ti = FLEXT_TEMPINST(ThrRegistry)::active.Find(id);
-    return ti?ti->weight:-1;
-#else
-# error
-#endif
-}
-
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::SetPriority(int p,thrid_t id)
-{
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-	sched_param parm;
-	int policy;
-	if(pthread_getschedparam(id,&policy,&parm) < 0) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to get parms");
-# endif
-		return false;
-	}
-	else {
-		parm.sched_priority = p;
-		if(pthread_setschedparam(id,policy,&parm) < 0) {
-# ifdef FLEXT_DEBUG
-			post("flext - failed to change priority");
-# endif
-			return false;
-		}
-	}
-	return true;
-
-#elif FLEXT_THREADS == FLEXT_THR_WIN32
-    HANDLE hid = OpenThread(THREAD_ALL_ACCESS,TRUE,id);
-	if(SetThreadPriority(hid,p) == 0) {
-# ifdef FLEXT_DEBUG
-		post("flext - failed to change thread priority");
-# endif
-		return false;
-	}
-    return true;
-
-#elif FLEXT_THREADS == FLEXT_THR_MP
-    thr_entry *ti = FLEXT_TEMPINST(ThrRegistry)::pending.Find(id);
-    if(!ti) ti = FLEXT_TEMPINST(ThrRegistry)::active.Find(id);
-    return ti && MPSetTaskWeight(id,ti->weight = p) == noErr;
-#else
-# error
-#endif
-}
-
-
-#if FLEXT_THREADS == FLEXT_THR_POSIX
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::ThrCond::Wait() {
-	this->Lock(); // use this-> to avoid wrong function invocation (global Unlock)
-    bool ret = pthread_cond_wait(&cond,&this->mutex) == 0;
-	this->Unlock(); // use this-> to avoid wrong function invocation (global Unlock)
-	return ret;
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::ThrCond::TimedWait(double ftm)
-{ 
-	timespec tm; 
-#if FLEXT_OS == FLEXT_OS_WIN && FLEXT_OSAPI == FLEXT_OSAPI_WIN_NATIVE
-# ifdef _MSC_VER
-	_timeb tmb;
-	_ftime(&tmb);
-# else
-	timeb tmb;
-	ftime(&tmb);
-# endif
-	tm.tv_nsec = tmb.millitm*1000000;
-	tm.tv_sec = (long)tmb.time; 
-#else // POSIX
-# if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
-	clock_gettime(CLOCK_REALTIME,&tm);
-# else
-	struct timeval tp;
-	gettimeofday(&tp, NULL);
-	tm.tv_nsec = tp.tv_usec*1000;
-	tm.tv_sec = tp.tv_sec;
-# endif
-#endif
-
-	tm.tv_nsec += (long)((ftm-(long)ftm)*1.e9);
-	long nns = tm.tv_nsec%1000000000;
-	tm.tv_sec += (long)ftm+(tm.tv_nsec-nns)/1000000000; 
-	tm.tv_nsec = nns;
-
-	this->Lock(); // use this-> to avoid wrong function invocation (global Unlock)
-    bool ret = pthread_cond_timedwait(&cond,&this->mutex,&tm) == 0;
-	this->Unlock(); // use this-> to avoid wrong function invocation (global Unlock)
-	return ret;
-}
-#endif
-
-#include "flpopns.h"
-
-#endif // FLEXT_THREADS
-
-#endif // __FLEXT_THR_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/fltimer.cpp b/externals/grill/trunk/flext/libbuild/include/flext/fltimer.cpp
deleted file mode 100755
index 32bf1a52bc45e471d1da1a44d337c8f8d1c5a087..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/fltimer.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file fltimer.cpp
-    \brief flext timer functions and classes   
-*/
-
-#ifndef __FLEXT_TIMER_CPP
-#define __FLEXT_TIMER_CPP
-
-#include "flext.h"
-
-#if FLEXT_OS == FLEXT_OS_WIN
-#include <windows.h>
-#elif FLEXT_OS == FLEXT_OS_LINUX || FLEXT_OS == FLEXT_OS_IRIX || FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH
-#include <unistd.h>
-#include <sys/time.h>
-#elif FLEXT_OS == FLEXT_OS_MAC
-#include <Timer.h>
-#include <Threads.h>
-#endif
-
-#include "flpushns.h"
-
-FLEXT_TEMPLATE double getstarttime();
-
-FLEXT_TEMPLATE
-struct TimerVars
-{
-#if FLEXT_OS == FLEXT_OS_WIN
-    static double perffrq;
-#endif
-    static double starttime;
-};
-
-#if FLEXT_OS == FLEXT_OS_WIN
-FLEXT_TEMPIMPL(double TimerVars)::perffrq = 0;
-#endif
-FLEXT_TEMPIMPL(double TimerVars)::starttime = FLEXT_TEMPINST(getstarttime)();
-
-FLEXT_TEMPLATE
-double getstarttime()
-{
-#if FLEXT_OS == FLEXT_OS_WIN
-    LARGE_INTEGER frq;
-    if(QueryPerformanceFrequency(&frq)) TimerVars<>::perffrq = (double)frq.QuadPart;
-#endif
-
-    FLEXT_TEMPINST(TimerVars)::starttime = 0;
-    return flext::GetOSTime();
-}
-
-FLEXT_TEMPIMPL(double FLEXT_CLASSDEF(flext))::GetOSTime()
-{
-    double tm;
-
-#if FLEXT_OS == FLEXT_OS_WIN
-    LARGE_INTEGER cnt;
-    if(perffrq && QueryPerformanceCounter(&cnt))
-        tm = cnt.QuadPart/TimerVars<>::perffrq;
-    else {
-        SYSTEMTIME systm;
-        FILETIME fltm;
-        GetSystemTime(&systm);
-        SystemTimeToFileTime(&systm,&fltm);
-        tm = ((LARGE_INTEGER *)&fltm)->QuadPart*1.e-7;
-    }
-#elif FLEXT_OS == FLEXT_OS_LINUX || FLEXT_OS == FLEXT_OS_IRIX || FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH // POSIX
-    timeval tmv;
-    gettimeofday(&tmv,NULL);
-    tm = tmv.tv_sec+tmv.tv_usec*1.e-6;
-#elif FLEXT_OS == FLEXT_OS_MAC // that's just for OS9 & Carbon!
-    UnsignedWide tick;
-    Microseconds(&tick);
-    tm = (tick.hi*((double)(1L<<((sizeof tick.lo)*4))*(double)(1L<<((sizeof tick.lo)*4)))+tick.lo)*1.e-6; 
-#else
-    #error Not implemented
-#endif
-    return tm-FLEXT_TEMPINST(TimerVars)::starttime;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::Sleep(double s)
-{
-    if(s <= 0) return;
-#if FLEXT_OS == FLEXT_OS_WIN
-#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x400
-#if 0
-    LARGE_INTEGER liDueTime;
-    liDueTime.QuadPart = (LONGLONG)(-1.e7*s);
-
-    // Create a waitable timer.
-    HANDLE hTimer = CreateWaitableTimer(NULL,TRUE,NULL);
-    if(hTimer) {
-        if(SetWaitableTimer(hTimer,&liDueTime,0,NULL,NULL,0))
-            // Wait for the timer.
-            WaitForSingleObject(hTimer,INFINITE); // != WAIT_OBJECT_0)
-        else
-            ::Sleep((long)(s*1000.));
-        CloseHandle(hTimer);
-    }
-    else
-#else
-    LARGE_INTEGER cnt;
-    if(perffrq && QueryPerformanceCounter(&cnt)) {
-        LONGLONG dst = (LONGLONG)(cnt.QuadPart+perffrq*s);
-        for(;;) {
-            SwitchToThread(); // while waiting switch to another thread
-            QueryPerformanceCounter(&cnt);
-            if(cnt.QuadPart > dst) break;
-        }
-    }
-    else
-#endif
-#endif
-        // last resort....
-        ::Sleep((long)(s*1000.));
-#elif FLEXT_OS == FLEXT_OS_LINUX || FLEXT_OS == FLEXT_OS_IRIX || FLEXT_OSAPI == FLEXT_OSAPI_MAC_MACH // POSIX
-    usleep((long)(s*1000000.));
-#elif FLEXT_OS == FLEXT_OS_MAC // that's just for OS9 & Carbon!
-    UnsignedWide tick;
-    Microseconds(&tick);
-    double target = tick.hi*((double)(1L<<((sizeof tick.lo)*4))*(double)(1L<<((sizeof tick.lo)*4)))+tick.lo+s*1.e6; 
-    for(;;) {
-        // this is just a loop running until the time has passed - stone age (but we yield at least)
-        Microseconds(&tick);
-        if(target <= tick.hi*((double)(1L<<((sizeof tick.lo)*4))*(double)(1L<<((sizeof tick.lo)*4)))+tick.lo) break;
-        YieldToAnyThread(); // yielding surely reduces the timing precision (but we're civilized)
-    }
-#else
-    #error Not implemented
-#endif
-}
-
-/* \param qu determines whether timed messages should be queued (low priority - only when supported by the system).
-*/
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext))::Timer::Timer(bool qu):
-    queued(qu),
-    clss(NULL),userdata(NULL),
-    period(0)
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    clk = (t_clock *)clock_new(this,(t_method)callback);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    clk = (t_clock *)clock_new(this,(t_method)callback);
-    if(queued) qelem = (t_qelem *)qelem_new(this,(method)queuefun);
-#else
-    #error Not implemented
-#endif
-}
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext))::Timer::~Timer()
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    clock_free(clk);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    clock_free(clk);
-    if(queued) ::qelem_free(qelem);
-#else
-    #error Not implemented
-#endif
-}
-
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::Timer::Reset()
-{
-#if FLEXT_SYS == FLEXT_SYS_PD
-    clock_unset(clk);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    clock_unset(clk);
-    if(queued) ::qelem_unset(qelem);
-#else
-    #error Not implemented
-#endif
-    return true;
-}
-
-/*! \param tm absolute time (in seconds)
-    \param data user data
-    \param dopast if set events with times lying in the past will be triggered immediately, if not set they are ignored
-    \return true on success
-*/
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::Timer::At(double tm,void *data,bool dopast)
-{
-    userdata = data;
-    period = 0;
-#if FLEXT_SYS == FLEXT_SYS_PD 
-    const double systm = clock_gettimesince(0);
-    double df = tm*1000.-systm;
-    if(dopast && df < 0) df = 0;
-    if(df >= 0)
-        clock_delay(clk,df);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    const double ms = tm*1000.;
-    double cur;
-    clock_getftime(&cur);
-    if(cur <= ms)
-        clock_fdelay(clk,ms-cur);
-    else if(dopast) // trigger timer is past
-        clock_fdelay(clk,0);
-#else
-    #error Not implemented
-#endif
-    return true;
-}
-
-/*! \param tm relative time (in seconds)
-    \param data user data
-    \return true on success
-*/
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::Timer::Delay(double tm,void *data)
-{
-    userdata = data;
-    period = 0;
-#if FLEXT_SYS == FLEXT_SYS_PD 
-    clock_delay(clk,tm*1000);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    clock_fdelay(clk,tm*1000.);
-#else
-    #error Not implemented
-#endif
-    return true;
-}
-
-/*! \param tm relative time between periodic events (in seconds)
-    \param data user data
-    \return true on success
-    \note the first event will be delayed by tm
-*/
-FLEXT_TEMPIMPL(bool FLEXT_CLASSDEF(flext))::Timer::Periodic(double tm,void *data)
-{
-    userdata = data;
-	period = tm;
-#if FLEXT_SYS == FLEXT_SYS_PD 
-    clock_delay(clk,tm*1000.);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-    clock_fdelay(clk,tm*1000.);
-#else
-    #error Not implemented
-#endif
-    return true;
-}
-
-//! \brief Callback function for system clock.
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::Timer::callback(Timer *tmr)
-{
-#if FLEXT_SYS == FLEXT_SYS_MAX
-    if(tmr->queued) 
-        qelem_set(tmr->qelem);
-    else
-#endif
-        tmr->Work();
-
-    if(tmr->period) {
-		// reschedule
-#if FLEXT_SYS == FLEXT_SYS_PD 
-        clock_delay(tmr->clk,tmr->period*1000.);
-#elif FLEXT_SYS == FLEXT_SYS_MAX
-        clock_fdelay(tmr->clk,tmr->period*1000.);
-#else
-    #error Not implemented
-#endif
-    }
-}
-
-#if FLEXT_SYS == FLEXT_SYS_MAX
-/*! \brief Callback function for low priority clock (for queued messages).
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::Timer::queuefun(Timer *tmr) { tmr->Work(); }
-#endif
-
-/*! \brief Virtual worker function - by default it calls the user callback function.
-    \remark The respective callback parameter format is chosen depending on whether clss is defined or not.
-*/
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::Timer::Work()
-{
-    if(cback) {
-        if(clss) 
-            ((bool (*)(flext_base *,void *))cback)(clss,userdata);
-        else
-            cback(userdata);
-    }
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_TIMER_CPP
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flutil.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flutil.cpp
deleted file mode 100755
index f86598f9f9e3a2635e73a4914f050f74e88c0625..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flutil.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flutil.cpp
-    \brief Implementation of the various utility functions.
-*/
- 
-#ifndef __FLEXT_UTIL_CPP
-#define __FLEXT_UTIL_CPP
-
-#include "flext.h"
-#include <cstring>
-
-#if FLEXT_OS == FLEXT_OS_WIN
-#include <windows.h>
-#elif FLEXT_OS == FLEXT_OS_MAC
-    #if FLEXT_OSAPI != FLEXT_OSAPI_MAC_MACH
-        #include <MacMemory.h>
-    #else
-        #include <Carbon/Carbon.h>
-    #endif
-#endif
-
-#include "flpushns.h"
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::CopyMem(void *dst,const void *src,int bytes)
-{
-#if FLEXT_OS == FLEXT_OS_WIN
-    MoveMemory(dst,src,bytes);
-#elif FLEXT_OS == FLEXT_OS_MAC && !defined(__LP64__)
-    BlockMoveData(src,dst,bytes);   // not available for 64 bits
-#else
-    memmove(dst,src,bytes);
-#endif
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext))::ZeroMem(void *dst,int bytes)
-{
-#if FLEXT_OS == FLEXT_OS_WIN
-    ZeroMemory(dst,bytes);
-#elif FLEXT_OS == FLEXT_OS_MAC
-#   ifdef __LP64__  // 64 bits compilation
-    bzero(dst,bytes);
-#   else
-    BlockZero(dst,bytes);
-#   endif
-#else
-    memset(dst,0,bytes);
-#endif
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_UTIL_CPP
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/flxlet.cpp b/externals/grill/trunk/flext/libbuild/include/flext/flxlet.cpp
deleted file mode 100755
index a8e28fe27ae90ece6d6b76133ca3b760541277d9..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/flxlet.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-flext - C++ layer for Max and Pure Data externals
-
-Copyright (c) 2001-2015 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-*/
-
-/*! \file flxlet.cpp
-    \brief Implementation of the variable inlet/outlet functionality.
-*/
- 
-#ifndef __FLEXT_XLET_CPP
-#define __FLEXT_XLET_CPP
-
-#include "flext.h"
-#include "flinternal.h"
-#include <cstring>
-#include <cstdarg>
-
-#include "flpushns.h"
-
-#define MAXLETS 256
-
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::xlet FLEXT_CLASSDEF(flext_base))::inlist[MAXLETS];
-FLEXT_TEMPIMPL(FLEXT_TEMPSUB(FLEXT_CLASSDEF(flext_base))::xlet FLEXT_CLASSDEF(flext_base))::outlist[MAXLETS];
-
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::xlet::xlet(): tp(xlet_none),desc(NULL) {}
-FLEXT_TEMPIMPL(FLEXT_CLASSDEF(flext_base))::xlet::~xlet() { if(desc) delete[] desc; }
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::xlet::Desc(const char *c)
-{
-    if(desc) delete[] desc;
-    if(c) {
-        size_t l = strlen(c);
-        desc = new char[l+1];
-        memcpy(desc,c,l+1);
-    }
-    else
-        desc = NULL;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddInlet(xlettype tp,int mult,const char *desc)
-{
-    if(UNLIKELY(incnt+mult >= MAXLETS))
-        post("%s - too many inlets",thisName());
-    else
-        for(int i = 0; i < mult; ++i) {
-            xlet &x = inlist[incnt++];
-            x.tp = tp;
-            x.Desc(desc);
-        }
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddOutlet(xlettype tp,int mult,const char *desc)
-{
-    if(UNLIKELY(outcnt+mult >= MAXLETS))
-        post("%s - too many outlets",thisName());
-    else
-        for(int i = 0; i < mult; ++i) {
-            xlet &x = outlist[outcnt++];
-            x.tp = tp;
-            x.Desc(desc);
-        }
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::DescInlet(int ix,const char *d)
-{
-    if(UNLIKELY(ix >= incnt))
-        post("%s - inlet %i not found",thisName(),ix);
-    else
-        inlist[ix].Desc(d);
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::DescOutlet(int ix,const char *d)
-{
-    if(UNLIKELY(ix >= incnt))
-        post("%s - outlet %i not found",thisName(),ix);
-    else
-        outlist[ix].Desc(d);
-}
-
-FLEXT_TEMPIMPL(unsigned long FLEXT_CLASSDEF(flext_base))::XletCode(xlettype tp,...)
-{
-    unsigned long code = 0;
-
-    va_list marker;
-    va_start(marker,tp);
-    int cnt = 0;
-    xlettype arg = tp;
-    for(; arg; ++cnt) {
-#ifdef FLEXT_DEBUG
-        if(cnt > 9) {
-            error("%s - Too many in/outlets defined - truncated to 9",thisName());
-            break;          
-        }
-#endif          
-
-        code = code*10+(int)arg;
-        arg = (xlettype)va_arg(marker,int);
-    }
-    va_end(marker);
-
-    return code;
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddInlets(unsigned long code)
-{ 
-    for(; code; code /= 10) AddInlet((xlettype)(code%10));
-}
-
-FLEXT_TEMPIMPL(void FLEXT_CLASSDEF(flext_base))::AddOutlets(unsigned long code)
-{ 
-    for(; code; code /= 10) AddOutlet((xlettype)(code%10));
-}
-
-#include "flpopns.h"
-
-#endif // __FLEXT_XLET_CPP
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/atomic_int.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/atomic_int.hpp
deleted file mode 100755
index 18832ebb88491b81c441c34c0549da3b7dd9de54..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/atomic_int.hpp
+++ /dev/null
@@ -1,238 +0,0 @@
-//  $Id$
-//
-//  Copyright (C) 2007 Tim Blechmann & 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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-#ifndef __LOCKFREE_ATOMIC_INT_HPP
-#define __LOCKFREE_ATOMIC_INT_HPP
-
-#include "prefix.hpp"
-
-namespace lockfree
-{
-
-#if defined(__GNUC__) && ( (__GNUC__ > 4) || ((__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1)) )
-
-template <typename T>
-class atomic_int
-{
-public:
-    explicit atomic_int(T v = 0):
-        value(v)
-    {
-    }
-
-    operator T(void) const
-    {
-        return __sync_fetch_and_add(&value, 0);
-    }
-
-    void operator =(T v)
-    {
-        value = v;
-        __sync_synchronize();
-    }
-
-    T operator +=(T v)
-    {
-        return __sync_add_and_fetch(&value, v);
-    }
-
-    T operator -=(T v)
-    {
-        return __sync_sub_and_fetch(&value, v);
-    }
-
-    /* prefix operator */
-    T operator ++(void)
-    {
-        return __sync_add_and_fetch(&value, 1);
-    }
-
-    /* prefix operator */
-    T operator --(void)
-    {
-        return __sync_sub_and_fetch(&value, 1);
-    }
-
-    /* postfix operator */
-    T operator ++(int)
-    {
-        return __sync_fetch_and_add(&value, 1);
-    }
-
-    /* postfix operator */
-    T operator --(int)
-    {
-        return __sync_fetch_and_sub(&value, 1);
-    }
-
-private:
-    mutable T value;
-};
-
-#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
-
-template <typename T>
-class atomic_int
-{
-public:
-    explicit atomic_int(T v = 0):
-        value(v)
-    {
-    }
-
-    operator T(void) const
-    {
-        return __gnu_cxx::__exchange_and_add(&value, 0);
-    }
-
-    void operator =(T v)
-    {
-        value = v;
-    }
-
-    T operator +=(T v)
-    {
-        return __gnu_cxx::__exchange_and_add(&value, v) + v;
-    }
-
-    T operator -=(T v)
-    {
-        return __gnu_cxx::__exchange_and_add(&value, -v) - v;
-    }
-
-    /* prefix operator */
-    T operator ++(void)
-    {
-        return operator+=(1);
-    }
-
-    /* prefix operator */
-    T operator --(void)
-    {
-        return operator-=(1);
-    }
-
-    /* postfix operator */
-    T operator ++(int)
-    {
-        return __gnu_cxx::__exchange_and_add(&value, 1);
-    }
-
-    /* postfix operator */
-    T operator --(int)
-    {
-        return __gnu_cxx::__exchange_and_add(&value, -1);
-    }
-
-private:
-    mutable _Atomic_word value;
-};
-
-#else /* emulate via CAS */
-
-template <typename T>
-class atomic_int
-{
-public:
-    explicit atomic_int(T v = 0)
-    {
-        *this = v;
-    }
-
-    operator T(void) const
-    {
-        memory_barrier();
-        return value;
-    }
-
-    void operator =(T v)
-    {
-        value = v;
-        memory_barrier();
-    }
-
-    /* prefix operator */
-    T operator ++()
-    {
-        return *this += 1;
-    }
-
-    /* prefix operator */
-    T operator --()
-    {
-        return *this -= 1;
-    }
-
-    T operator +=(T v)
-    {
-        for(;;)
-        {
-            T newv = value+v;
-            if(likely(CAS(&value,value,newv)))
-                return newv;
-        }
-    }
-
-    T operator -=(T v)
-    {
-        for(;;)
-        {
-            T newv = value-v;
-            if(likely(CAS(&value,value,newv)))
-                return newv;
-        }
-    }
-
-    /* postfix operator */
-    T operator ++(int)
-    {
-        for(;;)
-        {
-            T oldv = value;
-            if(likely(CAS(&value,oldv,oldv+1)))
-                return oldv;
-        }
-    }
-
-    /* postfix operator */
-    T operator --(int)
-    {
-        for(;;)
-        {
-            T oldv = value;
-            if(likely(CAS(&value,oldv,oldv-1)))
-                return oldv;
-        }
-    }
-
-private:
-    T value;
-};
-
-
-#endif
-
-} // namespace lockfree
-
-#endif /* __LOCKFREE_ATOMIC_INT_HPP */
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/atomic_ptr.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/atomic_ptr.hpp
deleted file mode 100755
index 688dd78aaf85d1357f5ee75ab453d55852d90636..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/atomic_ptr.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
-//  $Id$
-//
-//  Copyright (C) 2007 Tim Blechmann & 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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-#ifndef __LOCKFREE_ATOMIC_PTR_HPP
-#define __LOCKFREE_ATOMIC_PTR_HPP
-
-#include "cas.hpp"
-#include "branch_hints.hpp"
-
-#include <cstddef>
-
-namespace lockfree
-{
-    using std::size_t;
-
-    template <class T>
-    class atomic_ptr
-    {
-    public:
-        atomic_ptr() {}
-
-        atomic_ptr(const atomic_ptr &p): ptr(p.ptr),tag(p.tag) {}
-
-        atomic_ptr(T *p,size_t t = 0): ptr(p),tag(t) {}
-
-        /** atomic set operation */
-        inline atomic_ptr &operator =(const atomic_ptr &p)
-        {
-            for (;;)
-            {
-                atomic_ptr current(ptr, tag);
-
-                if(likely(CAS(current, p)))
-                    return *this;
-            }
-        }
-
-        inline atomic_ptr &operator()(T *p,size_t t)
-        {
-            return operator=(atomic_ptr(p, t) );
-        }
-
-
-        inline bool operator ==(const atomic_ptr &p) const { return ptr == p.ptr && tag == p.tag; }
-
-        inline bool operator !=(const atomic_ptr &p) const { return !operator ==(p); }
-
-
-        inline T * getPtr() const { return ptr; }
-
-        inline void setPtr(T * p) { ptr = p; }
-
-
-        inline size_t getTag() const { return tag; }
-
-        inline void setTag(size_t t) { tag = t; }
-
-        inline size_t incTag() { return ++tag; }
-
-
-        inline bool CAS(const atomic_ptr &oldval,const atomic_ptr &newval)
-        {
-            return lockfree::CAS2(this,oldval.ptr,oldval.tag,newval.ptr,newval.tag);
-        }
-
-        inline bool CAS(const atomic_ptr &oldval,T *newptr)
-        {
-            return lockfree::CAS2(this,oldval.ptr,oldval.tag,newptr,oldval.tag+1);
-        }
-
-        inline bool CAS(const T *oldptr,size_t oldtag,T *newptr)
-        {
-            return lockfree::CAS2(this,oldptr,oldtag,newptr,oldtag+1);
-        }
-
-    protected:
-        T * volatile ptr;
-        size_t volatile tag;
-    };
-
-} // namespace
-
-#endif /* __LOCKFREE_ATOMIC_PTR_HPP */
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/branch_hints.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/branch_hints.hpp
deleted file mode 100755
index d5a117f9d4de9088afadafb67da4e4e3634e82f3..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/branch_hints.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-//  $Id$
-//
-//  branch hints
-//  Copyright (C) 2007 Tim Blechmann
-//
-//  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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-#ifndef __LOCKFREE_BRANCH_HINTS_HPP
-#define __LOCKFREE_BRANCH_HINTS_HPP
-
-namespace lockfree
-{
-    /** \brief hint for the branch prediction */
-    inline bool likely(bool expr)
-    {
-#ifdef __GNUC__
-        return __builtin_expect(expr, true);
-#else
-        return expr;
-#endif
-    }
-
-    /** \brief hint for the branch prediction */
-    inline bool unlikely(bool expr)
-    {
-#ifdef __GNUC__
-        return __builtin_expect(expr, false);
-#else
-        return expr;
-#endif
-    }
-
-} // namespace
-
-#endif /* __LOCKFREE_BRANCH_HINTS_HPP */
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/cas.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/cas.hpp
deleted file mode 100755
index 8451f77b6c5663363b5206049d2d98e507b3e12c..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/cas.hpp
+++ /dev/null
@@ -1,252 +0,0 @@
-//  $Id$
-//
-//  Copyright (C) 2007-2008 Tim Blechmann & 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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-#ifndef __LOCKFREE_CAS_H
-#define __LOCKFREE_CAS_H
-
-#include "prefix.hpp"
-
-#ifndef _WIN32
-// pthreads are not available under Windows by default and we should not need them there
-#   include <pthread.h>
-#endif
-
-namespace lockfree
-{
-    inline void memory_barrier()
-    {
-#if defined(__GNUC__) && ( (__GNUC__ > 4) || ((__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1)) )
-        __sync_synchronize();
-#elif defined(__GNUC__) && (defined(__i386__) || defined(__i686__))
-		asm("" : : : "memory");
-#elif defined(_MSC_VER) && (_MSC_VER >= 1300)
-        _ReadWriteBarrier();
-#elif defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4)
-        OSMemoryBarrier();
-#elif defined(AO_HAVE_nop_full)
-        AO_nop_full();
-#else
-#   error no memory barrier implemented for this platform
-#endif
-    }
-
-    template <class C, class D>
-    inline bool CAS(volatile C * addr,D old,D nw)
-    {
-#if defined(__GNUC__) && ( (__GNUC__ > 4) || ((__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1)) )
-        return __sync_bool_compare_and_swap(addr, old, nw);
-#elif defined(_MSC_VER)
-        assert((size_t(addr)&3) == 0);  // a runtime check only for debug mode is somehow insufficient....
-        return _InterlockedCompareExchange(addr,nw,old) == old;
-#elif defined(_WIN32) || defined(_WIN64)
-        assert((size_t(addr)&3) == 0);  // a runtime check only for debug mode is somehow insufficient....
-        return InterlockedCompareExchange(addr,nw,old) == old;
-#elif defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4)
-        if(sizeof(D) == 4)
-            return OSAtomicCompareAndSwap32(old,nw,addr);
-        else if(sizeof(D) == 8)
-            return OSAtomicCompareAndSwap64(old,nw,addr);
-        else
-            assert(false);
-#elif defined(AO_HAVE_compare_and_swap_full)
-        return AO_compare_and_swap_full(reinterpret_cast<volatile AO_t*>(addr),
-            reinterpret_cast<AO_t>(old),
-            reinterpret_cast<AO_t>(nw));
-#else
-
-#   ifdef __GNUC__
-#       warning blocking CAS emulation
-#   else
-#       pragma message("blocking CAS emulation")
-#   endif
-
-        pthread_mutex_t guard = PTHREAD_MUTEX_INITIALIZER;
-        int status = pthread_mutex_lock(&guard);
-        assert(!status);
-
-        bool ret;
-
-        if (*addr == old)
-        {
-            *addr = nw;
-            ret = true;
-        }
-        else
-            ret = false;
-        int status2 = pthread_mutex_unlock(&guard);
-        assert(!status2);
-        return ret;
-#endif
-
-    }
-
-
-    template <class C, class D, class E>
-    inline bool CAS2(C * addr,D old1,E old2,D new1,E new2)
-    {
-#if defined(__GNUC__) && ((__GNUC__ > 4) || ( (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 2) ) ) && (defined(__i686__) || defined(__pentiumpro__) || defined(__nocona__) || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8))
-        struct packed_c
-        {
-            D d;
-            E e;
-        };
-
-        union cu
-        {
-            packed_c c;
-            long long l;
-        };
-
-        cu old;
-        old.c.d = old1;
-        old.c.e = old2;
-
-        cu nw;
-        nw.c.d = new1;
-        nw.c.e = new2;
-
-        return __sync_bool_compare_and_swap_8(reinterpret_cast<volatile long long*>(addr),
-            old.l,
-            nw.l);
-#elif defined(__GNUC__) && ((__GNUC__ >  4) || ( (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 2) ) ) && (defined(__x86_64__) || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16))
-        struct packed_c
-        {
-            D d;
-            E e;
-        };
-
-        union cu
-        {
-            packed_c c;
-            long long l;
-        };
-
-        cu old;
-        old.c.d = old1;
-        old.c.e = old2;
-
-        cu nw;
-        nw.c.d = new1;
-        nw.c.e = new2;
-
-        return __sync_bool_compare_and_swap_16(reinterpret_cast<volatile long long*>(addr),
-            old.l,
-            nw.l);
-#elif defined(_MSC_VER)
-        bool ok;
-        __asm {
-#   ifdef _WIN32
-            mov eax,[old1]
-            mov edx,[old2]
-            mov ebx,[new1]
-            mov ecx,[new2]
-            mov edi,[addr]
-            lock cmpxchg8b [edi]
-#   else
-            mov rax,[old1]
-            mov rdx,[old2]
-            mov rbx,[new1]
-            mov rcx,[new2]
-            mov rdi,[addr]
-            lock cmpxchg16b [rdi]
-#   endif
-            setz [ok]
-        }
-        return ok;
-#elif defined(__GNUC__) && (defined(__i386__) || defined(__i686__) || defined(__x86_64__))
-        char result;
-        if(sizeof(D) == 4 && sizeof(E) == 4) {
-            #ifndef __PIC__
-            __asm__ __volatile__("lock; cmpxchg8b %0; setz %1"
-                                 : "=m"(*addr), "=q"(result)
-                                 : "m"(*addr), "a" (old1), "d" (old2),
-                                 "b" (new1), "c" (new2) : "memory");
-            #else
-            __asm__ __volatile__("push %%ebx; movl %5,%%ebx; lock; cmpxchg8b %0; setz %1; pop %%ebx"
-                                 : "=m"(*addr), "=q"(result)
-                                 : "m"(*addr), "a" (old1), "d" (old2),
-                                 "m" (new1), "c" (new2) : "memory");
-            #endif
-        }
-        else if(sizeof(D) == 8 && sizeof(E) == 8) {
-            __asm__ __volatile__("lock; cmpxchg16b %0; setz %1"
-                                 : "=m"(*addr), "=q"(result)
-                                 : "m"(*addr), "a" (old1), "d" (old2),
-                                 "b" (new1), "c" (new2) : "memory");
-        }
-        else
-            assert(false);
-        return result != 0;
-#elif defined(AO_HAVE_double_compare_and_swap_full)
-        if (sizeof(D) != sizeof(AO_t) || sizeof(E) != sizeof(AO_t)) {
-            assert(false);
-            return false;
-        }
-
-        return AO_compare_double_and_swap_double_full(
-            reinterpret_cast<volatile AO_double_t*>(addr),
-            static_cast<AO_t>(old2),
-            reinterpret_cast<AO_t>(old1),
-            static_cast<AO_t>(new2),
-            reinterpret_cast<AO_t>(new1)
-        );
-#else
-
-#   ifdef __GNUC__
-#       warning blocking CAS2 emulation
-#   else
-#       pragma message("blocking CAS2 emulation")
-#   endif
-        struct packed_c
-        {
-            D d;
-            E e;
-        };
-
-        volatile packed_c * packed_addr = reinterpret_cast<volatile packed_c*>(addr);
-
-        pthread_mutex_t guard = PTHREAD_MUTEX_INITIALIZER;
-        int status = pthread_mutex_lock(&guard);
-        assert(!status);
-
-        bool ret;
-
-        if (packed_addr->d == old1 &&
-            packed_addr->e == old2)
-        {
-            packed_addr->d = new1;
-            packed_addr->e = new2;
-            ret = true;
-        }
-        else
-            ret = false;
-        int status2 = pthread_mutex_unlock(&guard);
-        assert(!status2);
-        return ret;
-#endif
-    }
-
-} // namespace
-
-#endif /* __LOCKFREE_CAS_H */
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/fifo.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/fifo.hpp
deleted file mode 100755
index d906bb8062555d935451d13d08a24aff58452a8a..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/fifo.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-//  $Id$
-//
-//  lock-free fifo queue from
-//  Michael, M. M. and Scott, M. L.,
-//  "simple, fast and practical non-blocking and blocking concurrent queue algorithms"
-//
-//  intrusive implementation for c++
-//
-//  Copyright (C) 2007 Tim Blechmann & 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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-#ifndef __LOCKFREE_FIFO_HPP
-#define __LOCKFREE_FIFO_HPP
-
-#include "cas.hpp"
-#include "atomic_ptr.hpp"
-#include "branch_hints.hpp"
-
-#ifdef HAVE_BOOST
-#   include <boost/type_traits.hpp>
-#   include <boost/static_assert.hpp>
-#else /* HAVE_BOOST */
-#   ifdef BOOST_STATIC_ASSERT
-#      undef BOOST_STATIC_ASSERT
-#   endif
-#   define BOOST_STATIC_ASSERT(x)
-#endif /* HAVE_BOOST */
-
-#include <memory>
-
-namespace lockfree
-{
-    struct intrusive_fifo_node;
-
-    typedef atomic_ptr<intrusive_fifo_node> intrusive_fifo_ptr_t;
-
-    struct intrusive_fifo_node
-    {
-        intrusive_fifo_ptr_t next;
-        struct fifo_node * data;
-    };
-
-    struct fifo_node
-    {
-        intrusive_fifo_node *volatile node;
-
-    protected:
-        fifo_node(void)
-        {
-            node = new intrusive_fifo_node();
-        }
-
-        ~fifo_node(void)
-        {
-            delete node;
-        }
-
-        template <class T> friend class intrusive_fifo;
-    };
-
-    template <typename T>
-    class intrusive_fifo
-    {
-        BOOST_STATIC_ASSERT((boost::is_base_of<fifo_node,T>::value));
-
-    public:
-        intrusive_fifo(void)
-        {
-            /* dummy pointer for head/tail */
-            intrusive_fifo_node * dummy = new intrusive_fifo_node();
-            dummy->next(NULL,0);
-            head_(dummy,0);
-            tail_(dummy,0);
-        }
-
-        ~intrusive_fifo(void)
-        {
-            /* client must have freed all members already */
-            assert (empty());
-            delete head_.getPtr();
-        }
-
-        bool empty() const
-        {
-            return head_.getPtr() == tail_.getPtr() || (!tail_.getPtr());
-        }
-
-        void enqueue(T * instance)
-        {
-            /* volatile */ intrusive_fifo_node * node = static_cast<fifo_node*>(instance)->node;
-            node->next.setPtr(NULL);
-            node->data = static_cast<fifo_node*>(instance);
-
-            for (;;)
-            {
-                intrusive_fifo_ptr_t tail(tail_);
-                memory_barrier();
-
-                intrusive_fifo_ptr_t next(tail.getPtr()->next);
-                memory_barrier();
-
-                if (likely(tail == tail_))
-                {
-                    if (next.getPtr() == 0)
-                    {
-                        if (tail.getPtr()->next.CAS(next,node))
-                        {
-                            tail_.CAS(tail,node);
-                            return;
-                        }
-                    }
-                    else
-                        tail_.CAS(tail,next);
-                }
-            }
-        }
-
-        T* dequeue (void)
-        {
-            T * ret;
-            for (;;)
-            {
-                intrusive_fifo_ptr_t head(head_);
-                memory_barrier();
-
-                intrusive_fifo_ptr_t tail(tail_);
-                /* volatile */ intrusive_fifo_node * next = head.getPtr()->next.getPtr();
-                memory_barrier();
-
-                if (likely(head == head_))
-                {
-                    if (head.getPtr() == tail.getPtr())
-                    {
-                        if (next == 0)
-                            return 0;
-                        tail_.CAS(tail,next);
-                    }
-                    else
-                    {
-                        ret = static_cast<T*>(next->data);
-                        if (head_.CAS(head,next))
-                        {
-                            ret->node = head.getPtr();
-                            return ret;
-                        }
-                    }
-                }
-            }
-        }
-
-    private:
-        intrusive_fifo_ptr_t head_,tail_;
-    };
-
-    template <typename T>
-    class fifo_value_node:
-        public fifo_node
-    {
-    public:
-        fifo_value_node(T const & v): value(v) {}
-
-        T value;
-    };
-
-    template <typename T, class Alloc = std::allocator<T> >
-    class fifo
-        : intrusive_fifo<fifo_value_node<T> >
-    {
-    public:
-        ~fifo()
-        {
-            fifo_value_node<T> * node;
-            while((node = intrusive_fifo<fifo_value_node<T> >::dequeue()) != NULL)
-                free(node);
-        }
-
-        void enqueue(T const & v)
-        {
-            intrusive_fifo<fifo_value_node<T> >::enqueue(alloc(v));
-        }
-
-        bool dequeue (T & v)
-        {
-            fifo_value_node<T> * node = intrusive_fifo<fifo_value_node<T> >::dequeue();
-            if(!node)
-                return false;
-
-            v = node->value;
-            free(node);
-            return true;
-        }
-
-    private:
-
-#if 0
-        inline fifo_value_node<T> *alloc(const T &k)
-        {
-            fifo_value_node<T> *node = allocator.allocate(1);
-            allocator.construct(node,k);
-            return node;
-        }
-
-        inline void free(fifo_value_node<T> *n)
-        {
-            assert(n);
-            allocator.destroy(n);
-            allocator.deallocate(n,1);
-        }
-#else
-        // hmmm... static keyword brings 10% speedup...
-
-        static inline fifo_value_node<T> *alloc(const T &k)
-        {
-            return new fifo_value_node<T>(k);
-        }
-
-        static inline void free(fifo_value_node<T> *n)
-        {
-            assert(n);
-            delete n;
-        }
-#endif
-
-        typename Alloc::template rebind<fifo_value_node<T> >::other allocator;
-    };
-}
-
-#endif /* __LOCKFREE_FIFO_HPP */
-
-
-
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/prefix.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/prefix.hpp
deleted file mode 100755
index 6dde2eaebc1f59f0053ee227c56897ae794f81c7..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/prefix.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//  $Id$
-//
-//  Copyright (C) 2007 Tim Blechmann & 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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-
-#ifndef __LOCKFREE_PREFIX_H
-#define __LOCKFREE_PREFIX_H
-
-#include <cassert>
-
-#ifdef USE_ATOMIC_OPS
-    #define AO_REQUIRE_CAS
-    #define AO_USE_PENTIUM4_INSTRS
-
-    extern "C" {
-        #include <atomic_ops.h>
-    }
-#endif
-
-#ifdef _WIN32
-    #include <windows.h>
-#endif
-
-#ifdef __APPLE__
-    #include <libkern/OSAtomic.h>
-#else
-    #if defined(__GLIBCPP__) || defined(__GLIBCXX__)
-        #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))
-            #include <ext/atomicity.h>
-        #else
-            #include <bits/atomicity.h>
-        #endif
-    #endif
-#endif
-
-#if defined(_MSC_VER)
-// \note: Must use /Oi option for VC++ to enable intrinsics
-    extern "C" {
-        void __cdecl _ReadWriteBarrier();
-        LONG __cdecl _InterlockedCompareExchange(LONG volatile* Dest,LONG Exchange, LONG Comp); 
-    }
-#endif
-
-#endif /* __LOCKFREE_PREFIX_H */
diff --git a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/stack.hpp b/externals/grill/trunk/flext/libbuild/include/flext/lockfree/stack.hpp
deleted file mode 100755
index c8781b828754588a55238166103778cbeb5878be..0000000000000000000000000000000000000000
--- a/externals/grill/trunk/flext/libbuild/include/flext/lockfree/stack.hpp
+++ /dev/null
@@ -1,157 +0,0 @@
-//  $Id$
-//
-//  lock-free stack
-//
-//  Copyright (C) 2007 Tim Blechmann & 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; see the file COPYING.  If not, write to
-//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-//  Boston, MA 02111-1307, USA.
-
-//  $Revision$
-//  $LastChangedRevision$
-//  $LastChangedDate$
-//  $LastChangedBy$
-
-#ifndef __LOCKFREE_STACK_HPP
-#define __LOCKFREE_STACK_HPP
-
-#include "cas.hpp"
-#include "atomic_ptr.hpp"
-#include "branch_hints.hpp"
-
-#include <memory>  // for std::allocator
-
-#if HAVE_BOOST
-#   include <boost/type_traits.hpp>
-#   include <boost/static_assert.hpp>
-#else
-#   define BOOST_STATIC_ASSERT(x)
-#endif
-
-namespace lockfree
-{
-    //! nodes for the intrusive_stack must be derived from that
-    class stack_node 
-    {
-        template <class T> friend class intrusive_stack;
-
-    public:
-        stack_node(): next(NULL) {}
-    
-    private:
-        atomic_ptr<stack_node> next;
-    };
-
-    //! intrusive lock-free stack implementation with T being the node type (inherited from stack_node)
-    template <typename T>
-    class intrusive_stack 
-    {
-        BOOST_STATIC_ASSERT((boost::is_base_of<stack_node,T>::value));
-
-    public:
-        intrusive_stack(): head(NULL) {}
-
-        ~intrusive_stack()
-        {
-            assert(empty());
-        }
-
-        bool empty() const { return !head.getPtr(); }
-
-        void push(T *node) 
-        {
-            assert(!node->next.getPtr());
-            while(unlikely(!head.CAS(node->next = head,node)));
-        }
-
-        T *pop() 
-        {
-            for(;;) {
-                atomic_ptr<stack_node> current(head);
-                T *node = static_cast<T *>(current.getPtr());
-                if(!node || likely(head.CAS(current,node->next.getPtr()))) {
-                    if(node) node->next.setPtr(NULL);
-                    return node;
-                }
-            }
-        }
-  
-    private:
-        atomic_ptr<stack_node> head;
-    };
-
-
-    //! node type used by non-intrusive stack
-    template <typename T>
-    class stack_value_node
-        : public stack_node
-    {
-    public:
-        stack_value_node(T const &v): value(v) {}   
-        T value;
-    };
-
-
-    //! non-intrusive lock-free stack
-    template <typename T,class Alloc = std::allocator<T> >
-    class stack
-        : intrusive_stack<stack_value_node<T> >
-    {
-    public:
-        ~stack()
-        {
-            // delete remaining elements
-            stack_value_node<T> * node;
-            while((node = intrusive_stack<stack_value_node<T> >::pop()) != NULL)
-                free(node);
-        }
-
-        void push(T const &v) 
-        {
-            intrusive_stack<stack_value_node<T> >::push(alloc(v));
-        }
-
-        bool pop(T &v) 
-        {
-            stack_value_node<T> *node = intrusive_stack<stack_value_node<T> >::pop();
-            if(!node)
-                return false;
-            v = node->value;
-            free(node);
-            return true;
-        }
-        
-    private:
-
-        inline stack_value_node<T> *alloc(const T &k)
-        {
-            stack_value_node<T> *node = allocator.allocate(1);
-            allocator.construct(node,k);
-            return node;
-        }
-
-        inline void free(stack_value_node<T> *n)
-        {
-            assert(n);
-            allocator.destroy(n);
-            allocator.deallocate(n,1);
-        }
-
-        typename Alloc::template rebind<stack_value_node<T> >::other allocator;
-    };
-
-} // namespace
-
-#endif
diff --git a/externals/grill/trunk/flext/pd-linux/debug-multi/libflext-pd_td.a.0.6.0 b/externals/grill/trunk/flext/pd-linux/debug-multi/libflext-pd_td.a.0.6.0
deleted file mode 100644
index 5fc73713fb5837ecc11909b8d5c67ec4d7e9766e..0000000000000000000000000000000000000000
Binary files a/externals/grill/trunk/flext/pd-linux/debug-multi/libflext-pd_td.a.0.6.0 and /dev/null differ
diff --git a/externals/grill/trunk/flext/pd-linux/debug-single/libflext-pd_sd.a.0.6.0 b/externals/grill/trunk/flext/pd-linux/debug-single/libflext-pd_sd.a.0.6.0
deleted file mode 100644
index a8173a024ae4857aacc56adead91efd5c2279eca..0000000000000000000000000000000000000000
Binary files a/externals/grill/trunk/flext/pd-linux/debug-single/libflext-pd_sd.a.0.6.0 and /dev/null differ
diff --git a/externals/grill/trunk/flext/pd-linux/release-multi/libflext-pd_t.a.0.6.0 b/externals/grill/trunk/flext/pd-linux/release-multi/libflext-pd_t.a.0.6.0
deleted file mode 100644
index 06f7f8162104994d4d1a848154009f4c78de9e1d..0000000000000000000000000000000000000000
Binary files a/externals/grill/trunk/flext/pd-linux/release-multi/libflext-pd_t.a.0.6.0 and /dev/null differ
diff --git a/externals/grill/trunk/flext/pd-linux/release-single/libflext-pd_s.a.0.6.0 b/externals/grill/trunk/flext/pd-linux/release-single/libflext-pd_s.a.0.6.0
deleted file mode 100644
index baf8f2ed2b74366935b29b317b577f872717ee43..0000000000000000000000000000000000000000
Binary files a/externals/grill/trunk/flext/pd-linux/release-single/libflext-pd_s.a.0.6.0 and /dev/null differ