<> <> <> <> <<>> DIRECTORY IO USING [STREAM], PFS, PFSNames USING [PATH, Version], Rope USING [ROPE] ; PFSClass: CEDAR DEFINITIONS ~ { <> <> <<>> <> <> ROPE: TYPE ~ Rope.ROPE; PATH: TYPE ~ PFSNames.PATH; Version: TYPE ~ PFSNames.Version; UniqueID: TYPE ~ PFS.UniqueID; <> OpenFile: TYPE = REF OpenFileObject; OpenFileObject: TYPE = RECORD [ fs: FSHandle, fullFName: PATH, attachedTo: PATH, uniqueID: PFS.UniqueID, bytes: INT, mutability: PFS.Mutability, fileType: PFS.FileType, state: {closed, open}, data: REF ]; <> <> <<>> FSHandle: TYPE ~ REF FSObject; FSObject: TYPE ~ RECORD [ flavor: ATOM, name: ROPE, -- e.g. "Ivy-STP", "Palain-NFS" maintenanceProcs: MaintenanceProcs, procs: FileManipulationProcs, data: REF ]; MaintenanceProcs: TYPE ~ REF MaintenanceProcsObject; MaintenanceProcsObject: TYPE ~ RECORD [ sweep: SweepProc _ NIL, validate: ValidateProc ]; FileManipulationProcs: TYPE = REF FileManipulationProcsObject; FileManipulationProcsObject: TYPE = RECORD [ delete: DeleteProc, enumerateForInfo: EnumerateForInfoProc, enumerateForNames: EnumerateForNamesProc, fileInfo: FileInfoProc, lookupName: LookupNameProc, rename: RenameProc, copy: CopyProc, setAttributes: SetAttributesProc, setByteCountAndUniqueID: SetByteCountAndUniqueIDProc, setClientProperty: SetClientPropertyProc, getClientProperty: GetClientPropertyProc, enumerateClientProperties: EnumerateClientPropertiesProc, read: ReadProc, write: WriteProc, open: OpenProc, close: CloseProc, store: StoreProc, retrieve: RetrieveProc, attach: AttachProc, getInfo: GetInfoProc, pfsNameToUnixName: PFSNameToUnixNameProc, caseSensitive: CaseSensitiveProc ]; <> <> <<>> LookupNameProc: TYPE = PROCEDURE [h: FSHandle, file: PATH] RETURNS[PATH]; DeleteProc: TYPE = PROCEDURE [h: FSHandle, file: PATH, wantedUniqueID: UniqueID, proc: PFS.NameConfirmProc]; EnumerateForInfoProc: TYPE = PROCEDURE [h: FSHandle, pattern: PATH, proc: PFS.InfoProc, lbound: PATH, hbound: PATH]; EnumerateForNamesProc: TYPE = PROCEDURE [h: FSHandle, pattern: PATH, proc: PFS.NameProc, lbound: PATH, hbound: PATH]; FileInfoProc: TYPE = PROCEDURE [h: FSHandle, file: PATH, wantedUniqueID: UniqueID] RETURNS [version: Version, attachedTo: PATH, bytes: INT, uniqueID: UniqueID, mutability: PFS.Mutability, fileType: PFS.FileType]; RenameProc: TYPE = PROCEDURE [h: FSHandle, fromFile: PATH, wantedUniqueID: UniqueID, toFile: PATH, createOptions: PFS.CreateOptions, proc: PFS.NameConfirmProc] RETURNS [done: BOOL _ FALSE]; CopyProc: TYPE = PROCEDURE [h: FSHandle, fromFile: PATH, wantedUniqueID: UniqueID, toFile: PATH, createOptions: PFS.CreateOptions, proc: PFS.NameConfirmProc] RETURNS [done: BOOL _ FALSE]; SetAttributesProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile, attributes: PFS.CreateOptions]; SetByteCountAndUniqueIDProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile, bytes: INT, uniqueID: PFS.UniqueID]; SetClientPropertyProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile, propertyName: ROPE, propertyValue: ROPE]; GetClientPropertyProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile, propertyName: ROPE] RETURNS [propertyValue: ROPE]; EnumerateClientPropertiesProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile, proc: PFS.PropProc]; OpenProc: TYPE = PROCEDURE [h: FSHandle, file: PATH, wantedUniqueID: UniqueID, access: PFS.AccessOptions, checkFileType: BOOL, fileType: PFS.FileType, createOptions: PFS.CreateOptions] RETURNS [OpenFile]; ReadProc: TYPE = UNSAFE PROCEDURE [h: FSHandle, file: OpenFile, filePosition, nBytes: CARD, to: LONG POINTER] RETURNS [bytesRead: INT]; WriteProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile, filePosition, nBytes: CARD, from: LONG POINTER] RETURNS [bytesWritten: INT]; CloseProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile]; StoreProc: TYPE = PROCEDURE [h: FSHandle, file: PATH, wantedUniqueID: UniqueID, str: IO.STREAM, proc: PFS.StoreConfirmProc, createOptions: PFS.CreateOptions]; RetrieveProc: TYPE = PROCEDURE [h: FSHandle, file: PATH, wantedUniqueID: UniqueID, proc: PFS.RetrieveConfirmProc, checkFileType: BOOL _ FALSE, fileType: PFS.FileType]; AttachProc: TYPE = PROCEDURE [h: FSHandle, file: PATH, to: PATH, keep: CARDINAL, wantedUniqueID: UniqueID, remoteCheck: BOOL _ TRUE] RETURNS [toFName: PATH]; GetInfoProc: TYPE = PROCEDURE [h: FSHandle, file: OpenFile] RETURNS [fullFName, attachedTo: PATH, uniqueID: UniqueID, bytes: INT, mutability: PFS.Mutability, fileType: PFS.FileType]; SweepProc: TYPE ~ PROC [h: FSHandle, seconds: CARD]; <> ValidateProc: TYPE ~ PROC [h: FSHandle] RETURNS [obsolete: BOOL, downMsg: ROPE]; <> <> <> <<>> PFSNameToUnixNameProc: TYPE ~ PROCEDURE [h: FSHandle, file: PATH] RETURNS [ROPE]; <> <<>> CaseSensitiveProc: TYPE ~ PROCEDURE [h: FSHandle, file: PATH] RETURNS [BOOL]; <> <> Register: PROC [flavor: ATOM, getHandle: GetHandleProc]; <> GetHandleProc: TYPE ~ PROC [fs: ROPE, flavorSpecified: BOOL] RETURNS [h: FSHandle, downMsg: ROPE]; <> <> <> <> <> <> <> <> GetFS: PROC [fs: ROPE] RETURNS [h: FSHandle]; <> <> <> <> <> <> ClearCachedServer: PROC [fs: ROPE]; <> Error: ERROR [code: ATOM, msg: ROPE]; <> <<$fsNotKnown : can't look up the server name.>> <<$fsNotAvailable : can't contact it.>> <<$viewNotImplemented : requested view not implemented by file system.>> <<$software : "can't happen">> }...