4 CONSTANT CELL
4 CONSTANT OBJ

OBJ
CELL -- NodeLink  ( node ref )
CELL -- NodeName  ( name ref )
CELL -- NodeValue ( *obj ref )
CONSTANT /Node

OBJ
CELL -- WlLink   ( wl   ref )
CELL -- WlName   ( name ref )
CELL -- WlLatest ( node ref )
CELL -- WlPar    ( wl   ref )
CONSTANT /Wordlist

0 VALUE DW-PATTERN
0 VALUE   0 VALUE 
0 VALUE ROOT
0 VALUE NAME-CLASS
0 VALUE NODE-CLASS

: RR HERE DW-PATTERN - ;

HERE TO DW-PATTERN

\ ---------------------------- header
S" DELOWARE" S, \ magic
1 ,             \ version
HERE 0 ,        \ data size
\ ---------------------------- "Object" wordlist
RR TO ROOT
RR ,     \ ref to Wordlist class -    
0 ,      \ link
HERE 0 , \ ref to "Object" name   ( onr )
HERE 0 , \ ref to latest node     ( onr lnr )
0 ,      \ no parents

\ ---------------------------- "Object" name
RR ROT !                          ( lnr )
HERE 0 , \ ref to Name class      ( lnr ncr )
S" Object" DUP C, S, 0 C,

\ ---------------------------- "Name" wordlist
RR SWAP !                         ( lnr )
RR TO NAME-CLASS
ROOT ,   \ ref to List class
0 ,
HERE 0 , \ ref to "Name" name     ( lnr onr )
0 , \ ref to latest node          ( lnr onr )
ROOT ,

\ ---------------------------- "Name" name
RR SWAP !                         ( lnr )
NAME-CLASS , \ ref to Name class  ( lnr )
S" Name" DUP C, S, 0 C,

\ ---------------------------- "Node" wordlist
RR TO NODE-CLASS
ROOT ,   \ ref to Object class
0 ,
HERE 0 , \ ref to "Node" name     ( lnr onr )
0 , \ ref to latest node          ( lnr onr )
ROOT ,

\ ---------------------------- "Node" name
RR SWAP !                         ( lnr )
NAME-CLASS , \ ref to Name class  ( lnr )
S" Node" DUP C, S, 0 C,

\ ---------------------------- "Name class" node
RR
NODE-CLASS ,
0 , \ node link
NAME-CLASS DW-PATTERN + CELL+ CELL+ @ ,
NAME-CLASS ,

\ ---------------------------- "Name class" node
RR ROT ! \ latest node
NODE-CLASS ,
 , \ node link
NODE-CLASS DW-PATTERN + CELL+ CELL+ @ ,
NODE-CLASS ,

RR SWAP ! \ data size


S" BASE.DW" R/W CREATE-FILE THROW
DUP DW-PATTERN RR ROT WRITE-FILE THROW CLOSE-FILE THROW
