-- IncludesSymTablesImpl.Mesa -- Last modified by Sandman on July 8, 1980 9:16 AM -- Last modified by Lewis on 10-Apr-81 12:22:117 -- Last modified by Paul Rovner on June 16, 1982 3:21 pm DIRECTORY Environment USING [PageCount, PageNumber], IncludesSymTables USING [], Segments USING [ DeleteSegment, FHandle, NewSegment, Read, SegmentAddress, SHandle, SwapIn, Unlock], SymbolSegment USING [BlockDescriptor, STHeader, VersionID], Symbols USING [HTIndex, HTRecord, MDIndex], IncludeCheckerTable USING [Base]; IncludesSymTablesImpl: PROGRAM IMPORTS Segments EXPORTS IncludesSymTables = BEGIN ObsoleteSymbolTable: PUBLIC ERROR = CODE; mdb: PUBLIC IncludeCheckerTable.Base; mdLimit: PUBLIC Symbols.MDIndex; ssb: PUBLIC LONG STRING; ht: PUBLIC LONG DESCRIPTOR FOR ARRAY Symbols.HTIndex OF Symbols.HTRecord; symFileSeg: Segments.SHandle _ NIL; moduleTableDesc: SymbolSegment.BlockDescriptor; stringDesc: SymbolSegment.BlockDescriptor; hashTableDesc: SymbolSegment.BlockDescriptor; LoadSymTables: PUBLIC PROC [ symFile: Segments.FHandle, symSegBase, symSegSize: Environment.PageNumber] = BEGIN header: LONG POINTER TO SymbolSegment.STHeader; IF symFileSeg # NIL THEN ReleaseSymTables[]; symFileSeg _ Segments.NewSegment[ file: symFile, base: symSegBase, pages: symSegSize, access: Segments.Read]; Segments.SwapIn[symFileSeg]; header _ Segments.SegmentAddress[symFileSeg]; IF header.versionIdent # SymbolSegment.VersionID THEN ERROR ObsoleteSymbolTable[ ! UNWIND => ReleaseSymTables[]]; moduleTableDesc _ header.mdBlock; stringDesc _ header.ssBlock; hashTableDesc _ header.htBlock; ht _ DESCRIPTOR[ (Segments.SegmentAddress[symFileSeg] + hashTableDesc.offset), hashTableDesc.size/SIZE[Symbols.HTRecord]]; ssb _ Segments.SegmentAddress[symFileSeg] + stringDesc.offset; mdb _ LOOPHOLE[Segments.SegmentAddress[symFileSeg], IncludeCheckerTable.Base] + moduleTableDesc.offset; mdLimit _ LOOPHOLE[moduleTableDesc.size]; END; ReleaseSymTables: PUBLIC PROC = { IF symFileSeg # NIL THEN { Segments.Unlock[symFileSeg]; Segments.DeleteSegment[symFileSeg]; symFileSeg _ NIL}}; END.