diff --git a/scripts/tmp_main.py b/scripts/tmp_main.py index e694840..9152af5 100644 --- a/scripts/tmp_main.py +++ b/scripts/tmp_main.py @@ -1,25 +1,16 @@ # Initial test script import upiwin_tmp -FBPRIMCLR_BLACK = 0x0000 -FBPRIMCLR_RED = 0xF800 -FBPRIMCLR_GREEN = 0x07E0 -FBPRIMCLR_BLUE = 0x001F -FBPRIMCLR_YELLOW = 0xFFE0 -FBPRIMCLR_CYAN = 0x07FF -FBPRIMCLR_MAGENTA = 0xF81F -FBPRIMCLR_WHITE = 0xFFFF +upiwin_tmp.filled_rectangle(10, 10, 50, 50, upiwin_tmp.FBPRIMCLR_RED, False) +upiwin_tmp.filled_rectangle(60, 10, 100, 50, upiwin_tmp.FBPRIMCLR_GREEN, False) +upiwin_tmp.filled_rectangle(110, 10, 150, 50, upiwin_tmp.FBPRIMCLR_BLUE, False) +upiwin_tmp.filled_rectangle(10, 60, 50, 100, upiwin_tmp.FBPRIMCLR_CYAN, False) +upiwin_tmp.filled_rectangle(60, 60, 100, 100, upiwin_tmp.FBPRIMCLR_MAGENTA, False) +upiwin_tmp.filled_rectangle(110, 60, 150, 100, upiwin_tmp.FBPRIMCLR_YELLOW, False) +upiwin_tmp.rectangle(10, 110, 150, 150, upiwin_tmp.FBPRIMCLR_WHITE, False) +upiwin_tmp.line(10, 110, 150, 150, upiwin_tmp.FBPRIMCLR_WHITE, False) +upiwin_tmp.line(10, 150, 150, 110, upiwin_tmp.FBPRIMCLR_WHITE, False) -upiwin_tmp.filled_rectangle(10, 10, 50, 50, FBPRIMCLR_RED, False) -upiwin_tmp.filled_rectangle(60, 10, 100, 50, FBPRIMCLR_GREEN, False) -upiwin_tmp.filled_rectangle(110, 10, 150, 50, FBPRIMCLR_BLUE, False) -upiwin_tmp.filled_rectangle(10, 60, 50, 100, FBPRIMCLR_CYAN, False) -upiwin_tmp.filled_rectangle(60, 60, 100, 100, FBPRIMCLR_MAGENTA, False) -upiwin_tmp.filled_rectangle(110, 60, 150, 100, FBPRIMCLR_YELLOW, False) -upiwin_tmp.rectangle(10, 110, 150, 150, FBPRIMCLR_WHITE, False) -upiwin_tmp.line(10, 110, 150, 150, FBPRIMCLR_WHITE, False) -upiwin_tmp.line(10, 150, 150, 110, FBPRIMCLR_WHITE, False) - -upiwin_tmp.line(0, 180, 319, 180, FBPRIMCLR_RED, False); -upiwin_tmp.line(0, 196, 319, 196, FBPRIMCLR_RED, False); +upiwin_tmp.line(0, 180, 319, 180, upiwin_tmp.FBPRIMCLR_RED, False); +upiwin_tmp.line(0, 196, 319, 196, upiwin_tmp.FBPRIMCLR_RED, False); upiwin_tmp.textout(10, 180, 'Amy was here!!!') diff --git a/src/ep_upiwin_tmp.c b/src/ep_upiwin_tmp.c index 339f72a..51adcfb 100644 --- a/src/ep_upiwin_tmp.c +++ b/src/ep_upiwin_tmp.c @@ -3,6 +3,7 @@ #include "scode.h" #include "fbprimitive.h" #include "ep_init.h" +#include "ep_util.h" static PyObject *do_setpixel(PyObject *self, PyObject *args) { @@ -84,10 +85,30 @@ static PyModuleDef DefUPIWIN_tmp = { NULL /* no free function */ }; +BEGIN_CONSTANT_TABLE(UPIWIN_tmpConstants) + /* primitive color values */ + CONSTANT_INT_MACRO(FBPRIMCLR_BLACK) + CONSTANT_INT_MACRO(FBPRIMCLR_RED) + CONSTANT_INT_MACRO(FBPRIMCLR_GREEN) + CONSTANT_INT_MACRO(FBPRIMCLR_BLUE) + CONSTANT_INT_MACRO(FBPRIMCLR_YELLOW) + CONSTANT_INT_MACRO(FBPRIMCLR_CYAN) + CONSTANT_INT_MACRO(FBPRIMCLR_MAGENTA) + CONSTANT_INT_MACRO(FBPRIMCLR_WHITE) +END_CONSTANT_TABLE + PyObject *Epython_init_upiwin_tmp_module(void) { PyObject *module; module = PyModule_Create(&DefUPIWIN_tmp); + if (module) + { + if (FAILED(Epython_register_constants(module, UPIWIN_tmpConstants))) + { + Py_DECREF(module); + module = NULL; + } + } return module; } diff --git a/src/ep_util.c b/src/ep_util.c index ee12f4a..61184af 100644 --- a/src/ep_util.c +++ b/src/ep_util.c @@ -42,3 +42,33 @@ HRESULT Epython_trace_exception(void) Py_DECREF(traceback); return hr; } + +HRESULT Epython_register_constants(PyObject *module, PCREGCONSTANT const_table) +{ + HRESULT hr = S_OK; + int i = 0, rc; + + while (const_table[i].name) + { + switch (const_table[i].regtype) + { + case 'i': + rc = PyModule_AddIntConstant(module, const_table[i].name, const_table[i].value.ival); + break; + case 's': + rc = PyModule_AddStringConstant(module, const_table[i].name, const_table[i].value.sval); + break; + default; + Log(LERROR, "register_constants type '%c' unknown", const_table[i].regtype); + return E_UNEXPECTED; + } + if (!rc) + { + hr = E_FAIL; + break; + } + ++i; + } + + return hr; +} diff --git a/src/ep_util.h b/src/ep_util.h index 5644889..0406aca 100644 --- a/src/ep_util.h +++ b/src/ep_util.h @@ -5,7 +5,26 @@ #include #include "wintype.h" +typedef struct tagREGCONSTANT { + CHAR regtype; + PCSTR name; + union { + LONG ival; + PCSTR sval; + } value; +} REGCONSTANT, *PREGCONSTANT; + +typedef const REGCONSTANT *PCREGCONSTANT; + extern void Epython_log_object(int level, const char *label, PyObject *object); extern HRESULT Epython_trace_exception(void); +extern HRESULT Epython_register_constants(PyObject *module, PCREGCONSTANT const_table); + +#define BEGIN_CONSTANT_TABLE(name) static const REGCONSTANT name[] = { +#define CONSTANT_INT(name, value) { 'i', name, { .ival = value } }, +#define CONSTANT_INT_MACRO(mac) CONSTANT_INT(#mac, mac) +#define CONSTANT_STRING(name, value) { 's', name, { .sval = value } }, +#define CONSTANT_STRING_MACRO(mac) CONSTANT_STRING(#mac, mac) +#define END_CONSTANT_TABLE { 0, NULL, { .sval = NULL } } }; #endif /* __EP_UTIL_H_INCLUDED */