summaryrefslogtreecommitdiff
path: root/external/core
diff options
context:
space:
mode:
authorJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-10 11:50:53 -0400
committerJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-10 11:50:53 -0400
commitd89bc67baf8e8f77de9240a4c991a6a98ff950c4 (patch)
treebb9bf303266e889f3245b90961e30be5985f6a91 /external/core
downloadgempy-d89bc67baf8e8f77de9240a4c991a6a98ff950c4.tar.gz
gempy-d89bc67baf8e8f77de9240a4c991a6a98ff950c4.zip
Initial commit.
Diffstat (limited to 'external/core')
-rw-r--r--external/core/dynload_mint.c70
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