{-------------------------------------------------------------} { 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