Browse Source

Add 'Q'

master
cancel 6 years ago
parent
commit
98a4a4f18c
  1. 41
      sim.c

41
sim.c

@ -291,6 +291,7 @@ Usz usz_clamp(Usz val, Usz min, Usz max) {
_('M', 'm', modulo) \ _('M', 'm', modulo) \
_('O', 'o', offset) \ _('O', 'o', offset) \
_('P', 'p', push) \ _('P', 'p', push) \
_('Q', 'q', count) \
_('R', 'r', random) \ _('R', 'r', random) \
_('T', 't', track) \ _('T', 't', track) \
_('U', 'u', uturn) \ _('U', 'u', uturn) \
@ -552,6 +553,46 @@ BEGIN_DUAL_PHASE_1(push)
POKE(1, write_val_x[0], PEEK(0, 1)); POKE(1, write_val_x[0], PEEK(0, 1));
END_PHASE END_PHASE
BEGIN_DUAL_PHASE_0(count)
PSEUDO_DUAL;
BEGIN_DUAL_PORTS
PORT(0, -1, IN | HASTE);
PORT(1, 0, OUT);
END_PORTS
if (IS_AWAKE) {
Usz len = usz_clamp(INDEX(PEEK(0, -1)), 0, 16) + 1;
I32 len_data[1];
len_data[0] = (I32)len;
STORE(len_data);
Usz max_x = x + len;
if (max_x >= width) max_x = width;
U8* i = mbuffer + y * width + x + 1;
U8* e = mbuffer + y * width + max_x;
while (i != e) {
*i = (U8)(*i | Mark_flag_lock);
++i;
}
}
END_PHASE
BEGIN_DUAL_PHASE_1(count)
I32 len_data[1];
if (LOAD(len_data) && len_data[0] >= 1 && len_data[0] <= 17) {
Usz len = (Usz)len_data[0];
Usz max_x = x + len;
if (max_x >= width) max_x = width;
Glyph const* i = gbuffer + y * width + x + 1;
Glyph const* e = gbuffer + y * width + max_x;
Usz count = 0;
while (i != e) {
if (*i != '.')
++count;
++i;
}
Glyph g = GLYPH(count % Glyphs_array_num);
POKE(1, 0, g);
}
END_PHASE
BEGIN_DUAL_PHASE_0(random) BEGIN_DUAL_PHASE_0(random)
REALIZE_DUAL; REALIZE_DUAL;
BEGIN_DUAL_PORTS BEGIN_DUAL_PORTS

Loading…
Cancel
Save