FindAttachmentsCommand.mesa
Copyright Ó 1992 by Xerox Corporation. All rights reserved.
Michael Plass, January 16, 1992 4:42 pm PST
DIRECTORY Commander, PFS, Rope, PFSNames, IO, CommanderOps;
FindAttachmentsCommand: CEDAR PROGRAM
IMPORTS Commander, PFS, PFSNames, IO, Rope, CommanderOps
~
BEGIN
Command: Commander.CommandProc ~ {
star: PFS.PATH ~ PFS.PathFromRope["*"];
pats: LIST OF PFS.PATH ¬ NIL;
Recurse: PROC ~ { PFS.EnumerateForInfo[pattern: star, proc: Each] };
Each:
PFS.InfoProc ~ {
IF fileType = PFS.tDirectory
AND attachedTo =
NIL
THEN {
PFS.DoInWDir[fullFName, Recurse];
}
ELSE {
IF attachedTo #
NIL
THEN {
FOR tail:
LIST
OF
PFS.
PATH ¬ pats, tail.rest
UNTIL tail =
NIL
DO
IF PFSNames.IsAPrefix[tail.first, attachedTo].isa
THEN {
IO.PutRope[cmd.out, PFS.RopeFromPath[fullFName]];
IO.PutRope[cmd.out, "\n"];
RETURN
};
ENDLOOP;
};
};
};
FOR each: Rope.
ROPE ¬ CommanderOps.NextArgument[cmd], CommanderOps.NextArgument[cmd]
UNTIL each =
NIL
DO
pats ¬ CONS[PFS.PathFromRope[Rope.Concat["-ux:", each]], pats];
ENDLOOP;
IF pats = NIL THEN CommanderOps.Failed[cmd.procData.doc];
PFS.EnumerateForInfo[pattern: star, proc: Each];
};
Commander.Register["FindAttachments", Command, "Lists all files under current WD that have attachments (links) to the listed directories"];
END.