From 4651f8a117cd663ddd77355055b0580cce636da3 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Mon, 10 Jan 2005 05:00:56 +0000 Subject: closed multi-interpreter branch (no chance to have several interpreters in the same thread!) other thread-related cleanups py: added ability to choose function from message tag enabled int-tags for pyext class methods svn path=/trunk/; revision=2487 --- externals/grill/py/source/pyext.cpp | 56 +++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 21 deletions(-) (limited to 'externals/grill/py/source/pyext.cpp') diff --git a/externals/grill/py/source/pyext.cpp b/externals/grill/py/source/pyext.cpp index f0fc25ba..fed6c89e 100644 --- a/externals/grill/py/source/pyext.cpp +++ b/externals/grill/py/source/pyext.cpp @@ -99,20 +99,6 @@ void pyext::SetThis() } -#if FLEXT_SYS == FLEXT_SYS_MAX -static short patcher_myvol(t_patcher *x) -{ - t_box *w; - if (x->p_vol) - return x->p_vol; - else if (w = (t_box *)x->p_vnewobj) - return patcher_myvol(w->b_patcher); - else - return 0; -} -#endif - - PyObject *pyext::class_obj = NULL; PyObject *pyext::class_dict = NULL; @@ -509,14 +495,29 @@ bool pyext::work(int n,const t_symbol *s,int argc,const t_atom *argv) // should be enough... char str[256]; - { - // try tag/inlet + bool isfloat = s == sym_float && argc == 1; + + // if float equals an integer, try int_* method + if(isfloat && GetAFloat(argv[0]) == GetAInt(argv[0])) { + sprintf(str,"int_%i",n); + ret = call(str,0,NULL,1,argv); + } + + // try tag/inlet + if(!ret) { sprintf(str,"%s_%i",GetString(s),n); ret = call(str,0,NULL,argc,argv); } - if(!ret) { - // try anything/inlet + // try truncated int + if(!ret && isfloat) { + t_atom at; SetInt(at,GetAInt(argv[0])); + sprintf(str,"int_%i",n); + ret = call(str,0,NULL,1,&at); + } + + // try anything/inlet + if(!ret) { sprintf(str,"_anything_%i",n); if(s == sym_bang && !argc) { t_atom argv; @@ -526,12 +527,25 @@ bool pyext::work(int n,const t_symbol *s,int argc,const t_atom *argv) else ret = call(str,0,s,argc,argv); } - if(!ret) { - // try tag at any inlet + + // try int at any inlet + if(!ret && isfloat && GetAFloat(argv[0]) == GetAInt(argv[0])) { + ret = call("int_",0,NULL,1,argv); + } + + // try tag at any inlet + if(!ret) { sprintf(str,"%s_",GetString(s)); ret = call(str,n,NULL,argc,argv); } - if(!ret) { + + // try truncated int at any inlet + if(!ret && isfloat) { + t_atom at; SetInt(at,GetAInt(argv[0])); + ret = call("int_",0,NULL,1,&at); + } + + if(!ret) { // try anything at any inlet const char *str1 = "_anything_"; if(s == sym_bang && !argc) { -- cgit v1.2.1