--- gforth/string.fs 2012/09/17 18:46:46 1.18 +++ gforth/string.fs 2012/12/31 15:25:18 1.20 @@ -1,6 +1,6 @@ \ dynamic string handling 10aug99py -\ Copyright (C) 2000,2005,2007,2010,2011 Free Software Foundation, Inc. +\ Copyright (C) 2000,2005,2007,2010,2011,2012 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -83,9 +83,20 @@ $@ BEGIN dup WHILE r@ $split i' -rot >r >r execute r> r> REPEAT 2drop rdrop rdrop ; +: $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 ; + \ string array words : $[] ( n addr -- addr' ) >r + \G index into the string array and return the address at index n r@ @ 0= IF s" " r@ $! THEN r@ $@ 2 pick cells /string dup cell < IF @@ -95,17 +106,10 @@ 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 ; +: $[]! ( addr u n $[]addr -- ) $[] $! ; +\G store a string into an array at index n +: $[]+! ( addr u n $[]addr -- ) $[] $+! ; +\G add a string to the string at addr n +: $[]@ ( n $[]addr -- addr u ) $[] dup @ IF $@ ELSE drop s" " THEN ; +\G fetch a string from array index n -- return the zero string if empty [THEN] \ No newline at end of file