~rabbits/orca

cd1a7eec8d1090f3305a001ad3fee5c2a601f5d1 — cancel 2 years ago ef07072 wild_chains
Test implementation of loopless J
1 files changed, 34 insertions(+), 9 deletions(-)

M sim.c
M sim.c => sim.c +34 -9
@@ 498,15 498,40 @@ END_OPERATOR

BEGIN_OPERATOR(jump)
  LOWERCASE_REQUIRES_BANG;
  PORT(-1, 0, IN);
  Glyph g = PEEK(-1, 0);
  for (Isz i = 1;; ++i) {
    if (PEEK(i, 0) != This_oper_char) {
      PORT(i, 0, OUT);
      POKE(i, 0, g);
      break;
    }
    STUN(i, 0);
  Glyph a = PEEK(-2, 0);
  Glyph b = PEEK(-1, 0);
  Glyph c = PEEK(1, 0);
  int q = 0;
  q |= a == This_oper_char ? 0x100 : 0;
  q |= b == This_oper_char ? 0x010 : 0;
  q |= c == This_oper_char ? 0x001 : 0;
  switch (q) {
  case 0x000:
    PORT(1, 0, OUT);
    POKE(1, 0, b);
    break;
  case 0x100:
    POKE(-1, 0, This_oper_char);
    PORT(1, 0, OUT);
    POKE(1, 0, b);
    break;
  case 0x010:
    PORT(1, 0, OUT);
    POKE(1, 0, a);
    break;
  case 0x001:
    break;
  case 0x110:
    break;
  case 0x101:
    POKE(-1, 0, This_oper_char);
    POKE(0, 0, b);
    break;
  case 0x011:
    POKE(0, 0, a);
    break;
  case 0x111:
    break;
  }
END_OPERATOR