diff --git a/blk/354 b/blk/354 index 6c1919a..9471640 100644 --- a/blk/354 +++ b/blk/354 @@ -7,6 +7,7 @@ : MIN ( n n - n ) 2DUP > IF SWAP THEN DROP ; : MAX ( n n - n ) 2DUP < IF SWAP THEN DROP ; : NIP SWAP DROP ; : TUCK SWAP OVER ; +: -^ SWAP - ; : C@+ ( a -- a+1 c ) DUP C@ SWAP 1+ SWAP ; : C!+ ( c a -- a+1 ) TUCK C! 1+ ; : C@- ( a -- a-1 c ) DUP C@ SWAP 1- SWAP ; diff --git a/blk/357 b/blk/357 index 0d3eaf3..65b827f 100644 --- a/blk/357 +++ b/blk/357 @@ -1,11 +1,8 @@ -: _ ( a+1 len -- n f ) - OVER C@ ( a len c ) - '-' = IF - 1- SWAP 1+ SWAP ( a+1 len-1 ) _ 0 ROT ( f 0 n ) - - SWAP EXIT ( 0-n f ) - THEN ( a len ) - 0 SWAP ( len ) 0 DO ( a r ) +: (parsed) ( a -- n f ) + C@+ OVER C@ 0 ( a len firstchar startat ) + SWAP '-' = IF 1+ THEN ( a len startat ) + 0 ROT ROT ( len ) ( startat ) DO ( a r ) OVER I + C@ ( a r c ) _pdacc ( a r f ) IF DROP 1- 0 UNLOOP EXIT THEN LOOP ( a r ) - NIP 1 ; -: (parsed) ( a -- n f ) C@+ ( a+1 l ) _ ; + ( negate if needed ) + SWAP C@ '-' = IF 0 -^ THEN 1 ( r 1 ) ; diff --git a/blk/367 b/blk/367 index 619d14e..7e21ebf 100644 --- a/blk/367 +++ b/blk/367 @@ -3,7 +3,6 @@ DUP C@ 128 OR SWAP C! ; : IMMED? 1- C@ 0x80 AND ; : +! TUCK @ + SWAP ! ; -: -^ SWAP - ; : / /MOD NIP ; : MOD /MOD DROP ; : ALLOT HERE +! ; diff --git a/emul/forth.bin b/emul/forth.bin index 0fa74ce..9cd6b22 100644 Binary files a/emul/forth.bin and b/emul/forth.bin differ