CoreForth-0

common/strings.ft.md


: dup$          2dup ;
: drop$         2drop ;
: swap$         2swap ;
: over$         2over ;
: r@$           2r@ ;
: nip$          2nip ;
: c@$           + c@ ;
: count$        nip ;

: append$       ( c-addr n c-addr1 n1 -- c-addr n+n1 )
                swap$ dup$ 2>r +
                swap dup >r
                cmove
                2r> + r> swap ;

: cappend$      ( c-addr n c -- c-addr n+1 )
                >r dup$ + r> swap c! 1+ ;

: find<$        ( c-addr n c -- n -1 | 0 )
                over 0= if drop nip exit then
                >r begin
                  dup 0> while
                  1- dup$ c@$ r@ <> while
                repeat then
                2dup + c@ r> = if nip true else 2drop 0 then
                ;

: tail$         ( c-addr n t -- c-addr+t n-t )
                rot over + -rot - ;