aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/py
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-08-11 15:00:58 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-08-11 15:00:58 +0000
commit214bb7279f354adf1344376e26465046fc2581ce (patch)
tree0e0f32a27f274e4d6a09352146c7507472313dc5 /externals/grill/py
parente1be380510a42f13ce1fd55a29705aaf9e8c8da8 (diff)
oops, include libraries for editing the scripts
some optimizations and py reload fix open editor for module file on "edit" message (or click) open editor for script under OS X added cygwin support svn path=/trunk/; revision=3417
Diffstat (limited to 'externals/grill/py')
-rw-r--r--externals/grill/py/build/gnumake-win-cygwin.inc2
-rw-r--r--externals/grill/py/build/nmake-win-msvc.inc1
-rw-r--r--externals/grill/py/source/py.cpp11
-rw-r--r--externals/grill/py/source/pyargs.cpp2
-rw-r--r--externals/grill/py/source/pybase.cpp32
-rw-r--r--externals/grill/py/source/pybase.h18
-rw-r--r--externals/grill/py/source/pymeth.cpp2
7 files changed, 33 insertions, 35 deletions
diff --git a/externals/grill/py/build/gnumake-win-cygwin.inc b/externals/grill/py/build/gnumake-win-cygwin.inc
index 39f590bf..70cfca17 100644
--- a/externals/grill/py/build/gnumake-win-cygwin.inc
+++ b/externals/grill/py/build/gnumake-win-cygwin.inc
@@ -1,7 +1,7 @@
DEFS += -DPY_EXPORTS
INCPATH += -I$(PYTHONPATH)/include
LIBPATH += -L$(PYTHONPATH)/libs
-LIBS += -lpython$(PYTHONVER)
+LIBS += -lpython$(PYTHONVER) -lshell32
ifdef PY_NUMARRAY
DEFS += -DPY_NUMARRAY
diff --git a/externals/grill/py/build/nmake-win-msvc.inc b/externals/grill/py/build/nmake-win-msvc.inc
index e9334065..0d4fa162 100644
--- a/externals/grill/py/build/nmake-win-msvc.inc
+++ b/externals/grill/py/build/nmake-win-msvc.inc
@@ -1,6 +1,7 @@
DEFS = $(DEFS) /DPY_EXPORTS
INCPATH=/I$(PYTHONPATH)\include
LIBPATH=/LIBPATH:$(PYTHONPATH)\libs
+LIBS=$(LIBS) shell32.lib
!ifdef PY_NUMARRAY
DEFS = $(DEFS) /DPY_NUMARRAY
diff --git a/externals/grill/py/source/py.cpp b/externals/grill/py/source/py.cpp
index c7111faa..3ef823a0 100644
--- a/externals/grill/py/source/py.cpp
+++ b/externals/grill/py/source/py.cpp
@@ -154,12 +154,6 @@ pyobj::pyobj(int argc,const t_atom *argv)
if(pt && *pt) {
funnm = MakeSymbol(pt+1);
*pt = 0;
-
-#if 0
- if(!*modnm)
- // if module name is empty set it to __builtin__
- strcpy(modnm,"__builtin__");
-#endif
}
if(*modnm) {
@@ -337,7 +331,8 @@ void pyobj::Load()
void pyobj::Unload()
{
- SetFunction(NULL);
+// SetFunction(NULL);
+ function = NULL; // just clear the PyObject, not the function name
}
void pyobj::callpy(PyObject *fun,PyObject *args)
@@ -354,7 +349,7 @@ bool pyobj::CbMethodResort(int n,const t_symbol *s,int argc,const t_atom *argv)
if(n == 0 && s != sym_bang)
return flext_base::CbMethodResort(n,s,argc,argv);
- PyThreadState *state = PyLock();
+ PyThreadState *state = PyLockSys();
bool ret = false;
diff --git a/externals/grill/py/source/pyargs.cpp b/externals/grill/py/source/pyargs.cpp
index d9a91e10..38cfbc54 100644
--- a/externals/grill/py/source/pyargs.cpp
+++ b/externals/grill/py/source/pyargs.cpp
@@ -18,7 +18,7 @@ static PyObject *MakePyAtom(const t_atom &at)
if(flext::IsSymbol(at))
return pySymbol_FromSymbol(flext::GetSymbol(at));
#if 1
- else if(flext::CanbeInt(at) || flext::CanbeFloat(at)) {
+ else if(flext::CanbeFloat(at)) {
// if a number can be an integer... let it be an integer!
int ival = flext::GetAInt(at);
double fval = flext::GetAFloat(at);
diff --git a/externals/grill/py/source/pybase.cpp b/externals/grill/py/source/pybase.cpp
index 69bead28..462cad62 100644
--- a/externals/grill/py/source/pybase.cpp
+++ b/externals/grill/py/source/pybase.cpp
@@ -200,14 +200,14 @@ pybase::pybase()
, detach(0)
, pymsg(false)
{
- PyThreadState *state = PyLockSys();
+ PyThreadState *state = PyLock();
Py_INCREF(module_obj);
PyUnlock(state);
}
pybase::~pybase()
{
- PyThreadState *state = PyLockSys();
+ PyThreadState *state = PyLock();
Py_XDECREF(module_obj);
PyUnlock(state);
}
@@ -355,7 +355,24 @@ void pybase::OpenEditor()
post("py/pyext - Couldn't launch editor");
}
}
-#elif FLEXT_OS == FLEXT_OS_LINUX
+#else
+ // thanks to Tim Blechmann
+
+ char *editor = getenv("EDITOR");
+
+ if(!editor || !strcmp(editor, "/usr/bin/nano") || !strcmp(editor, "/usr/bin/pico") || !strcmp(editor, "/usr/bin/vi")) {
+ // no environment variable or console text editor found ... use idle instead (should have come with Python)
+ editor = "idle";
+ }
+
+ pid_t child = fork();
+ if(!child) {
+ char cmd[80];
+ strcpy(cmd,editor);
+ strcat(cmd," ");
+ strcat(cmd,fname);
+ execl("/bin/sh", "sh", "-c", cmd, (char *) NULL);
+ }
#endif
}
@@ -539,7 +556,7 @@ void pybase::Respond(bool b)
void pybase::Reload()
{
- PyThreadState *state = PyLockSys();
+ PyThreadState *state = PyLock();
PyObject *reg = GetRegistry(REGNAME);
@@ -670,6 +687,7 @@ void pybase::exchandle()
{
#if 0
// want to use that, but exception keeps a reference to the object
+ // might be a Python bug!
PyErr_Print();
#else
// must use that instead... clear the exception
@@ -776,9 +794,3 @@ bool pybase::collect()
}
return true;
}
-
-/*
-PY_EXPORT PyThreadState *py_Lock(PyThreadState *st = NULL) { return pybase::PyLock(st?st:pybase::FindThreadState()); }
-PY_EXPORT PyThreadState *py_LockSys() { return pybase::PyLockSys(); }
-PY_EXPORT void py_Unlock(PyThreadState *st) { pybase::PyUnlock(st); }
-*/
diff --git a/externals/grill/py/source/pybase.h b/externals/grill/py/source/pybase.h
index f0ec5640..49eccbbc 100644
--- a/externals/grill/py/source/pybase.h
+++ b/externals/grill/py/source/pybase.h
@@ -53,7 +53,6 @@ protected:
void AddCurrentPath(flext_base *o);
void GetModulePath(const char *mod,char *dir,int len);
- void AddToPath(const char *dir);
void SetArgs();
bool OutObject(flext_base *ext,int o,PyObject *obj);
@@ -148,7 +147,6 @@ protected:
return true;
}
-// virtual bool thrcall(void *data) = 0;
virtual void callpy(PyObject *fun,PyObject *args) = 0;
void exchandle();
@@ -168,11 +166,6 @@ protected:
static PyFifo qufifo;
static ThrCond qucond;
static PyThreadState *pythrsys;
-
- static PyThreadState *FindThreadState();
- static void FreeThreadState();
-#else
- static PyThreadState *FindThreadState() { return NULL; }
#endif
static const t_symbol *sym_fint; // float or int symbol, depending on native number message type
@@ -182,10 +175,11 @@ protected:
public:
+ static void AddToPath(const char *dir);
+
#ifdef FLEXT_THREADS
- ThrMutex mutex;
- inline void Lock() { mutex.Unlock(); }
- inline void Unlock() { mutex.Unlock(); }
+ static PyThreadState *FindThreadState();
+ static void FreeThreadState();
// this is especially needed when one py/pyext object calls another one
// we don't want the message to be queued, but otoh we have to avoid deadlock
@@ -209,11 +203,7 @@ public:
PyThreadState *old = PyThreadState_Swap(st);
if(old != pythrsys || !--lockcount) PyEval_ReleaseLock();
}
-
#else
- inline void Lock() {}
- inline void Unlock() {}
-
static PyThreadState *PyLock(PyThreadState * = NULL) { return NULL; }
static PyThreadState *PyLockSys() { return NULL; }
static void PyUnlock(PyThreadState *st) {}
diff --git a/externals/grill/py/source/pymeth.cpp b/externals/grill/py/source/pymeth.cpp
index 91ca2146..3bc90ee2 100644
--- a/externals/grill/py/source/pymeth.cpp
+++ b/externals/grill/py/source/pymeth.cpp
@@ -366,7 +366,7 @@ bool pymeth::CbMethodResort(int n,const t_symbol *s,int argc,const t_atom *argv)
if(n == 0 && s != sym_bang)
return flext_base::CbMethodResort(n,s,argc,argv);
- PyThreadState *state = PyLock();
+ PyThreadState *state = PyLockSys();
bool ret = false;