add VideoWindow Component
[enigma2.git] / lib / python / python.cpp
index 14e32af6a743f8e76d571ca27e754c16622a1b6a..b5ae486486efd5af9a34a529d4b95c0be7ac5dd2 100644 (file)
@@ -1,8 +1,24 @@
 #include <lib/python/python.h>
 #include <lib/base/eerror.h>
+                /* avoid warnigs :) */
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 200112L
 #include <Python.h>
 
 extern "C" void init_enigma();
+extern void bsodFatal();
+
+DEFINE_REF(TestObj);
+
+TestObj::TestObj()
+{
+       eDebug("create %p", this);
+}
+
+TestObj::~TestObj()
+{
+       eDebug("destroy %p", this);
+}
 
 #if 0
 ePyObject::ePyObject(void *ptr): m_object(ptr)
@@ -44,6 +60,8 @@ ePyObject &ePyObject::operator=(void *object)
 
 ePython::ePython()
 {
+//     Py_VerboseFlag = 1;
+       
        Py_Initialize();
        
        init_enigma();
@@ -95,21 +113,27 @@ int ePython::execute(const std::string &pythonfile, const std::string &funcname)
        return 0;
 }
 
-void ePython::call(PyObject *pFunc, PyObject *pArgs)
+int ePython::call(PyObject *pFunc, PyObject *pArgs)
 {
+       int res = -1;
        PyObject *pValue;
        if (pFunc && PyCallable_Check(pFunc))
        {
                pValue = PyObject_CallObject(pFunc, pArgs);
                if (pValue != NULL)
                {
-//                     printf("Result of call: %ld\n", PyInt_AsLong(pValue));
+                       if (PyInt_Check(pValue))
+                               res = PyInt_AsLong(pValue);
+                       else
+                               res = 0;
                        Py_DECREF(pValue);
                } else
                {
                        PyErr_Print();
+                       bsodFatal();
                }
        }
+       return res;
 }
 
 PyObject *ePython::resolve(const std::string &pythonfile, const std::string &funcname)
@@ -127,7 +151,6 @@ PyObject *ePython::resolve(const std::string &pythonfile, const std::string &fun
                pFunc = PyDict_GetItemString(pDict, funcname.c_str());
                Py_XINCREF(pFunc);
                Py_DECREF(pModule);
-               eDebug("resolved to %p", pFunc);
                return pFunc;
        } else
        {