// test some string things
chip "16f84";

#include <16f84>

enum spoing2 = 1;
def spoing1 = 9;



init (D1`5)[2] := 7;

area R0x30`40, GPR;

macro test(root)
{
  alloc ?GPR, { msc=byte };
  
  area msc, @("?"+root+"\\Key"); // virker ikke
  // area msc, @("?Tst\\Key");      // virker ikke
  // area msc, ?Tst\Key;            // virker
}

test("Tst");

print Tst\Key;

code boot(base = P0)
{
  def foo = "bar";
  def bar = "foo";

  print @@@@@@@@@foo;
  print @@@@@@@@foo;

  def x,y;
  for (x=-1; x<6; x++) {
    print left(foo, x);
  }
  for (x=-1; x<6; x++) {
    print right(foo, x);
  }

  def z=5;
  x = "foo"+"bar";
  y = "baz"+"quux";

  qwerty(x,y);
  x = str(z);

  qwerty(x, "baz"+"quux");

  movf R0,f;
  movlw $foo;

  def a = "abc/def/ghi", b = "/";

  print firstleft(a, b);
  print firstright(a, b);
  print lastleft(a, b);
  print lastright(a, b);
  print add(z,3);
  print add(z,4);
  print "Total ", howmany("*"), " vars";

  def i,j,k;

  def by;

  by = "";

   #include_only_once

  for (i=0; i<3; i++) {
    for (j=0; j<3; j++) {
      for (0; i==j; i=j+1) {
        print i,j;
      }
    }
  }
}

def i;
for (i=0; i<5; i++) {
  code many(base=P40+i*8) {
    movlw i;
  }
}


macro qwerty(a,b)
{
  a+="x";
  print a,b;
  code foo {
    movlw 0;
  }
}

func howmany(mask)
{
  def n=0;
  def _;

  foreach (_ = mask) {
    n++;
  }
  return n;
}

func add(a,b)
{
  def j=6;

  {
    def k=7;
    def _;

    foreach (_ = "spoing*") {
      k+=@_;
      print k;
    }

    return a+b+k;
  }
  return "";
}

code endcode {
  nop;
}
