@define mkzas(len){ @local dispatch, str; str = mkstr(len); @define dispatch(args ...) { @local arg, range, new, beg, end; arg = listref(args, 1); if(arg == "get"){ range = listref(args, 2); beg = rangebeg(range); end = beg+rangelen(range); printf("get %x %x\n", beg, end); return substr(str, beg, end); } if(arg == "put"){ range = listref(args, 2); beg = rangebeg(range); end = beg+rangelen(range); new = listref(args, 3); strput(str, beg, new); printf("put %x %x\n", beg, end); return; } printf("bad argument to dispatch: %s!\n", arg); } return mkas([ "dispatch" : dispatch ]); } @define main(){ @local dom, ns, as; as = mkzas(1024); ns = @names c32le { @0x0 int x; @0x4 int y; }; dom = mkdom(ns, as); printf("init: dom`x -> %d\n", dom`x); printf("update dom`x to %d\n", dom`x = 3); printf("=3: dom`x -> %d\n", dom`x); printf("init: dom`y -> %d\n", dom`y); printf("update dom`y to %d\n", dom`y = dom`x+dom`x); printf("=dom`x+dom`x: dom`y -> %d\n", dom`y); } main();