<> <> <> <> <> DIRECTORY AlpineEnvironment, AlpineFile, AlpineInternal, FileInstance, FileMap, TransactionMap; FileLog: DEFINITIONS = BEGIN FileID: TYPE = AlpineEnvironment.FileID; LockSubID: TYPE = AlpineInternal.LockSubID; LogRecordID: TYPE = AlpineInternal.LogRecordID; OwnerName: TYPE = AlpineEnvironment.OwnerName; PageCount: TYPE = AlpineEnvironment.PageCount; PageRun: TYPE = AlpineEnvironment.PageRun; ReferencePattern: TYPE = AlpineEnvironment.ReferencePattern; TransState: TYPE = AlpineInternal.TransState; VolumeID: TYPE = AlpineEnvironment.VolumeID; <> LogCreate: PROCEDURE [fileInstance: FileInstance.Handle, initialSize: PageCount, owner: OwnerName]; <> <> LogDelete: PROCEDURE [fileInstance: FileInstance.Handle]; <> <> LogSetSize: PROCEDURE [fileInstance: FileInstance.Handle, old, new: PageCount]; <> <old.>> LogWritePages: PROCEDURE [fileInstance: FileInstance.Handle, where: LONG POINTER, pageRun: PageRun, referencePattern: ReferencePattern] RETURNS [recordID: LogRecordID]; <> <> LogReadPages: PROCEDURE [fileInstance: FileInstance.Handle, where: LONG POINTER, pageRun: PageRun, recordID: LogRecordID] RETURNS [referencePattern: ReferencePattern]; <> LogWriteLeaderPage: PROCEDURE [fileInstance: FileInstance.Handle, where: LONG POINTER] RETURNS [recordID: LogRecordID]; <> <> LogReadLeaderPage: PROCEDURE [fileInstance: FileInstance.Handle, where: LONG POINTER, recordID: LogRecordID]; <> LogFileLock: PROCEDURE [fileInstance: FileInstance.Handle]; <> <> <> RecoverCreate: PROCEDURE [fileInstance: FileInstance.Handle, initialSize: PageCount, outcome: TransState]; <> RecoverDelete: PROCEDURE [fileInstance: FileInstance.Handle, outcome: TransState]; RecoverSetSize: PROCEDURE [fileInstance: FileInstance.Handle, old, new: PageCount, outcome: TransState]; RecoverWritePages: PROCEDURE [fileInstance: FileInstance.Handle, recordID: LogRecordID, pageRun: PageRun, outcome: TransState]; RecoverWriteLeaderPage: PROCEDURE [fileInstance: FileInstance.Handle, recordID: LogRecordID, outcome: TransState]; RecoverLock: PROCEDURE [fileInstance: FileInstance.Handle, lockSubID: LockSubID, outcome: TransState]; <> DefinedFileRecord: TYPE = AlpineInternal.FileRecord[writePages..lock]; FileLogRecord: PRIVATE TYPE = MACHINE DEPENDENT RECORD [ volumeID (0): VolumeID, fileID (5): FileID, specifics (9): SELECT COMPUTED DefinedFileRecord FROM writePages => [ pageRun (9): PageRun, referencePattern (12): ReferencePattern, data (13): DataRep], writeLeaderPage => [data (9): DataRep], setSize => [old (9), new (11): PageCount], <old.>> create => [initialSize (9): PageCount, owner (11): StringRep], delete => [], lock => [lockSubID (9): LockSubID], ENDCASE]; DataRep: PRIVATE TYPE = MACHINE DEPENDENT RECORD [ ARRAY [0..0) OF WORD]; StringRep: PRIVATE TYPE = MACHINE DEPENDENT RECORD [ length (0): CARDINAL, text (1): PACKED ARRAY [0..0) OF CHARACTER]; END.