DIRECTORY Commander USING[ CommandProc, Register ], FS USING [Error, SetKeep], GVBasics USING[ ItemHeader ], GVRetrieve, IO, Process USING [Detach], Rope USING[ Fetch, Length, ROPE ], UserCredentials USING[ Get ], ViewerClasses USING [Viewer], ViewerIO USING[ CreateViewerStreams ], ViewerOps USING [FindViewer, OpenIcon]; PeekMail: CEDAR PROGRAM IMPORTS Commander, FS, GVRetrieve, IO, Process, Rope, UserCredentials, ViewerIO, ViewerOps = BEGIN TypeMessage: PROC[out: IO.STREAM, handle: GVRetrieve.Handle] = BEGIN handleStr: IO.STREAM = handle.GetItem[]; buffer: REF TEXT = NEW[TEXT[300]]; UNTIL handleStr.EndOf[] DO buffer.length _ handleStr.GetBlock[buffer, 0, buffer.maxLength]; out.PutBlock[buffer, 0, buffer.length]; ENDLOOP; END; DoIt: Commander.CommandProc = TRUSTED { Process.Detach[FORK ReallyDoIt[] ] }; TSStream: PROC[name, tsLogFile, wDir: Rope.ROPE] RETURNS [out, tsLogStrm: IO.STREAM] = { v: ViewerClasses.Viewer _ ViewerOps.FindViewer[name]; out _ ViewerIO.CreateViewerStreams[name, v, tsLogFile, FALSE].out; FS.SetKeep[tsLogFile, 4 ! FS.Error => CONTINUE]; IF v#NIL THEN IF v.iconic THEN ViewerOps.OpenIcon[v]; }; ReallyDoIt: PROC = BEGIN peekLog: Rope.ROPE = "///temp/PeekMail.log"; out: IO.STREAM = TSStream["Peek Mail", peekLog, NIL].out; handle: GVRetrieve.Handle = GVRetrieve.Create[300]; out.PutF["\n~~~~~~~~~~~~ PeekMail @ %g\n\n", IO.time[]]; GVRetrieve.NewUser[handle, UserCredentials.Get[].name, UserCredentials.Get[].password]; DO noMore: BOOL; state: GVRetrieve.ServerState; type: GVRetrieve.ServerType; [noMore, state, type] _ GVRetrieve.NextServer[handle]; IF noMore THEN EXIT; out.PutF["Server \"%g\"\n\n--------\n\n", [rope[GVRetrieve.ServerName[handle]]] ]; IF state # notEmpty THEN LOOP; DO ENABLE GVRetrieve.Failed => { out.PutF["\nFailed: %g\n", [rope[text]] ]; EXIT }; msgExists, archived, deleted: BOOL; [msgExists, archived, deleted] _ GVRetrieve.NextMessage[handle]; IF NOT msgExists THEN EXIT; IF deleted THEN LOOP; BEGIN toc: Rope.ROPE = GVRetrieve.ReadTOC[handle]; IF Rope.Length[toc] # 0 AND Rope.Fetch[toc,0] # '? THEN LOOP; IF archived THEN out.PutRope["(archived)\n"]; DO header: GVBasics.ItemHeader = GVRetrieve.NextItem[handle]; IF header.type = LastItem THEN EXIT; IF header.type # Text THEN LOOP; TypeMessage[out, handle]; ENDLOOP; GVRetrieve.WriteTOC[handle, " "]; out.PutRope["\n\n--------\n\n"]; END; ENDLOOP; ENDLOOP; out.PutRope["End of messages\n"]; GVRetrieve.Close[handle]; out.Flush[]; END; Commander.Register[key: "PeekMail", proc: DoIt, doc: "Look at new mail without flushing it from the mail servers"]; END. ’PeekMail.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Andrew Birrell August 29, 1983 11:42 am Willie-Sue, May 9, 1986 2:39:53 pm PDT Κg˜šœ ™ Icodešœ Οmœ1™Jšž˜Jšœ žœžœ˜(Jš œžœžœžœžœ˜"Jšžœ˜šžœA˜CJ˜'—Jšžœ˜Jšžœ˜J˜—šŸœ˜Jšžœžœ˜/—J˜š Ÿœžœžœžœžœžœ˜XJšœ5˜5Jšœ7žœ˜BJšžœžœ žœ˜0Jš žœžœžœžœ žœ˜5Jšœ˜—J˜šŸ œžœ˜Jšž˜Jšœžœ˜,Jšœžœžœ"žœ˜9J˜3Jšœ.žœ ˜9˜6J˜ —šžœ žœ˜J˜J˜J˜6Jšžœžœžœ˜J˜RJšžœžœžœ˜šžœžœCžœ˜SJšœžœ˜#J˜@Jšžœžœ žœžœ˜Jšžœ žœžœ˜šž˜Jšœ žœ˜,Jšžœžœžœžœ˜=Jšžœ žœ˜-šžœ;˜=Jšžœžœžœ˜$Jšžœžœžœ˜ J˜—Jšžœ˜J˜!J˜ —Jšžœ˜—Jšžœ˜—Jšžœ˜J˜!J˜J˜ Jšžœ˜J˜—˜/J˜C—J˜Jšžœ˜J˜J˜—…— %