Update of /cvsroot/pure-data/externals/grill/py/source In directory sc8-pr-cvs1:/tmp/cvs-serv16867/source
Modified Files: main.cpp main.h pyargs.cpp pyext.cpp pyext.h Log Message: ""
Index: main.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/py/source/main.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** main.cpp 6 Jan 2004 03:38:37 -0000 1.8 --- main.cpp 7 Jan 2004 03:38:25 -0000 1.9 *************** *** 129,133 ****
! void py::m__dir(PyObject *obj) { if(obj) { --- 129,133 ----
! void py::GetDir(PyObject *obj,AtomList &lst) { if(obj) { *************** *** 135,147 ****
PyObject *pvar = PyObject_Dir(obj); ! if(pvar == NULL) { PyErr_Print(); // no method found - } else { ! AtomList *lst = GetPyArgs(pvar); ! if(lst) { ! // dump dir to attribute outlet ! ToOutAnything(GetOutAttr(),thisTag(),lst->Count(),lst->Atoms()); ! delete lst; } else --- 135,144 ----
PyObject *pvar = PyObject_Dir(obj); ! if(!pvar) PyErr_Print(); // no method found else { ! AtomList *l = GetPyArgs(pvar); ! if(l) { ! lst = *l; delete l; } else *************** *** 152,155 **** --- 149,160 ---- PY_UNLOCK } + } + + void py::m__dir(PyObject *obj) + { + AtomList lst; + GetDir(obj,lst); + // dump dir to attribute outlet + ToOutAnything(GetOutAttr(),thisTag(),lst.Count(),lst.Atoms()); }
Index: main.h =================================================================== RCS file: /cvsroot/pure-data/externals/grill/py/source/main.h,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** main.h 6 Jan 2004 03:38:37 -0000 1.13 --- main.h 7 Jan 2004 03:38:25 -0000 1.14 *************** *** 70,73 **** --- 70,74 ----
V m_dir() { m__dir(module); } + V mg_dir(AtomList &lst) { m__dir(module); } V m_doc() { m__doc(dict); }
*************** *** 77,80 **** --- 78,83 ---- static const C *py_doc;
+ V GetDir(PyObject *obj,AtomList &lst); + V GetModulePath(const C *mod,C *dir,I len); V AddToPath(const C *dir); *************** *** 138,141 **** --- 141,145 ---- FLEXT_CALLBACK_V(m_stop) FLEXT_CALLBACK(m_dir) + FLEXT_ATTRGET_V(mg_dir) FLEXT_CALLBACK(m_doc) FLEXT_CALLBACK_T(tick)
Index: pyargs.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/py/source/pyargs.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** pyargs.cpp 6 Jan 2004 03:38:37 -0000 1.3 --- pyargs.cpp 7 Jan 2004 03:38:25 -0000 1.4 *************** *** 13,21 **** static PyObject *MakePyAtom(const t_atom &at) { ! if(flext::IsFloat(at)) return PyFloat_FromDouble((D)flext::GetFloat(at)); ! else if(flext::IsInt(at)) return PyInt_FromLong(flext::GetInt(at)); ! else if(flext::IsSymbol(at)) return PyString_FromString(flext::GetString(at)); // else if(flext::IsPointer(at)) return NULL; // not handled ! else return NULL; }
--- 13,29 ---- static PyObject *MakePyAtom(const t_atom &at) { ! if(flext::IsSymbol(at)) return PyString_FromString(flext::GetString(at)); // else if(flext::IsPointer(at)) return NULL; // not handled ! else if(flext::CanbeInt(at) && flext::CanbeFloat(at)) { ! // if a number can be an integer... let at be an integer! ! int ival = flext::GetAInt(at); ! double fval = flext::GetAFloat(at); ! return (double)ival == fval?PyInt_FromLong(ival):PyFloat_FromDouble(fval); ! } ! // these following should never happen ! else if(flext::IsFloat(at)) return PyFloat_FromDouble((D)flext::GetFloat(at)); ! else if(flext::IsInt(at)) return PyInt_FromLong(flext::GetInt(at)); ! ! return NULL; }
Index: pyext.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/py/source/pyext.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** pyext.cpp 6 Jan 2004 03:38:37 -0000 1.11 --- pyext.cpp 7 Jan 2004 03:38:25 -0000 1.12 *************** *** 13,17 ****
! FLEXT_LIB_V("pyext",pyext)
V pyext::Setup(t_classid c) --- 13,17 ----
! FLEXT_LIB_V("pyext pyx",pyext)
V pyext::Setup(t_classid c) *************** *** 23,26 **** --- 23,29 ---- FLEXT_CADDMETHOD_(c,0,"doc",m_doc); FLEXT_CADDMETHOD_(c,0,"doc+",m_doc_); + + FLEXT_CADDATTR_VAR(c,"args",args,ms_args); + FLEXT_CADDATTR_GET(c,"dir+",mg_dir_);
#ifdef FLEXT_THREADS
Index: pyext.h =================================================================== RCS file: /cvsroot/pure-data/externals/grill/py/source/pyext.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** pyext.h 21 Oct 2003 02:38:31 -0000 1.9 --- pyext.h 7 Jan 2004 03:38:25 -0000 1.10 *************** *** 49,53 **** --- 49,55 ---- V m_reload(); V m_reload_(I argc,const t_atom *argv); + V ms_args(const AtomList &a) { m_reload_(a.Count(),a.Atoms()); } V m_dir_() { m__dir(pyobj); } + V mg_dir_(AtomList &lst) { GetDir(pyobj,lst); } V m_doc_() { m__doc(pyobj); } virtual V m_help(); *************** *** 109,113 **** --- 111,120 ---- FLEXT_CALLBACK_V(m_reload_) FLEXT_CALLBACK(m_dir_) + FLEXT_CALLGET_V(mg_dir_) FLEXT_CALLBACK(m_doc_) + FLEXT_CALLGET_V(mg_doc_) + + FLEXT_ATTRGET_V(args) + FLEXT_CALLSET_V(ms_args)
FLEXT_CALLBACK_S(m_get)