added constant registration capability
This commit is contained in:
parent
c97b0f7194
commit
5ff7bd0858
|
@ -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!!!')
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user