Setvv() expects id

This commit is contained in:
neauoire 2023-11-28 13:26:07 -08:00
parent abc91d6412
commit ab34b64a6d
1 changed files with 40 additions and 20 deletions

View File

@ -30,7 +30,7 @@ enum Action {
}; };
enum Action action; enum Action action;
static Uint8 *ram, plen; static Uint8 *ram, olen;
static Uint32 *pixels, theme[] = {0xffb545, 0x72DEC2, 0x000000, 0xffffff, 0xeeeeee}; static Uint32 *pixels, theme[] = {0xffb545, 0x72DEC2, 0x000000, 0xffffff, 0xeeeeee};
static int WIDTH, HEIGHT, isdrag, reqdraw, dragx, dragy, camerax, cameray; static int WIDTH, HEIGHT, isdrag, reqdraw, dragx, dragy, camerax, cameray;
static Varvara varvaras[RAM_PAGES], *order[RAM_PAGES], *menu, *focused; static Varvara varvaras[RAM_PAGES], *order[RAM_PAGES], *menu, *focused;
@ -129,10 +129,10 @@ static void
redraw(Uint32 *dst) redraw(Uint32 *dst)
{ {
int i; int i;
for(i = 1; i < plen; i++) for(i = 1; i < olen; i++)
if(order[i]->lock) if(order[i]->lock)
drawpixels(dst, order[i]); drawpixels(dst, order[i]);
for(i = 1; i < plen; i++) for(i = 1; i < olen; i++)
if(!order[i]->lock) if(!order[i]->lock)
drawpixels(dst, order[i]); drawpixels(dst, order[i]);
drawpixels(dst, menu); drawpixels(dst, menu);
@ -202,15 +202,35 @@ donevv(Varvara *p)
clear(pixels); clear(pixels);
} }
static Varvara * static void
setvv(Varvara *p, int x, int y, char *rom, int eval) order_print(void)
{ {
if(!p) return 0; int i;
order[plen++] = p; if(!olen)
return;
printf("\n\n");
for(i = 0; i < olen; i++) {
printf("%d/%d -> %s\n", i, olen, order[i]->rom);
}
}
static void
order_push(Varvara *p)
{
order[olen++] = p;
order_print();
}
static Varvara *
setvv(int id, int x, int y, char *rom, int eval)
{
Varvara *p = &varvaras[id];
if(id == -1) return 0;
p->x = x, p->y = y, p->rom = rom; p->x = x, p->y = y, p->rom = rom;
p->u.ram = ram + (plen - 1) * 0x10000; p->u.ram = ram + id * 0x10000;
p->u.id = plen - 1; p->u.id = id;
p->live = 1; p->live = 1;
order_push(p);
screen_resize(&p->screen, 128, 128); screen_resize(&p->screen, 128, 128);
system_init(&p->u, p->u.ram, rom); system_init(&p->u, p->u.ram, rom);
if(eval) if(eval)
@ -218,16 +238,16 @@ setvv(Varvara *p, int x, int y, char *rom, int eval)
return p; return p;
} }
static Varvara * static int
allocvv(void) allocvv(void)
{ {
int i; int i;
for(i = 1; i < RAM_PAGES; i++) { for(i = 1; i < RAM_PAGES; i++) {
Varvara *p = &varvaras[i]; Varvara *p = &varvaras[i];
if(!p || !p->live) if(!p || !p->live)
return p; return i;
} }
return 0; return -1;
} }
static Varvara * static Varvara *
@ -248,7 +268,7 @@ static Varvara *
pickvv(int x, int y) pickvv(int x, int y)
{ {
int i; int i;
for(i = plen - 1; i > -1; --i) { for(i = olen - 1; i > -1; --i) {
Varvara *p = order[i]; Varvara *p = order[i];
if(withinvv(p, x, y)) if(withinvv(p, x, y))
return p; return p;
@ -261,16 +281,16 @@ raisevv(Varvara *v)
{ {
int i, j = 0; int i, j = 0;
Varvara *a, *b; Varvara *a, *b;
for(i = 1; i < plen; i++) { for(i = 1; i < olen; i++) {
if(v == order[i]) { if(v == order[i]) {
j = i; j = i;
break; break;
} }
} }
if(!j || j == plen - 1) if(!j || j == olen - 1)
return; return;
a = order[j], b = order[plen - 1]; a = order[j], b = order[olen - 1];
order[j] = b, order[plen - 1] = a; order[j] = b, order[olen - 1] = a;
} }
static void static void
@ -280,7 +300,7 @@ lockvv(Varvara *v)
v->lock = 1; v->lock = 1;
else { else {
int i; int i;
for(i = 1; i < plen; i++) { for(i = 1; i < olen; i++) {
order[i]->lock = 0; order[i]->lock = 0;
break; break;
} }
@ -296,7 +316,7 @@ pickfocus(int x, int y)
focusvv(menu); focusvv(menu);
return; return;
} }
for(i = plen - 1; i > -1; --i) { for(i = olen - 1; i > -1; --i) {
Varvara *p = order[i]; Varvara *p = order[i];
if(withinvv(p, x, y) && !p->lock) { if(withinvv(p, x, y) && !p->lock) {
focusvv(p); focusvv(p);
@ -599,7 +619,7 @@ main(int argc, char **argv)
if(!init()) if(!init())
return error("Init", "Failure"); return error("Init", "Failure");
ram = (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)); ram = (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8));
menu = setvv(&varvaras[0], 200, 150, "bin/menu.rom", 0); menu = setvv(0, 200, 150, "bin/menu.rom", 0);
menu->live = 0; menu->live = 0;
for(i = 1; i < argc; i++) { for(i = 1; i < argc; i++) {
Varvara *a = addvv(anchor, 0x20 * i, argv[i], 1); Varvara *a = addvv(anchor, 0x20 * i, argv[i], 1);