[PD-cvs] externals/grill/py/source clmeth.cpp,1.4,1.5 main.cpp,1.5,1.6 main.h,1.7,1.8 py.cpp,1.6,1.7 pyext.cpp,1.8,1.9 pyext.h,1.8,1.9

xovo at users.sourceforge.net xovo at users.sourceforge.net
Tue Oct 21 04:38:34 CEST 2003


Update of /cvsroot/pure-data/externals/grill/py/source
In directory sc8-pr-cvs1:/tmp/cvs-serv24266/source

Modified Files:
	clmeth.cpp main.cpp main.h py.cpp pyext.cpp pyext.h 
Log Message:
 ""

Index: clmeth.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/clmeth.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** clmeth.cpp	20 Oct 2003 02:38:10 -0000	1.4
--- clmeth.cpp	21 Oct 2003 02:38:31 -0000	1.5
***************
*** 195,199 ****
  	else {
  		pyext *ext = GetThis(self);
! 		ext->m_detach(val != 0);
  	}
  
--- 195,199 ----
  	else {
  		pyext *ext = GetThis(self);
! 		ext->detach = val != 0;
  	}
  

Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/main.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** main.cpp	20 Oct 2003 02:38:10 -0000	1.5
--- main.cpp	21 Oct 2003 02:38:31 -0000	1.6
***************
*** 39,43 ****
  {
  	Lock();
- 	// under Max/MSP @ OS9: doesn't survive next line.....
  
  	if(!(pyref++)) {
--- 39,42 ----
***************
*** 122,139 ****
  
  
! V py::m_doc()
  {
! 	if(dict) {
! 		PyObject *docf = PyDict_GetItemString(dict,"__doc__"); // borrowed!!!
  		if(docf && PyString_Check(docf)) {
  			post("");
  			post(PyString_AsString(docf));
  		}
  	}
  }
  
  
- 
- 
  V py::SetArgs(I argc,const t_atom *argv)
  {
--- 121,165 ----
  
  
! void py::m__dir(PyObject *obj)
  {
!     if(obj) {
!         PY_LOCK
!     
!         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
!                 post("%s - %s: List could not be created",thisName(),GetString(thisTag()));
!             Py_DECREF(pvar);
!         }
! 
!         PY_UNLOCK
!     }
! }
! 
! V py::m__doc(PyObject *obj)
! {
!     if(obj) {
!         PY_LOCK
! 
! 		PyObject *docf = PyDict_GetItemString(obj,"__doc__"); // borrowed!!!
  		if(docf && PyString_Check(docf)) {
  			post("");
  			post(PyString_AsString(docf));
  		}
+ 
+         PY_UNLOCK
  	}
  }
  
  
  V py::SetArgs(I argc,const t_atom *argv)
  {
***************
*** 203,206 ****
--- 229,241 ----
  #elif FLEXT_SYS == FLEXT_SYS_MAX
  	// how do i get the path in Max/MSP?
+     short path;
+     long type;
+     char smod[256];
+     strcat(strcpy(smod,mod),".py");
+     if(!locatefile_extended(smod,&path,&type,&type,-1))
+         path_topathname(path,NULL,dir);
+     else 
+         // not found
+         *dir = 0;
  #else
  	*dir = 0;
***************
*** 226,229 ****
  	}
  }
- 
- 
--- 261,262 ----

Index: main.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/main.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** main.h	20 Oct 2003 02:38:10 -0000	1.7
--- main.h	21 Oct 2003 02:38:31 -0000	1.8
***************
*** 12,15 ****
--- 12,17 ----
  #define __MAIN_H
  
+ #define FLEXT_ATTRIBUTES 1
+ 
  #include <flext.h>
  #include <Python.h>
***************
*** 60,64 ****
  protected:
  
! 	V m_doc();
  
  	PyObject *module,*dict; // inherited user class module and associated dictionary
--- 62,70 ----
  protected:
  
!     V m__dir(PyObject *obj);
! 	V m__doc(PyObject *obj);
! 
!     V m_dir() { m__dir(module); }
!     V m_doc() { m__doc(dict); }
  
  	PyObject *module,*dict; // inherited user class module and associated dictionary
***************
*** 100,104 ****
  	// ----thread stuff ------------
  
- 	V m_detach(BL det) { detach = det; }
  	virtual V m_stop(int argc,const t_atom *argv);
  
--- 106,109 ----
***************
*** 126,131 ****
  	// callbacks
  
! 	FLEXT_CALLBACK_B(m_detach)
  	FLEXT_CALLBACK_V(m_stop)
  	FLEXT_CALLBACK(m_doc)
      FLEXT_CALLBACK_T(tick)
--- 131,137 ----
  	// callbacks
  
! 	FLEXT_ATTRVAR_B(detach)
  	FLEXT_CALLBACK_V(m_stop)
+ 	FLEXT_CALLBACK(m_dir)
  	FLEXT_CALLBACK(m_doc)
      FLEXT_CALLBACK_T(tick)

Index: py.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/py.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** py.cpp	20 Oct 2003 02:38:10 -0000	1.6
--- py.cpp	21 Oct 2003 02:38:31 -0000	1.7
***************
*** 30,34 ****
  	V m_reload_(I argc,const t_atom *argv);
  	V m_set(I argc,const t_atom *argv);
! 	V m_doc_();
  
  	virtual V m_help();
--- 30,35 ----
  	V m_reload_(I argc,const t_atom *argv);
  	V m_set(I argc,const t_atom *argv);
!     V m_dir_() { m__dir(function); }
!     V m_doc_() { m__doc(function); }
  
  	virtual V m_help();
***************
*** 57,60 ****
--- 58,62 ----
  	FLEXT_CALLBACK_V(m_reload_)
  	FLEXT_CALLBACK_V(m_set)
+ 	FLEXT_CALLBACK(m_dir_)
  	FLEXT_CALLBACK(m_doc_)
  
***************
*** 83,89 ****
  	FLEXT_CADDMETHOD_(c,0,"doc+",m_doc_);
  #ifdef FLEXT_THREADS
! 	FLEXT_CADDMETHOD_(c,0,"detach",m_detach);
  	FLEXT_CADDMETHOD_(c,0,"stop",m_stop);
  #endif
  
  	FLEXT_CADDMETHOD_(c,1,"float",m_py_float);
--- 85,93 ----
  	FLEXT_CADDMETHOD_(c,0,"doc+",m_doc_);
  #ifdef FLEXT_THREADS
! 	FLEXT_CADDATTR_VAR1(c,"detach",detach);
  	FLEXT_CADDMETHOD_(c,0,"stop",m_stop);
  #endif
+ 	FLEXT_CADDMETHOD_(c,0,"dir",m_dir);
+ 	FLEXT_CADDMETHOD_(c,0,"dir+",m_dir_);
  
  	FLEXT_CADDMETHOD_(c,1,"float",m_py_float);
***************
*** 202,228 ****
  }
  
- 
- V pyobj::m_doc_()
- {
- 	PY_LOCK
- 
- 	if(function) {
- 		PyObject *docf = PyObject_GetAttrString(function,"__doc__"); // borrowed!!!
- 		if(docf && PyString_Check(docf)) {
- 			post("");
- 			post(PyString_AsString(docf));
- 		}
- 	}
- 
- 	PY_UNLOCK
- }
- 
- 
  V pyobj::m_help()
  {
  	post("");
! 	post("py %s - python script object, (C)2002 Thomas Grill",PY__VERSION);
  #ifdef FLEXT_DEBUG
! 	post("compiled on " __DATE__ " " __TIME__);
  #endif
  
--- 206,215 ----
  }
  
  V pyobj::m_help()
  {
  	post("");
! 	post("py %s - python script object, (C)2002,2003 Thomas Grill",PY__VERSION);
  #ifdef FLEXT_DEBUG
! 	post("DEBUG VERSION, compiled on " __DATE__ " " __TIME__);
  #endif
  

Index: pyext.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/pyext.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** pyext.cpp	20 Oct 2003 02:38:10 -0000	1.8
--- pyext.cpp	21 Oct 2003 02:38:31 -0000	1.9
***************
*** 19,29 ****
  	FLEXT_CADDMETHOD_(c,0,"reload.",m_reload);
  	FLEXT_CADDMETHOD_(c,0,"reload",m_reload_);
  	FLEXT_CADDMETHOD_(c,0,"doc",m_doc);
  	FLEXT_CADDMETHOD_(c,0,"doc+",m_doc_);
  
  #ifdef FLEXT_THREADS
! 	FLEXT_CADDMETHOD_(c,0,"detach",m_detach);
  	FLEXT_CADDMETHOD_(c,0,"stop",m_stop);
  #endif
  }
  
--- 19,34 ----
  	FLEXT_CADDMETHOD_(c,0,"reload.",m_reload);
  	FLEXT_CADDMETHOD_(c,0,"reload",m_reload_);
+ 	FLEXT_CADDMETHOD_(c,0,"dir",m_dir);
+ 	FLEXT_CADDMETHOD_(c,0,"dir+",m_dir_);
  	FLEXT_CADDMETHOD_(c,0,"doc",m_doc);
  	FLEXT_CADDMETHOD_(c,0,"doc+",m_doc_);
  
  #ifdef FLEXT_THREADS
! 	FLEXT_CADDATTR_VAR1(c,"detach",detach);
  	FLEXT_CADDMETHOD_(c,0,"stop",m_stop);
  #endif
+ 
+ 	FLEXT_CADDMETHOD_(c,0,"get",m_get);
+ 	FLEXT_CADDMETHOD_(c,0,"set",m_set);
  }
  
***************
*** 38,41 ****
--- 43,60 ----
  
  
+ #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
+ 
+ 
  I pyext::pyextref = 0;
  PyObject *pyext::class_obj = NULL;
***************
*** 90,103 ****
  	// init script module
  	if(argc >= 1) {
! 		C dir[1024];
  #if FLEXT_SYS == FLEXT_SYS_PD
  		// add dir of current patch to path
! 		strcpy(dir,GetString(canvas_getdir(thisCanvas())));
! 		AddToPath(dir);
  		// add current dir to path
! 		strcpy(dir,GetString(canvas_getcurrentdir()));
! 		AddToPath(dir);
! #else
! #pragma message("Adding current dir to path is not implemented")
  #endif
  
--- 109,125 ----
  	// init script module
  	if(argc >= 1) {
! 		char dir[1024];
! 
  #if FLEXT_SYS == FLEXT_SYS_PD
  		// add dir of current patch to path
! 		AddToPath(GetString(canvas_getdir(thisCanvas())));
  		// add current dir to path
! 		AddToPath(GetString(canvas_getcurrentdir()));
! #elif FLEXT_SYS == FLEXT_SYS_MAX 
!         short path = patcher_myvol(thisCanvas());
!         path_topathname(path,NULL,dir); 
! 		AddToPath(dir);       
! #else 
!         #pragma message("Adding current dir to path is not implemented")
  #endif
  
***************
*** 275,294 ****
  }
  
! V pyext::m_doc_()
  {
! 	if(pyobj) {
! 		PY_LOCK
! 
! 		PyObject *docf = PyObject_GetAttrString(pyobj,"__doc__"); // borrowed!!!
! 		if(docf && PyString_Check(docf)) {
! 			post("");
! 			post(PyString_AsString(docf));
! 		}
  
! 		PY_UNLOCK
  	}
  }
  
  
  
  
--- 297,355 ----
  }
  
! void pyext::m_get(const t_symbol *s)
  {
!     PY_LOCK
  
! 	PyObject *pvar  = PyObject_GetAttrString(pyobj,const_cast<char *>(GetString(s))); /* fetch bound method */
! 	if(pvar == NULL) {
! 		PyErr_Clear(); // no method found
!         post("%s - get: Python variable %s not found",thisName(),GetString(s));
  	}
+ 	else {
+         AtomList *lst = GetPyArgs(pvar);
+         if(lst) {
+             // dump value to attribute outlet
+             AtomAnything out("get",lst->Count()+1);
+             SetSymbol(out[0],s);
+             out.Set(lst->Count(),lst->Atoms(),1);
+             delete lst;
+ 
+             ToOutAnything(GetOutAttr(),out);
+         }
+         else
+             post("%s - get: List could not be created",thisName());
+         Py_DECREF(pvar);
+     }
+ 
+     PY_UNLOCK
  }
  
+ void pyext::m_set(int argc,const t_atom *argv)
+ {
+     PY_LOCK
  
+     if(argc < 2 || !IsString(argv[0]))
+         post("%s - Syntax: set varname arguments...",thisName());
+     else if(*GetString(argv[0]) == '_')
+         post("%s - set: variables with leading _ are reserved and can't be set",thisName());
+     else {
+         char *ch = const_cast<char *>(GetString(argv[0]));
+         if(!PyObject_HasAttrString(pyobj,ch)) {
+ 		    PyErr_Clear(); // no method found
+             post("%s - set: Python variable %s not found",thisName(),ch);
+ 	    }
+ 	    else {
+ 		    PyObject *pval = MakePyArgs(sym_list,AtomList(argc-1,argv+1),-1,false);
+ 		    if(!pval)
+ 			    PyErr_Print();
+ 		    else {
+                 PyObject_SetAttrString(pyobj,ch,pval);
+                 Py_DECREF(pval);
+             }
+         }
+     }
+ 
+     PY_UNLOCK
+ }
  
  
***************
*** 308,314 ****
  {
  	post("");
! 	post("pyext %s - python script object, (C)2002 Thomas Grill",PY__VERSION);
  #ifdef FLEXT_DEBUG
! 	post("compiled on " __DATE__ " " __TIME__);
  #endif
  
--- 369,375 ----
  {
  	post("");
! 	post("pyext %s - python script object, (C)2002,2003 Thomas Grill",PY__VERSION);
  #ifdef FLEXT_DEBUG
! 	post("DEBUG VERSION, compiled on " __DATE__ " " __TIME__);
  #endif
  
***************
*** 346,350 ****
  			ret = PyEval_CallObject(pmeth, pargs); 
  			if (ret == NULL) // function not found resp. arguments not matching
! #if 1 //def FLEXT_DEBUG
  				PyErr_Print();
  #else
--- 407,411 ----
  			ret = PyEval_CallObject(pmeth, pargs); 
  			if (ret == NULL) // function not found resp. arguments not matching
! #ifdef FLEXT_DEBUG
  				PyErr_Print();
  #else

Index: pyext.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/pyext.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** pyext.h	20 Oct 2003 02:38:10 -0000	1.8
--- pyext.h	21 Oct 2003 02:38:31 -0000	1.9
***************
*** 49,55 ****
  	V m_reload();
  	V m_reload_(I argc,const t_atom *argv);
! 	V m_doc_();
  	virtual V m_help();
  
  	const t_symbol *methname;
  	PyObject *pyobj;
--- 49,59 ----
  	V m_reload();
  	V m_reload_(I argc,const t_atom *argv);
!     V m_dir_() { m__dir(pyobj); }
!     V m_doc_() { m__doc(pyobj); }
  	virtual V m_help();
  
+ 	V m_get(const t_symbol *s);
+ 	V m_set(I argc,const t_atom *argv);
+ 
  	const t_symbol *methname;
  	PyObject *pyobj;
***************
*** 104,108 ****
--- 108,116 ----
      FLEXT_CALLBACK(m_reload)
  	FLEXT_CALLBACK_V(m_reload_)
+ 	FLEXT_CALLBACK(m_dir_)
  	FLEXT_CALLBACK(m_doc_)
+ 
+ 	FLEXT_CALLBACK_S(m_get)
+ 	FLEXT_CALLBACK_V(m_set)
  };
  






More information about the Pd-cvs mailing list