shithub: orca

Download patch

ref: c172296d07e2b73ca806669fff2e04471d3077aa
parent: 11fb32dec81eeda8aeea2c79afce2eab2ff0869f
parent: 9c55802d55c88e2464d9555f4d5770f30b6a3e91
author: Лu Лinveгa <aliceffekt@gmail.com>
date: Sun Feb 17 06:14:10 EST 2019

Merge pull request #12 from npisanti/master

porting of K operator from orcaJS

--- a/sim.c
+++ b/sim.c
@@ -230,7 +230,7 @@
   _('H', halt)                                                                 \
   _('I', increment)                                                            \
   _('J', jump)                                                                 \
-  _('K', kill)                                                                 \
+  _('K', konkat)                                                                 \
   _('L', loop)                                                                 \
   _('M', modulo)                                                               \
   _('N', movement)                                                             \
@@ -535,10 +535,23 @@
   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)