-- SourceBcd.mesa -- last edited by JGS on 17-Sep-82 14:04:28 -- last edited by Satterthwaite, December 30, 1982 9:56 am DIRECTORY BcdDefs: TYPE USING [CTIndex, MTIndex, NameRecord], BcdOps: TYPE USING [BcdBase], BcdUtilDefs: TYPE USING [BcdBasePtr, BcdLimitPtr], HashTypes: TYPE USING [HTIndex], String: TYPE USING [SubString], Table: TYPE USING [Base, Limit]; SourceBcd: DEFINITIONS = { BadSourceBcd: ERROR; -- obsolete, already repackaged, or compiled for Alto -- ************************* BCD Table Information ************************* bcdHeader: READONLY BcdOps.BcdBase; bcdBases: READONLY BcdUtilDefs.BcdBasePtr; bcdLimits: READONLY BcdUtilDefs.BcdLimitPtr; moduleCount: READONLY CARDINAL; ModuleNum: TYPE = CARDINAL; nullModuleNum: ModuleNum = CARDINAL.LAST; -- Interface Load, Unload: PROC; EnumerateConfigs: PROC [ userProc: PROC [BcdDefs.CTIndex] RETURNS [stop: BOOL]]; EnumerateModules: PROC [ userProc: PROC [BcdDefs.MTIndex] RETURNS [stop: BOOL]]; IsTableCompiled: PROC [mti: BcdDefs.MTIndex] RETURNS [BOOL]; ModuleNumForMti: PROC [ -- map i-th module index to i mti: BcdDefs.MTIndex] RETURNS [ModuleNum]; SubStringForName: PROC [ss: String.SubString, name: BcdDefs.NameRecord]; EqualIdAndName: PROC [id: HashTypes.HTIndex, name: BcdDefs.NameRecord] RETURNS [equal: BOOL]; -- *************************** Configuration Tree *************************** CTreeIndex: TYPE = Table.Base RELATIVE POINTER[0..Table.Limit) TO ConfigTreeNode; nullCTreeIndex: CTreeIndex = CTreeIndex.LAST; ConfigTreeNode: TYPE; ComponentKind: TYPE = {instance, prototype}; BcdTableLoc: TYPE = RECORD [ SELECT kind: * FROM config => [cti: BcdDefs.CTIndex], module => [mti: BcdDefs.MTIndex], ENDCASE]; -- Attributes Father: PROC [self: CTreeIndex] RETURNS [CTreeIndex]; EnumerateSons: PROC [ self: CTreeIndex, userProc: PROC [CTreeIndex] RETURNS [stop: BOOL]]; Kind: PROC [self: CTreeIndex] RETURNS [ComponentKind]; Name: PROC [self: CTreeIndex, kind: ComponentKind] RETURNS [BcdDefs.NameRecord]; SharedProtoName: PROC [self: CTreeIndex] RETURNS [BOOL]; Link: PROC [self: CTreeIndex, kind: ComponentKind] RETURNS [CTreeIndex]; Prev: PROC [self: CTreeIndex, kind: ComponentKind] RETURNS [CTreeIndex]; Index: PROC [self: CTreeIndex] RETURNS [BcdTableLoc]; -- Tree Building BuildConfigTree: PROC RETURNS [root: CTreeIndex]; DestroyConfigTree: PROC [root: CTreeIndex]; -- Tree Traversal EnumerateModulesInConfig: PROC [ configTreeNode: CTreeIndex, kind: ComponentKind, -- if prototype, no duplications appear in output userProc: PROC [mti: BcdDefs.MTIndex] RETURNS [stop: BOOL]]; FindModuleOrConfig: PROC [ kind: ComponentKind, ResetIdStream: PROC, FirstQualId, NextQualId: PROC RETURNS [id: HashTypes.HTIndex]] RETURNS [component: CTreeIndex]; IsModuleInConfig: PROC [ kind: ComponentKind, mti: BcdDefs.MTIndex, configTreeNode: CTreeIndex] RETURNS [BOOL]; -- find first node with given instance/prototype id -- (others with same id are found along first node's prev chain) LookupId: PROC [id: HashTypes.HTIndex, kind: ComponentKind] RETURNS [firstTreeLoc: CTreeIndex]; LookupName: PROC [name: BcdDefs.NameRecord, kind: ComponentKind] RETURNS [firstTreeLoc: CTreeIndex]; LookupSS: PROC [idSS: String.SubString, kind: ComponentKind] RETURNS [firstTreeLoc: CTreeIndex]; }.