@@ 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