summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-21 22:09:09 -0400
committerJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-21 22:09:09 -0400
commit4887bfbc732ff6ffe456a980874c65219ca08674 (patch)
treea307140f267617b4ec65aa5d61d1506039587c30 /lib
parente77d27c246b060c8c7e49031f18ec8c66edb7d15 (diff)
downloadgempy-4887bfbc732ff6ffe456a980874c65219ca08674.tar.gz
gempy-4887bfbc732ff6ffe456a980874c65219ca08674.zip
Added a simple example. Troubleshooting of evnt_multi.
Diffstat (limited to 'lib')
-rw-r--r--lib/gem.c6
-rw-r--r--lib/py_aes.c112
-rw-r--r--lib/py_aes.h5
3 files changed, 85 insertions, 38 deletions
diff --git a/lib/gem.c b/lib/gem.c
index b6041bd..d06f65b 100644
--- a/lib/gem.c
+++ b/lib/gem.c
@@ -22,6 +22,7 @@ GemMethods[] = {
{"appl_init", py_appl_init, METH_VARARGS, "Initialize a GEM application"},
{"appl_exit", py_appl_exit, METH_VARARGS, "Exit a GEM application"},
{"appl_write", py_appl_write, METH_VARARGS, "Send a message to a GEM application"},
+ {"appl_read", py_appl_read, METH_VARARGS, "Retrieve message data from a GEM application"},
/* AES Forms Library */
{"form_alert", py_form_alert, METH_VARARGS, "Display a GEM alert dialog"},
@@ -46,7 +47,7 @@ GemMethods[] = {
{"wind_set", py_wind_set, METH_VARARGS, "Set a window parameter"},
{"wind_update", py_wind_update, METH_VARARGS, "Lock window redraw for updates"},
- {"evnt_multi", py_evnt_multi, METH_KEYWORDS | METH_VARARGS, "Process multiple GEM events."},
+ {"evnt_multi", py_evnt_multi, METH_VARARGS, "Process multiple GEM events."},
{NULL,NULL,0,NULL}
};
@@ -86,6 +87,7 @@ PROC LibFunc[] = {
"py_appl_exit", "Internal\n", py_appl_exit,
"py_appl_init", "Internal\n", py_appl_init,
"py_appl_write", "Internal\n", py_appl_write,
+ "py_appl_read", "Internal\n", py_appl_read,
/* AES Forms Library */
"py_form_alert", "Internal\n", py_form_alert,
@@ -117,7 +119,7 @@ PROC LibFunc[] = {
};
LDGLIB LibLdg[] = {
- 0x0001, 21, LibFunc, "GEM Extensions for Python", 0
+ 0x0001, 22, LibFunc, "GEM Extensions for Python", 0
};
int main( void)
diff --git a/lib/py_aes.c b/lib/py_aes.c
index 539fbbf..ede4788 100644
--- a/lib/py_aes.c
+++ b/lib/py_aes.c
@@ -35,6 +35,40 @@ int msg_length;
return Py_BuildValue("i",ret);
}
+PyObject* __CDECL py_appl_read(PyObject *self, PyObject *args)
+{
+int ret;
+int app_id;
+char *message;
+int msg_length;
+PyObject *ret_obj;
+
+ if(!PyArg_ParseTuple(args,"ii",&app_id,&msg_length))
+ return NULL;
+
+ if(msg_length <= 0) {
+ PyErr_SetString(GEMError,"Data length of zero requested in appl_read");
+ return NULL;
+ }
+
+ message = (char *)malloc(msg_length*sizeof(char));
+ ret = appl_read(app_id,msg_length,message);
+
+ if(ret == 0) {
+ PyErr_SetString(GEMError,"Application read request failed");
+ return NULL;
+ }
+
+#ifdef PYTHON_3_API
+ ret_obj = Py_BuildValue("y#",ret_obj,msg_length);
+#else
+ ret_obj = Py_BuildValue("s#",ret_obj,msg_length);
+#endif
+
+ free(message);
+ return ret_obj;
+}
+
/* --- Forms Library --- */
PyObject* __CDECL py_form_alert(PyObject *self, PyObject *args)
{
@@ -378,6 +412,11 @@ PyObject *tpl;
/* --- Event Library --- */
PyObject* __CDECL py_evnt_multi(PyObject self, PyObject *args, PyObject *kwargs)
{
+
+EVMULT_IN em_in;
+EVMULT_OUT em_out;
+
+
/* Because this is possibly the ugliest call ever created in the C
* language, we'll use the same variable names as the docs use.
*/
@@ -385,7 +424,7 @@ int ev_mflags, ev_mbclicks, ev_mbmask, ev_mbstate, ev_mm1flags, ev_mm1x, ev_mm1y
int ev_mm2x, ev_mm2y, ev_mm2width, ev_mm2height, ev_mtlocount, ev_mthicount, ev_mmox, ev_mmoy;
int ev_mmbutton, ev_mmokstate, ev_mkreturn, ev_mbreturn;
-int message[8];
+static char message[16];
int ret;
@@ -399,52 +438,57 @@ static char *kwlist[] = {"mouse_buttons","mouse_movement","timer",NULL};
mmovement = NULL;
timer = 0l;
- if(!PyArg_ParseTupleAndKeywords(args, kwargs, "i|OOl", kwlist,
- &ev_mflags, &mbuttons, &mmovement, &timer))
- return NULL;
+ form_alert(0,"[3][Start evnt_multi][Ok]");
+ //if(!PyArg_ParseTupleAndKeywords(args, kwargs, "i|OOl", kwlist,
+ // &ev_mflags, &mbuttons, &mmovement, &timer))
+ if(!PyArg_ParseTuple(args,"i",&ev_mflags))
+ return NULL;
+
+ form_alert(0,"[3][Args parsed][Ok]");
+ em_in.emi_flags = ev_mflags;
+
/* Timer handling */
- ev_mtlocount = loword(timer);
- ev_mthicount = hiword(timer);
+ em_in.emi_tlow = loword(timer);
+ em_in.emi_thigh = hiword(timer);
/* Mouse button handling */
if(mbuttons != NULL) {
PyArg_ParseTuple(mbuttons,"iii",&ev_mbclicks,&ev_mbmask,&ev_mbstate);
+ em_in.emi_bclicks = (short)ev_mbclicks;
+ em_in.emi_bmask = (short)ev_mbmask;
+ em_in.emi_bstate = (short)ev_mbstate;
}
/* Mouse movement handling */
if(mmovement != NULL) {
PyArg_ParseTuple(mmovement,"(iiiii)(iiiii)",&ev_mm1flags,&ev_mm1x,&ev_mm1y,&ev_mm1width,ev_mm1height,
&ev_mm2flags,&ev_mm2x,&ev_mm2y,&ev_mm2width,ev_mm2height);
+ em_in.emi_m1leave = (short)ev_mm1flags;
+ em_in.emi_m1.g_x = (short)ev_mm1x;
+ em_in.emi_m1.g_y = (short)ev_mm1y;
+ em_in.emi_m1.g_w = (short)ev_mm1width;
+ em_in.emi_m1.g_h = (short)ev_mm1height;
+
+ em_in.emi_m2leave = (short)ev_mm2flags;
+ em_in.emi_m2.g_x = (short)ev_mm2x;
+ em_in.emi_m2.g_y = (short)ev_mm2y;
+ em_in.emi_m2.g_w = (short)ev_mm2width;
+ em_in.emi_m2.g_h = (short)ev_mm2height;
}
- /* More is still needed */
- ret = evnt_multi(ev_mflags,
- ev_mbclicks,
- ev_mbmask,
- ev_mbstate,
- ev_mm1flags,
- ev_mm1x,
- ev_mm1y,
- ev_mm1width,
- ev_mm1height,
- ev_mm2flags,
- ev_mm2x,
- ev_mm2y,
- ev_mm2width,
- ev_mm2height,
- message,
- ev_mtlocount,
- ev_mthicount,
- &ev_mmox,
- &ev_mmoy,
- &ev_mmbutton,
- &ev_mmokstate,
- /* &ev_mkreturn, */
- &ev_mbreturn);
-
- return Py_BuildValue("{s:i,s:i,s:(ii),s:(iii),s:i}", "events", ret, "message", message,
- "mouse_position", ev_mmox, ev_mmoy, "mouse_button", ev_mmbutton, ev_mmokstate, ev_mbreturn,
- "key", ev_mkreturn);
+ /* Use the not-so-portable fast multi call */
+ ret = evnt_multi_fast(&em_in, message, &em_out);
+ form_alert(0,"[3][Args parsed][Ok]");
+//#ifdef PYTHON_3_API
+ //return Py_BuildValue("{s:i,s:y#,s:(ii),s:(ii),s:(ii)}",
+//#else
+ return Py_BuildValue("{s:i,s:s#,s:(ii),s:(ii),s:(ii)}",
+//#endif
+ "events", ret,
+ "message", message, 16,
+ "mouse_position", (int)em_out.emo_mouse.p_x, (int)em_out.emo_mouse.p_y,
+ "mouse_button", (int)em_out.emo_mbutton, (int)em_out.emo_mclicks,
+ "key", (int)em_out.emo_kreturn,(int)em_out.emo_kmeta);
}
diff --git a/lib/py_aes.h b/lib/py_aes.h
index 024aac0..81beb50 100644
--- a/lib/py_aes.h
+++ b/lib/py_aes.h
@@ -6,6 +6,7 @@
PyObject* __CDECL py_appl_init(PyObject *self, PyObject *args);
PyObject* __CDECL py_appl_exit(PyObject *self, PyObject *args);
PyObject* __CDECL py_appl_write(PyObject *self, PyObject *args);
+ PyObject* __CDECL py_appl_read(PyObject *self, PyObject *args);
PyObject* __CDECL py_form_alert(PyObject *self, PyObject *args);
PyObject* __CDECL py_form_dial(PyObject *self, PyObject *args);
@@ -15,7 +16,7 @@
PyObject* __CDECL py_graf_handle(PyObject self, PyObject *args);
PyObject* __CDECL py_graf_mouse(PyObject self, PyObject *args);
-PyObject* __CDECL py_rsrc_load(PyObject *self, PyObject *args);
+ PyObject* __CDECL py_rsrc_load(PyObject *self, PyObject *args);
PyObject* __CDECL py_rsrc_gaddr(PyObject *self, PyObject *args);
PyObject* __CDECL py_wind_create(PyObject *self, PyObject *args);
@@ -26,6 +27,6 @@ PyObject* __CDECL py_rsrc_load(PyObject *self, PyObject *args);
PyObject* __CDECL py_wind_set(PyObject *self, PyObject *args);
PyObject* __CDECL py_wind_update(PyObject *self, PyObject *args);
- PyObject* __CDECL py_evnt_multi(PyObject self, PyObject *args, PyObject *kwargs);
+ PyObject* __CDECL py_evnt_multi(PyObject self, PyObject *args);
#endif /* __PY_AES_HEADERS */