\ dbfwstruct

needs struct

decimal

: u>ud  ( u -- ud. )   0 ;

struct
    1 cells field (db.card)
    1 cells field (db.zname)
    2 cells field (db.type)
    2 cells field (db.creator)
    1 cells field (db.isrsrc)
    2 cells field (db.ref)
    2 cells field (db.id)
    1 cells field (db.readonly)
    1 cells field (db.rec.ndx)
    2 cells field (db.rec.h)
    2 cells field (db.rec.ptr)
    1 cells field (db.rec.dirty)
end-struct Database:

: db.card@  ( db -- card# )
    (db.card) @ ;
: db.card!  ( card# db. -- ) 
    (db.card) ! ;

: db.ref@  ( db -- dbr. )
    (db.ref) 2@ ;
: db.ref!  ( dbr. db -- )
    (db.ref) 2! ;

: db.rec.ndx!  ( recindex db -- )
    (db.rec.ndx) ! ;
: db.rec.ndx@  ( db -- recindex )
    (db.rec.ndx) @ ;

: db.rec.ptr!  ( memhandle. db -- )
    (db.rec.ptr) 2! ;
: db.rec.ptr@  ( db -- memhandle. )
    (db.rec.ptr) 2@ ;

: db.rec.h!  ( memhandle. db -- )
    (db.rec.h) 2! ;
: db.rec.h@  ( db -- memhandle. )
    (db.rec.h) 2@ ;

: db.rec.dirty?  ( db -- flag )
    (db.rec.dirty) @ ;
: mark-dirty  ( db -- )
    true swap (db.rec.dirty) ! ;
: mark-fresh  ( db -- )
    false swap (db.rec.dirty)  ! ;

: db.id@  ( db -- dbid. )
    (db.id) 2@ ;
: db.id!  ( dbid. db -- )
    (db.id) 2! ;

: db.type@  ( db -- type. )
    (db.type) 2@ ;
: db.creator@  ( db -- creator. )
    (db.creator) 2@ ;
: db.isrsrc?  ( db -- flag )
    (db.isrsrc) @ ;

: db.readonly?  ( db -- flag )
    (db.readonly) @ ;

: db.zname@  ( db -- zname )
    (db.zname) @ ;

