<> <> <> <<>> DIRECTORY PBasics USING [PartialComparison], Rope USING [ROPE, Substr]; PFSNames: CEDAR DEFINITIONS <> <<>> IMPORTS Rope ~ BEGIN ROPE: TYPE = Rope.ROPE; Comparison: TYPE = PBasics.PartialComparison; PATH: TYPE = REF PathObject; PathObject: TYPE = RECORD [REF PrivatePathObject]; PrivatePathObject: TYPE; Component: TYPE = RECORD [ name: RECORD [base: ROPE, start, len: NAT] _ [NIL, 0, 0], version: Version _ [none] ]; VersionKind: TYPE = {numeric, none, lowest, highest, next, all}; Version: TYPE = RECORD [ versionKind: VersionKind, version: CARDINAL _ 0 <> ]; EmptyPath: READONLY PATH; -- non-NIL PATH semantically equivalent to NIL <> NarrowPath: PROC [r: REF ANY] RETURNS [PATH]; -- because PathObject is opaque <> <<>> IsPath: PROC [r: REF ANY] RETURNS [BOOL]; -- because PathObject is opaque <> <> <> <<>> ConstructName: PROC [components: LIST OF Component, absolute, directory, reverse: BOOL _ FALSE, unparsed: REF _ NIL] RETURNS [name: PATH]; <> <<>> <> ExpandName: PROC [name: PATH, wDir: PATH _ NIL] RETURNS [PATH]; <> <<>> ComponentCount: PROC [name: PATH] RETURNS [count: NAT]; <> <<>> Compare: PROC [n1, n2: PATH, case: BOOL _ FALSE] RETURNS [Comparison]; Equal: PROC [n1, n2: PATH, case: BOOL _ FALSE] RETURNS [BOOL] ~ INLINE { RETURN[Compare[n1, n2, case]=equal] }; SubName: PROC [name: PATH, start: NAT _ 0, count: NAT _ NAT.LAST, absolute, directory: BOOL _ FALSE] RETURNS [PATH]; <> ShortName: PROC [name: PATH] RETURNS [shortName: Component]; <> Cat: PROC [n1, n2: PATH] RETURNS [PATH]; <> Fetch: PROC [name: PATH, index: NAT] RETURNS [Component]; < BoundsFault. >> <<>> ComponentRope: PROC [comp: Component] RETURNS [ROPE] ~ INLINE { RETURN [Rope.Substr[comp.name.base, comp.name.start, comp.name.len]]; }; IsAPrefix: PROC [prefix, name: PATH] RETURNS [isa: BOOL, suffix: PATH]; <> <<>> IsADirectory: PROC [name: PATH] RETURNS [BOOL]; <> <<>> EnsureDirectory: PROC [name: PATH] RETURNS [PATH]; <> <<>> IsAbsolute: PROC [name: PATH] RETURNS [BOOL]; <> <<>> EnsureAbsolute: PROC [name: PATH] RETURNS [PATH]; <> StripVersionNumber: PROC [name: PATH] RETURNS [PATH]; <> <<>> SetVersionNumber: PROC [name: PATH, version: Version] RETURNS [PATH]; <> <<>> ReplaceShortName: PROC [name: PATH, newShortName: Component] RETURNS [PATH]; <> <<>> ReplaceComponent: PROC [name: PATH, index: NAT, new: Component] RETURNS [PATH]; <> <<>> InASubdirectory: PROC [parent: PATH, name: PATH] RETURNS [BOOL]; <> <<>> FirstSubdirectory: PROC [parent: PATH, name: PATH] RETURNS [PATH]; <> <<>> Directory: PROC [name: PATH] RETURNS [PATH]; <> <<>> Parent: PROC [name: PATH] RETURNS [PATH]; <> <<>> ComponentProc: TYPE = PROC[comp: Component, ref: REF]; SeparatorProc: TYPE = PROC[separatorPresent: BOOL, ref: REF]; Map: PROC [name: PATH, componentProc: ComponentProc, separatorProc: SeparatorProc, ref: REF _ NIL]; <> NonNIL: PROC [p: PATH] RETURNS [PATH] ~ INLINE { RETURN[IF p=NIL THEN EmptyPath ELSE p]; }; <> <> CompareComponents: PROC [c1, c2: Component, case: BOOL _ FALSE] RETURNS [Comparison]; EqualComponents: PROC [c1, c2: Component, case: BOOL _ FALSE] RETURNS [BOOL] ~ INLINE { RETURN[CompareComponents[c1, c2, case]=equal]; }; <> CompareVersions: PROC [v1, v2: Version] RETURNS [Comparison]; EqualVersions: PROC [v1, v2: Version] RETURNS [BOOL] ~ INLINE { RETURN[CompareVersions[v1, v2]=equal]; }; <> GetUnparsingHint: PROC [p: PATH] RETURNS [REF]; <> SetUnparsingHint: PROC [p: PATH, r: REF] RETURNS [prev: REF]; END.