summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-24 22:26:32 -0400
committerJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-24 22:26:32 -0400
commit5eaecae93f7ba32b6bec9515dfa465130bc8b808 (patch)
tree8eccbc1aafdbffc2684b43e77cffa0f9dbe7ecbd /lib
parentfce2b435d228d240e24656d6baf47f7d6022b730 (diff)
downloadgempy-5eaecae93f7ba32b6bec9515dfa465130bc8b808.tar.gz
gempy-5eaecae93f7ba32b6bec9515dfa465130bc8b808.zip
Added VDI routines. Added proper resource handling, some menu library code, and object library code.
Diffstat (limited to 'lib')
-rw-r--r--lib/gem.c15
-rw-r--r--lib/py_aes.c54
-rw-r--r--lib/py_aes.h4
-rw-r--r--lib/py_vdi.c208
4 files changed, 172 insertions, 109 deletions
diff --git a/lib/gem.c b/lib/gem.c
index cbb3b5b..f842dd1 100644
--- a/lib/gem.c
+++ b/lib/gem.c
@@ -49,8 +49,15 @@ GemMethods[] = {
{"wind_set_string", py_wind_set_string, METH_VARARGS, "Set a string window parameter"},
{"wind_update", py_wind_update, METH_VARARGS, "Lock window redraw for updates"},
+ /* AES Event Libary */
{"evnt_multi", py_evnt_multi, METH_VARARGS | METH_KEYWORDS, "Process multiple GEM events."},
+ /* AES Menu Library */
+ {"menu_bar", py_menu_bar, METH_VARARGS, "Install or hide a GEM menubar"},
+
+ /* AES Object Library */
+ {"objc_draw", py_objc_draw, METH_VARARGS, "Draw an AES object to the screen"},
+
/* VDI Functions */
{"v_open_screen", py_v_open_screen, METH_NOARGS, "Open and retrieve a handle to a virtual screen workstation"},
{"v_clsvwk", py_v_clsvwk, METH_VARARGS, "Close a virtual workstation"},
@@ -126,6 +133,12 @@ PROC LibFunc[] = {
/* AES Event Library */
"py_evnt_multi", "Internal\n", py_evnt_multi,
+ /* AES Menu Library */
+ "py_menu_bar", "Internal\n", py_menu_bar,
+
+ /* AES Object Library */
+ "py_objc_draw", "Internal\n", py_objc_draw,
+
/* VDI Functions */
"py_v_open_screen", "Internal\n", py_v_open_screen,
"py_v_clsvwk", "Internal\n", py_v_clsvwk,
@@ -138,7 +151,7 @@ PROC LibFunc[] = {
};
LDGLIB LibLdg[] = {
- 0x0001, 29, LibFunc, "GEM Extensions for Python", 0
+ 0x0001, 31, LibFunc, "GEM Extensions for Python", 0
};
int main( void)
diff --git a/lib/py_aes.c b/lib/py_aes.c
index b112876..e221ba8 100644
--- a/lib/py_aes.c
+++ b/lib/py_aes.c
@@ -26,11 +26,17 @@ PyObject* __CDECL py_appl_write(PyObject *self, PyObject *args)
int ret;
int app_id;
char *message;
+int buflen;
int msg_length;
- if(!PyArg_ParseTuple(args,"iiy*",&app_id,&msg_length,&message))
+ if(!PyArg_ParseTuple(args,"iis#",&app_id,&msg_length,&message,&buflen))
return NULL;
+ if(buflen < msg_length) {
+ PyErr_SetString(GEMError,"Data length's are dangerously inconsistent in appl_write");
+ return NULL;
+ }
+
ret = appl_write(app_id,msg_length,message);
return Py_BuildValue("i",ret);
}
@@ -122,13 +128,12 @@ PyObject *obj;
short x,y,w,h;
int ret;
- if(!PyArg_ParseTuple(args,"O(hhhh)",&obj,&x,&y,&w,&h))
+ if(!PyArg_ParseTuple(args,"O",&obj))
return NULL;
form_center(PyCapsule_GetPointer(obj,NULL),&x,&y,&w,&h);
- Py_INCREF(Py_None);
- return Py_None;
+ return Py_BuildValue("(iiii)",(int)x,(int)y,(int)w,(int)h);
}
/* --- Graphics Library --- */
@@ -505,3 +510,44 @@ static char *kwlist[] = {"mouse_buttons","mouse_movement","timer",NULL};
"key", (int)em_out.emo_kreturn,(int)em_out.emo_kmeta);
}
+/* Menu Library */
+PyObject* __CDECL py_menu_bar(PyObject *self, PyObject *args)
+{
+PyObject *object;
+int action;
+int ret;
+
+ if(!PyArg_ParseTuple(args,"Oi",&object, &action))
+ return NULL;
+
+ ret = menu_bar(PyCapsule_GetPointer(object,NULL),action);
+
+ if(ret == 0) {
+ PyErr_SetString(GEMError,"Menu bar failed to set properly");
+ return NULL;
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+/* Object Library */
+PyObject* __CDECL py_objc_draw(PyObject *self, PyObject *args)
+{
+PyObject *object;
+int id,depth;
+int cx, cy, cw, ch;
+int ret;
+
+ if(!PyArg_ParseTuple(args,"Oii(iiii)",&object,&id,&depth,&cx,&cy,&cw,&ch))
+ return NULL;
+
+ ret = objc_draw(PyCapsule_GetPointer(object,NULL),id,depth,cx,cy,cw,ch);
+
+ if(ret == 0) {
+ PyErr_SetString(GEMError,"Object draw call failed");
+ return NULL;
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+} \ No newline at end of file
diff --git a/lib/py_aes.h b/lib/py_aes.h
index e9bf132..98eff67 100644
--- a/lib/py_aes.h
+++ b/lib/py_aes.h
@@ -29,5 +29,9 @@
PyObject* __CDECL py_wind_update(PyObject *self, PyObject *args);
PyObject* __CDECL py_evnt_multi(PyObject *self, PyObject *args, PyObject *kwargs);
+
+ PyObject* __CDECL py_menu_bar(PyObject *self, PyObject *args);
+
+ PyObject* __CDECL py_objc_draw(PyObject *self, PyObject *args);
#endif /* __PY_AES_HEADERS */
diff --git a/lib/py_vdi.c b/lib/py_vdi.c
index 9c1dd7e..fe9fbe1 100644
--- a/lib/py_vdi.c
+++ b/lib/py_vdi.c
@@ -1,104 +1,104 @@
-#include "ldg_Python.h"
-#include <gem.h>
-
-PyObject* __CDECL py_v_open_screen(PyObject *self, PyObject *args)
-{
-int i;
-short work_in[16];
-short work_out[57];
-
-short vdi_handle;
-
- for(i=1;i<16;i++)
- work_in[i] = (short)0; /* General Defaults */
-
- work_in[0] = (short)1; /* Current Resolution */
- work_in[10] = (short)2; /* Necessary for screen drawing */
-
- v_opnvwk(work_in, &vdi_handle, work_out);
-
- /* For now, ignore the work_out array */
-
- return Py_BuildValue("i",(int)vdi_handle);
-}
-
-PyObject* __CDECL py_v_clsvwk(PyObject *self, PyObject *args)
-{
-int handle;
-
- if(!PyArg_ParseTuple(args,"i",&handle))
- return NULL;
-
- v_clsvwk(handle);
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-PyObject* __CDECL py_v_bar(PyObject *self, PyObject *args)
-{
-int handle;
-int x1, y1, x2, y2;
-short pxarray[4];
-
- if(!PyArg_ParseTuple(args,"i(ii)(ii)",&handle, &x1, &y1, &x2, &y2))
- return NULL;
-
- pxarray[0] = x1;
- pxarray[1] = y1;
- pxarray[2] = x2;
- pxarray[3] = y2;
-
- v_bar(handle,pxarray);
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-PyObject* __CDECL py_v_ellipse(PyObject *self, PyObject *args)
-{
-int handle;
-int x1, y1, xr, yr;
-
- if(!PyArg_ParseTuple(args,"i(ii)(ii)",&handle, &x1, &y1, &xr, &yr))
- return NULL;
-
- v_ellipse(handle,x1,y1,xr,yr);
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-PyObject* __CDECL py_vsf_color(PyObject *self, PyObject *args)
-{
-int handle;
-int index;
-
- if(!PyArg_ParseTuple(args,"ii",&handle, &index))
- return NULL;
-
- index = vsf_color(handle,index);
-
- return Py_BuildValue("i",index);
-}
-
-PyObject* __CDECL py_vs_clip(PyObject *self, PyObject *args)
-{
-int handle;
-int x1, y1, x2, y2;
-int enable;
-short pxarray[4];
-
- if(!PyArg_ParseTuple(args,"ii(ii)(ii)",&handle, &enable, &x1, &y1, &x2, &y2))
- return NULL;
-
- pxarray[0] = (short)x1;
- pxarray[1] = (short)y1;
- pxarray[2] = (short)x2;
- pxarray[3] = (short)y2;
-
- vs_clip(handle,enable,pxarray);
-
- Py_INCREF(Py_None);
- return Py_None;
-}
+#include "ldg_Python.h"
+#include <gem.h>
+
+PyObject* __CDECL py_v_open_screen(PyObject *self, PyObject *args)
+{
+int i;
+short work_in[16];
+short work_out[57];
+
+short vdi_handle;
+
+ for(i=1;i<16;i++)
+ work_in[i] = (short)0; /* General Defaults */
+
+ work_in[0] = (short)1; /* Current Resolution */
+ work_in[10] = (short)2; /* Necessary for screen drawing */
+
+ v_opnvwk(work_in, &vdi_handle, work_out);
+
+ /* For now, ignore the work_out array */
+
+ return Py_BuildValue("i",(int)vdi_handle);
+}
+
+PyObject* __CDECL py_v_clsvwk(PyObject *self, PyObject *args)
+{
+int handle;
+
+ if(!PyArg_ParseTuple(args,"i",&handle))
+ return NULL;
+
+ v_clsvwk(handle);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* __CDECL py_v_bar(PyObject *self, PyObject *args)
+{
+int handle;
+int x1, y1, x2, y2;
+short pxarray[4];
+
+ if(!PyArg_ParseTuple(args,"i(ii)(ii)",&handle, &x1, &y1, &x2, &y2))
+ return NULL;
+
+ pxarray[0] = (short)x1;
+ pxarray[1] = (short)y1;
+ pxarray[2] = (short)x2;
+ pxarray[3] = (short)y2;
+
+ v_bar(handle,pxarray);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* __CDECL py_v_ellipse(PyObject *self, PyObject *args)
+{
+int handle;
+int x1, y1, xr, yr;
+
+ if(!PyArg_ParseTuple(args,"i(ii)(ii)",&handle, &x1, &y1, &xr, &yr))
+ return NULL;
+
+ v_ellipse(handle,x1,y1,xr,yr);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* __CDECL py_vsf_color(PyObject *self, PyObject *args)
+{
+int handle;
+int index;
+
+ if(!PyArg_ParseTuple(args,"ii",&handle, &index))
+ return NULL;
+
+ index = vsf_color(handle,index);
+
+ return Py_BuildValue("i",index);
+}
+
+PyObject* __CDECL py_vs_clip(PyObject *self, PyObject *args)
+{
+int handle;
+int x1, y1, x2, y2;
+int enable;
+short pxarray[4];
+
+ if(!PyArg_ParseTuple(args,"ii(ii)(ii)",&handle, &enable, &x1, &y1, &x2, &y2))
+ return NULL;
+
+ pxarray[0] = (short)x1;
+ pxarray[1] = (short)y1;
+ pxarray[2] = (short)x2;
+ pxarray[3] = (short)y2;
+
+ vs_clip(handle,enable,pxarray);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}