ProcBcds.Mesa
last edit 18-Mar-82 14:08:05
last edit May 23, 1983 4:40 pm, Russ Atkinson (short STRING to LONG STRING)
DIRECTORY
BcdDefs: TYPE USING [Base, BCD, VersionStamp],
BcdOps: TYPE USING [NameString],
File: TYPE USING [Capability, nullCapability],
FileParms: TYPE USING [SymbolSpace],
IFSFile: TYPE USING [FileHandle],
Space: TYPE USING [Handle];
ProcBcds: DEFINITIONS = {
these are procedures the user provides
usually as parameters to PrintDepends
RelCode: TYPE = {imports, exports, otherdepends, symbolsfile, canignore,
defstype, sourcefile};
ProcBcds.PrintDepends calls ProcMod and then ProcDep
as many times as needed
sourcefile ends in either a .config or .mesa
uns is usually a DBTuples.Tuple
ProcMod: TYPE = PROC[sourcefile, smodulename: LONG STRING,
bcdvers, sourcevers, creatorvers: BcdDefs.VersionStamp,
isdefns, isconfig, iscodebound, istablecompiled,
altoCode, boundsChecks, cedarSwitch, crossJump, linksInCode, nilChecks, sortByUsage: BOOL,
symbolSpace: FileParms.SymbolSpace, rtVersionID: CARDINAL]
RETURNS[uns: UNSPECIFIED];
uns is passed thru from ProcMod result
the user generates uns, we call procDep with it
filename normally has ".bcd" at the end
ProcDep: TYPE = PROC[relcode: RelCode, smodulename, filename: LONG STRING,
bcdvers: BcdDefs.VersionStamp, uns: UNSPECIFIED];
Innards: TYPE = POINTER TO InnardsObject;
InnardsObject: TYPE = RECORD[
cap: File.Capability ← File.nullCapability,
fh:  IFSFile.FileHandle ← NIL,
bcdheaderspace: Space.Handle, 
bcd:  LONG POINTER TO BcdDefs.BCDNIL,
upperLimit: CARDINALNULL, -- this is # words available
tb:  BcdDefs.Base ← NULL,
ssb:  BcdOps.NameString ← NULL,
evb:  BcdDefs.Base ← NULL,
spb:  BcdDefs.Base ← NULL,
fpb:  BcdDefs.Base ← NULL,
ctb:  BcdDefs.Base ← NULL,
mtb:  BcdDefs.Base ← NULL,
itb:  BcdDefs.Base ← NULL,
etb:  BcdDefs.Base ← NULL,
sgb:  BcdDefs.Base ← NULL,
ftb:  BcdDefs.Base ← NULL,
ntb:  BcdDefs.Base ← NULL
];
this procedure takes a file name and calls the three procedure
variables that are its last arguments on file "sfn"
you must do an InstallAddressesBcd[] first
I will call procMod.
Then I will call procDep for each dependency for both Defs and Impls.
if print is TRUE, it will print out the number of imports and exports
if calltwice is TRUE, it will call ProcMod twice to help with
clustering in the database
PrintDepends: PROC[innards: Innards, procMod: ProcMod, procDep: ProcDep,
print, calltwice, less: BOOL, bcdfilename: LONG STRING] 
RETURNS[success, isconfig, isdefns: BOOL,
nimp, nexp, ntype: CARDINAL];
defined in ProcBcdsImpl
the way this works is that you call ReadInSegmentsBcd
with innards.cap filled in with the cap of a local file
or call it with the fh of a remote file
uses innards.cap or innards.fh, sets innards.bcdheaderspace and .bcd
ReadInSegmentsBcd: PROC[innards: Innards];
raised by ReadInSegmentsBcd
InvalidBcd: SIGNAL; -- invalid bcd version ID
uses innards.bcd, set other bases
InstallAddressesBcd: PROC[innards: Innards];
uses innards.bcdheaderspace
does NOT close fh
UnstallBcd: PROC [innards: Innards];
innards.cap and space initted from ReadInSegmentsBcd
called by DescribeBcdImpl
PrintSymbolsFile: PROC[innards: Innards, procDep: ProcDep,
uns: UNSPECIFIED, print, allsyms, less: BOOL, bcdfilename: LONG STRING]
RETURNS[success: BOOL, ntype: CARDINAL];
GetModuleName: PROC[innards: ProcBcds.Innards, interfacename: LONG STRING]
RETURNS[success: BOOL];
uses heuristics
IsRealTime: PROC[stamp: LONG CARDINAL] RETURNS[isrealtime: BOOL];
}.