From fce2b435d228d240e24656d6baf47f7d6022b730 Mon Sep 17 00:00:00 2001 From: Jeff Armstrong Date: Fri, 22 Jul 2011 22:09:16 -0400 Subject: Added basic VDI wrappers. Added messages module that was previously missing. --- lib/Makefile | 2 +- lib/gem.c | 19 ++++++++++- lib/py_vdi.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/py_vdi.h | 13 ++++++++ 4 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 lib/py_vdi.c create mode 100644 lib/py_vdi.h (limited to 'lib') diff --git a/lib/Makefile b/lib/Makefile index b98c2be..8fb947a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -6,7 +6,7 @@ CFLAGS = -g -O -I/e/Python-2.7.1/Include -I/e/Python-2.7.1 LIBS = -lgem -lldg -OBJECTS = gem.o py_aes.o +OBJECTS = gem.o py_aes.o py_vdi.o TARGET = _gem.ldg diff --git a/lib/gem.c b/lib/gem.c index 9ffe5aa..cbb3b5b 100644 --- a/lib/gem.c +++ b/lib/gem.c @@ -11,6 +11,7 @@ #include #include "py_aes.h" +#include "py_vdi.h" /* --- A GEM exception --- */ @@ -49,6 +50,14 @@ GemMethods[] = { {"wind_update", py_wind_update, METH_VARARGS, "Lock window redraw for updates"}, {"evnt_multi", py_evnt_multi, METH_VARARGS | METH_KEYWORDS, "Process multiple GEM events."}, + + /* 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"}, + {"v_bar", py_v_bar, METH_VARARGS, "Draw a filled rectangle"}, + {"v_ellipse", py_v_ellipse, METH_VARARGS, "Draw an ellipse"}, + {"vsf_color", py_vsf_color, METH_VARARGS, "Select the fill color index"}, + {"vs_clip", py_vs_clip, METH_VARARGS, "Set VDI clipping region"}, {NULL,NULL,0,NULL} }; @@ -117,11 +126,19 @@ PROC LibFunc[] = { /* AES Event Library */ "py_evnt_multi", "Internal\n", py_evnt_multi, + /* VDI Functions */ + "py_v_open_screen", "Internal\n", py_v_open_screen, + "py_v_clsvwk", "Internal\n", py_v_clsvwk, + "py_v_bar", "Internal\n", py_v_bar, + "py_v_ellipse", "Internal\n", py_v_ellipse, + "py_vsf_color", "Internal\n", py_vsf_color, + "py_vs_clip", "Internal\n", py_vs_clip, + NULL,NULL,NULL }; LDGLIB LibLdg[] = { - 0x0001, 23, LibFunc, "GEM Extensions for Python", 0 + 0x0001, 29, LibFunc, "GEM Extensions for Python", 0 }; int main( void) diff --git a/lib/py_vdi.c b/lib/py_vdi.c new file mode 100644 index 0000000..9c1dd7e --- /dev/null +++ b/lib/py_vdi.c @@ -0,0 +1,104 @@ +#include "ldg_Python.h" +#include + +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; +} diff --git a/lib/py_vdi.h b/lib/py_vdi.h new file mode 100644 index 0000000..4263d42 --- /dev/null +++ b/lib/py_vdi.h @@ -0,0 +1,13 @@ +#ifndef __PY_VDI_HEADERS +#define __PY_VDI_HEADERS + +#include "ldg_Python.h" + +PyObject* __CDECL py_v_open_screen(PyObject *self, PyObject *args); +PyObject* __CDECL py_v_clsvwk(PyObject *self, PyObject *args); +PyObject* __CDECL py_v_bar(PyObject *self, PyObject *args); +PyObject* __CDECL py_v_ellipse(PyObject *self, PyObject *args); +PyObject* __CDECL py_vsf_color(PyObject *self, PyObject *args); +PyObject* __CDECL py_vs_clip(PyObject *self, PyObject *args); + +#endif /* __PY_VDI_HEADERS */ -- cgit v1.2.3