<> <> <> <> <> <> DIRECTORY YggEnvironment, YggInternal, YggFile, YggFilePageMgr, YggLog, YggLogBasic, YggLogRep, YggRestartFile; YggRestartFileImpl: CEDAR MONITOR IMPORTS YggFile, YggFilePageMgr EXPORTS YggRestartFile = BEGIN VolumeID: TYPE = YggEnvironment.VolumeID; RecordID: TYPE = YggLog.RecordID; WordNumber: TYPE = YggEnvironment.WordNumber; restartFileHandle: YggInternal.FileHandle _ NIL; EstablishRestartFile: PUBLIC ENTRY PROC [restartFile: YggEnvironment.DID] = { restartFileHandle _ YggFile.FilesForDID[restartFile].contents; IF YggFile.Info[restartFileHandle].size # 1 THEN ERROR; }; ReadRestartRecord: PUBLIC ENTRY PROC [] RETURNS [ wordNumberForCheckpointCompleteRecord: WordNumber, recordIDForCheckpointCompleteRecord: RecordID] = { chunk: YggFilePageMgr.VMPageSet _ YggFilePageMgr.ReadPages[fileHandle: restartFileHandle, pageRun: [firstPage: 0, count: 1]]; { restartRecord: LONG POINTER TO YggLogRep.RestartRecord = LOOPHOLE[chunk.pages]; TRUSTED { [wordNumberForCheckpointCompleteRecord, recordIDForCheckpointCompleteRecord] _ restartRecord^; }; }; YggFilePageMgr.ReleaseVMPageSet[vMPageSet: chunk, releaseState: clean, keep: FALSE]; }; WriteRestartRecord: PUBLIC ENTRY PROC [ wordNumberForCheckpointCompleteRecord: WordNumber, recordIDForCheckpointCompleteRecord: RecordID] = { chunk: YggFilePageMgr.VMPageSet _ YggFilePageMgr.UsePages[fileHandle: restartFileHandle, pageRun: [firstPage: 0, count: 1]]; { restartRecord: LONG POINTER TO YggLogRep.RestartRecord = LOOPHOLE[chunk.pages]; TRUSTED {restartRecord^ _ [wordNumberForCheckpointCompleteRecord, recordIDForCheckpointCompleteRecord]; }; }; YggFilePageMgr.ReleaseVMPageSet[ vMPageSet: chunk, releaseState: writeIndividualWait, keep: FALSE]; }; END. CHANGE LOG Created by MBrown on September 23, 1982 1:41 pm Changed by MBrown on October 10, 1982 9:44 pm <> Changed by MBrown on October 14, 1982 2:40 pm <> <> <> <> <> <> <<>>