<> <> <> <> DIRECTORY AlpineEnvironment USING[FileID, PageCount, PageNumber, PageRun, VolumeID], AlpineInternal USING[FileHandle], CountedVM USING[Handle]; FilePageMgr: CEDAR DEFINITIONS = BEGIN VMPageSet: TYPE = RECORD [ pages: LONG POINTER, pageRun: AlpineEnvironment.PageRun, refChunk: PRIVATE RefChunk]; <> nullVMPageSet: VMPageSet = [NIL, [0, 0], NIL]; RefChunk: TYPE = REF Chunk; Chunk: TYPE; <> < GetSize[fileHandle] except that the ReadAhead procedures just stop and return when PageRunExtendsPastEof is encountered. No proc returns a VMPageSet with count = 0. >> ReadPages: PROCEDURE [fileHandle: AlpineInternal.FileHandle, pageRun: AlpineEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> <> ReadAheadPages: PROCEDURE[fileHandle: AlpineInternal.FileHandle, pageRun: AlpineEnvironment.PageRun]; <> <> UsePages: PROCEDURE [fileHandle: AlpineInternal.FileHandle, pageRun: AlpineEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> <> ReadLogPages: PROCEDURE [fileHandle: AlpineInternal.FileHandle, pageRun: AlpineEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> ReadAheadLogPages: PROCEDURE[fileHandle: AlpineInternal.FileHandle, pageRun: AlpineEnvironment.PageRun]; <> UseLogPages: PROCEDURE [fileHandle: AlpineInternal.FileHandle, pageRun: AlpineEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> ReadLeaderPages: PROCEDURE [fileHandle: AlpineInternal.FileHandle] RETURNS [vMPageSet: VMPageSet, handle: CountedVM.Handle]; <> <> UseLeaderPages: PROCEDURE [fileHandle: AlpineInternal.FileHandle] RETURNS [vMPageSet: VMPageSet, handle: CountedVM.Handle]; <> ShareVMPageSet: PROCEDURE [vMPageSet: VMPageSet]; <> <> ReleaseVMPageSet: PROCEDURE [vMPageSet: VMPageSet, releaseState: ReleaseState, keep: BOOLEAN]; <> ReleaseState: TYPE = {writeIndividualWait, writeBatchedWait, writeIndividualNoWait, writeBatchedNoWait, clean}; DirtyReleaseState: TYPE = ReleaseState[writeIndividualWait..writeBatchedNoWait]; DirtyWaitReleaseState: TYPE = ReleaseState[writeIndividualWait..writeBatchedWait]; DirtyNoWaitReleaseState: TYPE = ReleaseState[writeIndividualNoWait..writeBatchedNoWait]; <> ForceOutVMPageSet: PROCEDURE [vMPageSet: VMPageSet]; <> <> ForceOutFile: PROCEDURE [fileHandle: AlpineInternal.FileHandle]; <> <> ForceOutEverything: PROCEDURE; <> <> CreateProc: TYPE = PROCEDURE[fileID: AlpineEnvironment.FileID]; Create: PROCEDURE [volumeID: AlpineEnvironment.VolumeID, initialSize: AlpineEnvironment.PageCount, proc: CreateProc]; <> <> Delete: PROCEDURE [fileHandle: AlpineInternal.FileHandle]; <> FileExists: PROCEDURE [fileHandle: AlpineInternal.FileHandle] RETURNS [fileExists: BOOLEAN]; <> GetSize: PROCEDURE [fileHandle: AlpineInternal.FileHandle] RETURNS [size: AlpineEnvironment.PageCount]; <> <> SetSize: PROCEDURE [fileHandle: AlpineInternal.FileHandle, size: AlpineEnvironment.PageCount]; <> <> SetLeaderSize: PROCEDURE [fileHandle: AlpineInternal.FileHandle, size: AlpineEnvironment.PageCount]; <> <> InitializeFilePageMgr: PROCEDURE[nNormalChunksInCache: NAT _ 20, nLogChunksInCache: NAT _ 20, nLeaderChunksInCache: NAT _ 40]; <> RestoreCacheToCleanState: PROCEDURE; <> <> <> InsufficientSpaceOnVolume: -- ABSTRACTION -- ERROR; VolumeTooFragmented: -- ABSTRACTION -- ERROR; VolumeWentOffline: -- ABSTRACTION -- ERROR; NoSuchFile: -- CALLING -- ERROR; NoSuchVolume: -- CALLING -- ERROR; PageRunArgIllegal: -- CALLING -- ERROR; PageRunExtendsPastEof: -- CALLING -- ERROR; SizeArgIllegal: -- CALLING -- ERROR; END. Edit Log Initial: Kolling: 26-Jan-82 14:13:06: defs file for the File Page Manager which sits between the rest of Alpine and Pilot. Changed by MBrown on August 16, 1982 2:10 pm <> <<>> Nodified: by Hauser on February 19, 1985 4:30:38 pm PST <> <> <<>>