Browse Source

Add output b->a casing rules for A, B, L and M

master
cancel 5 years ago
parent
commit
593eaad2c9
  1. 38
      sim.c

38
sim.c

@ -73,6 +73,14 @@ static inline bool glyph_is_lowercase(Glyph g) { return g & (1 << 5); }
static inline Glyph glyph_lowered_unsafe(Glyph g) {
return (Glyph)(g | (1 << 5));
}
static inline Glyph glyph_with_case(Glyph g, Glyph caser) {
enum {
Case_bit = 1 << 5,
Alpha_bit = 1 << 6,
};
return (Glyph)((g & ~Case_bit) | ((~g & Alpha_bit) >> 1) |
(caser & Case_bit));
}
ORCA_PURE static bool oper_has_neighboring_bang(Glyph const* gbuf, Usz h, Usz w,
Usz y, Usz x) {
@ -421,9 +429,10 @@ BEGIN_OPERATOR(add)
PORT(0, -1, IN | PARAM);
PORT(0, 1, IN);
PORT(1, 0, OUT);
Usz a = index_of(PEEK(0, -1));
Usz b = index_of(PEEK(0, 1));
POKE(1, 0, indexed_glyphs[(a + b) % Glyphs_index_count]);
Glyph a = PEEK(0, -1);
Glyph b = PEEK(0, 1);
Glyph g = indexed_glyphs[(index_of(a) + index_of(b)) % Glyphs_index_count];
POKE(1, 0, glyph_with_case(g, b));
END_OPERATOR
BEGIN_OPERATOR(bounce)
@ -431,12 +440,12 @@ BEGIN_OPERATOR(bounce)
PORT(0, -1, IN | PARAM);
PORT(0, 1, IN);
PORT(1, 0, OUT);
Isz a = (Isz)index_of(PEEK(0, -1));
Isz b = (Isz)index_of(PEEK(0, 1));
Isz val = b - a;
Glyph a = PEEK(0, -1);
Glyph b = PEEK(0, 1);
Isz val = (Isz)index_of(b) - (Isz)index_of(a);
if (val < 0)
val = -val;
POKE(1, 0, glyph_of((Usz)val));
POKE(1, 0, glyph_with_case(glyph_of((Usz)val), b));
END_OPERATOR
BEGIN_OPERATOR(clock)
@ -557,10 +566,10 @@ BEGIN_OPERATOR(lesser)
if (ga == '.' || gb == '.') {
POKE(1, 0, '.');
} else {
Usz a = index_of(ga);
Usz b = index_of(gb);
Usz out = (a < b) ? a : b;
POKE(1, 0, indexed_glyphs[out]);
Usz ia = index_of(ga);
Usz ib = index_of(gb);
Usz out = ia < ib ? ia : ib;
POKE(1, 0, glyph_with_case(glyph_of(out), gb));
}
END_OPERATOR
@ -569,9 +578,10 @@ BEGIN_OPERATOR(multiply)
PORT(0, -1, IN | PARAM);
PORT(0, 1, IN);
PORT(1, 0, OUT);
Usz ia = index_of(PEEK(0, -1));
Usz ib = index_of(PEEK(0, 1));
POKE(1, 0, indexed_glyphs[(ia * ib) % Glyphs_index_count]);
Glyph a = PEEK(0, -1);
Glyph b = PEEK(0, 1);
Glyph g = indexed_glyphs[(index_of(a) * index_of(b)) % Glyphs_index_count];
POKE(1, 0, glyph_with_case(g, b));
END_OPERATOR
BEGIN_OPERATOR(offset)

Loading…
Cancel
Save