|
From: Andre R. <and...@us...> - 2004-11-24 19:20:20
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26105 Modified Files: Tag: sidewinder-branch langpython.c Log Message: Added static ispythonloaded function (unused so far). Slightly simplified adding more import symbols with a little pre-processor magic. Index: langpython.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/langpython.c,v retrieving revision 1.2.4.14 retrieving revision 1.2.4.15 diff -C2 -d -r1.2.4.14 -r1.2.4.15 *** langpython.c 24 Nov 2004 18:52:20 -0000 1.2.4.14 --- langpython.c 24 Nov 2004 19:19:59 -0000 1.2.4.15 *************** *** 301,330 **** #define PyUnicode_Type (*py.ptr_PyUnicode_Type) - - #if defined(WIN95VERSION) - static boolean importsymbol (HMODULE hm, LPCSTR symbol, void **ptraddress) { - - *ptraddress = (void*) GetProcAddress (hm, symbol); - - return (*ptraddress != NULL); - } /*importsymbol*/ ! #elif defined(MACVERSION) ! static boolean importsymbol (CFBundleRef hm, char *symbol, void **ptraddress) { - CFStringRef symbolref; - - symbolref = CFStringCreateWithCString (kCFAllocatorSystemDefault, symbol, kCFStringEncodingMacRoman); - - *ptraddress = (void*) CFBundleGetFunctionPointerForName (hm, symbolref); - - CFRelease (symbolref); - return (*ptraddress != NULL); } /*importsymbol*/ ! #endif static boolean loadpythonlib (void) { --- 301,332 ---- #define PyUnicode_Type (*py.ptr_PyUnicode_Type) ! static boolean importsymbol (typythonlib hm, char *symbol, void **ptraddress) { ! #if defined(WIN95VERSION) ! ! *ptraddress = (void*) GetProcAddress (hm, symbol); ! ! #elif defined(MACVERSION) && TARGET_RT_MAC_MACHO ! ! CFStringRef symbolref = CFStringCreateWithCString (kCFAllocatorSystemDefault, symbol, kCFStringEncodingMacRoman); ! ! *ptraddress = (void*) CFBundleGetFunctionPointerForName (hm, symbolref); ! ! CFRelease (symbolref); ! ! #endif return (*ptraddress != NULL); } /*importsymbol*/ ! /* ! use some pre-processor magic to simplify importing all required symbols ! and to enforce the naming convention for all py struct members ! */ ! ! #define IMPORTSYMBOL(hm,symbol) importsymbol(hm, # symbol, (void**) &py.ptr_ ## symbol) ! static boolean loadpythonlib (void) { *************** *** 335,339 **** #if defined(WIN95VERSION) hm = LoadLibraryEx("python23.dll", NULL, 0); ! #elif defined(MACVERSION) LoadFrameworkBundle (CFSTR ("Python.framework"), &hm); #endif --- 337,341 ---- #if defined(WIN95VERSION) hm = LoadLibraryEx("python23.dll", NULL, 0); ! #elif defined(MACVERSION) && TARGET_RT_MAC_MACHO LoadFrameworkBundle (CFSTR ("Python.framework"), &hm); #endif *************** *** 342,430 **** return (false); ! fl = fl && importsymbol (hm, "PyObject_CallMethod", (void**) &py.ptr_PyObject_CallMethod); ! fl = fl && importsymbol (hm, "PyEval_GetBuiltins", (void**) &py.ptr_PyEval_GetBuiltins); ! fl = fl && importsymbol (hm, "PyInstance_Type", (void**) &py.ptr_PyInstance_Type); ! fl = fl && importsymbol (hm, "PyComplex_Type", (void**) &py.ptr_PyComplex_Type); ! fl = fl && importsymbol (hm, "PyComplex_ImagAsDouble", (void**) &py.ptr_PyComplex_ImagAsDouble); ! fl = fl && importsymbol (hm, "PyComplex_RealAsDouble", (void**) &py.ptr_PyComplex_RealAsDouble); ! fl = fl && importsymbol (hm, "PyDict_Type", (void**) &py.ptr_PyDict_Type); ! fl = fl && importsymbol (hm, "PyDict_GetItem", (void**) &py.ptr_PyDict_GetItem); ! fl = fl && importsymbol (hm, "PyDict_GetItemString", (void**) &py.ptr_PyDict_GetItemString); ! fl = fl && importsymbol (hm, "PyDict_Keys", (void**) &py.ptr_PyDict_Keys); ! fl = fl && importsymbol (hm, "PyDict_New", (void**) &py.ptr_PyDict_New); ! fl = fl && importsymbol (hm, "PyDict_SetItemString", (void**) &py.ptr_PyDict_SetItemString); ! fl = fl && importsymbol (hm, "PyFile_Type", (void**) &py.ptr_PyFile_Type); ! fl = fl && importsymbol (hm, "PyFloat_Type", (void**) &py.ptr_PyFloat_Type); ! fl = fl && importsymbol (hm, "PyFloat_AsDouble", (void**) &py.ptr_PyFloat_AsDouble); ! fl = fl && importsymbol (hm, "PyInt_Type", (void**) &py.ptr_PyInt_Type); ! fl = fl && importsymbol (hm, "PyInt_AsLong", (void**) &py.ptr_PyInt_AsLong); ! fl = fl && importsymbol (hm, "PySeqIter_Type", (void**) &py.ptr_PySeqIter_Type); ! fl = fl && importsymbol (hm, "PyList_Append", (void**) &py.ptr_PyList_Append); ! fl = fl && importsymbol (hm, "PyList_GetItem", (void**) &py.ptr_PyList_GetItem); ! fl = fl && importsymbol (hm, "PyList_SetItem", (void**) &py.ptr_PyList_SetItem); ! fl = fl && importsymbol (hm, "PyList_New", (void**) &py.ptr_PyList_New); ! fl = fl && importsymbol (hm, "PyList_Size", (void**) &py.ptr_PyList_Size); ! fl = fl && importsymbol (hm, "PyLong_Type", (void**) &py.ptr_PyLong_Type); ! fl = fl && importsymbol (hm, "PyMethod_Type", (void**) &py.ptr_PyMethod_Type); ! fl = fl && importsymbol (hm, "Py_FindMethod", (void**) &py.ptr_Py_FindMethod); ! fl = fl && importsymbol (hm, "Py_BuildValue", (void**) &py.ptr_Py_BuildValue); ! fl = fl && importsymbol (hm, "Py_InitModule4", (void**) &py.ptr_Py_InitModule4); ! fl = fl && importsymbol (hm, "PyArg_ParseTuple", (void**) &py.ptr_PyArg_ParseTuple); ! fl = fl && importsymbol (hm, "PyModule_AddObject", (void**) &py.ptr_PyModule_AddObject); ! fl = fl && importsymbol (hm, "_Py_NoneStruct", (void**) &py.ptr__Py_NoneStruct); ! fl = fl && importsymbol (hm, "PyType_Type", (void**) &py.ptr_PyType_Type); ! fl = fl && importsymbol (hm, "PyObject_GetAttrString", (void**) &py.ptr_PyObject_GetAttrString); ! fl = fl && importsymbol (hm, "PyObject_Str", (void**) &py.ptr_PyObject_Str); ! fl = fl && importsymbol (hm, "PyType_GenericNew", (void**) &py.ptr_PyType_GenericNew); ! fl = fl && importsymbol (hm, "PyType_IsSubtype", (void**) &py.ptr_PyType_IsSubtype); ! fl = fl && importsymbol (hm, "PyType_Ready", (void**) &py.ptr_PyType_Ready); #ifdef Py_REF_DEBUG ! fl = fl && importsymbol (hm, "_Py_RefTotal", (void**) &py.ptr__Py_RefTotal); ! fl = fl && importsymbol (hm, "_Py_NegativeRefcount", (void**) &py.ptr__Py_NegativeRefcount); #endif #ifdef Py_TRACE_REFS ! fl = fl && importsymbol (hm, "_Py_Dealloc", (void**) &py.ptr__Py_Dealloc); #endif ! fl = fl && importsymbol (hm, "_PyObject_New", (void**) &py.ptr__PyObject_New); ! fl = fl && importsymbol (hm, "PyExc_IndexError", (void**) &py.ptr_PyExc_IndexError); ! fl = fl && importsymbol (hm, "PyExc_KeyError", (void**) &py.ptr_PyExc_KeyError); ! fl = fl && importsymbol (hm, "PyExc_SyntaxError", (void**) &py.ptr_PyExc_SyntaxError); ! fl = fl && importsymbol (hm, "PyExc_SystemError", (void**) &py.ptr_PyExc_SystemError); ! fl = fl && importsymbol (hm, "PyExc_TypeError", (void**) &py.ptr_PyExc_TypeError); ! fl = fl && importsymbol (hm, "PyExc_ValueError", (void**) &py.ptr_PyExc_ValueError); ! fl = fl && importsymbol (hm, "PyErr_Clear", (void**) &py.ptr_PyErr_Clear); ! fl = fl && importsymbol (hm, "PyErr_Occurred", (void**) &py.ptr_PyErr_Occurred); ! fl = fl && importsymbol (hm, "PyErr_Print", (void**) &py.ptr_PyErr_Print); ! fl = fl && importsymbol (hm, "PyErr_SetString", (void**) &py.ptr_PyErr_SetString); ! fl = fl && importsymbol (hm, "Py_Finalize", (void**) &py.ptr_Py_Finalize); ! fl = fl && importsymbol (hm, "Py_Initialize", (void**) &py.ptr_Py_Initialize); ! fl = fl && importsymbol (hm, "Py_IsInitialized", (void**) &py.ptr_Py_IsInitialized); ! fl = fl && importsymbol (hm, "PyRun_String", (void**) &py.ptr_PyRun_String); ! fl = fl && importsymbol (hm, "PySlice_Type", (void**) &py.ptr_PySlice_Type); ! fl = fl && importsymbol (hm, "PyString_Type", (void**) &py.ptr_PyString_Type); ! fl = fl && importsymbol (hm, "PyString_AsString", (void**) &py.ptr_PyString_AsString); ! fl = fl && importsymbol (hm, "PyString_FromString", (void**) &py.ptr_PyString_FromString); ! fl = fl && importsymbol (hm, "PyTuple_Type", (void**) &py.ptr_PyTuple_Type); - fl = fl && importsymbol (hm, "PyUnicode_Type", (void**) &py.ptr_PyUnicode_Type); if (fl) { --- 344,433 ---- return (false); ! fl = fl && IMPORTSYMBOL (hm, PyObject_CallMethod); ! fl = fl && IMPORTSYMBOL (hm, PyEval_GetBuiltins); ! fl = fl && IMPORTSYMBOL (hm, PyInstance_Type); ! fl = fl && IMPORTSYMBOL (hm, PyComplex_Type); ! fl = fl && IMPORTSYMBOL (hm, PyComplex_ImagAsDouble); ! fl = fl && IMPORTSYMBOL (hm, PyComplex_RealAsDouble); ! fl = fl && IMPORTSYMBOL (hm, PyDict_Type); ! fl = fl && IMPORTSYMBOL (hm, PyDict_GetItem); ! fl = fl && IMPORTSYMBOL (hm, PyDict_GetItemString); ! fl = fl && IMPORTSYMBOL (hm, PyDict_Keys); ! fl = fl && IMPORTSYMBOL (hm, PyDict_New); ! fl = fl && IMPORTSYMBOL (hm, PyDict_SetItemString); ! fl = fl && IMPORTSYMBOL (hm, PyFile_Type); ! fl = fl && IMPORTSYMBOL (hm, PyFloat_Type); ! fl = fl && IMPORTSYMBOL (hm, PyFloat_AsDouble); ! fl = fl && IMPORTSYMBOL (hm, PyInt_Type); ! fl = fl && IMPORTSYMBOL (hm, PyInt_AsLong); ! fl = fl && IMPORTSYMBOL (hm, PySeqIter_Type); ! fl = fl && IMPORTSYMBOL (hm, PyList_Append); ! fl = fl && IMPORTSYMBOL (hm, PyList_GetItem); ! fl = fl && IMPORTSYMBOL (hm, PyList_SetItem); ! fl = fl && IMPORTSYMBOL (hm, PyList_New); ! fl = fl && IMPORTSYMBOL (hm, PyList_Size); ! fl = fl && IMPORTSYMBOL (hm, PyLong_Type); ! fl = fl && IMPORTSYMBOL (hm, PyMethod_Type); ! fl = fl && IMPORTSYMBOL (hm, Py_FindMethod); ! fl = fl && IMPORTSYMBOL (hm, Py_BuildValue); ! fl = fl && IMPORTSYMBOL (hm, Py_InitModule4); ! fl = fl && IMPORTSYMBOL (hm, PyArg_ParseTuple); ! fl = fl && IMPORTSYMBOL (hm, PyModule_AddObject); ! fl = fl && IMPORTSYMBOL (hm, _Py_NoneStruct); ! fl = fl && IMPORTSYMBOL (hm, PyType_Type); ! fl = fl && IMPORTSYMBOL (hm, PyObject_GetAttrString); ! fl = fl && IMPORTSYMBOL (hm, PyObject_Str); ! fl = fl && IMPORTSYMBOL (hm, PyType_GenericNew); ! fl = fl && IMPORTSYMBOL (hm, PyType_IsSubtype); ! fl = fl && IMPORTSYMBOL (hm, PyType_Ready); #ifdef Py_REF_DEBUG ! fl = fl && IMPORTSYMBOL (hm, _Py_RefTotal); ! fl = fl && IMPORTSYMBOL (hm, _Py_NegativeRefcount); #endif #ifdef Py_TRACE_REFS ! fl = fl && IMPORTSYMBOL (hm, _Py_Dealloc); #endif ! fl = fl && IMPORTSYMBOL (hm, _PyObject_New); ! fl = fl && IMPORTSYMBOL (hm, PyExc_IndexError); ! fl = fl && IMPORTSYMBOL (hm, PyExc_KeyError); ! fl = fl && IMPORTSYMBOL (hm, PyExc_SyntaxError); ! fl = fl && IMPORTSYMBOL (hm, PyExc_SystemError); ! fl = fl && IMPORTSYMBOL (hm, PyExc_TypeError); ! fl = fl && IMPORTSYMBOL (hm, PyExc_ValueError); ! fl = fl && IMPORTSYMBOL (hm, PyErr_Clear); ! fl = fl && IMPORTSYMBOL (hm, PyErr_Occurred); ! fl = fl && IMPORTSYMBOL (hm, PyErr_Print); ! fl = fl && IMPORTSYMBOL (hm, PyErr_SetString); ! fl = fl && IMPORTSYMBOL (hm, Py_Finalize); ! fl = fl && IMPORTSYMBOL (hm, Py_Initialize); ! fl = fl && IMPORTSYMBOL (hm, Py_IsInitialized); ! fl = fl && IMPORTSYMBOL (hm, PyRun_String); ! fl = fl && IMPORTSYMBOL (hm, PySlice_Type); ! fl = fl && IMPORTSYMBOL (hm, PyString_Type); ! fl = fl && IMPORTSYMBOL (hm, PyString_AsString); ! fl = fl && IMPORTSYMBOL (hm, PyString_FromString); ! fl = fl && IMPORTSYMBOL (hm, PyTuple_Type); ! ! fl = fl && IMPORTSYMBOL (hm, PyUnicode_Type); if (fl) { *************** *** 435,439 **** #if defined(WIN95VERSION) FreeLibrary (hm); ! #elif defined(MACVERSION) CFRelease (hm); #endif --- 438,442 ---- #if defined(WIN95VERSION) FreeLibrary (hm); ! #elif defined(MACVERSION) && TARGET_RT_MAC_MACHO CFRelease (hm); #endif *************** *** 446,449 **** --- 449,458 ---- #if 0 + static boolean ispythonloaded (void) { + + return (py.hmodule != NULL); + } /*ispythonavailable*/ + + static void freepythonlib (void) { *************** *** 452,456 **** #if defined(WIN95VERSION) FreeLibrary (py.hmodule); ! #elif defined(MACVERSION) CFRelease (py.hmodule); #endif --- 461,465 ---- #if defined(WIN95VERSION) FreeLibrary (py.hmodule); ! #elif defined(MACVERSION) && TARGET_RT_MAC_MACHO CFRelease (py.hmodule); #endif |