added constant registration capability

This commit is contained in:
Amy Bowersox 2019-12-09 12:28:28 -07:00
parent c97b0f7194
commit 5ff7bd0858
4 changed files with 81 additions and 20 deletions

View File

@ -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!!!')

View File

@ -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;
}

View File

@ -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;
}

View File

@ -5,7 +5,26 @@
#include <Python.h>
#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 */