<> <> <> DIRECTORY BasicTime, DFUtilities, IO, RedBlackTree, Rope, TextReplace, ViewerClasses; FileCmds: CEDAR DEFINITIONS = { <> LORA: TYPE = LIST OF REF ANY; ROPE: TYPE = Rope.ROPE; LOR: TYPE = LIST OF ROPE; RopeMap: TYPE = TextReplace.RopeMap; Viewer: TYPE = ViewerClasses.Viewer; STREAM: TYPE = IO.STREAM; GMT: TYPE = BasicTime.GMT; noGMT: GMT = BasicTime.nullGMT; Error: ERROR [message: ROPE]; <> Warning: SIGNAL [message: ROPE]; <> Miss: SIGNAL [name: ROPE, created: GMT]; <> FileNote: TYPE = REF FileNoteRep; FileNoteRep: TYPE = RECORD [ id: FileID, fsName: ROPE _ NIL, primaryVolume, backupVolume, author: ROPE _ NIL, created, read, write: GMT _ noGMT, createTried, readTried: BOOL _ FALSE]; FileID: TYPE = RECORD [name: ROPE, created: GMT _ noGMT]; FileSet: TYPE = REF FileSetRep; FileSetRep: TYPE = RECORD [ elts: RedBlackTree.Table, ids: IdentificationScheme, summary: ROPE]; FileSetList: TYPE = LIST OF FileSet; FileConsumer: TYPE = PROC [fn: FileNote]; IdentificationScheme: TYPE = RECORD [ server: BOOL _ TRUE, directory: BOOL _ TRUE, version: BOOL _ TRUE, create: BOOL _ FALSE, askFS: BOOL _ FALSE]; <> CreateNote: PROC [fileName: ROPE, created: GMT, ids: IdentificationScheme] RETURNS [fn: FileNote]; GetCreated: PROC [fn: FileNote] RETURNS [created: GMT]; <> GetAccounting: PROC [fn: FileNote] RETURNS [read, write: GMT, author: ROPE]; <> <> NewFileSet: PROC [ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; EnumSet: PROC [fs: FileSet, to: FileConsumer]; First: PROC [fs: FileSet] RETURNS [fn: FileNote]; Next: PROC [fs: FileSet, fn: FileNote] RETURNS [next: FileNote]; Lookup: PROC [fs: FileSet, fn: FileNote] RETURNS [found: FileNote]; Delete: PROC [fs: FileSet, fn: FileNote] RETURNS [found: FileNote]; Insert: PROC [fs: FileSet, fn: FileNote] RETURNS [news: BOOL]; Size: PROC [fs: FileSet] RETURNS [numberOfFiles: INT]; MapNames: PROC [fs: FileSet, map: RopeMap, mapIDName, mapFSName: BOOL _ TRUE] RETURNS [mfs: FileSet]; pseudoServerToRead: RopeMap; Realify: PROC [fs: FileSet] RETURNS [mfs: FileSet] = INLINE {mfs _ MapNames[fs, pseudoServerToRead, TRUE, TRUE]}; <> <> Union: PROC [fsl: FileSetList, fr: FileRelation _ NIL] RETURNS [fs: FileSet]; <> <> Intersection: PROC [fsl: FileSetList, fr: FileRelation _ NIL] RETURNS [fs: FileSet]; <> Difference: PROC [fsl: FileSetList, fr: FileRelation _ NIL] RETURNS [fs: FileSet]; <> SymmetricDifference: PROC [fsl: FileSetList, fr: FileRelation _ NIL] RETURNS [fs: FileSet]; <> equality: FileRelation; FileRelation: TYPE = REF FileRelationPrivate; FileRelationPrivate: TYPE = RECORD [ Test: PROC [data: REF ANY, left, right: FileID] RETURNS [BOOL], LeftToRight: PROC [data: REF ANY, fid: FileID] RETURNS [FileIDRange], RightToLeft: PROC [data: REF ANY, fid: FileID] RETURNS [FileIDRange], data: REF ANY _ NIL ]; FileIDRange: TYPE = RECORD [ lowName, highName: ROPE, earlyCreated, lateCreated: GMT _ noGMT ]; ReverseFileRelation: PROC [fr: FileRelation] RETURNS [frr: FileRelation]; FilterFileSet: PROC [subject: FileSet, filter: Filter] RETURNS [filtered: FileSet]; FilterList: TYPE = LIST OF Filter; Filter: TYPE = REF FilterRep; FilterRep: TYPE = RECORD [ Eval: FilterEvalProc, data: REF ANY]; FilterEvalProc: TYPE = PROC [fn: FileNote, data: REF ANY] RETURNS [BOOL]; And, Or: PROC [FilterList] RETURNS [Filter]; Not: PROC [Filter] RETURNS [Filter]; IfCreated: PROC [reln: TimeReln, when: GMT] RETURNS [Filter]; IfRead: PROC [reln: TimeReln, when: GMT] RETURNS [Filter]; TimeReln: TYPE = {before, after}; NameMatches: PROC [pattern: ROPE, literal, word, ignoreCase, addBounds: BOOL _ FALSE] RETURNS [Filter]; IsArchived: PROC [--caches current BTree--] RETURNS [Filter]; isOnline: Filter; --consults FS ContentsPass: PROC [filter: Filter, dfFilter: DFUtilities.Filter, allowableExceptions: NAT _ 0, ids: IdentificationScheme] RETURNS [Filter--applicable only to DF files--]; <> FromFS: PROC [pattern: ROPE, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; EnumFSMatches: PROC [pattern: ROPE, to: FileConsumer, ids: IdentificationScheme _ []]; <> FromDF: PROC [dfName: ROPE, date: DFUtilities.Date _ [], filter: DFUtilities.Filter, which: DFWhich, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; FromDFs: PROC [dfs: FileSet, filter: DFUtilities.Filter, which: DFWhich, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; EnumDF: PROC [dfName: ROPE, date: DFUtilities.Date _ [], to: FileConsumer, filter: DFUtilities.Filter, which: DFWhich, ids: IdentificationScheme _ []]; DFWhich: TYPE = {remote, local}; MentionedDFs: PROC [dfName: ROPE, filter: DFUtilities.Filter _ [], ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; EnumMentionedDFs: PROC [dfName: ROPE, filter: DFUtilities.Filter _ [], to: FileConsumer, ids: IdentificationScheme _ []]; FromArchiveMsg: PROC [date: GMT, which: ArchiveWhich, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; EnumArchiveMsg: PROC [date: GMT, to: FileConsumer, which: ArchiveWhich, ids: IdentificationScheme _ []]; ArchiveWhich: TYPE = {archive, online}; FromArchivist: PROC [pattern: ROPE, created: GMT _ noGMT, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; <... format, not slashy format.>> EnumArchivist: PROC [pattern: ROPE, to: FileConsumer, created: GMT _ noGMT, ids: IdentificationScheme _ []]; <... format, not slashy format.>> FromRope: PROC [rope: ROPE, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; FromFile: PROC [fileName: ROPE, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; FromStream: PROC [from: STREAM, ids: IdentificationScheme _ []] RETURNS [fs: FileSet]; ToRope: PROC [fs: FileSet] RETURNS [ROPE]; ToFile: PROC [fs: FileSet, fileName: ROPE]; ToStream: PROC [fs: FileSet, to: IO.STREAM]; }.