<> <> <> <> DIRECTORY YggDID USING[DID], YggInternal USING[FileHandle, FPMFileHandle], Rope USING[ROPE]; YggFile: CEDAR DEFINITIONS = BEGIN PageNumber: TYPE = RECORD[INT]; PageCount: TYPE = INT; FileHandle: TYPE = PUBLIC YggInternal.FileHandle; FileHandleRep: TYPE = RECORD [ fpmFileHandle: YggInternal.FPMFileHandle, locked: BOOL _ FALSE, users: INT _ 0, name: Rope.ROPE _ NIL, fd: INT _ 0, fdLockCount: INT _ 0 ]; Open: PROC [name: Rope.ROPE] RETURNS [FileHandle]; Create: PROC [name: Rope.ROPE, size: PageCount ] RETURNS [FileHandle]; Delete: PROC [file: FileHandle]; Info: PROC [file: FileHandle] RETURNS [size: PageCount, name: Rope.ROPE]; SetSize: PROC [file: FileHandle, size: PageCount]; Read: UNSAFE PROC [file: FileHandle, from: PageNumber, nPages: PageCount, to: LONG POINTER]; Write: PROC [file: FileHandle, to: PageNumber, nPages: PageCount, from: LONG POINTER]; FilesForDID: PROC [did: YggDID.DID] RETURNS [contents, attributes, links: YggFile.FileHandle]; <> <<>> END.