variable blk               64 variable: #blks
variable offset
: (block) blk @ : block 512 * there + ;
: (line) 64 * (block) + ;

: p 1 blk -! ;             : n 1 blk +! ;
: d (line) 64 32 fill ;    : x (block) 512 32 fill ;
: eb (block) 512 eval ;    : el (line) 64 eval ;
: e 8 for 8 r@ - el next ; : s blk ! ;
: i 0 swap : ia (line) + lnparse rot swap move ;
: \ 1 s e ;                : \f there #blks @ 512 * eval ; 

: use vector ;             : blocks #blks ! ;
: r vector ;               : w vector ;
: load use r ;

loc:
  variable last-block
  : save-state blk @ last-block ! ;
  : obtain-offset #blks @ 512 * + offset ! ;
  : load-and-run load #blks @ 1+ s e ;
  : reset-offset 0 offset ! ;
  : restore-state last-block @ blk ! ;
 :: save-state obtain-offset load-and-run reset-offset restore-state ;
;loc alias include

: new there #blks @ 512 * 32 fill 0 s ; new

loc:
  : .block ." Block: " blk @ . ." of " #blks @ 1- . ; 
  : status .block ."   Stack: " .s ;
  : row dup 64 type 64 + cr ;
  : .line 8 swap - . ;
  : rows 8 for r@ .line row next ;
  : x--- 4 for ." +---:---+---:---" next ;
  : --- space space x--- cr ;
 :: --- blk @ block rows drop --- status ;
;loc alias v
loc:
  : erase 160 for space next ;
  : clr home 10 for cr next erase home ;
  : display clr v ;
 :: clear display ['] display { is ui } ;
;loc alias edit
