SCPY: don't copy the NULL

This makes [entry] much simpler. Also, remove unused LITS word.
This commit is contained in:
Virgil Dupras 2020-05-12 07:36:20 -04:00
parent 231d727598
commit b760c2d353
7 changed files with 13 additions and 21 deletions

View File

@ -4,10 +4,9 @@ LIT -- Write a LIT entry. You're expected to write
actual string to HERE right afterwards.
LIT< x -- Read following word and write to HERE as a
string literal.
LITS a -- Write word at addr a as a atring literal.
S= a1 a2 -- f Returns whether string a1 == a2.
SCPY a -- Copy string at addr a into HERE.
SCPY a -- Copy string at addr a into HERE, without
NULL termination.

View File

@ -8,7 +8,7 @@
DUP LIT< ( S= IF
DROP [COMPILE] (
ELSE
SCPY 0x20 H@ 1- C!
SCPY 0x20 C,
THEN 0 ( loop again )
ELSE 1 ( stop looping ) THEN
UNTIL

10
blk/407
View File

@ -1,8 +1,6 @@
: SCPY
BEGIN ( a )
C@+ ( a+1 c )
DUP C, ( a c )
NOT IF DROP EXIT THEN
BEGIN ( a )
C@+ ( a+1 c )
DUP NOT IF 2DROP EXIT THEN
C, ( a c )
AGAIN ;

12
blk/408
View File

@ -1,14 +1,10 @@
: [entry]
HERE @ ( w h )
SWAP SCPY ( h )
( Adjust HERE -1 because SCPY copies the null )
HERE @ 1- ( h h' )
DUP HERE ! ( h h' )
SWAP - ( sz )
HERE @ ( w h )
SWAP SCPY ( h )
HERE @ SWAP - ( sz )
( write prev value )
HERE @ CURRENT @ - ,
( write size )
C,
C, ( write size )
HERE @ CURRENT !
;

View File

@ -1,7 +1,6 @@
: [ INTERPRET ; IMMEDIATE
: ] R> DROP ;
: LITS 34 , SCPY ;
: LIT< WORD LITS ; IMMEDIATE
: LIT< WORD 34 , SCPY 0 C, ; IMMEDIATE
: LITA 36 , , ;
: '? WORD (find) ;
: '

View File

@ -7,7 +7,7 @@
40 is ASCII for '('. We do this to simplify XPACK's task of
not mistakenly consider '(' definition as a comment.
LITS: 34 == litWord
LIT<: 34 == litWord
LITA: 36 == addrWord
COMPILE: Tough one. Get addr of caller word (example above
(br)) and then call LITA on it. )

Binary file not shown.