From 9c55802d55c88e2464d9555f4d5770f30b6a3e91 Mon Sep 17 00:00:00 2001 From: Nicola Pisanti Date: Tue, 5 Feb 2019 22:29:08 +0100 Subject: [PATCH] porting of K operator from orcaJS --- sim.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/sim.c b/sim.c index 812c570..5f5d4c4 100644 --- a/sim.c +++ b/sim.c @@ -230,7 +230,7 @@ static void oper_poke_and_stun(Glyph* restrict gbuffer, Mark* restrict mbuffer, _('H', halt) \ _('I', increment) \ _('J', jump) \ - _('K', kill) \ + _('K', konkat) \ _('L', loop) \ _('M', modulo) \ _('N', movement) \ @@ -535,10 +535,23 @@ BEGIN_OPERATOR(jump) POKE(1, 0, PEEK(-1, 0)); END_OPERATOR -BEGIN_OPERATOR(kill) +BEGIN_OPERATOR(konkat) LOWERCASE_REQUIRES_BANG; - PORT(1, 0, OUT); - POKE(1, 0, '.'); + Isz len = (Isz)index_of(PEEK(0, -1)); + if (len == 0) len = 1; + PORT(0, -1, IN | PARAM); + for ( Isz i = 0; i < len; ++i) { + PORT(0, i+1, IN); + Glyph var = PEEK(0, i+1); + Usz var_idx = safe_index_of(var); + if( var_idx != 0 ){ + Glyph result = extra_params->vars_slots[var_idx]; + if (result != '.'){ + PORT(1, i+1, OUT); + POKE(1, i+1, result); + } + } + } END_OPERATOR BEGIN_OPERATOR(loop)