<<>> <> <> <> <> DIRECTORY BasicTime USING [GMT], IO USING [STREAM], Rope USING [ROPE], VM USING [Interval]; ListerSysOps: CEDAR DEFINITIONS = BEGIN OPEN BasicTime, IO, Rope; Interceptor: TYPE = REF InterceptorRecord; InterceptorRecord: TYPE = RECORD [ open: OpenProc, close: CloseProc, delete: DeleteProc, data: REF ¬ NIL ]; OpenProc: TYPE = PROC [interceptor: Interceptor, name: ROPE, kind: OpenKind] RETURNS [stream: STREAM, err: ROPE, time: GMT]; OpenKind: TYPE = {read, write, writeLog}; <> CloseProc: TYPE = PROC [interceptor: Interceptor, stream: STREAM, abortAndDelete: BOOL] RETURNS [err: ROPE]; <> DeleteProc: TYPE = PROC [interceptor: Interceptor, name: ROPE] RETURNS [err: ROPE]; <> Intercept: PROC [interceptor: Interceptor] RETURNS [old: Interceptor]; <> <<>> Open: PROC [name: ROPE, kind: OpenKind] RETURNS [stream: STREAM, err: ROPE, time: BasicTime.GMT]; <> Close: PROC [stream: STREAM, abortAndDelete: BOOL ¬ FALSE] RETURNS [err: ROPE]; <> Delete: PROC [name: ROPE] RETURNS [err: ROPE]; <> Cleanup: PROC [abortAndDelete: BOOL]; <> MappedFile: TYPE = REF MappedFileRecord; MappedFileRecord: TYPE = RECORD [ mfi: MappedFileInner ]; MappedFileInner: TYPE = REF MappedFileInnerRecord; MappedFileInnerRecord: TYPE = RECORD [ name: Rope.ROPE, interval: VM.Interval, count: INT, stream: IO.STREAM, base: LONG POINTER, bytes: INT ]; Map: PROC [name: ROPE] RETURNS [mf: MappedFile, err: ROPE]; <> <<>> UnMap: PROC [mf: MappedFile]; <> <<>> MapBase: PROC [mf: MappedFile] RETURNS [LONG POINTER]; <> <<>> MapLength: PROC [mf: MappedFile] RETURNS [CARD]; <> <<>> END.