23 lines
640 B
Forth
23 lines
640 B
Forth
\ An extended string is essentially the same
|
|
\ as a counted string, with the only difference that
|
|
\ instead of storing max 1 char length of a string,
|
|
\ we can store up to cell sized strings.
|
|
|
|
\ Copy an extended string to
|
|
: xplace ( c-addr u a-addr -- )
|
|
swap dup >r over ! ( c-addr a-addr )
|
|
cell + r> move ;
|
|
: xcount ( a-addr -- c-addr u )
|
|
dup cell + swap @ ;
|
|
: +xplace ( c-addr u a-addr -- )
|
|
2dup >r >r xcount ( c-addr u c-addr u )
|
|
+ swap ( c-addr a-addr u )
|
|
move ( -- )
|
|
r> r> +! ;
|
|
|
|
\ single char
|
|
create somechar 1 chars allot align
|
|
: +xplace-char ( n a-addr -- )
|
|
swap somechar c! somechar 1 rot +xplace ;
|
|
|