From 1d296c40615533f41472fbc5d552f0f9ebd5c2b1 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Wed, 18 Jun 2003 02:41:05 +0000 Subject: "" svn path=/trunk/; revision=704 --- externals/grill/flext/changes.txt | 3 + externals/grill/flext/flext.vcproj | 20 +-- externals/grill/flext/source/flattr.cpp | 66 +++++++++- externals/grill/flext/source/flclass.h | 14 +- externals/grill/flext/source/flext.cpp | 6 +- externals/grill/flext/tutorial/bind1/main.cpp | 144 +++++++++------------ externals/grill/flext/tutorial/maxmsp/ex-adv1 | Bin 540 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-adv1.pat | Bin 0 -> 540 bytes externals/grill/flext/tutorial/maxmsp/ex-adv2 | Bin 726 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-adv2.pat | Bin 0 -> 726 bytes externals/grill/flext/tutorial/maxmsp/ex-adv3 | Bin 801 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-adv3.pat | Bin 0 -> 801 bytes externals/grill/flext/tutorial/maxmsp/ex-attr1 | Bin 1050 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-attr1.pat | Bin 0 -> 1050 bytes externals/grill/flext/tutorial/maxmsp/ex-attr2 | Bin 1389 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-attr2.pat | Bin 0 -> 1389 bytes externals/grill/flext/tutorial/maxmsp/ex-attr3 | Bin 1358 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-attr3.pat | Bin 0 -> 1358 bytes externals/grill/flext/tutorial/maxmsp/ex-lib1 | Bin 1440 -> 0 bytes externals/grill/flext/tutorial/maxmsp/ex-lib1.pat | Bin 0 -> 1440 bytes externals/grill/flext/tutorial/maxmsp/ex-signal1 | Bin 740 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-signal1.pat | Bin 0 -> 740 bytes externals/grill/flext/tutorial/maxmsp/ex-signal2 | Bin 708 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-signal2.pat | Bin 0 -> 708 bytes externals/grill/flext/tutorial/maxmsp/ex-simple1 | Bin 725 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-simple1.pat | Bin 0 -> 725 bytes externals/grill/flext/tutorial/maxmsp/ex-simple2 | Bin 668 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-simple2.pat | Bin 0 -> 668 bytes externals/grill/flext/tutorial/maxmsp/ex-simple3 | Bin 662 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-simple3.pat | Bin 0 -> 662 bytes externals/grill/flext/tutorial/maxmsp/ex-thread1 | Bin 1004 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-thread1.pat | Bin 0 -> 1004 bytes externals/grill/flext/tutorial/maxmsp/ex-thread2 | Bin 874 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-thread2.pat | Bin 0 -> 874 bytes externals/grill/flext/tutorial/maxmsp/ex-timer1 | Bin 1247 -> 0 bytes .../grill/flext/tutorial/maxmsp/ex-timer1.pat | Bin 0 -> 1247 bytes externals/grill/flext/tutorial/pd/ex-signal1.pd | 50 +++---- externals/grill/flext/tutorial/pd/ex-signal2.pd | 50 +++---- externals/grill/flext/tutorial/pd/ex-simple1.pd | 8 +- externals/grill/flext/tutorial/pd/ex-stk2.pd | 8 +- externals/grill/flext/tutorial/pd/ex-thread1.pd | 22 ++-- externals/grill/flext/tutorial/simple1/main.cpp | 59 ++++----- externals/grill/vasp/pd-ex/freeze1.pd | 6 +- externals/grill/vst/pd/vst~.pd | 55 ++++---- externals/grill/vst/src/main.cpp | 2 +- externals/grill/vst/vst.vcproj | 13 +- 46 files changed, 294 insertions(+), 232 deletions(-) delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-adv1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-adv1.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-adv2 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-adv2.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-adv3 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-adv3.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-attr1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-attr1.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-attr2 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-attr2.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-attr3 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-attr3.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-lib1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-lib1.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-signal1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-signal1.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-signal2 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-signal2.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-simple1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-simple1.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-simple2 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-simple2.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-simple3 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-simple3.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-thread1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-thread1.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-thread2 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-thread2.pat delete mode 100755 externals/grill/flext/tutorial/maxmsp/ex-timer1 create mode 100755 externals/grill/flext/tutorial/maxmsp/ex-timer1.pat diff --git a/externals/grill/flext/changes.txt b/externals/grill/flext/changes.txt index 181c50c1..312dab3a 100644 --- a/externals/grill/flext/changes.txt +++ b/externals/grill/flext/changes.txt @@ -18,6 +18,9 @@ Version history: - fixed wrong returned result of flext::buffer::set function - fix for linux static exported function name-clash (flext::Setup() single- vs. multi-threading) - made message queue stuff global (static) for all flext objects +- added flext_base::DumpAttrib to send an attribute value to the attribute outlet +- added "getmethods" message (for attribute-enabled externals) to list methods for a specified inlet (default = 0) +- "getattributes" or "getmethods" output lists are now alphabethically sorted 0.4.4: - fixed deadly bug for Max/MSP method-to-symbol-binding proxies diff --git a/externals/grill/flext/flext.vcproj b/externals/grill/flext/flext.vcproj index 30df0b1e..c613a78d 100644 --- a/externals/grill/flext/flext.vcproj +++ b/externals/grill/flext/flext.vcproj @@ -338,8 +338,8 @@ + ImportLibrary="./pd-msvc/flext_ld.lib"/> diff --git a/externals/grill/flext/source/flattr.cpp b/externals/grill/flext/source/flattr.cpp index 0cdc74c9..e22c15a8 100644 --- a/externals/grill/flext/source/flattr.cpp +++ b/externals/grill/flext/source/flattr.cpp @@ -14,6 +14,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "flext.h" #include +#include #ifdef __MWERKS__ #define STD std @@ -76,6 +77,13 @@ void flext_base::AddAttrib(t_classid c,const char *attr,metharg tp,methfun gfun, AddAttrib(ClAttrs(c),ClMeths(c),attr,tp,gfun,sfun); } + +//! Sorting function for pure symbol atom lists (used with qsort below) +static int sortcmp(const void *a, const void *b) +{ + return strcmp(flext::GetString(*(t_atom *)a),flext::GetString(*(t_atom *)b)); +} + int flext_base::ListAttr(AtomList &la) const { int cnt = attrhead?attrhead->Count():0; @@ -90,12 +98,43 @@ int flext_base::ListAttr(AtomList &la) const for(item *l = a->Item(ai); l; l = l->nxt) { attritem *aa = (attritem *)l; + + // only list once! if(!aa->BothExist() || aa->IsGet()) SetSymbol(la[ix++],aa->tag); } } } } + + qsort(la.Atoms(),ix,sizeof(t_atom),sortcmp); + return ix; +} + +int flext_base::ListMeth(AtomList &la,int inlet) const +{ + int cnt = methhead?methhead->Count():0; + int ccnt = clmethhead?clmethhead->Count():0; + la(ccnt+cnt); + + int ix = 0; + for(int i = 0; i <= 1; ++i) { + itemarr *a = i?methhead:clmethhead; + if(a) { + for(int ai = 0; ai < a->Size(); ++ai) { + for(item *l = a->Item(ai); l; l = l->nxt) + { + methitem *aa = (methitem *)l; + + // match inlet and see that it's not related to an attribute + if(aa->inlet == inlet && !aa->IsAttr()) + SetSymbol(la[ix++],aa->tag); + } + } + } + } + + qsort(la.Atoms(),ix,sizeof(t_atom),sortcmp); return ix; } @@ -122,7 +161,7 @@ bool flext_base::InitAttrib(int argc,const t_atom *argv) return true; } -bool flext_base::ListAttrib() +bool flext_base::ListAttrib() const { if(procattr) { AtomList la; @@ -134,6 +173,26 @@ bool flext_base::ListAttrib() return false; } +bool flext_base::ListMethods(int inlet) const +{ + if(procattr) { + AtomList la; + int c = ListMeth(la,inlet); + ToOutAnything(GetOutAttr(),MakeSymbol("methods"),c,la.Atoms()); + return true; + } + else + return false; +} + +bool flext_base::cb_ListMethods(flext_base *c,int argc,const t_atom *argv) +{ + if(argc == 0 || (argc == 1 && CanbeInt(argv[0]))) + return c->ListMethods(argc?GetAInt(argv[0]):0); + else + return false; +} + flext_base::attritem *flext_base::FindAttr(const t_symbol *tag,bool get) const { // first search within object scope @@ -249,3 +308,8 @@ bool flext_base::GetAttrib(attritem *a) return true; } +bool flext_base::DumpAttrib(const t_symbol *attr) const +{ + attritem *item = FindAttr(attr,true); + return item && const_cast(this)->GetAttrib(item); +} diff --git a/externals/grill/flext/source/flclass.h b/externals/grill/flext/source/flclass.h index c5559153..8b0e0dc7 100644 --- a/externals/grill/flext/source/flclass.h +++ b/externals/grill/flext/source/flclass.h @@ -310,8 +310,8 @@ public: a_null = 0, a_float,a_int, a_symbol,a_pointer, - a_list,a_any, - a_LIST,a_ANY + a_list,a_any, // (t_symbol *) / int / t_atom * + a_LIST,a_ANY // AtomList, AtomAnything }; typedef bool (*methfun)(flext_base *c); @@ -519,6 +519,11 @@ protected: //! @} 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)); } + /*! \addtogroup FLEXT_C_INOUT @{ */ @@ -717,15 +722,18 @@ private: attritem *FindAttr(const t_symbol *tag,bool get) const; int ListAttr(AtomList &a) const; + int ListMeth(AtomList &a,int inlet = 0) const; static int CheckAttrib(int argc,const t_atom *argv); bool InitAttrib(int argc,const t_atom *argv); - bool ListAttrib(); + bool ListMethods(int inlet = 0) const; + bool ListAttrib() const; bool GetAttrib(attritem *a); bool SetAttrib(const t_symbol *s,int argc,const t_atom *argv); bool SetAttrib(attritem *a,int argc,const t_atom *argv); + static bool cb_ListMethods(flext_base *c,int argc,const t_atom *argv); static bool cb_ListAttrib(flext_base *c) { return c->ListAttrib(); } // queue stuff diff --git a/externals/grill/flext/source/flext.cpp b/externals/grill/flext/source/flext.cpp index fc033b21..78f01ff5 100644 --- a/externals/grill/flext/source/flext.cpp +++ b/externals/grill/flext/source/flext.cpp @@ -154,8 +154,10 @@ void flext_base::Setup(t_classid id) #pragma message ("no implementation of loadbang or assist") #endif - if(process_attributes) - AddMethod(id,0,"getattributes",(methfun)cb_ListAttrib); + if(process_attributes) { + AddMethod(id,0,"getattributes",cb_ListAttrib); + AddMethod(id,0,"getmethods",cb_ListMethods); + } SetProxies(c); diff --git a/externals/grill/flext/tutorial/bind1/main.cpp b/externals/grill/flext/tutorial/bind1/main.cpp index 2532556a..debfa68a 100755 --- a/externals/grill/flext/tutorial/bind1/main.cpp +++ b/externals/grill/flext/tutorial/bind1/main.cpp @@ -31,11 +31,19 @@ class bind1: public: // constructor with no arguments - bind1(); + bind1() + { + // define inlets: + // first inlet must always be of type anything (or signal for dsp objects) + AddInAnything("message inlet"); // add one inlet for any message + AddInAnything("forwarding inlet"); // add one inlet for any message + + AddOutAnything("bound message"); // output received bound message + } /* - no constructor necessary here: - flext frees all eventually still bound symbols when the object is destroyed + no destructor necessary here: + flext frees all eventually remaining bound symbols when the object is destroyed (but NOT the data that can be passed via the FLEXT_BINDMETHOD call!) */ @@ -44,25 +52,69 @@ protected: buffer *buf; // bind object - void m_bind(const t_symbol *s); + void m_bind(const t_symbol *s) + { + if(!Bind(s)) { + post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); + } + } + // unbind object - void m_unbind(const t_symbol *s); + void m_unbind(const t_symbol *s) + { + if(!Unbind(s)) { + post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); + } + } + // bind method - void m_bindmethod(const t_symbol *s); + void m_bindmethod(const t_symbol *s) + { + if(!FLEXT_BINDMETHOD(s,m_bound,NULL)) { + post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); + } + } + // unbind method - void m_unbindmethod(const t_symbol *s); + void m_unbindmethod(const t_symbol *s) + { + if(!FLEXT_UNBINDMETHOD(s)) { + post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); + } + } // forward message - void m_forward(const t_symbol *s,int argc,const t_atom *argv); + void m_forward(const t_symbol *s,int argc,const t_atom *argv) + { + Forward(s,argc,argv); + } // method for symbol-bound messages - void m_bound(const t_symbol *sym,int argc,const t_atom *argv,void *data); + void m_bound(const t_symbol *sym,int argc,const t_atom *argv,void *data) + { + ToOutAnything(0,sym,argc,argv); + } // method for binding test - void m_test(float value); + void m_test(float value) + { + post("%s - TEST METHOD: value %f",thisName(),value); + } private: - static void setup(t_classid c); + static void setup(t_classid c) + { + // register methods + + FLEXT_CADDMETHOD_(c,0,"bind",m_bind); // register method "bind" for inlet 0 + FLEXT_CADDMETHOD_(c,0,"unbind",m_unbind); // register method "unbind" for inlet 0 + FLEXT_CADDMETHOD_(c,0,"bindmethod",m_bindmethod); // register method "bindmethod" for inlet 0 + FLEXT_CADDMETHOD_(c,0,"unbindmethod",m_unbindmethod); // register method "unbindmethod" for inlet 0 + + FLEXT_CADDMETHOD_(c,0,"test",m_test); // register method m_test for inlet 0 + + FLEXT_CADDMETHOD(c,1,m_forward); // register method m_forward for inlet 1 + } FLEXT_CALLBACK_S(m_bind) // wrapper for method m_bind (with symbol argument) FLEXT_CALLBACK_S(m_unbind) // wrapper for method m_unbind (with symbol argument) @@ -79,74 +131,4 @@ private: FLEXT_NEW("bind1",bind1) -void bind1::setup(t_classid c) -{ - // register methods - - FLEXT_CADDMETHOD_(c,0,"bind",m_bind); // register method "bind" for inlet 0 - FLEXT_CADDMETHOD_(c,0,"unbind",m_unbind); // register method "unbind" for inlet 0 - FLEXT_CADDMETHOD_(c,0,"bindmethod",m_bindmethod); // register method "bindmethod" for inlet 0 - FLEXT_CADDMETHOD_(c,0,"unbindmethod",m_unbindmethod); // register method "unbindmethod" for inlet 0 - - FLEXT_CADDMETHOD_(c,0,"test",m_test); // register method m_test for inlet 0 - - FLEXT_CADDMETHOD(c,1,m_forward); // register method m_forward for inlet 1 -} - - -bind1::bind1() -{ - // define inlets: - // first inlet must always be of type anything (or signal for dsp objects) - AddInAnything("message inlet"); // add one inlet for any message - AddInAnything("forwarding inlet"); // add one inlet for any message - - AddOutAnything("bound message"); // output received bound message -} - - -void bind1::m_bind(const t_symbol *s) -{ - if(!Bind(s)) { - post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); - } -} - -void bind1::m_unbind(const t_symbol *s) -{ - if(!Unbind(s)) { - post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); - } -} - -void bind1::m_bindmethod(const t_symbol *s) -{ - if(!FLEXT_BINDMETHOD(s,m_bound,NULL)) { - post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); - } -} - -void bind1::m_unbindmethod(const t_symbol *s) -{ - if(!FLEXT_UNBINDMETHOD(s)) { - post("%s (%s) - Binding failed",thisName(),GetString(thisTag())); - } -} - -void bind1::m_forward(const t_symbol *s,int argc,const t_atom *argv) -{ - Forward(s,argc,argv); -} - - -void bind1::m_bound(const t_symbol *sym,int argc,const t_atom *argv,void *data) -{ - ToOutAnything(0,sym,argc,argv); -} - -void bind1::m_test(float value) -{ - post("%s - TEST METHOD: value %f",thisName(),value); -} - diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv1 b/externals/grill/flext/tutorial/maxmsp/ex-adv1 deleted file mode 100755 index f086ab57..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-adv1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv1.pat b/externals/grill/flext/tutorial/maxmsp/ex-adv1.pat new file mode 100755 index 00000000..f086ab57 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-adv1.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv2 b/externals/grill/flext/tutorial/maxmsp/ex-adv2 deleted file mode 100755 index b6aa0065..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-adv2 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv2.pat b/externals/grill/flext/tutorial/maxmsp/ex-adv2.pat new file mode 100755 index 00000000..b6aa0065 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-adv2.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv3 b/externals/grill/flext/tutorial/maxmsp/ex-adv3 deleted file mode 100755 index 1f041257..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-adv3 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-adv3.pat b/externals/grill/flext/tutorial/maxmsp/ex-adv3.pat new file mode 100755 index 00000000..1f041257 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-adv3.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-attr1 b/externals/grill/flext/tutorial/maxmsp/ex-attr1 deleted file mode 100755 index 5dc46f10..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-attr1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-attr1.pat b/externals/grill/flext/tutorial/maxmsp/ex-attr1.pat new file mode 100755 index 00000000..5dc46f10 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-attr1.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-attr2 b/externals/grill/flext/tutorial/maxmsp/ex-attr2 deleted file mode 100755 index aab02c92..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-attr2 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-attr2.pat b/externals/grill/flext/tutorial/maxmsp/ex-attr2.pat new file mode 100755 index 00000000..aab02c92 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-attr2.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-attr3 b/externals/grill/flext/tutorial/maxmsp/ex-attr3 deleted file mode 100755 index 7ef7292f..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-attr3 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-attr3.pat b/externals/grill/flext/tutorial/maxmsp/ex-attr3.pat new file mode 100755 index 00000000..7ef7292f Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-attr3.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-lib1 b/externals/grill/flext/tutorial/maxmsp/ex-lib1 deleted file mode 100755 index 26f65f2b..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-lib1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-lib1.pat b/externals/grill/flext/tutorial/maxmsp/ex-lib1.pat new file mode 100755 index 00000000..26f65f2b Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-lib1.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-signal1 b/externals/grill/flext/tutorial/maxmsp/ex-signal1 deleted file mode 100755 index aa50e2e3..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-signal1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-signal1.pat b/externals/grill/flext/tutorial/maxmsp/ex-signal1.pat new file mode 100755 index 00000000..aa50e2e3 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-signal1.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-signal2 b/externals/grill/flext/tutorial/maxmsp/ex-signal2 deleted file mode 100755 index 21c12f88..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-signal2 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-signal2.pat b/externals/grill/flext/tutorial/maxmsp/ex-signal2.pat new file mode 100755 index 00000000..21c12f88 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-signal2.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple1 b/externals/grill/flext/tutorial/maxmsp/ex-simple1 deleted file mode 100755 index 133eefe9..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-simple1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple1.pat b/externals/grill/flext/tutorial/maxmsp/ex-simple1.pat new file mode 100755 index 00000000..133eefe9 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-simple1.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple2 b/externals/grill/flext/tutorial/maxmsp/ex-simple2 deleted file mode 100755 index acc74744..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-simple2 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple2.pat b/externals/grill/flext/tutorial/maxmsp/ex-simple2.pat new file mode 100755 index 00000000..acc74744 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-simple2.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple3 b/externals/grill/flext/tutorial/maxmsp/ex-simple3 deleted file mode 100755 index 7dda678c..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-simple3 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-simple3.pat b/externals/grill/flext/tutorial/maxmsp/ex-simple3.pat new file mode 100755 index 00000000..7dda678c Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-simple3.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-thread1 b/externals/grill/flext/tutorial/maxmsp/ex-thread1 deleted file mode 100755 index cd204b4a..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-thread1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-thread1.pat b/externals/grill/flext/tutorial/maxmsp/ex-thread1.pat new file mode 100755 index 00000000..cd204b4a Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-thread1.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-thread2 b/externals/grill/flext/tutorial/maxmsp/ex-thread2 deleted file mode 100755 index d68690c4..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-thread2 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-thread2.pat b/externals/grill/flext/tutorial/maxmsp/ex-thread2.pat new file mode 100755 index 00000000..d68690c4 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-thread2.pat differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-timer1 b/externals/grill/flext/tutorial/maxmsp/ex-timer1 deleted file mode 100755 index d3828986..00000000 Binary files a/externals/grill/flext/tutorial/maxmsp/ex-timer1 and /dev/null differ diff --git a/externals/grill/flext/tutorial/maxmsp/ex-timer1.pat b/externals/grill/flext/tutorial/maxmsp/ex-timer1.pat new file mode 100755 index 00000000..d3828986 Binary files /dev/null and b/externals/grill/flext/tutorial/maxmsp/ex-timer1.pat differ diff --git a/externals/grill/flext/tutorial/pd/ex-signal1.pd b/externals/grill/flext/tutorial/pd/ex-signal1.pd index 9187d586..b1c085d2 100644 --- a/externals/grill/flext/tutorial/pd/ex-signal1.pd +++ b/externals/grill/flext/tutorial/pd/ex-signal1.pd @@ -1,25 +1,25 @@ -#N canvas 335 232 575 335 12; -#X obj 137 137 hsl 128 15 0 1 0 0 empty empty empty 20 8 0 8 -261681 --1 -1 0 1; -#X obj 31 92 osc~ 440; -#X obj 34 279 dac~; -#X obj 126 92 osc~ 880; -#X obj 44 206 signal1~; -#X obj 16 8 cnv 15 550 40 empty empty signal1 10 22 0 24 -260818 -1 -0; -#X text 175 28 http://www.parasitaere-kapazitaeten.net; -#X text 276 151 control the mixing; -#X text 113 241 adjust the volume; -#X obj 44 240 *~ 0.5; -#X text 28 73 source 1; -#X text 128 72 source 2; -#X obj 135 159 nbx 5 16 0 1 0 0 empty empty empty 0 -6 0 12 -261681 --1 -1 0 256; -#X text 175 8 flext tutorial \, (C)2002 \, 2003 Thomas Grill; -#X connect 0 0 12 0; -#X connect 1 0 4 0; -#X connect 3 0 4 1; -#X connect 4 0 9 0; -#X connect 9 0 2 0; -#X connect 9 0 2 1; -#X connect 12 0 4 2; +#N canvas 335 232 584 289 12; +#X obj 253 92 hsl 128 15 0 1 0 0 empty empty empty 20 8 0 8 -261681 +-1 -1 5800 1; +#X obj 31 92 osc~ 440; +#X obj 90 246 dac~; +#X obj 126 92 osc~ 880; +#X obj 100 173 signal1~; +#X obj 16 8 cnv 15 550 40 empty empty signal1 10 22 0 24 -260818 -1 +0; +#X text 175 28 http://www.parasitaere-kapazitaeten.net; +#X text 345 109 control the mixing; +#X text 169 208 adjust the volume; +#X obj 100 207 *~ 0.5; +#X text 28 73 source 1; +#X text 128 72 source 2; +#X obj 251 114 nbx 5 16 0 1 0 0 empty empty empty 0 -6 0 12 -261681 +-1 -1 0.456693 256; +#X text 175 8 flext tutorial \, (C)2002 \, 2003 Thomas Grill; +#X connect 0 0 12 0; +#X connect 1 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 9 0; +#X connect 9 0 2 0; +#X connect 9 0 2 1; +#X connect 12 0 4 2; diff --git a/externals/grill/flext/tutorial/pd/ex-signal2.pd b/externals/grill/flext/tutorial/pd/ex-signal2.pd index c081c3b5..bdf834b3 100644 --- a/externals/grill/flext/tutorial/pd/ex-signal2.pd +++ b/externals/grill/flext/tutorial/pd/ex-signal2.pd @@ -1,25 +1,25 @@ -#N canvas 41 125 583 263 12; -#X obj 81 133 signal2~; -#X obj 76 88 bng 25 250 50 0 empty empty empty 0 -6 0 8 -261681 -1 --1; -#X text 108 94 bang to get audio system parameters; -#X text 233 212 channels in and out; -#X obj 16 8 cnv 15 550 40 empty empty signal2 10 22 0 24 -260818 -1 -0; -#X text 175 28 http://www.parasitaere-kapazitaeten.net; -#X obj 38 191 nbx 5 16 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 12 --228992 -1 -1 0 256; -#X obj 130 191 nbx 5 16 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 12 --228992 -1 -1 0 256; -#X obj 233 191 nbx 5 16 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 12 --228992 -1 -1 0 256; -#X obj 325 191 nbx 5 16 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 12 --228992 -1 -1 0 256; -#X text 12 211 samplerate; -#X text 128 211 blocksize; -#X text 173 10 flext tutorial \, (C)2002 \, 2003 Thomas Grill; -#X connect 0 0 6 0; -#X connect 0 1 7 0; -#X connect 0 2 8 0; -#X connect 0 3 9 0; -#X connect 1 0 0 0; +#N canvas 41 125 585 250 12; +#X obj 109 126 signal2~; +#X obj 104 81 bng 25 250 50 0 empty empty empty 0 -6 0 8 -261681 -1 +-1; +#X text 136 87 bang to get audio system parameters; +#X text 261 205 channels in and out; +#X obj 16 8 cnv 15 550 40 empty empty signal2 10 22 0 24 -260818 -1 +0; +#X text 175 28 http://www.parasitaere-kapazitaeten.net; +#X obj 66 184 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +12 -228992 -1 -1 0 256; +#X obj 158 184 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +12 -228992 -1 -1 0 256; +#X obj 261 184 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +12 -228992 -1 -1 0 256; +#X obj 353 184 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +12 -228992 -1 -1 0 256; +#X text 40 204 samplerate; +#X text 156 204 blocksize; +#X text 173 10 flext tutorial \, (C)2002 \, 2003 Thomas Grill; +#X connect 0 0 6 0; +#X connect 0 1 7 0; +#X connect 0 2 8 0; +#X connect 0 3 9 0; +#X connect 1 0 0 0; diff --git a/externals/grill/flext/tutorial/pd/ex-simple1.pd b/externals/grill/flext/tutorial/pd/ex-simple1.pd index 9c090fac..5020ea00 100644 --- a/externals/grill/flext/tutorial/pd/ex-simple1.pd +++ b/externals/grill/flext/tutorial/pd/ex-simple1.pd @@ -1,14 +1,14 @@ -#N canvas 85 178 588 251 12; +#N canvas 85 178 590 226 12; #X msg 29 92 help; -#X text 203 187 inverse; +#X text 203 169 inverse; #X text 169 96 input; -#X obj 113 141 simple1; +#X obj 113 131 simple1; #X obj 16 8 cnv 15 550 40 empty empty simple1 10 22 0 24 -260818 -1 0; #X text 167 30 http://www.parasitaere-kapazitaeten.net; #X obj 114 96 nbx 4 16 -999 999 0 0 empty empty empty 0 -6 0 12 -261681 -1 -1 0 256; -#X obj 112 190 nbx 7 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +#X obj 114 170 nbx 7 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 12 -228992 -1 -1 0 256; #X text 167 10 flext tutorial \, (C)2002 \, 2003 Thomas Grill; #X connect 0 0 3 0; diff --git a/externals/grill/flext/tutorial/pd/ex-stk2.pd b/externals/grill/flext/tutorial/pd/ex-stk2.pd index fff665b9..a06db3e2 100644 --- a/externals/grill/flext/tutorial/pd/ex-stk2.pd +++ b/externals/grill/flext/tutorial/pd/ex-stk2.pd @@ -1,11 +1,11 @@ -#N canvas 245 28 592 386 12; +#N canvas 245 28 594 364 12; #X obj 68 318 dac~; #X obj 15 8 cnv 15 550 40 empty empty stk2 10 22 0 24 -260818 -1 0 ; #X text 175 28 http://www.parasitaere-kapazitaeten.net; #X text 193 229 adjust the volume; #X obj 194 212 hsl 128 15 0.01 1 1 0 empty empty empty -2 -6 0 8 -261681 --1 -1 9000 1; +-1 -1 0 1; #X obj 68 263 *~ 0.3; #X text 175 8 flext tutorial \, (C)2002-2003 Thomas Grill; #X obj 68 215 stk2~; @@ -13,9 +13,9 @@ #X msg 183 139 shL \$1; #X msg 241 139 shR \$1; #X obj 267 77 hsl 128 15 0.5 2 1 0 empty empty empty -2 -6 0 8 -261681 --1 -1 5700 1; +-1 -1 0 1; #X obj 267 95 hsl 128 15 0.5 2 1 0 empty empty empty -2 -6 0 8 -261681 --1 -1 9300 1; +-1 -1 0 1; #X text 172 73 pitch left; #X text 172 93 pitch right; #X obj 68 78 osc~ 442; diff --git a/externals/grill/flext/tutorial/pd/ex-thread1.pd b/externals/grill/flext/tutorial/pd/ex-thread1.pd index ff2d9f38..db04938d 100644 --- a/externals/grill/flext/tutorial/pd/ex-thread1.pd +++ b/externals/grill/flext/tutorial/pd/ex-thread1.pd @@ -1,10 +1,10 @@ -#N canvas 105 266 708 351 12; +#N canvas 105 266 608 311 12; #X obj 39 91 bng 25 250 50 0 empty empty start 0 -6 0 8 -261681 -1 -1; -#X obj 130 246 thread1; -#X obj 228 248 thread1; -#X obj 324 246 thread1; -#X obj 422 247 thread1; +#X obj 130 231 thread1; +#X obj 228 233 thread1; +#X obj 324 231 thread1; +#X obj 422 232 thread1; #X obj 131 185 delay 200; #X obj 228 185 delay 200; #X obj 325 185 delay 200; @@ -15,16 +15,16 @@ second time); #X obj 16 8 cnv 15 550 40 empty empty thread1 10 22 0 24 -260818 -1 0; #X text 170 29 http://www.parasitaere-kapazitaeten.net; -#X obj 131 277 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +#X obj 131 262 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 12 -228992 -1 -1 0 256; -#X obj 229 278 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +#X obj 229 263 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 12 -228992 -1 -1 0 256; -#X obj 323 276 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +#X obj 323 261 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 12 -228992 -1 -1 0 256; -#X obj 423 276 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +#X obj 423 261 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 12 -228992 -1 -1 0 256; -#X obj 39 244 thread1; -#X obj 39 277 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +#X obj 39 229 thread1; +#X obj 39 262 nbx 5 16 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 12 -228992 -1 -1 0 256; #X text 170 11 flext tutorial \, (C)2002 \, 2003 Thomas Grill; #X connect 0 0 5 0; diff --git a/externals/grill/flext/tutorial/simple1/main.cpp b/externals/grill/flext/tutorial/simple1/main.cpp index 9f0f43e8..ed3c3ea3 100755 --- a/externals/grill/flext/tutorial/simple1/main.cpp +++ b/externals/grill/flext/tutorial/simple1/main.cpp @@ -32,10 +32,36 @@ class simple1: public: // constructor - simple1(); + simple1() + { + // define inlets: + // first inlet must always be of type anything (or signal for dsp objects) + AddInAnything(); // add one inlet for any message + + // define outlets: + AddOutFloat(); // add one float outlet (has index 0) + + // register methods + FLEXT_ADDMETHOD(0,m_float); // register method (for float messages) "m_float" for inlet 0 + } protected: - void m_float(float f); // method for float values + void m_float(float input) // method for float values + { + float result; + + if(input == 0) { + // special case 0 + post("%s - zero can't be inverted!",thisName()); + result = 0; + } + else + // normal case + result = 1/input; + + // output value to outlet + ToOutFloat(0,result); // (0 stands for the outlet index 0 - the leftmost outlet) + } private: FLEXT_CALLBACK_1(m_float,float) // callback for method "m_float" (with one float argument) @@ -45,32 +71,3 @@ private: FLEXT_NEW("simple1",simple1) -simple1::simple1() -{ - // define inlets: - // first inlet must always be of type anything (or signal for dsp objects) - AddInAnything(); // add one inlet for any message - - // define outlets: - AddOutFloat(); // add one float outlet (has index 0) - - // register methods - FLEXT_ADDMETHOD(0,m_float); // register method (for float messages) "m_float" for inlet 0 -} - -void simple1::m_float(float f) -{ - float res; - if(f == 0) { - // special case 0 - post("%s - zero can't be inverted!",thisName()); - res = 0; - } - else - // normal case - res = 1/f; - - // output value to outlet - ToOutFloat(0,res); // (0 stands for the outlet index 0 - the leftmost outlet) -} - diff --git a/externals/grill/vasp/pd-ex/freeze1.pd b/externals/grill/vasp/pd-ex/freeze1.pd index 119fcc17..7c2016c6 100644 --- a/externals/grill/vasp/pd-ex/freeze1.pd +++ b/externals/grill/vasp/pd-ex/freeze1.pd @@ -1,5 +1,5 @@ -#N canvas 4 72 956 500 12; -#N canvas 293 9 609 698 freeze 1; +#N canvas 4 72 958 502 12; +#N canvas 293 9 611 700 freeze 0; #X obj 27 137 vasp.split 2; #X obj 30 463 vasp.join 2; #X obj 27 74 vasp.cfft @detach 1; @@ -199,7 +199,7 @@ #X obj 107 115 nbx 12 18 0 1e+008 0 1 empty empty length(frames) 0 -8 0 12 -225271 -1 -1 1e+006 256; #X obj 85 368 nbx 9 14 -1e+037 1e+037 0 0 empty empty spectral_density(dB) -0 -6 0 10 -262131 -1 -1 -65.3592 256; +0 -6 0 10 -262131 -1 -1 0 256; #X obj 332 197 cnv 15 100 20 empty empty play_src 5 8 0 10 -261681 -66577 0; #X obj 447 197 cnv 15 100 20 empty empty read_src 5 8 0 10 -261681 diff --git a/externals/grill/vst/pd/vst~.pd b/externals/grill/vst/pd/vst~.pd index a956992d..6bbceff8 100644 --- a/externals/grill/vst/pd/vst~.pd +++ b/externals/grill/vst/pd/vst~.pd @@ -1,19 +1,19 @@ -#N canvas 108 26 872 654 12; -#X obj 26 207 dac~; -#X obj 26 107 noise~; +#N canvas 108 26 874 656 12; +#X obj 26 190 dac~; +#X obj 26 94 noise~; #X obj 444 172 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -225271 -1 -1 0 1; #X msg 441 189 param 2 \$1; -#X obj 133 204 print A; +#X obj 133 191 print A; #X obj 27 451 tgl 15 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0 1 ; #X msg 26 473 vis \$1; -#X obj 27 367 tgl 15 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0 1 +#X obj 27 367 tgl 15 0 empty empty empty 0 -6 0 8 -225271 -1 -1 1 1 ; #X msg 26 389 edit \$1; #X msg 94 389 getedit; #X msg 89 473 getvis; -#N canvas 367 122 544 451 info 0; +#N canvas 367 122 546 453 info 0; #X msg 94 130 getversion; #X msg 94 75 getname; #X msg 95 153 getvendor; @@ -52,7 +52,7 @@ #X connect 19 0 7 0; #X connect 21 0 7 0; #X restore 414 561 pd info; -#X obj 96 109 r \$0-vst; +#X obj 96 96 r \$0-vst; #X obj 25 416 s \$0-vst; #X obj 25 499 s \$0-vst; #X text 52 366 display edit window; @@ -70,11 +70,11 @@ #X obj 26 323 s \$0-vst; #X text 175 294 set/get plugin; #X text 480 561 further information; -#X obj 23 15 cnv 15 550 58 empty empty vst~ 10 32 0 24 -260818 -1 0 +#X obj 23 15 cnv 15 700 58 empty empty vst~ 10 32 0 24 -260818 -1 0 ; #X text 134 53 http://www.parasitaere-kapazitaeten.net; -#X text 140 182 attribute outlet; -#X text 143 153 inlets outlets [plugname]; +#X text 140 169 attribute outlet; +#X text 143 140 inlets outlets [plugname]; #N canvas 367 122 480 335 win 0; #X obj 14 187 s \$0-vst; #X msg 94 84 getx; @@ -118,17 +118,16 @@ #X msg 440 236 param gain 0; #X text 503 133 get parameter name; #X msg 550 236 getparam gain; -#X text 134 33 based on the work of mark@junklight.com; #X msg 545 283 getptext gain; -#X text 455 310 get value in textual representation; +#X text 451 300 get value in textual representation; #X msg 440 283 getptext 2; #X text 466 211 set/get parameter (0-based); #X text 469 496 set/get program (0-based); -#X text 487 251 NOT IMPLEMENTED; -#X text 544 270 NOT IMPLEMENTED; +#X text 487 254 NOT IMPLEMENTED; +#X text 484 315 NOT IMPLEMENTED; #X text 133 14 VST plugins for PD \, (C)2003 Thomas Grill; #X msg 28 296 plug \$1; -#X obj 28 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -225271 -1 +#X obj 27 240 bng 25 250 50 0 empty empty empty 0 -6 0 8 -225271 -1 -1; #X obj 27 271 openpanel; #N canvas 0 0 460 310 midi 0; @@ -157,8 +156,10 @@ #X text 93 582 midi messages for vst synths; #X msg 414 442 getprogcats; #X text 509 439 get number of program categories; -#X obj 26 153 vst~ 1 2 SIR; -#X connect 1 0 56 0; +#X obj 26 140 vst~ 1 2 SIR; +#X text 134 33 based on the work of Jarno Seppanen and Mark Williamson +; +#X connect 1 0 55 0; #X connect 2 0 3 0; #X connect 3 0 17 0; #X connect 5 0 6 0; @@ -167,7 +168,7 @@ #X connect 8 0 13 0; #X connect 9 0 13 0; #X connect 10 0 14 0; -#X connect 12 0 56 0; +#X connect 12 0 55 0; #X connect 19 0 18 0; #X connect 20 0 18 0; #X connect 21 0 17 0; @@ -177,12 +178,12 @@ #X connect 36 0 17 0; #X connect 37 0 17 0; #X connect 39 0 17 0; -#X connect 41 0 17 0; -#X connect 43 0 17 0; -#X connect 49 0 27 0; -#X connect 50 0 51 0; -#X connect 51 0 49 0; -#X connect 54 0 18 0; -#X connect 56 0 0 0; -#X connect 56 1 0 1; -#X connect 56 2 4 0; +#X connect 40 0 17 0; +#X connect 42 0 17 0; +#X connect 48 0 27 0; +#X connect 49 0 50 0; +#X connect 50 0 48 0; +#X connect 53 0 18 0; +#X connect 55 0 0 0; +#X connect 55 1 0 1; +#X connect 55 2 4 0; diff --git a/externals/grill/vst/src/main.cpp b/externals/grill/vst/src/main.cpp index 5cacb80a..9130b894 100644 --- a/externals/grill/vst/src/main.cpp +++ b/externals/grill/vst/src/main.cpp @@ -243,7 +243,7 @@ V vst::InitPlug() { FLEXT_ASSERT(plug); - vstfun = plug->replace()?plug->processReplacing:plug->process; + vstfun = plug->replace()?VSTPlugin::processReplacing:VSTPlugin::process; sigmatch = plug->getNumInputs() == CntInSig() && plug->getNumOutputs() == CntOutSig(); InitBuf(); diff --git a/externals/grill/vst/vst.vcproj b/externals/grill/vst/vst.vcproj index fd004748..210a6654 100644 --- a/externals/grill/vst/vst.vcproj +++ b/externals/grill/vst/vst.vcproj @@ -23,10 +23,13 @@ CharacterSet="2">