| $20 Value buffers |
$20 Value buffers |
| |
|
| User block-fid |
User block-fid |
| |
User offset 0 offset ! \ store 1 here fore 0.4.0 compatibility |
| |
|
| : block-cold ( -- ) |
: block-cold ( -- ) |
| block-fid off last-block off |
block-fid off last-block off |
| |
|
| : block-position ( u -- ) \ block |
: block-position ( u -- ) \ block |
| \G Position the block file to the start of block @i{u}. |
\G Position the block file to the start of block @i{u}. |
| 1- chars/block chars um* get-block-fid reposition-file throw ; |
offset @ - chars/block chars um* get-block-fid reposition-file throw ; |
| |
|
| : update ( -- ) \ block |
: update ( -- ) \ block |
| \G Mark the current block buffer as dirty. |
\G Mark the current block buffer as dirty. |
| |
|
| ' flush IS flush-blocks |
' flush IS flush-blocks |
| |
|
| : get-buffer ( n -- a-addr ) \ gforth |
: get-buffer ( u -- a-addr ) \ gforth |
| buffers mod buffer-struct %size * block-buffers @ + ; |
0 buffers um/mod drop buffer-struct %size * block-buffers @ + ; |
| |
|
| : block ( u -- a-addr ) \ block- block |
: block ( u -- a-addr ) \ block- block |
| \G If a block buffer is assigned for block @i{u}, return its |
\G If a block buffer is assigned for block @i{u}, return its |
| \G @code{update}d, transfer the contents to mass storage), read |
\G @code{update}d, transfer the contents to mass storage), read |
| \G the block into the block buffer and return its start address, |
\G the block into the block buffer and return its start address, |
| \G @i{a-addr}. |
\G @i{a-addr}. |
| dup 0= -35 and throw |
dup offset @ u< -35 and throw |
| dup get-buffer >r |
dup get-buffer >r |
| dup r@ buffer-block @ <> |
dup r@ buffer-block @ <> |
| r@ buffer-fid @ block-fid @ <> or |
r@ buffer-fid @ block-fid @ <> or |