[PD-cvs] externals/grill/py/source clmeth.cpp,1.6,1.7 main.cpp,1.11,1.12 main.h,1.17,1.18
Thomas Grill
xovo at users.sourceforge.net
Fri Mar 26 04:27:52 CET 2004
Update of /cvsroot/pure-data/externals/grill/py/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13144/source
Modified Files:
clmeth.cpp main.cpp main.h
Log Message:
""
Index: clmeth.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/clmeth.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** clmeth.cpp 22 Jan 2004 03:38:36 -0000 1.6
--- clmeth.cpp 26 Mar 2004 03:27:49 -0000 1.7
***************
*** 132,136 ****
}
-
//! Send message to outlet
PyObject *pyext::pyext_outlet(PyObject *,PyObject *args)
--- 132,135 ----
Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/main.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** main.cpp 27 Jan 2004 03:37:59 -0000 1.11
--- main.cpp 26 Mar 2004 03:27:49 -0000 1.12
***************
*** 36,39 ****
--- 36,46 ----
+ static PyMethodDef StdOut_Methods[] =
+ {
+ { "write", py::StdOut_Write, 1 },
+ { NULL, NULL, }
+ };
+
+
py::py():
module(NULL),
***************
*** 67,70 ****
--- 74,81 ----
PyModule_AddStringConstant(module_obj,"__doc__",(C *)py_doc);
+
+ // redirect stdout
+ PyObject* py_out = Py_InitModule("stdout", StdOut_Methods);
+ PySys_SetObject("stdout", py_out);
}
else {
***************
*** 167,171 ****
if(docf && PyString_Check(docf)) {
post("");
! post(PyString_AsString(docf));
}
--- 178,203 ----
if(docf && PyString_Check(docf)) {
post("");
! const char *s = PyString_AsString(docf);
!
! // FIX: Python doc strings can easily be larger than 1k characters
! // -> split into separate lines
! for(;;) {
! char buf[1024];
! char *nl = strchr(s,'\n');
! if(!nl) {
! // no more newline found
! post(s);
! break;
! }
! else {
! // copy string before newline to temp buffer and post
! int l = nl-s;
! if(l >= sizeof(buf)) l = sizeof buf-1;
! strncpy(buf,s,l); // copy all but newline
! buf[l] = 0;
! post(buf);
! s = nl+1; // set after newline
! }
! }
}
***************
*** 264,268 ****
for(i = 0; i < n; ++i) {
PyObject *pt = PyList_GetItem(pobj,i);
! if(PyString_Check(pt) && !strcmp(dir,PyString_AsString(pt))) break;
}
if(i == n) { // string is not yet existent in path
--- 296,300 ----
for(i = 0; i < n; ++i) {
PyObject *pt = PyList_GetItem(pobj,i);
! if(PyString_Check(pt) && !strcmp(dir,PyString_AS_STRING(pt))) break;
}
if(i == n) { // string is not yet existent in path
***************
*** 274,275 ****
--- 306,346 ----
}
}
+
+ static PyObject *output = NULL;
+
+ // post to the console
+ PyObject* py::StdOut_Write(PyObject* self, PyObject* args)
+ {
+ if(PySequence_Check(args)) {
+ int sz = PySequence_Size(args);
+ for(int i = 0; i < sz; ++i) {
+ PyObject *val = PySequence_GetItem(args,i); // borrowed
+ PyObject *str = PyObject_Str(val);
+ char *cstr = PyString_AS_STRING(str);
+ char *lf = strchr(cstr,'\n');
+
+ // line feed in string
+ if(!lf) {
+ // no -> just append
+ if(output)
+ PyString_ConcatAndDel(&output,str);
+ else
+ output = str;
+ }
+ else {
+ // yes -> append up to line feed, reset output buffer to string remainder
+ PyObject *part = PyString_FromStringAndSize(cstr,lf-cstr);
+ if(output)
+ PyString_ConcatAndDel(&output,part);
+ else
+ output = part;
+ post(PyString_AS_STRING(output));
+ Py_DECREF(output);
+ output = PyString_FromString(lf+1);
+ }
+ }
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
Index: main.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/main.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** main.h 22 Jan 2004 03:38:37 -0000 1.17
--- main.h 26 Mar 2004 03:27:49 -0000 1.18
***************
*** 26,31 ****
#endif
! #if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 405)
! #error You need at least flext version 0.4.5
#endif
--- 26,31 ----
#endif
! #if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 406)
! #error You need at least flext version 0.4.6
#endif
***************
*** 137,140 ****
--- 137,142 ----
#endif
+ static PyObject* StdOut_Write(PyObject* Self, PyObject* Args);
+
protected:
// callbacks
More information about the Pd-cvs
mailing list