X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2Fpython.cpp;h=119bff1c0bdd006c61c1a98755f0f7227dde9938;hp=14e32af6a743f8e76d571ca27e754c16622a1b6a;hb=e03c732afb410b4d6b9f9540c36c33c941ee38f1;hpb=9202d4248dd7df2f6e5eb53b4154c8297ec9b1d1 diff --git a/lib/python/python.cpp b/lib/python/python.cpp index 14e32af..119bff1 100644 --- a/lib/python/python.cpp +++ b/lib/python/python.cpp @@ -1,8 +1,24 @@ #include #include + /* avoid warnigs :) */ +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200112L #include 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,10 @@ ePyObject &ePyObject::operator=(void *object) ePython::ePython() { +// Py_VerboseFlag = 1; + +// Py_OptimizeFlag = 1; + Py_Initialize(); init_enigma(); @@ -57,9 +77,8 @@ ePython::~ePython() int ePython::execute(const std::string &pythonfile, const std::string &funcname) { PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue; - pName = PyString_FromString(pythonfile.c_str()); - + pModule = PyImport_Import(pName); Py_DECREF(pName); @@ -95,21 +114,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 +152,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 {