diff options
Diffstat (limited to 'externals')
-rw-r--r-- | externals/grill/flext/changes.txt | 5 | ||||
-rw-r--r-- | externals/grill/flext/source/flatom_pr.cpp | 36 | ||||
-rw-r--r-- | externals/grill/flext/source/flattr_ed.cpp | 36 | ||||
-rw-r--r-- | externals/grill/flext/source/fldsp.cpp | 11 | ||||
-rw-r--r-- | externals/grill/flext/source/flsupport.h | 5 |
5 files changed, 51 insertions, 42 deletions
diff --git a/externals/grill/flext/changes.txt b/externals/grill/flext/changes.txt index 52f12ed8..066011b6 100644 --- a/externals/grill/flext/changes.txt +++ b/externals/grill/flext/changes.txt @@ -31,6 +31,7 @@ Version history: - enforcing usage of STL - explicit boolean attributes (great for attribute editor layout!) - added flext::NewLarge and flext::FreeLarge memory allocation functions which use the C-Library heap and should mainly be used in secondary threads +- flext_dsp reported wrong inlet/outlet count (CntInSig, CntOutSig functions) 0.4.4: - fixed deadly bug for Max/MSP method-to-symbol-binding proxies @@ -252,7 +253,7 @@ Notes: - no support for default object arguments (A_DEFFLOAT, A_DEFSYMBOL) -> use variable argument lists instead Platform specific: -- PD does not allow signal and message to go into the same inlet +- PD does not allow signal and message to go into the same inlet (except leftmost inlet) Restrictions in compatibility mode: - Max allows only 9 float/int inlets @@ -279,6 +280,8 @@ general: - add signal in/out connection query function bugs: +- attributes and attribute editor saving with patcher arguments (like $0-gugu ) + - PD: problems with timed buffer redrawing (takes a lot of cpu time) - hard thread termination upon object destruction doesn't seem to work properly -> crash - Max rounding bug ... buffer resize could be one sample less! diff --git a/externals/grill/flext/source/flatom_pr.cpp b/externals/grill/flext/source/flatom_pr.cpp index e700df8a..e90892e8 100644 --- a/externals/grill/flext/source/flatom_pr.cpp +++ b/externals/grill/flext/source/flatom_pr.cpp @@ -21,39 +21,49 @@ WARRANTIES, see the file, "license.txt," in this distribution. // \TODO take bufsz into account! bool flext::PrintAtom(const t_atom &a,char *buf,int bufsz) { + bool ok = true; if(IsFloat(a)) { - sprintf(buf,"%g",GetFloat(a)); + STD::sprintf(buf,"%g",GetFloat(a)); } else if(IsInt(a)) { - sprintf(buf,"%i",GetInt(a)); + STD::sprintf(buf,"%i",GetInt(a)); } else if(IsSymbol(a)) { - strcpy(buf,GetString(a)); + STD::strcpy(buf,GetString(a)); } else if(IsPointer(a)) { - sprintf(buf,"%p",GetPointer(a)); + STD::sprintf(buf,"%p",GetPointer(a)); + } + else if(a.a_type == A_DOLLAR) { + STD::sprintf(buf,"$%d",a.a_w.w_index); } - else + else if(a.a_type == A_DOLLSYM) { + STD::sprintf(buf,"$%s",GetString(a)); + } + else { ERRINTERNAL(); - return true; + ok = false; + } + return ok; } -bool flext::AtomList::Print(char *buffer,int buflen) const +bool flext::PrintList(int argc,const t_atom *argv,char *buf,int bufsz) { bool ok = true; - for(int i = 0; ok && i < Count(); ++i) { - if(i) { *(buffer++) = ' '; --buflen; } // prepend space - if(PrintAtom((*this)[i],buffer,buflen)) { - int len = strlen(buffer); - buffer += len,buflen -= len; + for(int i = 0; ok && i < argc && bufsz > 0; ++i) { + if(i) { *(buf++) = ' '; --bufsz; } // prepend space + + if(PrintAtom(argv[i],buf,bufsz)) { + int len = strlen(buf); + buf += len,bufsz -= len; } else ok = false; } + *buf = 0; return ok; } - bool flext::ScanAtom(t_atom &a,const char *buf) { // skip whitespace diff --git a/externals/grill/flext/source/flattr_ed.cpp b/externals/grill/flext/source/flattr_ed.cpp index a52de29f..2153a485 100644 --- a/externals/grill/flext/source/flattr_ed.cpp +++ b/externals/grill/flext/source/flattr_ed.cpp @@ -305,26 +305,6 @@ void flext_base::SetAttrEditor(t_classid c) ); } -static int PrintList(char *buf,int argc,const t_atom *argv) -{ - char *b = buf; - for(int j = 0; j < argc; ++j) { - const t_atom &at = argv[j]; - if(flext::IsString(at)) - STD::sprintf(b,"%s",flext::GetString(at)); - else if(flext::IsFloat(at)) - STD::sprintf(b,"%g",flext::GetFloat(at)); - else if(flext::IsInt(at)) - STD::sprintf(b,"%i",flext::GetInt(at)); - else - FLEXT_ASSERT(false); - b += strlen(b); - - if(j < argc-1) *(b++) = ' '; - } - return b-buf; -} - void flext_base::cb_GfxProperties(t_gobj *c, t_glist *) { flext_base *th = thisObject(c); @@ -337,7 +317,8 @@ void flext_base::cb_GfxProperties(t_gobj *c, t_glist *) int argc = binbuf_getnatom(x->te_binbuf); t_atom *argv = binbuf_getvec(x->te_binbuf); - b += PrintList(b,argc,argv); + + PrintList(argc,argv,b,sizeof(buf)+buf-b); b += strlen(b); STD::sprintf(b, " } { "); b += strlen(b); @@ -393,7 +374,7 @@ void flext_base::cb_GfxProperties(t_gobj *c, t_glist *) // Retrieve attribute value th->GetAttrib(gattr,lv); - b += PrintList(b,lv.Count(),lv.Atoms()); + PrintList(lv.Count(),lv.Atoms(),b,sizeof(buf)+buf-b); b += strlen(b); } else { strcpy(b,"{}"); b += strlen(b); @@ -405,7 +386,7 @@ void flext_base::cb_GfxProperties(t_gobj *c, t_glist *) // if there is initialization data take this, otherwise take the current data const AtomList &lp = initdata?*initdata:lv; - b += PrintList(b,lp.Count(),lp.Atoms()); + PrintList(lp.Count(),lp.Atoms(),b,sizeof(buf)+buf-b); b += strlen(b); } else { strcpy(b,"{}"); b += strlen(b); @@ -450,12 +431,21 @@ void flext_base::cb_GfxVis(t_gobj *c, t_glist *gl, int vis) static void BinbufAdd(t_binbuf *b,const t_atom &at) { + char tbuf[MAXPDSTRING]; if(flext::IsString(at)) binbuf_addv(b,"s",flext::GetSymbol(at)); else if(flext::IsFloat(at)) binbuf_addv(b,"f",flext::GetFloat(at)); else if(flext::IsInt(at)) binbuf_addv(b,"i",flext::GetInt(at)); + else if(at.a_type == A_DOLLAR) { + sprintf(tbuf, "$%d", at.a_w.w_index); + binbuf_addv(b,"s",flext::MakeSymbol(tbuf)); + } + else if(at.a_type == A_DOLLSYM) { + sprintf(tbuf, "$%s", at.a_w.w_symbol->s_name); + binbuf_addv(b,"s",flext::MakeSymbol(tbuf)); + } else FLEXT_ASSERT(false); } diff --git a/externals/grill/flext/source/fldsp.cpp b/externals/grill/flext/source/fldsp.cpp index 0161683c..c5d6ea22 100644 --- a/externals/grill/flext/source/fldsp.cpp +++ b/externals/grill/flext/source/fldsp.cpp @@ -141,7 +141,8 @@ void flext_dsp::cb_dsp(t_class *c,t_signal **sp) obj->srate = sp[0]->s_sr; obj->blksz = sp[0]->s_n; // is this guaranteed to be the same as sys_getblksize() ? #endif - + +/* #if FLEXT_SYS == FLEXT_SYS_PD obj->chnsin = sys_get_inchannels(); obj->chnsout = sys_get_outchannels(); @@ -152,13 +153,15 @@ void flext_dsp::cb_dsp(t_class *c,t_signal **sp) #else #error #endif - +*/ // store in and out signal vectors - int i,in = obj->CntInSig(),out = obj->CntOutSig(); + int i; + int in = obj->chnsin = obj->CntInSig(); + int out = obj->chnsout = obj->CntOutSig(); #if FLEXT_SYS == FLEXT_SYS_PD // min. 1 input channel! (CLASS_MAININLET in pd...) - if(!in) in = 1; + if(!in) { obj->chnsin = in = 1; } #endif if(obj->invecs) delete[] obj->invecs; diff --git a/externals/grill/flext/source/flsupport.h b/externals/grill/flext/source/flsupport.h index 99938676..bf37c355 100644 --- a/externals/grill/flext/source/flsupport.h +++ b/externals/grill/flext/source/flsupport.h @@ -224,6 +224,9 @@ public: //! 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,int bufsz); + //! Copy a memory region static void CopyMem(void *dst,const void *src,int bytes); //! Copy a sample array @@ -532,7 +535,7 @@ public: AtomList &Part(int offs,int len) { return (*this = GetPart(offs,len)); } //! Represent as a string - bool Print(char *buffer,int buflen) const; + bool Print(char *buffer,int buflen) const { return flext::PrintList(Count(),Atoms(),buffer,buflen); } protected: int cnt; |