-- file: LaurelStateDefs.mesa -- edited by Levin: January 27, 1981 11:56 AM -- edited by Brotz: November 19, 1981 12:02 PM DIRECTORY AltoDefs USING [PageNumber], AltoFileDefs USING [FP, TIME, vDA], drD: FROM "LaurelDriverDefs" USING [InstallError], SegmentDefs USING [DataSegmentHandle, FileHandle, FileSegmentHandle]; lsD: DEFINITIONS = BEGIN --*** Public Interface ***-- -- Types -- StateSegment: TYPE = POINTER TO StateSegmentObject; PageNumber: TYPE = CARDINAL; PageCount: TYPE = CARDINAL; -- Facilities to be used during installation only -- AllocateStateNode: PROCEDURE [size: CARDINAL] RETURNS [POINTER]; -- analogous to SystemDefs.AllocateHeapNode, except that it allocates a node in the -- permanent state heap, which is retained across sessions. Such nodes can never be -- deallocated. AllocateStateString: PROCEDURE [chars: CARDINAL] RETURNS [STRING]; -- analogous to SystemDefs.AllocateHeapString. DefineStateSegment: PROCEDURE [nPages: PageCount] RETURNS [StateSegment]; -- reserves a segment of length nPages in the file Laurel.state and returns a segment -- describing it, which is used in the following procedures. As with state nodes, these -- segments will persist across sessions. It is the client's responsibility to ensure that the -- StateSegment (handle) returned is preserved as well (e.g., in another state segment, a -- state node, IntCommon, or DisplayCommon). -- Facilities usable at any time -- stateFile: SegmentDefs.FileHandle; WriteStateSegment: PROCEDURE [segment: StateSegment]; -- writes the segment to the disk. SwapInStateSegment: PROCEDURE [segment: StateSegment] RETURNS [POINTER]; -- swaps the given segment into memory and locks it. The pointer returned is the -- starting address of the segment in main storage. StateSegmentAddress: PROCEDURE [segment: StateSegment] RETURNS [POINTER]; -- The pointer returned is the starting address of the segment in main storage. -- The segment must be swapped in and not yet released. ReleaseStateSegment: PROCEDURE [segment: StateSegment]; -- decrements the lock count on the segment, which must be in main memory. If the -- lock count becomes zero, the segment may be removed from main memory. --*** Private Interface ***-- StateHeader: PRIVATE TYPE = MACHINE DEPENDENT RECORD[ imageFP: AltoFileDefs.FP, -- must be first imageTime: AltoFileDefs.TIME, -- must be second profileFP: AltoFileDefs.FP, profileTime: AltoFileDefs.TIME, fontsWidthsFP: AltoFileDefs.FP, fontsWidthsTime: AltoFileDefs.TIME, headerFF: CARDINAL, intCOffset: CARDINAL, disCOffset: CARDINAL, segmentList: StateSegment, firstSegmentPage: PageNumber, heapSegFirstPage: PageNumber, heapSegPages: PageCount, heapSegDA: AltoFileDefs.vDA, imageDATableSeg: StateSegment, profileInUserCm: BOOLEAN, cachedHeapTop: AltoDefs.PageNumber]; StateSegmentObject: TYPE = PRIVATE MACHINE DEPENDENT RECORD[ pages: PUBLIC PageCount, link: StateSegment, body: SELECT OVERLAID * FROM inStateFile => [hint: AltoFileDefs.vDA], inCore => [fsh: SegmentDefs.FileSegmentHandle], ENDCASE]; InstallSegments: PRIVATE PROCEDURE [header: POINTER TO StateHeader]; InitializeSegments: PRIVATE PROCEDURE [header: POINTER TO StateHeader]; CreateLaurelState: PRIVATE PROCEDURE [heapDS: SegmentDefs.DataSegmentHandle] RETURNS [drD.InstallError]; GetWrittenTime: PRIVATE PROCEDURE [file: SegmentDefs.FileHandle] RETURNS [time: AltoFileDefs.TIME]; END. -- of LaurelStateDefs --z19932l3008(635)\f1