--- gforth/string.fs 2011/12/31 15:29:25 1.15 +++ gforth/string.fs 2012/09/17 18:46:46 1.18 @@ -82,4 +82,30 @@ >r >r $@ BEGIN dup WHILE r@ $split i' -rot >r >r execute r> r> REPEAT 2drop rdrop rdrop ; + +\ string array words + +: $[] ( n addr -- addr' ) >r + r@ @ 0= IF s" " r@ $! THEN + r@ $@ 2 pick cells /string + dup cell < IF + 2drop r@ $@len + over 1+ cells r@ $!len + r@ $@ rot /string 0 fill + r@ $@ 2 pick cells /string + THEN drop nip rdrop ; + +: $[]! ( addr u n $addr -- ) $[] $! ; +: $[]+! ( addr u n $addr -- ) $[] $+! ; +: $[]@ ( n $addr -- addr u ) $[] dup @ IF $@ ELSE drop s" " THEN ; + +: $over ( addr u $addr off -- ) + \G overwrite string at offset off with addr u + swap >r + r@ @ 0= IF s" " r@ $! THEN + 2dup + r@ $@len > IF + 2dup + r@ $@len tuck max r@ $!len + r@ $@ rot /string bl fill + THEN + r> $@ rot /string rot umin move ; [THEN] \ No newline at end of file