DIRECTORY BasicTime, Commander, CommandExtras, CommandTool, IO, ProcessExtras, Rope, ViewerClasses, ViewerOps, ViewerTools; DeleteArchived: CEDAR PROGRAM IMPORTS Commander, CommandExtras, CommandTool, IO, ProcessExtras, Rope, ViewerOps, ViewerTools ={ ROPE: TYPE = Rope.ROPE; Viewer: TYPE = ViewerClasses.Viewer; STREAM: TYPE = IO.STREAM; Date: TYPE = BasicTime.Unpacked; Barf: ERROR = CODE; ListFromAck: PROC [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- = { List: PROC [fileName: ROPE, date: Date, primaryVolume, backupVolume: ROPE] = { cmd.out.PutRope[fileName]; cmd.out.PutRope["\n"]; }; cls: STREAM _ IO.RIS[cmd.commandLine]; viewerName: ROPE _ NIL; v: Viewer; vContents: ROPE; fromV: STREAM; viewerName _ cls.GetRopeLiteral[!IO.EndOfStream, IO.Error => CONTINUE]; IF viewerName = NIL THEN RETURN [$Failure, "Usage: ListFromAck \"viewerName\""]; v _ ViewerOps.FindViewer[viewerName]; IF v = NIL THEN RETURN [$Failure, IO.PutFR["viewer named %g not found", IO.refAny[viewerName]]]; vContents _ ViewerTools.GetContents[v]; fromV _ IO.RIS[vContents]; EnumAck[from: fromV, to: List !Barf, IO.EndOfStream, IO.Error => { result _ $Failure; msg _ IO.PutFR["syntax error before [%g]", IO.card[fromV.GetIndex[]]]; CONTINUE; }]; }; DeleteFromAck: PROC [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- = { subFailures: NAT _ 0; Delete: PROC [fileName: ROPE, date: Date, primaryVolume, backupVolume: ROPE] = { deleteCmd: ROPE _ IO.PutFR["Delete %g", IO.rope[fileName]]; deleteResult: REF ANY; ProcessExtras.CheckForAbort[]; deleteResult _ CommandTool.DoCommand[commandLine: deleteCmd, parent: cmd]; IF deleteResult = $Failure THEN subFailures _ subFailures + 1; }; AddMsg: PROC [more: ROPE] = { IF msg # NIL THEN msg _ msg.Cat["; "]; msg _ msg.Cat[more]}; cls: STREAM _ IO.RIS[cmd.commandLine]; viewerName: ROPE _ NIL; v: Viewer; vContents: ROPE; fromV: STREAM; viewerName _ cls.GetRopeLiteral[!IO.EndOfStream, IO.Error => CONTINUE]; IF viewerName = NIL THEN RETURN [$Failure, "Usage: DeleteFromAck \"viewerName\""]; v _ ViewerOps.FindViewer[viewerName]; IF v = NIL THEN RETURN [$Failure, IO.PutFR["viewer named %g not found", IO.refAny[viewerName]]]; vContents _ ViewerTools.GetContents[v]; fromV _ IO.RIS[vContents]; EnumAck[from: fromV, to: Delete !Barf, IO.EndOfStream, IO.Error => { result _ $Failure; AddMsg[IO.PutFR["syntax error before [%g]", IO.card[fromV.GetIndex[]]]]; CONTINUE; }]; IF subFailures > 0 THEN { result _ $Failure; AddMsg[IO.PutFR["%g delete(s) failed", IO.card[subFailures]]]; }; }; MakeChatStuffFromAck: PROC [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- = { misses: NAT _ 0; Delete: PROC [fileName: ROPE, date: Date, primaryVolume, backupVolume: ROPE] = { IF prefix.Equal[fileName.Substr[len: prefixLength]] THEN { remainder: ROPE _ fileName.Substr[start: prefixLength, len: fileName.Length[] - prefixLength]; cmd.out.PutF["Delete %g\n\n", IO.rope[remainder]]; } ELSE misses _ misses + 1; }; AddMsg: PROC [more: ROPE] = { IF msg # NIL THEN msg _ msg.Cat["; "]; msg _ msg.Cat[more]}; cls: STREAM _ IO.RIS[cmd.commandLine]; prefix: ROPE _ NIL; prefixLength: INT; viewerName: ROPE _ NIL; v: Viewer; vContents: ROPE; fromV: STREAM; prefix _ cls.GetTokenRope[MyBreak !IO.EndOfStream, IO.Error => CONTINUE].token; IF prefix = NIL THEN RETURN [$Failure, "Usage: MakeChatStuffFromAck directory \"viewerName\""]; prefixLength _ prefix.Length[]; viewerName _ cls.GetRopeLiteral[!IO.EndOfStream, IO.Error => CONTINUE]; IF viewerName = NIL THEN RETURN [$Failure, "Usage: MakeChatStuffFromAck directory \"viewerName\""]; v _ ViewerOps.FindViewer[viewerName]; IF v = NIL THEN RETURN [$Failure, IO.PutFR["viewer named %g not found", IO.refAny[viewerName]]]; vContents _ ViewerTools.GetContents[v]; fromV _ IO.RIS[vContents]; EnumAck[from: fromV, to: Delete !Barf, IO.EndOfStream, IO.Error => { result _ $Failure; AddMsg[IO.PutFR["syntax error before [%g]", IO.card[fromV.GetIndex[]]]]; CONTINUE; }]; IF misses > 0 THEN { cmd.out.PutF["%g files weren't in %g\n", IO.card[misses], IO.rope[prefix]]; }; }; MyBreak: PROC [char: CHAR] RETURNS [cc: IO.CharClass] --IO.BreakProc-- = { cc _ IF char IN ['\000 .. ' ] THEN sepr ELSE other; }; EnumAck: PROC [from: STREAM, to: PROC [fileName: ROPE, date: Date, primaryVolume, backupVolume: ROPE]] = { Skip: PROC [toke: ROPE] = { got: ROPE _ from.GetTokenRope[MyBreak].token; IF NOT got.Equal[toke] THEN ERROR Barf; }; InsistEOL: PROC = { c: CHAR _ from.GetChar[]; IF c # '\n THEN ERROR Barf; }; heading: BOOL _ TRUE; DO keyword: ROPE; [] _ from.SkipWhitespace[]; IF from.EndOf[] THEN EXIT; keyword _ from.GetTokenRope[MyBreak].token; IF keyword.Equal["Archived:"] THEN heading _ FALSE ELSE IF NOT heading THEN ERROR Barf; IF heading THEN { IF keyword.Length[] = 0 THEN ERROR Barf; IF keyword.Fetch[keyword.Length[]-1] # ': THEN ERROR Barf; [] _ from.GetLineRope[]; } ELSE { fileName, pv, bv: ROPE; date: Date; fileName _ from.GetTokenRope[MyBreak].token; Skip["of"]; date _ from.GetUnpackedTime[]; Skip["on"]; pv _ from.GetTokenRope[MyBreak].token; Skip["or"]; bv _ from.GetTokenRope[MyBreak].token; InsistEOL[]; to[fileName: fileName, date: date, primaryVolume: pv, backupVolume: bv]; }; ENDLOOP; heading _ heading; }; Start: PROC = { Commander.Register[key: "ListFromAck", proc: ListFromAck, doc: "List the files in an Archivist Request Acknowledgement"]; CommandExtras.MakeUninterpreted[Commander.Lookup[CommandTool.CurrentWorkingDirectory[].Cat["ListFromAck"]]]; Commander.Register[key: "DeleteFromAck", proc: DeleteFromAck, doc: "Delete the files in an Archivist Request Acknowledgement"]; CommandExtras.MakeUninterpreted[Commander.Lookup[CommandTool.CurrentWorkingDirectory[].Cat["DeleteFromAck"]]]; Commander.Register[key: "MakeChatStuffFromAck", proc: MakeChatStuffFromAck, doc: "Write IFS Chat commands to delete the files in an Archivist Request Acknowledgement"]; CommandExtras.MakeUninterpreted[Commander.Lookup[CommandTool.CurrentWorkingDirectory[].Cat["MakeChatStuffFromAck"]]]; }; Start[]; }. ”DeleteArchived.Mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Last Edited by: Spreitzer, September 27, 1984 8:01:24 pm PDT Ê0˜Icode™Kšœ Ïmœ1™K˜—š œžœžœ˜Kšžœžœžœ˜&K˜—Kšœžœžœžœ˜&Kšœ žœžœ˜K˜ Kšœ žœ˜Kšœžœ˜Kšœ!žœžœ žœ˜GKšžœžœžœžœ3˜RK˜%Kš žœžœžœžœ žœ$žœ˜`Kšœ'˜'Kšœžœžœ ˜šœ'žœžœ ˜DK˜Kšœžœ#žœ˜HKšžœ˜ K˜—šžœžœ˜K˜Kšœžœžœ˜>K˜—K˜—K˜š œžœžœ žœžœžœžœžœ¡œ˜Kšœžœ˜š œžœ žœ+žœ˜Pšžœ2žœ˜:Kšœ žœO˜^Kšœžœ˜2K˜—Kšžœ˜K˜—š œžœžœ˜Kšžœžœžœ˜&K˜—Kšœžœžœžœ˜&Kšœžœžœ˜Kšœžœ˜Kšœ žœžœ˜K˜ Kšœ žœ˜Kšœžœ˜Kšœ#žœžœ žœ˜OKšžœ žœžœžœD˜_K˜Kšœ!žœžœ žœ˜GKšžœžœžœžœD˜cK˜%Kš žœžœžœžœ žœ$žœ˜`Kšœ'˜'Kšœžœžœ ˜šœ'žœžœ ˜DK˜Kšœžœ#žœ˜HKšžœ˜ K˜—šžœ žœ˜Kšœ)žœžœ˜KK˜—K˜—K˜š  œžœžœžœžœ ¡œ˜JKš œžœžœžœžœ˜3K˜—K˜š  œžœžœžœ žœ+žœ˜jš œžœžœ˜Kšœžœ$˜-Kšžœžœžœžœ˜'K˜—š  œžœ˜Kšœžœ˜Kšžœ žœžœ˜K˜—Kšœ žœžœ˜šž˜Kšœ žœ˜K˜Kšžœžœžœ˜Kšœ+˜+Kšžœžœ žœžœžœžœ žœžœ˜Wšžœ žœ˜Kšžœžœžœ˜(Kšžœ(žœžœ˜:Kšœ˜K˜—šžœ˜Kšœžœ˜K˜ Kšœ,˜,K˜ K˜K˜ Kšœ&˜&K˜ Kšœ&˜&K˜ KšœH˜HKšœ˜—Kšžœ˜—Kšœ˜K˜—K˜š œžœ˜K˜yK˜lK˜K˜nK˜¨K˜uK˜—K˜K˜K˜K˜——…—ê®