diff options
| author | Jeff Armstrong <jeffrey.armstrong@approximatrix.com> | 2011-07-10 11:50:53 -0400 |
|---|---|---|
| committer | Jeff Armstrong <jeffrey.armstrong@approximatrix.com> | 2011-07-10 11:50:53 -0400 |
| commit | d89bc67baf8e8f77de9240a4c991a6a98ff950c4 (patch) | |
| tree | bb9bf303266e889f3245b90961e30be5985f6a91 /external/core/dynload_mint.c | |
| download | gempy-d89bc67baf8e8f77de9240a4c991a6a98ff950c4.tar.gz gempy-d89bc67baf8e8f77de9240a4c991a6a98ff950c4.zip | |
Initial commit.
Diffstat (limited to 'external/core/dynload_mint.c')
| -rw-r--r-- | external/core/dynload_mint.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/external/core/dynload_mint.c b/external/core/dynload_mint.c new file mode 100644 index 0000000..11431da --- /dev/null +++ b/external/core/dynload_mint.c @@ -0,0 +1,70 @@ +/* Dynamic Libraries for FreeMiNT (LDG) */ + +#include <Python.h> +#include "importdl.h" +#include <ldg.h> + +#define PY_API_FCOUNT 3 + +const struct filedescr _PyImport_DynLoadFiletab[] = { + {".ldg", "rb", C_EXTENSION}, + {"module.ldg", "rb", C_EXTENSION}, + {0, 0, 0} +}; + +//PyObject *Py_InitModule(char *name, PyMethodDef *methods); + +dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, + const char *pathname, FILE *fp) +{ + dl_funcptr p; + LDG *library; + short aes_gl; + char errBuf[256]; + + char funcname[258]; + + /* For assigning callbacks to the module */ + void (*assign_pycalls)(void *); + void *callbacks[PY_API_FCOUNT]; + + PyOS_snprintf(funcname, sizeof(funcname), "init%.200s", shortname); + + p = NULL; + + library = ldg_open(pathname, &aes_gl); + + /* Proceed on success */ + if(library != NULL) { + + /* Initialize the callbacks */ + assign_pycalls = ldg_find("assign_pycalls",library); + if(assign_pycalls == NULL) { + PyOS_snprintf(errBuf, sizeof(errBuf), + "Could not find function assign_pycalls"); + PyErr_SetString(PyExc_ImportError, errBuf); + } else { + + callbacks[0] = &Py_InitModule4; + callbacks[1] = &PyArg_ParseTuple; + callbacks[2] = &Py_BuildValue; + + assign_pycalls(callbacks); + + p = (dl_funcptr)ldg_find(funcname,library); + if(p == NULL) { + PyOS_snprintf(errBuf, sizeof(errBuf), + "Could not find function %s",funcname); + PyErr_SetString(PyExc_ImportError, errBuf); + } + } + + } else { + PyOS_snprintf(errBuf, sizeof(errBuf), + "LDG load failed with error code %d", + ldg_error()); + PyErr_SetString(PyExc_ImportError, errBuf); + } + + return p; +}
\ No newline at end of file |
