retroforth/interface/block.retro
crc afc7a483c4 dont print values when saving a block
FossilOrigin-Name: 8275b9173ccd3e623e19082d2d236e86d849b688814886495af96b96cd4bcc19
2022-07-25 13:13:57 +00:00

29 lines
847 B
Forth

The related ilo & napia virtual machines make use of blocks
for data storage. This implements a set of words for interacting
with the blocks from within RetroForth/Nga.
The exposed word set is compact:
block:set-file (s-)
block:read (na-)
block:write (na-)
~~~
{{
'Blocks var
'BlockFile var
:open (n-) @BlockFile swap file:open !Blocks ;
:close (-) @Blocks file:close ;
:seek (n-) #4096 n:mul @Blocks file:seek ;
:read (-n) #4 [ @Blocks file:read ] times pack ;
:store (an-a) swap store-next ;
:write (n-) unpack 'abcd 'bcda reorder #4 [ @Blocks file:write ] times ;
---reveal---
:block:set-file (s-) s:keep !BlockFile ;
:block:read (na-)
file:R open swap seek #1024 [ read store ] times drop close ;
:block:write (na-)
file:R+ open swap seek #1024 [ fetch-next write ] times drop close ;
}}
~~~