<<>> <> <> <> <<>> <> DIRECTORY IO USING [STREAM], Rope USING [ROPE], WalnutDefs USING [WalnutOpsHandle], WalnutRoot USING [InternalLogInfo]; WalnutLogExpunge: CEDAR DEFINITIONS = BEGIN STREAM: TYPE = IO.STREAM; ROPE: TYPE = Rope.ROPE; WalnutOpsHandle: TYPE = WalnutDefs.WalnutOpsHandle; InternalLogInfo: TYPE = WalnutRoot.InternalLogInfo; ExpungeHandle: TYPE = REF ExpungeHandleRec; ExpungeHandleRec: PUBLIC TYPE = RECORD[ thisLog: InternalLogInfo, eStrm: STREAM, -- expungeStream for writing rStrm: STREAM, -- stream for reading thisLogPos: INT ¬ -1, expungeLogLength: INT ¬ -1, entryLengthHint: INT ¬ -1, entryPos: INT ¬ -1 ]; <<>> <> StartExpunge: PROC[opsH: WalnutOpsHandle, pagesNeeded: INT] RETURNS[expungeFileID: INT]; <> RestartExpunge: PROC[opsH: WalnutOpsHandle, currentLogPos, expungeLogLength: INT] RETURNS[ok: BOOL]; <> CopyBytesToExpungeLog: PROC[opsH: WalnutOpsHandle, bytesToCopy: INT]; <> <> GetExpungeProgress: PROC[opsH: WalnutOpsHandle] RETURNS[currentLogPos, expungeLogLength: INT]; <> <<>> EndExpunge: PROC[opsH: WalnutOpsHandle]; <> <<>> <<>> <> SetPosition: PROC[opsH: WalnutOpsHandle, startPos: INT] RETURNS[charsSkipped: INT]; <> SetIndex: PROC[opsH: WalnutOpsHandle, pos: INT]; <> PeekEntry: PROC[opsH: WalnutOpsHandle] RETURNS[ident: ATOM, msgID: ROPE, at: INT]; <> <<>> SkipEntry: PROC[opsH: WalnutOpsHandle] RETURNS[ok: BOOL]; <> CopyEntry: PROC[opsH: WalnutOpsHandle] RETURNS[newPosition, bytesCopied: INT]; <> <<>> EndCopyEntry: PROC[opsH: WalnutOpsHandle] RETURNS[startCopyPos: INT]; <> ExpLogLength: PROC[opsH: WalnutOpsHandle] RETURNS[length: INT]; <> <<>> <> <<>> EntryStatus: TYPE = { validEntry, noValidEntry, EndOfStream }; GetIndex: PROC[opsH: WalnutOpsHandle] RETURNS[curPos: INT]; <> <<>> CopyBytes: PROC[opsH: WalnutOpsHandle, strm: STREAM, num: INT]; <> <<>> ExamineThisEntry: PROC[opsH: WalnutOpsHandle] RETURNS[status: EntryStatus]; <> <> <<>> END.