--- gforth/blocks.fs 2000/02/28 21:27:07 1.29 +++ gforth/blocks.fs 2000/09/06 20:30:06 1.31 @@ -45,7 +45,15 @@ Variable last-block $20 Value buffers User block-fid -User offset 0 offset ! \ store 1 here fore 0.4.0 compatibility +User block-offset ( -- addr ) \ gforth +\G User variable containing the number of the first block (default +\G since 0.5.0: 0). Block files created with Gforth versions before +\G 0.5.0 have the offset 1. If you use these files you can: @code{1 +\G offset !}; or add 1 to every block number used; or prepend 1024 +\G characters to the file. +0 block-offset ! \ store 1 here fore 0.4.0 compatibility + +' block-offset alias offset \ !! eliminate this? : block-cold ( -- ) block-fid off last-block off @@ -109,7 +117,7 @@ Defer flush-blocks ( -- ) \ gforth : save-buffers ( -- ) \ block \G Transfer the contents of each @code{update}d block buffer to - \G mass storage, then mark all block buffers as unassigned. + \G mass storage, then mark all block buffers as assigned-clean. block-buffers @ buffers 0 ?DO dup save-buffer next-buffer LOOP drop ; @@ -208,9 +216,13 @@ User scr ( -- a-addr ) \ block-ext s-c-r \G Save the current input source specification. Store @i{n} in \G @code{BLK}, set @code{>IN} to 0 and interpret. When the parse \G area is exhausted, restore the input source specification. + loadfilename# @ >r + 2 loadfilename# ! \ "\a block/" push-file dup loadline ! blk ! >in off ['] interpret catch - pop-file throw ; + pop-file + r> loadfilename# ! + throw ; : thru ( i*x n1 n2 -- j*x ) \ block-ext \G @code{load} the blocks @i{n1} through @i{n2} in sequence.