17 lines
640 B
Plaintext
17 lines
640 B
Plaintext
: RLDICT ( target offset -- )
|
|
H@ 2+ ! H@ ! ( H@+2 == offset, H@ == target )
|
|
H@ @ WORD( DUP H@ -^ ( src u )
|
|
DUP ROT SWAP H@ 4 + ( u src u dst )
|
|
SWAP MOVE ( u )
|
|
4 + DUP CURRENT @ WORD( + ( u we )
|
|
DUP .X NL
|
|
SWAP CURRENT @ PREV + DUP .X NL ( we wr )
|
|
BEGIN ( we wr )
|
|
DUP ROT ( wr wr we )
|
|
H@ @ H@ 2+ @ ( wr wr we ol o )
|
|
2SWAP RLWORD ( wr )
|
|
DUP PREV SWAP ( wr oldwr )
|
|
WORD( SWAP ( we wr )
|
|
DUP 4 - H@ <= ( are we finished? )
|
|
UNTIL H@ 4 + .X NL ;
|