-- RStatsSupport.Mesa, last edit January 3, 1983 5:32 pm
-- exported by RStatsSupportImpl.Mesa and RStatsDFImpl.Mesa

	DIRECTORY
	IFSFile: TYPE USING [FileHandle],
	IO: TYPE USING[Handle],
	List: TYPE USING[CompareProc],
	Rope: TYPE USING[ROPE, Text],
	Stream: TYPE USING[Handle],
	Subr: TYPE USING[TTYProcs],
	TypeScript: TYPE USING[TS];
	
RStatsSupport: DEFINITIONS = {
	
-- each entry is a DF file
DFRec: TYPE = RECORD[
	host: Rope.Text,
	directory: Rope.Text,
	shortname: Rope.Text,		-- name of the df file
	version: CARDINAL,		-- may be 0
	dep: LIST OF REF DFDep,	-- a list of DF files that it depends on
	refBy: LIST OF REF DFDep,	-- a list of DF files that depend on it
	bcdDep: LIST OF REF BcdDep -- a list of bcds that bcds in this DF depend on
	];
	
-- each entry is a DF file
DFDep: TYPE = RECORD[
	directory: Rope.Text,		-- may be NIL
	shortname: Rope.Text,
	createtime: LONG CARDINAL	-- may be 0
	];
	
-- each entry is a file, not a DF file
XRef: TYPE = RECORD[
	shortname: Rope.Text,		-- the file name
	host: Rope.Text,		-- of the file name
	directory: Rope.Text,		-- of the file name
	version: CARDINAL,		-- of the file name
	createtime: LONG CARDINAL,		-- of the file name
	dfshortname: Rope.Text,	-- the Df file it is in
	dfpath: Rope.Text,			-- e.g. [Indigo]<Cedar>Top> for the DF
	readOnly: BOOL,			-- the file is listed as ReadOnly
	eval: BOOL,			-- dependency has been analyzed
	compiled: BOOL,			-- a compile stmt has been emitted
	bcdChild: LIST OF REF XRef	-- list of bcds that this bcd depends on
	];
	
BcdDep: TYPE = RECORD[
	dfrec: REF DFRec,	-- the DF file that owns the bcd file
	bcdName: Rope.Text	-- the name of the bcd file (including ".bcd")
	];
	
-- in RStatsSupportImpl.Mesa

LeafOpenWithCreate: PROC[host, directory, shortname: LONG STRING,
	version: CARDINAL, createtime: LONG CARDINAL, out: IO.Handle,
	tty: Subr.TTYProcs] RETURNS[fh: IFSFile.FileHandle];
	
BreakUp: PROC[line: Rope.ROPE] 
	RETURNS[filename: Rope.Text, create: LONG CARDINAL];
	
CompareDFRec: List.CompareProc;
	
CompareDFDep: List.CompareProc;
	
CompareXRef: List.CompareProc;
	
CompareBcdDep: List.CompareProc;
	
GetLine: PROC[sh: Stream.Handle, line: LONG STRING, out: IO.Handle]
	RETURNS[noteof: BOOL];
	
ComputeFileList: PROC[dfFileName: LONG STRING, 
	fileListName: Rope.Text, typeScript: TypeScript.TS, 
	out: IO.Handle, tty: Subr.TTYProcs];
	
SubString: PROC[line, match: LONG STRING] RETURNS[is: BOOL];
	
-- in RStatsDFList.Mesa

ProcessDFList: PROC[topDFName: Rope.Text, typeScript: TypeScript.TS, 
	out: IO.Handle, tty: Subr.TTYProcs, dfrec: LIST OF REF DFRec, 
	xrefFileName: Rope.ROPE] RETURNS[nDFFiles: INT];
		 
ProcessBcdAnalysis: PROC[typeScript: TypeScript.TS, out: IO.Handle, 
	tty: Subr.TTYProcs,	dfrec: LIST OF REF DFRec, specialFiles: BOOL]; 
	
}.