Huge Cleaning - NW modules on fxCG50 - Ready for PR - Phase II

This commit is contained in:
Sylvain PILLOT 2024-02-02 20:36:19 +01:00
parent 12565ba8d2
commit e3fd785200
2 changed files with 229 additions and 224 deletions

View File

@ -347,6 +347,13 @@ int main(int argc, char **argv)
keydev_set_async_filter(keydev_std(), async_filter);
/* Make delayed shift/alpha permanent so the stay between calls to
jscene_run() and can be used for delayed key combos */
keydev_transform_t tr = keydev_transform(keydev_std());
tr.enabled |= KEYDEV_TR_DELAYED_SHIFT;
tr.enabled |= KEYDEV_TR_DELAYED_ALPHA;
keydev_set_transform(keydev_std(), tr);
PE.console = console_create(8192, 200);
/* Set up standard streams */

View File

@ -9,120 +9,138 @@
// considered relevant for high-level Python development).
//---
#include "console.h"
#include "py/objtuple.h"
#include "py/runtime.h"
#include "py/objtuple.h"
#include <gint/display.h>
#include <gint/keyboard.h>
#include <stdio.h>
#include <stdlib.h>
void pe_enter_graphics_mode(void);
#define FUN_0(NAME) \
MP_DEFINE_CONST_FUN_OBJ_0(modgint_##NAME##_obj, modgint_##NAME)
#define FUN_1(NAME) \
MP_DEFINE_CONST_FUN_OBJ_1(modgint_##NAME##_obj, modgint_##NAME)
#define FUN_2(NAME) \
MP_DEFINE_CONST_FUN_OBJ_2(modgint_##NAME##_obj, modgint_##NAME)
#define FUN_3(NAME) \
MP_DEFINE_CONST_FUN_OBJ_3(modgint_##NAME##_obj, modgint_##NAME)
#define FUN_VAR(NAME, MIN) \
MP_DEFINE_CONST_FUN_OBJ_VAR(modgint_##NAME##_obj, MIN, modgint_##NAME)
#define FUN_BETWEEN(NAME, MIN, MAX) \
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modgint_##NAME##_obj, MIN, MAX, \
modgint_##NAME)
#define FUN_0(NAME) \
MP_DEFINE_CONST_FUN_OBJ_0(modgint_ ## NAME ## _obj, modgint_ ## NAME)
#define FUN_1(NAME) \
MP_DEFINE_CONST_FUN_OBJ_1(modgint_ ## NAME ## _obj, modgint_ ## NAME)
#define FUN_2(NAME) \
MP_DEFINE_CONST_FUN_OBJ_2(modgint_ ## NAME ## _obj, modgint_ ## NAME)
#define FUN_3(NAME) \
MP_DEFINE_CONST_FUN_OBJ_3(modgint_ ## NAME ## _obj, modgint_ ## NAME)
#define FUN_VAR(NAME, MIN) \
MP_DEFINE_CONST_FUN_OBJ_VAR(modgint_ ## NAME ## _obj, MIN, \
modgint_ ## NAME)
#define FUN_BETWEEN(NAME, MIN, MAX) \
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modgint_ ## NAME ## _obj, MIN, MAX, \
modgint_ ## NAME)
STATIC mp_obj_t modgint___init__(void) {
pe_enter_graphics_mode();
dclear(C_WHITE);
return mp_const_none;
STATIC mp_obj_t modgint___init__(void)
{
pe_enter_graphics_mode();
dclear(C_WHITE);
return mp_const_none;
}
/* <gint/keyboard.h> */
STATIC qstr const key_event_fields[] = {
MP_QSTR_time, MP_QSTR_mod, MP_QSTR_shift,
MP_QSTR_alpha, MP_QSTR_type, MP_QSTR_key,
MP_QSTR_time,
MP_QSTR_mod,
MP_QSTR_shift,
MP_QSTR_alpha,
MP_QSTR_type,
MP_QSTR_key,
};
STATIC mp_obj_t mk_key_event(key_event_t ev) {
mp_obj_t items[] = {
mp_obj_new_int(ev.time), mp_obj_new_bool(ev.mod),
mp_obj_new_bool(ev.shift), mp_obj_new_bool(ev.alpha),
mp_obj_new_int(ev.type), mp_obj_new_int(ev.key),
};
return mp_obj_new_attrtuple(key_event_fields, 6, items);
STATIC mp_obj_t mk_key_event(key_event_t ev)
{
mp_obj_t items[] = {
mp_obj_new_int(ev.time),
mp_obj_new_bool(ev.mod),
mp_obj_new_bool(ev.shift),
mp_obj_new_bool(ev.alpha),
mp_obj_new_int(ev.type),
mp_obj_new_int(ev.key),
};
return mp_obj_new_attrtuple(key_event_fields, 6, items);
}
STATIC mp_obj_t modgint_pollevent(void) {
key_event_t ev = pollevent();
return mk_key_event(ev);
STATIC mp_obj_t modgint_pollevent(void)
{
key_event_t ev = pollevent();
return mk_key_event(ev);
}
// TODO: waitevent: timeout parameter?
STATIC mp_obj_t modgint_clearevents(void) {
clearevents();
return mp_const_none;
STATIC mp_obj_t modgint_clearevents(void)
{
clearevents();
return mp_const_none;
}
STATIC mp_obj_t modgint_cleareventflips(void) {
cleareventflips();
return mp_const_none;
STATIC mp_obj_t modgint_cleareventflips(void)
{
cleareventflips();
return mp_const_none;
}
STATIC mp_obj_t modgint_keydown(mp_obj_t arg1) {
mp_int_t key = mp_obj_get_int(arg1);
bool down = keydown(key) != 0;
return mp_obj_new_bool(down);
STATIC mp_obj_t modgint_keydown(mp_obj_t arg1)
{
mp_int_t key = mp_obj_get_int(arg1);
bool down = keydown(key) != 0;
return mp_obj_new_bool(down);
}
STATIC mp_obj_t modgint_keydown_all(size_t n, mp_obj_t const *args) {
bool down = true;
for (size_t i = 0; i < n; i++)
down &= keydown(mp_obj_get_int(args[i])) != 0;
return mp_obj_new_bool(down);
STATIC mp_obj_t modgint_keydown_all(size_t n, mp_obj_t const *args)
{
bool down = true;
for(size_t i = 0; i < n; i++)
down &= keydown(mp_obj_get_int(args[i])) != 0;
return mp_obj_new_bool(down);
}
STATIC mp_obj_t modgint_keydown_any(size_t n, mp_obj_t const *args) {
bool down = false;
for (size_t i = 0; i < n; i++)
down |= keydown(mp_obj_get_int(args[i])) != 0;
return mp_obj_new_bool(down);
STATIC mp_obj_t modgint_keydown_any(size_t n, mp_obj_t const *args)
{
bool down = false;
for(size_t i = 0; i < n; i++)
down |= keydown(mp_obj_get_int(args[i])) != 0;
return mp_obj_new_bool(down);
}
STATIC mp_obj_t modgint_keypressed(mp_obj_t arg1) {
mp_int_t key = mp_obj_get_int(arg1);
return mp_obj_new_bool(keypressed(key) != 0);
STATIC mp_obj_t modgint_keypressed(mp_obj_t arg1)
{
mp_int_t key = mp_obj_get_int(arg1);
return mp_obj_new_bool(keypressed(key) != 0);
}
STATIC mp_obj_t modgint_keyreleased(mp_obj_t arg1) {
mp_int_t key = mp_obj_get_int(arg1);
return mp_obj_new_bool(keyreleased(key) != 0);
STATIC mp_obj_t modgint_keyreleased(mp_obj_t arg1)
{
mp_int_t key = mp_obj_get_int(arg1);
return mp_obj_new_bool(keyreleased(key) != 0);
}
STATIC mp_obj_t modgint_getkey(void) {
key_event_t ev = getkey();
return mk_key_event(ev);
STATIC mp_obj_t modgint_getkey(void)
{
key_event_t ev = getkey();
return mk_key_event(ev);
}
// TODO: getkey_opt: timeout parameter?
STATIC mp_obj_t modgint_getkey_opt(mp_obj_t arg1) {
int options = mp_obj_get_int(arg1);
key_event_t ev = getkey_opt(options, NULL);
return mk_key_event(ev);
STATIC mp_obj_t modgint_getkey_opt(mp_obj_t arg1)
{
int options = mp_obj_get_int(arg1);
key_event_t ev = getkey_opt(options, NULL);
return mk_key_event(ev);
}
STATIC mp_obj_t modgint_keycode_function(mp_obj_t arg1) {
int keycode = mp_obj_get_int(arg1);
return MP_OBJ_NEW_SMALL_INT(keycode_function(keycode));
STATIC mp_obj_t modgint_keycode_function(mp_obj_t arg1)
{
int keycode = mp_obj_get_int(arg1);
return MP_OBJ_NEW_SMALL_INT(keycode_function(keycode));
}
STATIC mp_obj_t modgint_keycode_digit(mp_obj_t arg1) {
int keycode = mp_obj_get_int(arg1);
return MP_OBJ_NEW_SMALL_INT(keycode_digit(keycode));
STATIC mp_obj_t modgint_keycode_digit(mp_obj_t arg1)
{
int keycode = mp_obj_get_int(arg1);
return MP_OBJ_NEW_SMALL_INT(keycode_digit(keycode));
}
FUN_0(clearevents);
@ -134,168 +152,152 @@ FUN_VAR(keydown_any, 0);
FUN_1(keypressed);
FUN_1(keyreleased);
FUN_0(getkey);
FUN_1 /*2*/ (getkey_opt);
FUN_1/*2*/(getkey_opt);
FUN_1(keycode_function);
FUN_1(keycode_digit);
/* <gint/display.h> */
#ifdef FXCG50
STATIC mp_obj_t modgint_C_RGB(mp_obj_t arg1, mp_obj_t arg2, mp_obj_t arg3) {
mp_int_t r = mp_obj_get_int(arg1);
mp_int_t g = mp_obj_get_int(arg2);
mp_int_t b = mp_obj_get_int(arg3);
return MP_OBJ_NEW_SMALL_INT(C_RGB(r, g, b));
STATIC mp_obj_t modgint_C_RGB(mp_obj_t arg1, mp_obj_t arg2, mp_obj_t arg3)
{
mp_int_t r = mp_obj_get_int(arg1);
mp_int_t g = mp_obj_get_int(arg2);
mp_int_t b = mp_obj_get_int(arg3);
return MP_OBJ_NEW_SMALL_INT(C_RGB(r, g, b));
}
#endif
STATIC mp_obj_t modgint_dclear(mp_obj_t arg1) {
mp_int_t color = mp_obj_get_int(arg1);
dclear(color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dupdate(void) {
pe_enter_graphics_mode();
dupdate();
return mp_const_none;
}
STATIC mp_obj_t modgint_drect(size_t n, mp_obj_t const *args) {
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t color = mp_obj_get_int(args[4]);
drect(x1, y1, x2, y2, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_drect_border(size_t n, mp_obj_t const *args) {
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t fill_color = mp_obj_get_int(args[4]);
mp_int_t border_width = mp_obj_get_int(args[5]);
mp_int_t border_color = mp_obj_get_int(args[6]);
drect_border(x1, y1, x2, y2, fill_color, border_width, border_color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dpixel(mp_obj_t arg1, mp_obj_t arg2, mp_obj_t arg3) {
mp_int_t x = mp_obj_get_int(arg1);
mp_int_t y = mp_obj_get_int(arg2);
mp_int_t color = mp_obj_get_int(arg3);
dpixel(x, y, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dgetpixel(mp_obj_t arg1, mp_obj_t arg2) {
mp_int_t x = mp_obj_get_int(arg1);
mp_int_t y = mp_obj_get_int(arg2);
return MP_OBJ_NEW_SMALL_INT(dgetpixel(x, y));
}
STATIC mp_obj_t modgint_dline(size_t n, mp_obj_t const *args) {
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t color = mp_obj_get_int(args[4]);
dline(x1, y1, x2, y2, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dhline(mp_obj_t arg1, mp_obj_t arg2) {
mp_int_t y = mp_obj_get_int(arg1);
mp_int_t color = mp_obj_get_int(arg2);
dhline(y, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dvline(mp_obj_t arg1, mp_obj_t arg2) {
mp_int_t x = mp_obj_get_int(arg1);
mp_int_t color = mp_obj_get_int(arg2);
dvline(x, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dpoly(mp_obj_t points, mp_obj_t fill, mp_obj_t border) {
mp_uint_t nbitems;
mp_obj_t *items;
mp_obj_list_get(points, &nbitems, &items);
unsigned int len = nbitems / 2;
int *x = (int *)malloc(len * sizeof(int));
int *y = (int *)malloc(len * sizeof(int));
if (!x || !y)
STATIC mp_obj_t modgint_dclear(mp_obj_t arg1)
{
mp_int_t color = mp_obj_get_int(arg1);
dclear(color);
return mp_const_none;
for (unsigned int u = 0; u < len; u++) {
x[u] = mp_obj_get_int(items[u * 2]);
y[u] = mp_obj_get_int(items[u * 2 + 1]);
}
mp_int_t fillcolor = mp_obj_get_int(fill);
mp_int_t bordercolor = mp_obj_get_int(border);
dpoly(x, y, len, fillcolor, bordercolor);
free(x);
free(y);
return mp_const_none;
}
STATIC mp_obj_t modgint_dcircle(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[0]);
mp_int_t y = mp_obj_get_int(args[1]);
mp_int_t r = mp_obj_get_int(args[2]);
mp_int_t fill = mp_obj_get_int(args[3]);
mp_int_t border = mp_obj_get_int(args[4]);
dcircle(x, y, r, fill, border);
return mp_const_none;
STATIC mp_obj_t modgint_dupdate(void)
{
pe_enter_graphics_mode();
dupdate();
return mp_const_none;
}
STATIC mp_obj_t modgint_dellipse(size_t n_args, const mp_obj_t *args) {
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t fill = mp_obj_get_int(args[4]);
mp_int_t border = mp_obj_get_int(args[5]);
STATIC mp_obj_t modgint_drect(size_t n, mp_obj_t const *args)
{
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t color = mp_obj_get_int(args[4]);
drect(x1, y1, x2, y2, color);
return mp_const_none;
}
dellipse(x1, y1, x2, y2, fill, border);
return mp_const_none;
STATIC mp_obj_t modgint_drect_border(size_t n, mp_obj_t const *args)
{
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t fill_color = mp_obj_get_int(args[4]);
mp_int_t border_width = mp_obj_get_int(args[5]);
mp_int_t border_color = mp_obj_get_int(args[6]);
drect_border(x1, y1, x2, y2, fill_color, border_width, border_color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dpixel(mp_obj_t arg1, mp_obj_t arg2, mp_obj_t arg3)
{
mp_int_t x = mp_obj_get_int(arg1);
mp_int_t y = mp_obj_get_int(arg2);
mp_int_t color = mp_obj_get_int(arg3);
dpixel(x, y, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dgetpixel(mp_obj_t arg1, mp_obj_t arg2)
{
mp_int_t x = mp_obj_get_int(arg1);
mp_int_t y = mp_obj_get_int(arg2);
return MP_OBJ_NEW_SMALL_INT(dgetpixel(x, y));
}
STATIC mp_obj_t modgint_dline(size_t n, mp_obj_t const *args)
{
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t color = mp_obj_get_int(args[4]);
dline(x1, y1, x2, y2, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dhline(mp_obj_t arg1, mp_obj_t arg2)
{
mp_int_t y = mp_obj_get_int(arg1);
mp_int_t color = mp_obj_get_int(arg2);
dhline(y, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dvline(mp_obj_t arg1, mp_obj_t arg2)
{
mp_int_t x = mp_obj_get_int(arg1);
mp_int_t color = mp_obj_get_int(arg2);
dvline(x, color);
return mp_const_none;
}
STATIC mp_obj_t modgint_dcircle(size_t n_args, const mp_obj_t *args)
{
mp_int_t x = mp_obj_get_int(args[0]);
mp_int_t y = mp_obj_get_int(args[1]);
mp_int_t r = mp_obj_get_int(args[2]);
mp_int_t fill = mp_obj_get_int(args[3]);
mp_int_t border = mp_obj_get_int(args[4]);
dcircle(x, y, r, fill, border);
return mp_const_none;
}
STATIC mp_obj_t modgint_dellipse(size_t n_args, const mp_obj_t *args)
{
mp_int_t x1 = mp_obj_get_int(args[0]);
mp_int_t y1 = mp_obj_get_int(args[1]);
mp_int_t x2 = mp_obj_get_int(args[2]);
mp_int_t y2 = mp_obj_get_int(args[3]);
mp_int_t fill = mp_obj_get_int(args[4]);
mp_int_t border = mp_obj_get_int(args[5]);
dellipse(x1, y1, x2, y2, fill, border);
return mp_const_none;
}
// TODO: modgint: Font management?
STATIC mp_obj_t modgint_dtext_opt(size_t n, mp_obj_t const *args) {
mp_int_t x = mp_obj_get_int(args[0]);
mp_int_t y = mp_obj_get_int(args[1]);
mp_int_t fg = mp_obj_get_int(args[2]);
mp_int_t bg = mp_obj_get_int(args[3]);
mp_int_t halign = mp_obj_get_int(args[4]);
mp_int_t valign = mp_obj_get_int(args[5]);
char const *str = mp_obj_str_get_str(args[6]);
mp_int_t size = mp_obj_get_int(args[7]);
dtext_opt(x, y, fg, bg, halign, valign, str, size);
return mp_const_none;
STATIC mp_obj_t modgint_dtext_opt(size_t n, mp_obj_t const *args)
{
mp_int_t x = mp_obj_get_int(args[0]);
mp_int_t y = mp_obj_get_int(args[1]);
mp_int_t fg = mp_obj_get_int(args[2]);
mp_int_t bg = mp_obj_get_int(args[3]);
mp_int_t halign = mp_obj_get_int(args[4]);
mp_int_t valign = mp_obj_get_int(args[5]);
char const *str = mp_obj_str_get_str(args[6]);
mp_int_t size = mp_obj_get_int(args[7]);
dtext_opt(x, y, fg, bg, halign, valign, str, size);
return mp_const_none;
}
STATIC mp_obj_t modgint_dtext(size_t n, mp_obj_t const *args) {
mp_int_t x = mp_obj_get_int(args[0]);
mp_int_t y = mp_obj_get_int(args[1]);
mp_int_t fg = mp_obj_get_int(args[2]);
char const *str = mp_obj_str_get_str(args[3]);
dtext(x, y, fg, str);
return mp_const_none;
STATIC mp_obj_t modgint_dtext(size_t n, mp_obj_t const *args)
{
mp_int_t x = mp_obj_get_int(args[0]);
mp_int_t y = mp_obj_get_int(args[1]);
mp_int_t fg = mp_obj_get_int(args[2]);
char const *str = mp_obj_str_get_str(args[3]);
dtext(x, y, fg, str);
return mp_const_none;
}
FUN_0(__init__);
@ -312,7 +314,6 @@ FUN_2(dgetpixel);
FUN_BETWEEN(dline, 5, 5);
FUN_2(dhline);
FUN_2(dvline);
FUN_3(dpoly);
FUN_BETWEEN(dcircle, 5, 5);
FUN_BETWEEN(dellipse, 6, 6);
FUN_BETWEEN(dtext_opt, 8, 8);
@ -321,15 +322,13 @@ FUN_BETWEEN(dtext, 4, 4);
/* Module definition */
// Helper: define object "modgint_F_obj" as object "F" in the module
#define OBJ(F) \
{ MP_ROM_QSTR(MP_QSTR_##F), MP_ROM_PTR(&modgint_##F##_obj) }
#define OBJ(F) {MP_ROM_QSTR(MP_QSTR_ ## F), MP_ROM_PTR(&modgint_ ## F ## _obj)}
// Helper: define small integer constant "I" as "I" in the module
#define INT(I) \
{ MP_ROM_QSTR(MP_QSTR_##I), MP_OBJ_NEW_SMALL_INT(I) }
#define INT(I) {MP_ROM_QSTR(MP_QSTR_ ## I), MP_OBJ_NEW_SMALL_INT(I)}
STATIC const mp_rom_map_elem_t modgint_module_globals_table[] = {
{MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_gint)},
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_gint) },
OBJ(__init__),
/* <gint/keycodes.h> */
@ -470,17 +469,16 @@ STATIC const mp_rom_map_elem_t modgint_module_globals_table[] = {
OBJ(dline),
OBJ(dhline),
OBJ(dvline),
OBJ(dpoly),
OBJ(dcircle),
OBJ(dellipse),
OBJ(dtext_opt),
OBJ(dtext),
};
STATIC MP_DEFINE_CONST_DICT(modgint_module_globals,
modgint_module_globals_table);
STATIC MP_DEFINE_CONST_DICT(
modgint_module_globals, modgint_module_globals_table);
const mp_obj_module_t modgint_module = {
.base = {&mp_type_module},
.base = { &mp_type_module },
.globals = (mp_obj_dict_t *)&modgint_module_globals,
};