[PD-cvs] externals/grill/flext/source flbase.cpp, 1.25, 1.26 flbase.h, 1.33, 1.34 flclass.h, 1.63, 1.64 fldsp.cpp, 1.28, 1.29 fldsp.h, 1.16, 1.17 flext.cpp, 1.39, 1.40 flout.cpp, 1.22, 1.23 flproxy.cpp, 1.10, 1.11

Thomas Grill xovo at users.sourceforge.net
Mon Sep 26 15:59:36 CEST 2005


Update of /cvsroot/pure-data/externals/grill/flext/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13386/source

Modified Files:
	flbase.cpp flbase.h flclass.h fldsp.cpp fldsp.h flext.cpp 
	flout.cpp flproxy.cpp 
Log Message:
- better handling of click callback
bugfixes and optimizations, especially for DSP under Max/MSP
- more compatible handling of attributes in patcher (hiding is now an option - define FLEXT_ATTRHIDE)


Index: flout.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flout.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** flout.cpp	23 May 2005 16:52:45 -0000	1.22
--- flout.cpp	26 Sep 2005 13:59:34 -0000	1.23
***************
*** 192,213 ****
                          ok = false;
                          break;
!                     case xlet_float:
!                         inlets[ix] = NULL;
!                         if(ix >= 10) { 
!                             post("%s: Only 9 float inlets possible",thisName());
!                             ok = false;
!                         }
!                         else
!                             floatin(x_obj,ix);  
!                         break;
!                     case xlet_int:
!                         inlets[ix] = NULL;
!                         if(ix >= 10) { 
!                             post("%s: Only 9 int inlets possible",thisName());
!                             ok = false;
!                         }
!                         else
!                             intin(x_obj,ix);  
!                         break;
                      case xlet_any: // non-leftmost
                      case xlet_sym:
--- 192,214 ----
                          ok = false;
                          break;
!                     case xlet_float: {
! 						if(ix < 10) {
! 							inlets[ix] = NULL;
!                             floatin(x_obj,ix);
! 							break;
! 						}
! 						else
! 							goto makeproxy;
! 					}
!                     case xlet_int: {
! 						if(ix < 10) {
! 							inlets[ix] = NULL;
!                             intin(x_obj,ix);
! 							break;
! 						}
! 						else
! 							goto makeproxy;
! 					}
! 					makeproxy:
                      case xlet_any: // non-leftmost
                      case xlet_sym:
***************
*** 222,231 ****
              }
          }
! 
! //          incnt = cnt;
! 
!         if(insigs) 
!             dsp_setup(thisHdr(),insigs); // signal inlets   
!     }
  #else
  #error
--- 223,229 ----
              }
          }
!         
!         while(ix >= 0) inlets[ix--] = NULL;
! 	}
  #else
  #error

Index: flext.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flext.cpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -d -r1.39 -r1.40
*** flext.cpp	12 Sep 2005 10:27:40 -0000	1.39
--- flext.cpp	26 Sep 2005 13:59:34 -0000	1.40
***************
*** 49,53 ****
  }
  
! flext_base::~FLEXT_CLASSDEF(flext_base)()
  {
  #if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_NOATTREDIT)
--- 49,82 ----
  }
  
! /*! This virtual function is called after the object has been created, that is, 
!     after the constructor has been processed. 
!     It creates the inlets and outlets and the message and attribute lists.
!     \note You can override it in your own class, but be sure to call it, 
!     \note otherwise no inlets/outlets will be created
!     \note All inlet, outlets, method and attribute declarations must be made before a call to Init!
!     \remark Creation of inlets/outlets can't be done upon declaration, as Max/MSP needs creation
!     \remark in reverse.
! */
! bool flext_base::Init()
! {
!     bool ok = flext_obj::Init();
! 
!     if(ok) ok = InitInlets() && InitOutlets();
! 
!     if(ok) {
!         if(HasAttributes() && m_holdaargc && m_holdaargv) {
!             // initialize creation attributes
!             ok = InitAttrib(m_holdaargc,m_holdaargv);
!         }
!     }
! 
!     return ok;
! }
! 
! 
! /*! This virtual function is called before the destructor.
!     We do this because here we can still call virtual methods.
! */
! void flext_base::Exit()
  {
  #if FLEXT_SYS == FLEXT_SYS_PD && !defined(FLEXT_NOATTREDIT)
***************
*** 56,65 ****
  #endif
  
- #if FLEXT_SYS == FLEXT_SYS_MAX
-     // according to David Z. one should do that first...
-     if(insigs) dsp_free(thisHdr());
- //    if(insigs) dsp_freebox(thisHdr());
- #endif
- 
  #ifdef FLEXT_THREADS
      StopThreads();
--- 85,88 ----
***************
*** 102,132 ****
      }
  #endif
- }
  
! /*! This virtual function is called after the object has been created, that is, 
!     after the constructor has been processed. 
!     It creates the inlets and outlets and the message and attribute lists.
!     \note You can override it in your own class, but be sure to call it, 
!     \note otherwise no inlets/outlets will be created
!     \note All inlet, outlets, method and attribute declarations must be made before a call to Init!
!     \remark Creation of inlets/outlets can't be done upon declaration, as Max/MSP needs creation
!     \remark in reverse.
! */
! bool flext_base::Init()
! {
!     bool ok = flext_obj::Init();
! 
!     if(ok) ok = InitInlets() && InitOutlets();
! 
!     if(ok) {
!         if(HasAttributes() && m_holdaargc && m_holdaargv) {
!             // initialize creation attributes
!             ok = InitAttrib(m_holdaargc,m_holdaargv);
!         }
!     }
! 
!     return ok;
  }
  
  /*! Set up proxy classes and basic methods at class creation time
      This ensures that they are processed before the registered flext messages
--- 125,133 ----
      }
  #endif
  
!     flext_obj::Exit();
  }
  
+ 
  /*! Set up proxy classes and basic methods at class creation time
      This ensures that they are processed before the registered flext messages

Index: flproxy.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flproxy.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** flproxy.cpp	19 Jul 2005 13:17:50 -0000	1.10
--- flproxy.cpp	26 Sep 2005 13:59:34 -0000	1.11
***************
*** 43,47 ****
  void flext_base::cb_px_anything(t_class *c,const t_symbol *s,short argc,t_atom *argv)
  {
-     // check if inlet allows anything (or list)  
      int ci = ((flext_hdr *)c)->curinlet;
      thisObject(c)->CbMethodHandler(ci,s,argc,argv);
--- 43,46 ----
***************
*** 50,54 ****
  void flext_base::cb_px_int(t_class *c,long v)
  {
-     // check if inlet allows int type
      t_atom atom; SetInt(atom,v);  
      int ci = ((flext_hdr *)c)->curinlet;
--- 49,52 ----
***************
*** 58,62 ****
  void flext_base::cb_px_float(t_class *c,double v)
  {
-     // check if inlet allows float type
      t_atom atom; SetFloat(atom,v);  
      int ci = ((flext_hdr *)c)->curinlet;
--- 56,59 ----
***************
*** 66,70 ****
  void flext_base::cb_px_bang(t_class *c)
  {
-     // check if inlet allows bang
      int ci = ((flext_hdr *)c)->curinlet;
      thisObject(c)->CbMethodHandler(ci,sym_bang,0,NULL);
--- 63,66 ----
***************
*** 106,110 ****
      add_method1(c,cb_px_int,"int",A_INT);  
      add_method1(c,cb_px_float,"float",A_FLOAT);  
!     add_methodG(c,cb_px_anything,"list");  
      add_anything(c,cb_px_anything);
  #else
--- 102,106 ----
      add_method1(c,cb_px_int,"int",A_INT);  
      add_method1(c,cb_px_float,"float",A_FLOAT);  
! //    add_methodG(c,cb_px_anything,"list");  
      add_anything(c,cb_px_anything);
  #else
***************
*** 123,137 ****
      ADD_IN_FT(9);
  }
- 
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- void flext_base::jmax_proxy(fts_object_t *c, int winlet, fts_symbol_t s, int argc, const fts_atom_t *argv)
- {
-     thisObject(c)->CbMethodHandler(winlet,s,argc,argv);
- }
- 
- void flext_base::SetProxies(t_class *c) 
- {
-     fts_class_set_default_handler(c, jmax_proxy);
- }
- 
  #endif
--- 119,121 ----

Index: flbase.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flbase.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -C2 -d -r1.33 -r1.34
*** flbase.h	30 Jul 2005 12:21:41 -0000	1.33
--- flbase.h	26 Sep 2005 13:59:34 -0000	1.34
***************
*** 211,215 ****
  
      	//! Creation callback
! 		static void __setup__(t_classid) { flext::Setup(); }	
  
  		/*! \brief This is a temporary holder
--- 211,215 ----
  
      	//! Creation callback
! 		static void __setup__(t_classid);	
  
  		/*! \brief This is a temporary holder

Index: fldsp.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/fldsp.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** fldsp.h	12 Sep 2005 10:27:40 -0000	1.16
--- fldsp.h	26 Sep 2005 13:59:34 -0000	1.17
***************
*** 53,73 ****
      
  	//! returns array of input vectors (CntInSig() vectors)
!     t_sample *const *InSig() const { return invecs; }
  
  	//! returns input vector
!     t_sample *InSig(int i) const { return invecs[i]; }
  
  	//! returns array of output vectors (CntOutSig() vectors)
!     t_sample *const *OutSig() const { return outvecs; }
  
  	//! returns output vector
!     t_sample *OutSig(int i) const { return outvecs[i]; }
  
  	//! typedef describing a signal vector
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- 	typedef fts_symbol_t t_signalvec;
- #else
  	typedef t_sample *t_signalvec;
- #endif
  
  //!	@} 
--- 53,69 ----
      
  	//! returns array of input vectors (CntInSig() vectors)
!     t_sample *const *InSig() const { return vecs; }
  
  	//! returns input vector
!     t_sample *InSig(int i) const { return vecs[i]; }
  
  	//! returns array of output vectors (CntOutSig() vectors)
!     t_sample *const *OutSig() const { return vecs+CntInSig(); }
  
  	//! returns output vector
!     t_sample *OutSig(int i) const { return vecs[CntInSig()+i]; }
  
  	//! typedef describing a signal vector
  	typedef t_sample *t_signalvec;
  
  //!	@} 
***************
*** 146,150 ****
  	
  	FLEXT_CLASSDEF(flext_dsp)();
! 	virtual ~FLEXT_CLASSDEF(flext_dsp)();
  
  private:
--- 142,151 ----
  	
  	FLEXT_CLASSDEF(flext_dsp)();
! 
! #if FLEXT_SYS == FLEXT_SYS_MAX
!     virtual bool Init();
! #endif
! 
!     virtual void Exit();
  
  private:
***************
*** 153,157 ****
  	float srate; 
  	int blksz;
! 	int chnsin,chnsout;
  
  	// setup function
--- 154,158 ----
  	float srate; 
  	int blksz;
! 	t_signalvec *vecs;
  
  	// setup function
***************
*** 159,191 ****
  
  	// callback functions
! 
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! 	static void	cb_dsp(fts_object_t *o, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at);
! //	static void	cb_dsp_init(fts_object_t *o, int winlet, fts_symbol_t *s, int ac, const fts_atom_t *at);
! //	static void	cb_dsp_delete(fts_object_t *o, int winlet, fts_symbol_t *s, int ac, const fts_atom_t *at);
! #elif 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);
- #endif
- 
- #if FLEXT_SYS != FLEXT_SYS_MAX
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- 	static void cb_enable(fts_object_t *o, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at);
- #else
  	static void cb_enable(t_class *c,t_float on);
- #endif
  	bool dspon;
  #endif
  
  	// dsp stuff
- 
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- 	static void dspmeth(fts_word_t *);
- 	static const t_symbol *dspsym;
- #else
  	static t_int *dspmeth(t_int *w); 
- #endif
- 	t_signalvec *invecs,*outvecs;
  };
  
--- 160,173 ----
  
  	// 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); 
  };
  

Index: flbase.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flbase.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** flbase.cpp	12 Sep 2005 10:27:40 -0000	1.25
--- flbase.cpp	26 Sep 2005 13:59:34 -0000	1.26
***************
*** 53,56 ****
--- 53,60 ----
  void flext_obj::ProcessAttributes(bool attr) { process_attributes = attr; }
  
+ #if FLEXT_SYS == FLEXT_SYS_MAX
+ static const t_symbol *sym__shP = NULL;
+ #endif
+ 
  /////////////////////////////////////////////////////////
  // Constructor
***************
*** 65,69 ****
      m_canvas = canvas_getcurrent();
  #elif FLEXT_SYS == FLEXT_SYS_MAX
!     m_canvas = (t_patcher *)gensym("#P")->s_thing;
      x_obj->curinlet = 0;
  #endif
--- 69,73 ----
      m_canvas = canvas_getcurrent();
  #elif FLEXT_SYS == FLEXT_SYS_MAX
!     m_canvas = (t_patcher *)sym__shP->s_thing;
      x_obj->curinlet = 0;
  #endif
***************
*** 79,82 ****
--- 83,93 ----
  }
  
+ void flext_obj::__setup__(t_classid) 
+ { 
+ #if FLEXT_SYS == FLEXT_SYS_MAX
+     sym__shP = MakeSymbol("#P");
+ #endif
+     flext::Setup(); 
+ }	
  
  bool flext_obj::Init() { return true; }

Index: fldsp.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/fldsp.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -d -r1.28 -r1.29
*** fldsp.cpp	23 May 2005 16:52:44 -0000	1.28
--- fldsp.cpp	26 Sep 2005 13:59:34 -0000	1.29
***************
*** 19,26 ****
  // === flext_dsp ==============================================
  
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- const t_symbol *flext_dsp::dspsym = MakeSymbol("__flext_dspfun__");
- #endif
- 
  void flext_dsp::Setup(t_classid id)
  {
--- 19,22 ----
***************
*** 34,83 ****
      add_dsp(c,cb_dsp);
      add_method1(c,cb_enable,"enable",A_FLOAT);
! #elif FLEXT_SYS == FLEXT_SYS_JMAX
!     fts_dsp_declare_function(dspsym,dspmeth);   
!     fts_class_message_varargs(c, fts_s_put, cb_dsp);
!     fts_class_message_varargs(c, MakeSymbol("enable"), cb_enable);
  #endif
  }
  
! flext_dsp::FLEXT_CLASSDEF(flext_dsp)(): 
! #if FLEXT_SYS == FLEXT_SYS_JMAX
!     srate(fts_dsp_get_sample_rate()),  // should we set it?
!     blksz(fts_dsp_get_tick_size()),
! #else
!     srate(sys_getsr()),blksz(sys_getblksize()),
! #endif
!     chnsin(0),chnsout(0),
  #if FLEXT_SYS != FLEXT_SYS_MAX
!     dspon(true),
  #endif
!     invecs(NULL),outvecs(NULL)
  {
! #if FLEXT_SYS == FLEXT_SYS_JMAX
!     fts_dsp_object_init(thisHdr());
! #endif
! }
  
  
! flext_dsp::~FLEXT_CLASSDEF(flext_dsp)()
  {
- #if FLEXT_SYS == FLEXT_SYS_JMAX
-     fts_dsp_object_delete(thisHdr());
- #endif
- 
  #if FLEXT_SYS == FLEXT_SYS_MAX
!     // switch off dsp as the dsp function might get called afterwards (different thread)
!     thisHdr()->z_disabled = true;
  #endif
  
!     if(invecs) delete[] invecs;
!     if(outvecs) delete[] outvecs;
  }
  
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! void flext_dsp::dspmeth(fts_word_t *w) 
! { 
! }
! #else
  t_int *flext_dsp::dspmeth(t_int *w) 
  { 
--- 30,72 ----
      add_dsp(c,cb_dsp);
      add_method1(c,cb_enable,"enable",A_FLOAT);
! #else
! #error Platform not supported!
  #endif
  }
  
! flext_dsp::FLEXT_CLASSDEF(flext_dsp)()
!     : srate(sys_getsr()),blksz(sys_getblksize())
!     , vecs(NULL)
  #if FLEXT_SYS != FLEXT_SYS_MAX
!     , dspon(true)
  #endif
! {}
! 
! #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();
!     
!     if(vecs) delete[] vecs;
  }
  
! 
  t_int *flext_dsp::dspmeth(t_int *w) 
  { 
***************
*** 96,104 ****
      return w+2;
  }
- #endif
  
! #if FLEXT_SYS == FLEXT_SYS_JMAX
! void flext_dsp::cb_dsp(fts_object_t *c, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at)
! #elif FLEXT_SYS == FLEXT_SYS_MAX
  void flext_dsp::cb_dsp(t_class *c,t_signal **sp,short *count) 
  #else
--- 85,90 ----
      return w+2;
  }
  
! #if FLEXT_SYS == FLEXT_SYS_MAX
  void flext_dsp::cb_dsp(t_class *c,t_signal **sp,short *count) 
  #else
***************
*** 114,185 ****
      // min. 1 input channel! (CLASS_MAININLET in pd...)
      if(!in) in = 1;
- #else
-     if(in+out == 0) return;
  #endif
  
      // store current dsp parameters
- #if FLEXT_SYS == FLEXT_SYS_JMAX
-     fts_dsp_descr_t *dsp = (fts_dsp_descr_t *)fts_get_pointer(at+0);
-     obj->srate = fts_dsp_get_input_srate(dsp,0);
-     obj->blksz = fts_dsp_get_input_size(dsp,0);  // is this guaranteed to be the same as sys_getblksize() ?
- #else
      obj->srate = sp[0]->s_sr;
      obj->blksz = sp[0]->s_n;  // is this guaranteed to be the same as sys_getblksize() ?
- #endif
  
      // store in and out signal vectors
  
!     if(in != obj->chnsin) {
!         if(obj->invecs) delete[] obj->invecs;
!         obj->invecs = in?new t_signalvec[in]:NULL;
!         obj->chnsin = in;
!     }
!     for(i = 0; i < in; ++i) 
!         obj->invecs[i] = 
! #if FLEXT_SYS == FLEXT_SYS_JMAX
!             fts_dsp_get_input_name(dsp,i);
! #else
!             sp[i]->s_vec;
! #endif
  
!     if(out != obj->chnsout) {
!         if(obj->outvecs) delete[] obj->outvecs;
!         obj->outvecs = out?new t_signalvec[out]:NULL;
!         obj->chnsout = out;
!     }
      for(i = 0; i < out; ++i) 
!         obj->outvecs[i] = 
! #if FLEXT_SYS == FLEXT_SYS_JMAX
!             fts_dsp_get_output_name(dsp,i);
! #else
!             sp[in+i]->s_vec;
! #endif
  
      // with the following call derived classes can do their eventual DSP setup
      if(obj->CbDsp()) {
          // set the DSP function
- #if FLEXT_SYS == FLEXT_SYS_JMAX
-         fts_atom_t args;
-         fts_set_pointer(args,obj);
-         fts_dsp_add_function(dspsym,1,args);
- #else
          dsp_add((t_dspmethod)dspmeth,1,obj);  
- #endif
      }
  }
  
- /*
- #if FLEXT_SYS == FLEXT_SYS_JMAX
- void flext_dsp::cb_dsp_init(fts_object_t *c, int winlet, fts_symbol_t *s, int ac, const fts_atom_t *at)
- {
-     fts_dsp_add_object(c);
- }
- 
- void flext_dsp::cb_dsp_delete(fts_object_t *c, int winlet, fts_symbol_t *s, int ac, const fts_atom_t *at)
- {
-     fts_dsp_remove_object(c);
- }
- #endif
- */
  
  void flext_dsp::m_dsp(int /*n*/,t_signalvec const * /*insigs*/,t_signalvec const * /*outsigs*/) {}
--- 100,126 ----
      // min. 1 input channel! (CLASS_MAININLET in pd...)
      if(!in) in = 1;
  #endif
  
      // 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*/) {}
***************
*** 187,194 ****
  bool flext_dsp::CbDsp() 
  { 
!     m_dsp(Blocksize(),invecs,outvecs); 
      return true;
  }
  
  void flext_dsp::m_signal(int n,t_sample *const * /*insigs*/,t_sample *const *outs) 
  {
--- 128,137 ----
  bool flext_dsp::CbDsp() 
  { 
! 	// invoke legacy method
!     m_dsp(Blocksize(),InSig(),OutSig()); 
      return true;
  }
  
+ // this function will be overridden anyway - the probably useless default is clearing all outputs
  void flext_dsp::m_signal(int n,t_sample *const * /*insigs*/,t_sample *const *outs) 
  {
***************
*** 196,206 ****
  }
  
! void flext_dsp::CbSignal() { m_signal(Blocksize(),invecs,outvecs); }
  
  
  #if FLEXT_SYS == FLEXT_SYS_PD
  void flext_dsp::cb_enable(t_class *c,t_float on) { thisObject(c)->dspon = on != 0; }
- #elif FLEXT_SYS == FLEXT_SYS_JMAX
- void flext_dsp::cb_enable(fts_object_t *c, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at)
- { thisObject(c)->dspon = fts_get_int(at+0) != 0; }
  #endif
--- 139,150 ----
  }
  
! void flext_dsp::CbSignal() 
! { 
! 	// invoke legacy method
! 	m_signal(Blocksize(),InSig(),OutSig()); 
! }
  
  
  #if FLEXT_SYS == FLEXT_SYS_PD
  void flext_dsp::cb_enable(t_class *c,t_float on) { thisObject(c)->dspon = on != 0; }
  #endif

Index: flclass.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flclass.h,v
retrieving revision 1.63
retrieving revision 1.64
diff -C2 -d -r1.63 -r1.64
*** flclass.h	30 Jul 2005 21:59:31 -0000	1.63
--- flclass.h	26 Sep 2005 13:59:34 -0000	1.64
***************
*** 519,523 ****
  
  	FLEXT_CLASSDEF(flext_base)();
- 	virtual ~FLEXT_CLASSDEF(flext_base)();
  
  	/*! \brief Set up inlets and outlets, method and attribute lists
--- 519,522 ----
***************
*** 525,528 ****
--- 524,531 ----
  	virtual bool Init();
  	
+ 	/*! \brief Deallocate all kinds of stuff
+ 	*/
+ 	virtual void Exit();
+ 	
  
  	/*!	\defgroup FLEXT_C_ATTR Attribute handling methods (object scope)





More information about the Pd-cvs mailing list