{-------------------------------------------------------------}
{          routines for phase 0 -- initialization             }
{-------------------------------------------------------------}

procedure init;
    { initialize the various mechanisms }
    begin
        indlevel := 0;
        new (sbufptrs[1]);
        sbufcnt := 1;
        sbufptrs[1]^.free := sbufsize;
        initerm.val[1] := ord('M');
        initerm.val[2] := nullch;
        initerm.len := 1;
        startree(maintree);
    end;

procedure reload(t:pnode);
    { reload one (sub-)tree from the saved-tree file }
    { the recorded form of one node of a tree is:
        termlength (1..strmax-1),
        that many term bytes in reverse order,
        page numbers as high byte, low byte,
        page number of (zero,zero).
    the file is a sequence of terms as above. a tree ends
    with a byte of zero.  a sub-tree is introduced with a
    byte of strmax.                                        }
var
    x   : str;
    j   : nchar;
    p   : pnode;
    k   : integer;
    k1,k2 : 0..255;

    begin {$r-  range checks off during byte i/o }
        read(loadtree,j);
        while j<>nullch do begin
            x.len := j;
            x.val[j+1] := nullch;
            for j := j downto 1 do read(loadtree,x.val[j]);
            p := insert(t,x);
            repeat
                read(loadtree,k1,k2);
                k := (k1*256)+k2;
                if k<>0 then addpage(p,k)
            until k=0;
            read(loadtree,j);
            if j=strmax then begin { a sub-tree }
                startree(p^.subt);
                reload(p^.subt);
                read(loadtree,j)
            end
        end
    end; {$r+ }

procedure loadall;
    { if a saved-tree file INDEXER.TRE exists, load its values
        into the tree. }
    begin
        assign(loadtree,'INDEXER.TRE');
        reset(loadtree);
        if 0 = IoResult then begin
            writeln('[..loading tree]');
            reload(maintree);
            close(loadtree);
        end
        else
            writeln('[..no old tree]');
    end;
reloa