Update of /cvsroot/pure-data/externals/grill/flext/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4211/source
Modified Files:
flattr.cpp flattr_ed.cpp flbase.h flclass.h fldsp.cpp fldsp.h
flext.cpp fllib.cpp flmeth.cpp flproxy.cpp flsupport.cpp
flsupport.h
Log Message:
bugfixes and optimizations, especially for DSP under Max/MSP
fixed and cleaned up library related stuff, especially co-existance of Max message and DSP library objects
eliminate jmax code
fixed dsp vector offset bug
better separation between build styles
- better handling of click callback
- more compatible handling of attributes in patcher (hiding is now an option - define FLEXT_ATTRHIDE)
Index: fldsp.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/fldsp.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** fldsp.h 7 Oct 2005 12:58:48 -0000 1.18
--- fldsp.h 11 Oct 2005 22:22:48 -0000 1.19
***************
*** 34,37 ****
--- 34,39 ----
FLEXT_HEADER_S(FLEXT_CLASSDEF(flext_dsp),flext_base,Setup)
+ friend class FLEXT_SHARE FLEXT_CLASSDEF(flext_base);
+
public:
***************
*** 149,156 ****
FLEXT_CLASSDEF(flext_dsp)();
- #if FLEXT_SYS == FLEXT_SYS_MAX
- virtual bool Init();
- #endif
-
virtual void Exit();
--- 151,154 ----
***************
*** 165,177 ****
static void Setup(t_classid c);
! // callback functions
! #if FLEXT_SYS == FLEXT_SYS_MAX
! static void cb_dsp(t_class *c,t_signal **s,short *count);
! #else
! static void cb_dsp(t_class *c,t_signal **s);
! static void cb_enable(t_class *c,t_float on);
bool dspon;
#endif
// dsp stuff
static t_int *dspmeth(t_int *w);
--- 163,175 ----
static void Setup(t_classid c);
! #if FLEXT_SYS == FLEXT_SYS_PD
! static void cb_enable(flext_hdr *c,t_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);
Index: flbase.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flbase.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** flbase.h 26 Sep 2005 13:59:34 -0000 1.34
--- flbase.h 11 Oct 2005 22:22:48 -0000 1.35
***************
*** 155,161 ****
//! Get class pointer from class id
! static t_class *getClass(t_classid);
bool HasAttributes() const;
//! @} FLEXT_OBJ_INFO
--- 155,172 ----
//! Get class pointer from class id
! static t_class *getClass(t_classid id);
!
! static bool IsDSP(t_classid id);
! static bool IsLib(t_classid id);
bool HasAttributes() const;
+ bool IsDSP() const;
+ bool IsLib() 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
***************
*** 242,249 ****
static void lib_init(const char *name,void setupfun(),bool attr);
static void obj_add(bool lib,bool dsp,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_JMAX
- static void obj_new(fts_object_t *o, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at);
- static void obj_free(fts_object_t *o, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at);
- #else
#if FLEXT_SYS == FLEXT_SYS_MAX
static flext_hdr *obj_new(const t_symbol *s,short argc,t_atom *argv);
--- 253,256 ----
***************
*** 252,256 ****
#endif
static void obj_free(flext_hdr *o);
- #endif
//! Convert $0 or #0 symbol into appropriate value
--- 259,262 ----
***************
*** 303,313 ****
typedef NEW_CLASS thisType; \
static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv); \
! static void __free__(flext_hdr *hdr) \
! { FLEXT_CLASSDEF(flext_obj) *mydata = hdr->data; delete mydata; \
! hdr->flext_hdr::~flext_hdr(); } \
! static void __setup__(t_classid classid) { \
! PARENT_CLASS::__setup__(classid); } \
! protected: \
! static inline NEW_CLASS *thisObject(void *c) { return FLEXT_CAST<NEW_CLASS *>(((flext_hdr *)c)->data); }
--- 309,317 ----
typedef NEW_CLASS thisType; \
static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv); \
! static void __free__(flext_hdr *hdr) { \
! FLEXT_CLASSDEF(flext_obj) *mydata = hdr->data; delete mydata; \
! hdr->flext_hdr::~flext_hdr(); \
! } \
! static void __setup__(t_classid classid) { PARENT_CLASS::__setup__(classid); }
***************
*** 316,327 ****
typedef NEW_CLASS thisType; \
static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv); \
! static void __free__(flext_hdr *hdr) \
! { FLEXT_CLASSDEF(flext_obj) *mydata = hdr->data; delete mydata; \
! hdr->flext_hdr::~flext_hdr(); } \
! static void __setup__(t_classid classid) \
! { PARENT_CLASS::__setup__(classid); \
! NEW_CLASS::SETUPFUN(classid); } \
! protected: \
! static inline NEW_CLASS *thisObject(void *c) { return FLEXT_CAST<NEW_CLASS *>(((flext_hdr *)c)->data); }
// generate name of dsp/non-dsp setup function
--- 320,332 ----
typedef NEW_CLASS thisType; \
static FLEXT_CLASSDEF(flext_obj) *__init__(int argc,t_atom *argv); \
! static void __free__(flext_hdr *hdr) { \
! FLEXT_CLASSDEF(flext_obj) *mydata = hdr->data; delete mydata; \
! hdr->flext_hdr::~flext_hdr(); \
! } \
! static void __setup__(t_classid classid) { \
! PARENT_CLASS::__setup__(classid); \
! NEW_CLASS::SETUPFUN(classid); \
! }
!
// generate name of dsp/non-dsp setup function
***************
*** 330,335 ****
#define FLEXT_STPF_1(NAME) NAME##_tilde_setup
#else
! #define FLEXT_STPF_0(NAME) NAME##_config
! #define FLEXT_STPF_1(NAME) signal_##NAME##_config
#endif
--- 335,339 ----
#define FLEXT_STPF_1(NAME) NAME##_tilde_setup
#else
! #error Platform not supported
#endif
***************
*** 338,377 ****
-
// --------------------------------------------------------------------------------------
!
! // these can be used in library setup functions
! // to register the individual objects in the library
!
! #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
! #define REAL_SETUP_0(cl) \
! extern void cl##_setup(); cl##_setup()
!
! #define REAL_SETUP_1(cl) \
! extern void cl##_tilde_setup(); cl##_tilde_setup()
! #else
! #define REAL_SETUP_0(cl) \
! extern void cl##_config(); cl##_config()
!
! #define REAL_SETUP_1(cl) \
! extern void signal_##cl##_config(); signal_##cl##_config()
! #endif
!
! #define REAL_SETUP(cl,DSP) REAL_SETUP_##DSP(cl)
// specify that to define the library itself
-
#if FLEXT_SYS == FLEXT_SYS_PD
#define REAL_LIB_SETUP(NAME,SETUPFUN) extern "C" FLEXT_EXT void NAME##_setup() { flext_obj::lib_init(#NAME,SETUPFUN,FLEXT_ATTRIBUTES); }
#elif FLEXT_SYS == FLEXT_SYS_MAX
#define REAL_LIB_SETUP(NAME,SETUPFUN) extern "C" FLEXT_EXT int main() { flext_obj::lib_init(#NAME,SETUPFUN,FLEXT_ATTRIBUTES); return 0; }
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- #define REAL_LIB_SETUP(NAME,SETUPFUN) \
- static void __##NAME##_initfun() { flext_obj::lib_init(#NAME,SETUPFUN,FLEXT_ATTRIBUTES); } \
- fts_module_t __##NAME##_module = {#NAME,#NAME,__##NAME##_initfun,0,0};
#else
! #error
#endif
--- 342,358 ----
// --------------------------------------------------------------------------------------
! // 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)();
// specify that to define the library itself
#if FLEXT_SYS == FLEXT_SYS_PD
#define REAL_LIB_SETUP(NAME,SETUPFUN) extern "C" FLEXT_EXT void NAME##_setup() { flext_obj::lib_init(#NAME,SETUPFUN,FLEXT_ATTRIBUTES); }
#elif FLEXT_SYS == FLEXT_SYS_MAX
#define REAL_LIB_SETUP(NAME,SETUPFUN) extern "C" FLEXT_EXT int main() { flext_obj::lib_init(#NAME,SETUPFUN,FLEXT_ATTRIBUTES); return 0; }
#else
! #error Platform not supported
#endif
***************
*** 384,388 ****
#define FLEXT_EXP(LIB) FLEXT_EXP_##LIB
! #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_JMAX
#define FLEXT_OBJ_SETUP_0(NEW_CLASS,DSP)
#elif FLEXT_SYS == FLEXT_SYS_MAX
--- 365,369 ----
#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
***************
*** 444,448 ****
#define FLEXTTYPE_bool0 FLEXTTPN_DEFFLOAT
#define CALLBTYPE_bool float
! #elif FLEXT_SYS == FLEXT_SYS_MAX || FLEXT_SYS == FLEXT_SYS_JMAX
#define FLEXTTYPE_int FLEXTTPN_INT
#define FLEXTTYPE_int0 FLEXTTPN_DEFINT
--- 425,429 ----
#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
***************
*** 452,456 ****
#define CALLBTYPE_bool int
#else
! #error
#endif
--- 433,437 ----
#define CALLBTYPE_bool int
#else
! #error Platform not supported
#endif
Index: flsupport.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsupport.h,v
retrieving revision 1.98
retrieving revision 1.99
diff -C2 -d -r1.98 -r1.99
*** flsupport.h 6 Oct 2005 19:53:34 -0000 1.98
--- flsupport.h 11 Oct 2005 22:22:48 -0000 1.99
***************
*** 1190,1193 ****
--- 1190,1198 ----
static unsigned long simdcaps;
+
+ static const t_symbol *sym_buffer;
+ static const t_symbol *sym_size;
+ static const t_symbol *sym_attributes;
+ static const t_symbol *sym_methods;
};
Index: flext.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flext.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** flext.cpp 26 Sep 2005 13:59:34 -0000 1.40
--- flext.cpp 11 Oct 2005 22:22:48 -0000 1.41
***************
*** 15,18 ****
--- 15,19 ----
#include "flext.h"
#include "flinternal.h"
+ #include "fldsp.h"
#include <string.h>
***************
*** 65,68 ****
--- 66,75 ----
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
***************
*** 80,83 ****
--- 87,95 ----
void 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
***************
*** 130,140 ****
! /*! Set up proxy classes and basic methods at class creation time
! This ensures that they are processed before the registered flext messages
! */
! void flext_base::Setup(t_classid id)
{
- t_class *c = getClass(id);
-
add_loadbang(c,cb_loadbang);
#if FLEXT_SYS == FLEXT_SYS_PD
--- 142,147 ----
! void flext_base::AddMessageMethods(t_class *c)
{
add_loadbang(c,cb_loadbang);
#if FLEXT_SYS == FLEXT_SYS_PD
***************
*** 147,150 ****
--- 154,186 ----
#endif
+ SetProxies(c);
+ StartQueue();
+ }
+
+ void flext_base::AddSignalMethods(t_class *c)
+ {
+ #if FLEXT_SYS == FLEXT_SYS_MAX
+ add_dsp(c,cb_dsp);
+ dsp_initclass();
+ #elif FLEXT_SYS == FLEXT_SYS_PD
+ 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
+ */
+ void flext_base::Setup(t_classid id)
+ {
+ t_class *c = getClass(id);
+
+ #if FLEXT_SYS == FLEXT_SYS_MAX
+ if(!IsLib(id))
+ #endif
+ AddMessageMethods(c);
+
if(process_attributes) {
AddMethod(id,0,"getattributes",cb_ListAttrib);
***************
*** 159,171 ****
SetGfx(id);
#endif
-
- SetProxies(c);
-
- StartQueue();
}
! #if FLEXT_SYS != FLEXT_SYS_JMAX
! void flext_base::cb_loadbang(t_class *c) { thisObject(c)->CbLoadbang(); }
! #endif
void flext_base::m_loadbang() {}
--- 195,201 ----
SetGfx(id);
#endif
}
! void flext_base::cb_loadbang(flext_hdr *c) { thisObject(c)->CbLoadbang(); }
void flext_base::m_loadbang() {}
***************
*** 175,179 ****
#if FLEXT_SYS == FLEXT_SYS_PD
! void flext_base::cb_click(t_gobj *c,t_floatarg xpos,t_floatarg ypos,t_floatarg shift,t_floatarg ctrl,t_floatarg alt)
{
if(shift) thisObject(c)->CbClick();
--- 205,209 ----
#if FLEXT_SYS == FLEXT_SYS_PD
! void flext_base::cb_click(flext_hdr *c,t_floatarg xpos,t_floatarg ypos,t_floatarg shift,t_floatarg ctrl,t_floatarg alt)
{
if(shift) thisObject(c)->CbClick();
***************
*** 182,191 ****
#if FLEXT_SYS == FLEXT_SYS_MAX
! void flext_base::cb_click(t_class *c, Point pt, short mods)
{
thisObject(c)->CbClick();
}
! void flext_base::cb_assist(t_class *c,void * /*b*/,long msg,long arg,char *s)
{
flext_base *th = thisObject(c);
--- 212,221 ----
#if FLEXT_SYS == FLEXT_SYS_MAX
! void flext_base::cb_click(flext_hdr *c, Point pt, short mods)
{
thisObject(c)->CbClick();
}
! void flext_base::cb_assist(flext_hdr *c,void * /*b*/,long msg,long arg,char *s)
{
flext_base *th = thisObject(c);
***************
*** 205,206 ****
--- 235,261 ----
}
#endif
+
+ #if FLEXT_SYS == FLEXT_SYS_MAX
+ void flext_base::cb_dsp(flext_hdr *c,t_signal **sp,short *count)
+ #else
+ void flext_base::cb_dsp(flext_hdr *c,t_signal **sp)
+ #endif
+ {
+ 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
+
+ obj->SetupDsp(sp);
+ }
+
Index: flproxy.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flproxy.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** flproxy.cpp 26 Sep 2005 13:59:34 -0000 1.11
--- flproxy.cpp 11 Oct 2005 22:22:48 -0000 1.12
***************
*** 28,32 ****
}
! void flext_base::cb_px_anything(t_class *c,const t_symbol *s,int argc,t_atom *argv)
{
thisObject(c)->CbMethodHandler(0,s,argc,argv);
--- 28,32 ----
}
! void flext_base::cb_px_anything(flext_hdr *c,const t_symbol *s,int argc,t_atom *argv)
{
thisObject(c)->CbMethodHandler(0,s,argc,argv);
***************
*** 34,38 ****
#define DEF_IN_FT(IX) \
! void flext_base::cb_px_ft ## IX(t_class *c,float v) { t_atom atom; SetFloat(atom,v); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
#define ADD_IN_FT(IX) \
--- 34,38 ----
#define DEF_IN_FT(IX) \
! void flext_base::cb_px_ft ## IX(flext_hdr *c,float v) { t_atom atom; SetFloat(atom,v); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
#define ADD_IN_FT(IX) \
***************
*** 41,45 ****
#elif FLEXT_SYS == FLEXT_SYS_MAX
! void flext_base::cb_px_anything(t_class *c,const t_symbol *s,short argc,t_atom *argv)
{
int ci = ((flext_hdr *)c)->curinlet;
--- 41,45 ----
#elif FLEXT_SYS == FLEXT_SYS_MAX
! void flext_base::cb_px_anything(flext_hdr *c,const t_symbol *s,short argc,t_atom *argv)
{
int ci = ((flext_hdr *)c)->curinlet;
***************
*** 47,51 ****
}
! void flext_base::cb_px_int(t_class *c,long v)
{
t_atom atom; SetInt(atom,v);
--- 47,51 ----
}
! void flext_base::cb_px_int(flext_hdr *c,long v)
{
t_atom atom; SetInt(atom,v);
***************
*** 54,58 ****
}
! void flext_base::cb_px_float(t_class *c,double v)
{
t_atom atom; SetFloat(atom,v);
--- 54,58 ----
}
! void flext_base::cb_px_float(flext_hdr *c,double v)
{
t_atom atom; SetFloat(atom,v);
***************
*** 61,65 ****
}
! void flext_base::cb_px_bang(t_class *c)
{
int ci = ((flext_hdr *)c)->curinlet;
--- 61,65 ----
}
! void flext_base::cb_px_bang(flext_hdr *c)
{
int ci = ((flext_hdr *)c)->curinlet;
***************
*** 69,74 ****
#define DEF_IN_FT(IX) \
! void flext_base::cb_px_in ## IX(t_class *c,long v) { t_atom atom; SetInt(atom,v); thisObject(c)->CbMethodHandler(IX,sym_int,1,&atom); } \
! void flext_base::cb_px_ft ## IX(t_class *c,double v) { t_atom atom; SetFloat(atom,v); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
#define ADD_IN_FT(IX) \
--- 69,74 ----
#define DEF_IN_FT(IX) \
! void flext_base::cb_px_in ## IX(flext_hdr *c,long v) { t_atom atom; SetInt(atom,v); thisObject(c)->CbMethodHandler(IX,sym_int,1,&atom); } \
! void flext_base::cb_px_ft ## IX(flext_hdr *c,double v) { t_atom atom; SetFloat(atom,v); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); }
#define ADD_IN_FT(IX) \
Index: fldsp.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/fldsp.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -d -r1.29 -r1.30
*** fldsp.cpp 26 Sep 2005 13:59:34 -0000 1.29
--- fldsp.cpp 11 Oct 2005 22:22:48 -0000 1.30
***************
*** 24,35 ****
#if FLEXT_SYS == FLEXT_SYS_MAX
! dsp_initclass();
! add_dsp(c,cb_dsp);
! #elif FLEXT_SYS == FLEXT_SYS_PD
! CLASS_MAINSIGNALIN(c,flext_hdr,defsig); // float messages going into the left inlet are converted to signal
! add_dsp(c,cb_dsp);
add_method1(c,cb_enable,"enable",A_FLOAT);
- #else
- #error Platform not supported!
#endif
}
--- 24,33 ----
#if FLEXT_SYS == FLEXT_SYS_MAX
! if(!IsLib(id))
! #endif
! AddSignalMethods(c);
!
! #if FLEXT_SYS == FLEXT_SYS_PD
add_method1(c,cb_enable,"enable",A_FLOAT);
#endif
}
***************
*** 43,66 ****
{}
- #if FLEXT_SYS == FLEXT_SYS_MAX
- bool flext_dsp::Init()
- {
- if(!flext_base::Init())
- return false;
-
- // 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
- dsp_setup(thisHdr(),CntInSig()); // signal inlets
- return true;
- }
- #endif
-
void flext_dsp::Exit()
{
- #if FLEXT_SYS == FLEXT_SYS_MAX
- // according to David Z. one should do that first...
- dsp_free(thisHdr());
- #endif
-
flext_base::Exit();
--- 41,46 ----
***************
*** 86,100 ****
}
! #if FLEXT_SYS == FLEXT_SYS_MAX
! void flext_dsp::cb_dsp(t_class *c,t_signal **sp,short *count)
! #else
! void flext_dsp::cb_dsp(t_class *c,t_signal **sp)
! #endif
{
- flext_dsp *obj = thisObject(c);
-
int i;
! int in = obj->CntInSig();
! int out = obj->CntOutSig();
#if FLEXT_SYS == FLEXT_SYS_PD
// min. 1 input channel! (CLASS_MAININLET in pd...)
--- 66,74 ----
}
! void 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...)
***************
*** 103,127 ****
// store current dsp parameters
! obj->srate = sp[0]->s_sr;
! obj->blksz = sp[0]->s_n; // is this guaranteed to be the same as sys_getblksize() ?
// store in and out signal vectors
! if((in+out) && !obj->vecs)
! obj->vecs = new t_signalvec[in+out];
for(i = 0; i < in; ++i)
! obj->vecs[i] = sp[i]->s_vec;
for(i = 0; i < out; ++i)
! obj->vecs[in+i] = sp[in+i]->s_vec;
// with the following call derived classes can do their eventual DSP setup
! if(obj->CbDsp()) {
// set the DSP function
! dsp_add((t_dspmethod)dspmeth,1,obj);
}
}
-
void flext_dsp::m_dsp(int /*n*/,t_signalvec const * /*insigs*/,t_signalvec const * /*outsigs*/) {}
--- 77,100 ----
// store current dsp parameters
! srate = sp[0]->s_sr;
! 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);
}
}
void flext_dsp::m_dsp(int /*n*/,t_signalvec const * /*insigs*/,t_signalvec const * /*outsigs*/) {}
***************
*** 147,150 ****
#if FLEXT_SYS == FLEXT_SYS_PD
! void flext_dsp::cb_enable(t_class *c,t_float on) { thisObject(c)->dspon = on != 0; }
#endif
--- 120,123 ----
#if FLEXT_SYS == FLEXT_SYS_PD
! void flext_dsp::cb_enable(flext_hdr *c,t_float on) { thisObject(c)->dspon = on != 0; }
#endif
Index: flattr.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flattr.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** flattr.cpp 23 May 2005 16:52:43 -0000 1.34
--- flattr.cpp 11 Oct 2005 22:22:48 -0000 1.35
***************
*** 195,200 ****
if(HasAttributes()) {
// defined in flsupport.cpp
- extern const t_symbol *sym_attributes;
-
AtomListStatic<32> la;
ListAttrib(la);
--- 195,198 ----
Index: fllib.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/fllib.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -C2 -d -r1.35 -r1.36
*** fllib.cpp 11 Oct 2005 10:09:23 -0000 1.35
--- fllib.cpp 11 Oct 2005 22:22:48 -0000 1.36
***************
*** 101,104 ****
--- 101,122 ----
}
+ // 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
***************
*** 115,119 ****
t_class *const &clss;
! bool lib,dsp,attr,dist;
int argc;
int *argv;
--- 133,138 ----
t_class *const &clss;
! flext_library *lib;
! bool dsp,attr,dist;
int argc;
int *argv;
***************
*** 144,172 ****
! // 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
! #if FLEXT_SYS == FLEXT_SYS_MAX
! static t_class *lib_class = NULL;
! static const t_symbol *lib_name = NULL;
! #endif
!
! t_class *flext_obj::getClass(t_classid id) { return reinterpret_cast<flext_class *>(id)->clss; }
bool flext_obj::HasAttributes() const { return clss->attr; }
void flext_obj::lib_init(const char *name,void setupfun(),bool attr)
{
flext::Setup();
- #if FLEXT_SYS == FLEXT_SYS_MAX
- lib_name = MakeSymbol(name);
- ::setup(
- (t_messlist **)&lib_class,
- (t_newmethod)obj_new,(t_method)obj_free,
- sizeof(flext_hdr),NULL,A_GIMME,A_NULL);
- #endif
process_attributes = attr;
try {
setupfun();
--- 163,190 ----
! t_class *flext_obj::getClass(t_classid cl) { return cl->clss; }
! bool flext_obj::IsDSP(t_classid cl) { return cl->dsp; }
! bool flext_obj::IsLib(t_classid cl) { return cl->lib != NULL; }
bool flext_obj::HasAttributes() const { return clss->attr; }
+ bool flext_obj::IsDSP() const { return clss->dsp; }
+ bool flext_obj::IsLib() const { return clss->lib != NULL; }
+ #if FLEXT_SYS == FLEXT_SYS_MAX
+ bool flext_obj::NeedDSP() const { return clss->dsp || (clss->lib && clss->lib->dsp); }
+ #endif
+
+ static flext_library *curlib = NULL;
void flext_obj::lib_init(const char *name,void setupfun(),bool attr)
{
+ // make new library instance
+ curlib = new flext_library(MakeSymbol(name));
+
flext::Setup();
process_attributes = attr;
+ // first register all classes
try {
setupfun();
***************
*** 174,193 ****
catch(std::exception &x) {
error("%s - %s",name,x.what());
}
catch(char *txt) {
error("%s - %s",name,txt);
}
catch(...) {
error("%s - Unknown exception at library setup",name);
}
! }
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! static void jmax_class_inst(t_class *cl)
! {
! fts_class_init(cl, sizeof(flext_hdr),flext_obj::obj_new,flext_obj::obj_free);
! }
#endif
void flext_obj::obj_add(bool lib,bool dsp,bool attr,const char *idname,const char *names,void setupfun(t_classid),flext_obj *(*newfun)(int,t_atom *),void (*freefun)(flext_hdr *),int argtp1,...)
{
--- 192,224 ----
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);
! if(curlib->dsp) flext_base::AddSignalMethods(curlib->clss);
#endif
+ curlib = NULL;
+ }
+
void flext_obj::obj_add(bool lib,bool dsp,bool attr,const char *idname,const char *names,void setupfun(t_classid),flext_obj *(*newfun)(int,t_atom *),void (*freefun)(flext_hdr *),int argtp1,...)
{
***************
*** 199,208 ****
#endif
! if(!lib) process_attributes = attr;
// set dynamic class pointer
t_class **cl =
#if FLEXT_SYS == FLEXT_SYS_MAX
! lib?&lib_class:
#endif
new t_class *;
--- 230,248 ----
#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 *;
***************
*** 223,239 ****
// just the address is stored, the initialization then occurs with the first object instance!
}
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- *cl = fts_class_install(nsym, jmax_class_inst);
#else
! #error
#endif
// make new dynamic object
flext_class *lo = new flext_class(*cl,newfun,freefun);
! lo->lib = lib;
lo->dsp = dsp;
lo->attr = process_attributes;
! // post("ADDCLASS %p -> LIBOBJ %p -> %p",*cl,lo,lo->clss);
// parse the argument type list and store it with the object
--- 263,277 ----
// 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_class *lo = new flext_class(*cl,newfun,freefun);
! lo->lib = curlib;
lo->dsp = dsp;
lo->attr = process_attributes;
! // 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
***************
*** 285,290 ****
// unless it is a library (then the name can be different)
::alias(const_cast<char *>(c));
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- if(ix > 0) fts_class_alias(lo->clss,lsym);
#else
#error
--- 323,326 ----
***************
*** 312,320 ****
typedef flext_obj *(*libfun)(int,t_atom *);
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- void flext_obj::obj_new(fts_object_t *o, int, fts_symbol_t s, int _argc_, const fts_atom_t *argv)
- {
- flext_hdr *obj = (flext_hdr *)o;
- #else
#if FLEXT_SYS == FLEXT_SYS_MAX
flext_hdr *flext_obj::obj_new(const t_symbol *s,short _argc_,t_atom *argv)
--- 348,351 ----
***************
*** 324,330 ****
{
flext_hdr *obj = NULL;
- #endif
flext_class *lo = FindName(s);
if(lo) {
bool ok = true;
t_atom args[NEWARGS];
--- 355,362 ----
{
flext_hdr *obj = NULL;
flext_class *lo = FindName(s);
if(lo) {
+ // post("NEWOBJ %s = %p -> %p",GetString(s),lo,lo->clss);
+
bool ok = true;
t_atom args[NEWARGS];
***************
*** 471,489 ****
#if FLEXT_SYS == FLEXT_SYS_MAX
// in Max/MSP an object with the name of the library exists, even if not explicitly declared!
! if(s != lib_name)
#endif
error("Class %s not found in library!",s->s_name);
#endif
- #if FLEXT_SYS != FLEXT_SYS_JMAX
return obj;
- #endif
}
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- void flext_obj::obj_free(fts_object_t *h, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at)
- #else
void flext_obj::obj_free(flext_hdr *h)
- #endif
{
flext_hdr *hdr = (flext_hdr *)h;
--- 503,515 ----
#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;
}
void flext_obj::obj_free(flext_hdr *h)
{
flext_hdr *hdr = (flext_hdr *)h;
***************
*** 517,521 ****
#if FLEXT_SYS == FLEXT_SYS_MAX
// in Max/MSP an object with the name of the library exists, even if not explicitely declared!
! if(name != lib_name)
#endif
error("Class %s not found in library!",name);
--- 543,547 ----
#if FLEXT_SYS == FLEXT_SYS_MAX
// in Max/MSP an object with the name of the library exists, even if not explicitely declared!
! // if(!lo->lib || s != lo->lib->name)
#endif
error("Class %s not found in library!",name);
Index: flmeth.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flmeth.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -d -r1.20 -r1.21
*** flmeth.cpp 19 Jul 2005 13:17:50 -0000 1.20
--- flmeth.cpp 11 Oct 2005 22:22:48 -0000 1.21
***************
*** 117,122 ****
if(c->HasAttributes() && (argc == 0 || (argc == 1 && CanbeInt(argv[0])))) {
// defined in flsupport.cpp
- extern const t_symbol *sym_methods;
-
int inlet = argc?GetAInt(argv[0]):0;
AtomListStatic<32> la;
--- 117,120 ----
Index: flattr_ed.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flattr_ed.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** flattr_ed.cpp 30 Jul 2005 21:59:31 -0000 1.40
--- flattr_ed.cpp 11 Oct 2005 22:22:48 -0000 1.41
***************
*** 479,483 ****
#if PD_MINOR_VERSION >= 37
! class_setsavefn(cl,cb_GfxSave);
#else
widgetbehavior.w_savefn = cb_GfxSave;
--- 479,483 ----
#if PD_MINOR_VERSION >= 37
! class_setsavefn(cl,(t_savefn)cb_GfxSave);
#else
widgetbehavior.w_savefn = cb_GfxSave;
***************
*** 490,494 ****
#if PD_MINOR_VERSION >= 37
! class_setpropertiesfn(cl,cb_GfxProperties);
#else
widgetbehavior.w_propertiesfn = cb_GfxProperties;
--- 490,494 ----
#if PD_MINOR_VERSION >= 37
! class_setpropertiesfn(cl,(t_propertiesfn)cb_GfxProperties);
#else
widgetbehavior.w_propertiesfn = cb_GfxProperties;
***************
*** 519,523 ****
}
! void flext_base::cb_GfxProperties(t_gobj *c, t_glist *)
{
flext_base *th = thisObject(c);
--- 519,523 ----
}
! void flext_base::cb_GfxProperties(flext_hdr *c, t_glist *)
{
flext_base *th = thisObject(c);
***************
*** 785,789 ****
//! Strip the attributes off the object command line
! void flext_base::cb_GfxVis(t_gobj *c, t_glist *gl, int vis)
{
if(!gl->gl_isgraph || gl->gl_havewindow) {
--- 785,789 ----
//! Strip the attributes off the object command line
! void flext_base::cb_GfxVis(flext_hdr *c, t_glist *gl, int vis)
{
if(!gl->gl_isgraph || gl->gl_havewindow) {
***************
*** 815,819 ****
}
! void flext_base::cb_GfxSelect(t_gobj *c,t_glist *gl,int state)
{
t_text *x = (t_text *)c;
--- 815,819 ----
}
! void flext_base::cb_GfxSelect(flext_hdr *c,t_glist *gl,int state)
{
t_text *x = (t_text *)c;
***************
*** 854,858 ****
}
! void flext_base::cb_GfxSave(t_gobj *c, t_binbuf *b)
{
flext_base *th = thisObject(c);
--- 854,858 ----
}
! void flext_base::cb_GfxSave(flext_hdr *c, t_binbuf *b)
{
flext_base *th = thisObject(c);
Index: flsupport.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsupport.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -C2 -d -r1.53 -r1.54
*** flsupport.cpp 1 May 2005 03:12:05 -0000 1.53
--- flsupport.cpp 11 Oct 2005 22:22:48 -0000 1.54
***************
*** 35,47 ****
const t_symbol *flext::sym_signal = NULL;
- #if FLEXT_SYS != FLEXT_SYS_JMAX
const t_symbol *flext::sym_anything = NULL;
! const t_symbol *sym_buffer = NULL;
! const t_symbol *sym_size = NULL;
! #endif
! const t_symbol *sym_attributes = NULL;
! const t_symbol *sym_methods = NULL;
--- 35,45 ----
const t_symbol *flext::sym_signal = NULL;
const t_symbol *flext::sym_anything = NULL;
! const t_symbol *flext::sym_buffer = NULL;
! const t_symbol *flext::sym_size = NULL;
! const t_symbol *flext::sym_attributes = NULL;
! const t_symbol *flext::sym_methods = NULL;
***************
*** 79,91 ****
sym_buffer = flext::MakeSymbol("buffer~");
sym_size = flext::MakeSymbol("size");
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- sym__ = fts_new_symbol("");; // is there a static symbol for that?
- sym_int = fts_s_int;
- sym_float = fts_s_float;
- sym_symbol = fts_s_symbol;
- sym_bang = fts_s_bang;
- sym_list = fts_s_list;
- sym_pointer = fts_s_pointer;
- #else
#endif
--- 77,80 ----
***************
*** 139,145 ****
SYSLOCK();
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! blk = (char *)::fts_malloc(bytes);
! #elif defined(FLEXT_USECMEM)
blk = (char *)::malloc(bytes);
#else
--- 128,132 ----
SYSLOCK();
! #if defined(FLEXT_USECMEM)
blk = (char *)::malloc(bytes);
#else
***************
*** 185,191 ****
SYSLOCK();
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! ::fts_free(ori);
! #elif defined(FLEXT_USECMEM)
::free(ori);
#else
--- 172,176 ----
SYSLOCK();
! #if defined(FLEXT_USECMEM)
::free(ori);
#else
***************
*** 227,233 ****
SYSLOCK();
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! blk = (char *)::fts_malloc(bytes);
! #elif defined(FLEXT_USECMEM)
blk = (char *)::malloc(bytes);
#else
--- 212,216 ----
SYSLOCK();
! #if defined(FLEXT_USECMEM)
blk = (char *)::malloc(bytes);
#else
***************
*** 263,269 ****
SYSLOCK();
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! ::fts_free(ori);
! #elif defined(FLEXT_USECMEM)
::free(ori);
#else
--- 246,250 ----
SYSLOCK();
! #if defined(FLEXT_USECMEM)
::free(ori);
#else
Index: flclass.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flclass.h,v
retrieving revision 1.64
retrieving revision 1.65
diff -C2 -d -r1.64 -r1.65
*** flclass.h 26 Sep 2005 13:59:34 -0000 1.64
--- flclass.h 11 Oct 2005 22:22:48 -0000 1.65
***************
*** 199,208 ****
static const t_symbol *thisTag() { return curtag; }
- #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
class outlet;
//! Get pointer to outlet (not in the constructor!)
outlet *GetOut(int ix) const { return outlets[ix]; }
! #endif
int GetOutAttr() const { return HasAttributes()?CntOut():0; }
--- 199,207 ----
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; }
***************
*** 350,357 ****
#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
- #elif FLEXT_SYS == FLEXT_SYS_MAX || FLEXT_SYS == FLEXT_SYS_JMAX
- void AddMethod(int inlet,bool (*m)(flext_base *,int &)) { AddMethod(ThMeths(),inlet,sym_int,(methfun)m,a_int,a_null); } // single float
#else
! #error
#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
--- 349,354 ----
#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
***************
*** 400,407 ****
#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
- #elif FLEXT_SYS == FLEXT_SYS_MAX || FLEXT_SYS == FLEXT_SYS_JMAX
- 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
#else
! #error
#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
--- 397,402 ----
#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
***************
*** 433,454 ****
*/
- #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
//! Bind object to a symbol
bool Bind(const t_symbol *sym);
//! Unbind object from a symbol
bool Unbind(const t_symbol *sym);
- #endif
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- //! Bind object to a symbol (as string)
- bool Bind(const char *sym); // ** TODO **
- //! Unbind object from a symbol (as string)
- bool Unbind(const char *sym); // ** TODO **
- #else
//! 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)); }
- #endif
/*! \brief Bind a method to a symbol
--- 428,440 ----
***************
*** 769,773 ****
// these outlet functions don't check for thread but send directly to the real-time system
- #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
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(); } }
--- 755,758 ----
***************
*** 776,792 ****
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 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(); } }
! #elif FLEXT_SYS == FLEXT_SYS_JMAX
! void ToSysBang(int n) const { fts_outlet_bang((fts_object *)thisHdr(),n); }
! void ToSysFloat(int n,float f) const { fts_outlet_float((fts_object *)thisHdr(),n,f); }
! void ToSysInt(int n,int f) const { fts_outlet_int((fts_object *)thisHdr(),n,f); }
! void ToSysSymbol(int n,const t_symbol *s) const { fts_outlet_symbol((fts_object *)thisHdr(),n,s); }
! void ToSysList(int n,int argc,const t_atom *argv) const { fts_outlet_send((fts_object *)thisHdr(),n,sym_list,argc,(t_atom *)argv); }
! void ToSysAnything(int n,const t_symbol *s,int argc,const t_atom *argv) const { fts_outlet_send((fts_object *)thisHdr(),n,const_cast<t_symbol *>(s),argc,(t_atom *)argv); }
! #else
! #error Not implemented
! #endif
void ToSysBool(int n,bool f) const { ToSysInt(n,f?1:0); }
void ToSysAtom(int n,const t_atom &at) const;
private:
class pxbnd_object;
--- 761,772 ----
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 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 ToSysBool(int n,bool f) const { ToSysInt(n,f?1:0); }
void ToSysAtom(int n,const t_atom &at) const;
+ // add class method handlers
+ static void AddMessageMethods(t_class *c);
+ static void AddSignalMethods(t_class *c);
+
private:
class pxbnd_object;
***************
*** 824,827 ****
--- 804,809 ----
private:
+ static inline flext_base *thisObject(flext_hdr *c) { return FLEXT_CAST<flext_base *>(c->data); }
+
static void Setup(t_classid c);
***************
*** 846,852 ****
unsigned char incnt,outcnt,insigs,outsigs;
- #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
outlet **outlets;
- #endif
union t_any {
--- 828,832 ----
***************
*** 919,929 ****
// attribute editor
static bool cb_AttrDialog(flext_base *c,int argc,const t_atom *argv);
! static void cb_GfxProperties(t_gobj *c, t_glist *);
#endif
#ifdef FLEXT_ATTRHIDE
! static void cb_GfxVis(t_gobj *c, t_glist *gl, int vis);
! static void cb_GfxSave(t_gobj *c, t_binbuf *b);
! static void cb_GfxSelect(t_gobj *x, struct _glist *glist, int state);
void BinbufArgs(t_binbuf *b,t_binbuf *args,bool withname,bool transdoll);
--- 899,909 ----
// 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);
***************
*** 944,993 ****
};
! static void cb_px_anything(t_class *c,const t_symbol *s,int argc,t_atom *argv);
! static void cb_px_ft1(t_class *c,float f);
! static void cb_px_ft2(t_class *c,float f);
! static void cb_px_ft3(t_class *c,float f);
! static void cb_px_ft4(t_class *c,float f);
! static void cb_px_ft5(t_class *c,float f);
! static void cb_px_ft6(t_class *c,float f);
! static void cb_px_ft7(t_class *c,float f);
! static void cb_px_ft8(t_class *c,float f);
! static void cb_px_ft9(t_class *c,float f);
#elif FLEXT_SYS == FLEXT_SYS_MAX
typedef object px_object;
! static void cb_px_float(t_class *c,double f);
! static void cb_px_int(t_class *c,long v);
! static void cb_px_bang(t_class *c);
! static void cb_px_in1(t_class *c,long v);
! static void cb_px_in2(t_class *c,long v);
! static void cb_px_in3(t_class *c,long v);
! static void cb_px_in4(t_class *c,long v);
! static void cb_px_in5(t_class *c,long v);
! static void cb_px_in6(t_class *c,long v);
! static void cb_px_in7(t_class *c,long v);
! static void cb_px_in8(t_class *c,long v);
! static void cb_px_in9(t_class *c,long v);
! static void cb_px_ft1(t_class *c,double f);
! static void cb_px_ft2(t_class *c,double f);
! static void cb_px_ft3(t_class *c,double f);
! static void cb_px_ft4(t_class *c,double f);
! static void cb_px_ft5(t_class *c,double f);
! static void cb_px_ft6(t_class *c,double f);
! static void cb_px_ft7(t_class *c,double f);
! static void cb_px_ft8(t_class *c,double f);
! static void cb_px_ft9(t_class *c,double f);
! static void cb_px_anything(t_class *c,const t_symbol *s,short argc,t_atom *argv);
#endif
- #if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
px_object **inlets;
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- static void jmax_proxy(fts_object_t *c, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at);
- #endif
// --------- symbol-bound proxy
--- 924,969 ----
};
! static void cb_px_anything(flext_hdr *c,const t_symbol *s,int argc,t_atom *argv);
! static void cb_px_ft1(flext_hdr *c,float f);
! static void cb_px_ft2(flext_hdr *c,float f);
! static void cb_px_ft3(flext_hdr *c,float f);
! static void cb_px_ft4(flext_hdr *c,float f);
! static void cb_px_ft5(flext_hdr *c,float f);
! static void cb_px_ft6(flext_hdr *c,float f);
! static void cb_px_ft7(flext_hdr *c,float f);
! static void cb_px_ft8(flext_hdr *c,float f);
! static void cb_px_ft9(flext_hdr *c,float f);
#elif FLEXT_SYS == FLEXT_SYS_MAX
typedef object px_object;
! static void cb_px_float(flext_hdr *c,double f);
! static void cb_px_int(flext_hdr *c,long v);
! static void cb_px_bang(flext_hdr *c);
! 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);
! static void cb_px_anything(flext_hdr *c,const t_symbol *s,short argc,t_atom *argv);
#endif
px_object **inlets;
// --------- symbol-bound proxy
***************
*** 1025,1039 ****
// callback functions
! static void cb_loadbang(t_class *c);
!
! #if FLEXT_SYS == FLEXT_SYS_PD
! static void cb_click(t_gobj *z,t_floatarg xpos,t_floatarg ypos,t_floatarg shift,t_floatarg ctrl,t_floatarg alt);
! #endif
#if FLEXT_SYS == FLEXT_SYS_MAX
char **indesc,**outdesc;
! static void cb_assist(t_class *c,void *b,long msg,long arg,char *s);
! static void cb_click (t_class *c, Point pt, short mods);
#endif
};
--- 1001,1017 ----
// 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
};