-- STDebugXD.mesa Edited by Bruce, October 13, 1980 6:25 PM DIRECTORY CBinary USING [DebugTab], CGDBinaryDefs USING [FopNames, MopNames], DebugFormat USING [LongSubString], FrameDefs USING [IsBound], Init USING [DebugTab], Inline USING [LowHalf], MiscDefs USING [DestroyFakeModule], RESOut USING [PSubString], SegmentDefs USING [FileSegmentHandle, LongFileSegmentAddress, SwapIn, Unlock], STDebugDefs USING [TableId], String USING [AppendSubString, SubStringDescriptor]; STDebugXD: PROGRAM IMPORTS CBinary, CGDBinaryDefs, FrameDefs, Init, Inline, MiscDefs, RESOut, String, SegmentDefs EXPORTS STDebugDefs = BEGIN OPEN STDebugDefs; AppendLongSubString: PUBLIC PROC [s: STRING, ss: DebugFormat.LongSubString] = { desc: String.SubStringDescriptor _ [ base: Inline.LowHalf[ss.base], offset: ss.offset, length: ss.length]; String.AppendSubString[s, @desc]}; PLongSubString: PUBLIC PROC [ss: DebugFormat.LongSubString] = { desc: String.SubStringDescriptor _ [ base: Inline.LowHalf[ss.base], offset: ss.offset, length: ss.length]; RESOut.PSubString[@desc]}; Tab: TYPE = RECORD [seg: SegmentDefs.FileSegmentHandle, state: {in, out}]; tables: ARRAY TableId OF Tab _ ALL[[NIL,out]]; LockTableSegment: PUBLIC PROC [id: TableId] RETURNS [LONG POINTER] = BEGIN seg: SegmentDefs.FileSegmentHandle; seg _ IF tables[id].seg = NIL THEN TableSegment[id] ELSE tables[id].seg; IF tables[id].state = out THEN { SegmentDefs.SwapIn[seg]; tables[id].seg _ seg; tables[id].state _ in}; RETURN [SegmentDefs.LongFileSegmentAddress[seg]]; END; TableSegment: PROC [id: TableId] RETURNS [seg: SegmentDefs.FileSegmentHandle] = BEGIN offset: CARDINAL; [seg, offset] _ MiscDefs.DestroyFakeModule[SELECT id FROM mopcodes => LOOPHOLE[CGDBinaryDefs.MopNames], fopcodes => LOOPHOLE[CGDBinaryDefs.FopNames], debugtab => IF FrameDefs.IsBound[Init.DebugTab] THEN LOOPHOLE[Init.DebugTab] ELSE LOOPHOLE[CBinary.DebugTab], ENDCASE => ERROR]; IF offset # 0 THEN ERROR; RETURN[seg]; END; UnlockTableSegment: PUBLIC PROC [id: TableId] = { IF tables[id].state = in THEN { SegmentDefs.Unlock[tables[id].seg]; tables[id].state _ out}}; END.