DIRECTORY Commander USING[ CommandProc, Register ], GVBasics USING[ ItemHeader ], GVRetrieve, IO USING[ EndOf, GetBlock, PutBlock, PutF, PutRope, STREAM ], Rope USING[ Fetch, Length, ROPE ], UserCredentials USING[ Get ], ViewerIO USING[ CreateViewerStreams ]; PeekMail: PROGRAM IMPORTS Commander, GVRetrieve, IO, Rope, UserCredentials, ViewerIO = 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 BEGIN out: IO.STREAM = ViewerIO.CreateViewerStreams["Peek Mail"].out; handle: GVRetrieve.Handle = GVRetrieve.Create[300]; 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]; END; Commander.Register[key: "PeekMail", proc: DoIt, doc: "Look at new mail without flushing it from the mail servers"]; END. >PeekMail.mesa Andrew Birrell August 29, 1983 11:42 am Ę}˜Jšœ ™ Jšœ(™(J˜šĎk ˜ Jšœ œ˜)Jšœ œ˜J˜ Jšœœ,œ˜=Jšœœœ˜"Jšœœ˜Jšœ œ˜&—J˜šœ ˜Jšœœ#˜D—J˜Jš˜J˜šĎn œœœœ˜>Jš˜Jšœ œœ˜(Jš œœœœœ˜"Jšœ˜šœA˜CJ˜'—Jšœ˜Jšœ˜J˜—šœ˜%Jš˜Jšœœœ1˜?J˜3˜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˜C—J˜Jšœ˜J˜J˜—…—Ř “