Browse Source

change L to match orcaJS 158

master
Nicola Pisanti 5 years ago
parent
commit
c26bc5b308
  1. 39
      sim.c

39
sim.c

@ -232,7 +232,7 @@ static void oper_poke_and_stun(Glyph* restrict gbuffer, Mark* restrict mbuffer,
_('I', increment) \ _('I', increment) \
_('J', jump) \ _('J', jump) \
_('K', konkat) \ _('K', konkat) \
_('L', loop) \ _('L', lesser) \
_('M', multiply) \ _('M', multiply) \
_('N', movement) \ _('N', movement) \
_('O', offset) \ _('O', offset) \
@ -553,36 +553,21 @@ BEGIN_OPERATOR(konkat)
} }
END_OPERATOR END_OPERATOR
BEGIN_OPERATOR(loop) BEGIN_OPERATOR(lesser)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
PORT(0, -2, IN | PARAM);
PORT(0, -1, IN | PARAM); PORT(0, -1, IN | PARAM);
PORT(0, 1, IN | PARAM); PORT(0, 1, IN);
PORT(1, 0, OUT); PORT(1, 0, OUT);
Glyph g = PEEK(0, -2); Glyph ga = PEEK(0, -1);
Usz rate = 1; Glyph gb = PEEK(0, 1);
if (g != '.' && g != '*') if (ga == '.' || gb == '.') {
rate = index_of(g); POKE(1, 0, '.');
Usz len = safe_index_of(PEEK(0, -1)); } else {
if (len > width - x - 1) Usz a = index_of(ga);
len = width - x - 1; Usz b = index_of(gb);
Mark* m = mbuffer + y * width + x + 1; Usz out = (a < b) ? a : b;
for (Usz i = 0; i < len; ++i) { POKE(1, 0, indexed_glyphs[out]);
m[i] |= (Mark_flag_lock | Mark_flag_sleep);
}
if (len == 0)
return;
rate = rate % len;
Glyph buff[Glyphs_index_count];
Glyph* gs = gbuffer + y * width + x + 1;
for (Usz i = 0; i < len; ++i) {
Usz offset = (i + len - rate) % len;
buff[i] = gs[offset];
}
for (Usz i = 0; i < len; ++i) {
gs[i] = buff[i];
} }
POKE(1, 0, PEEK(0, 1));
END_OPERATOR END_OPERATOR
BEGIN_OPERATOR(multiply) BEGIN_OPERATOR(multiply)

Loading…
Cancel
Save