-- Inbox management program to run in Laurel --
-- [Indigo]<DMS>Laurel>User>Flush.mesa --
-- Mike Schroeder, 14 Oct. 1982 4:49 pm PDT (Thursday) --
DIRECTORY IODefs, RetrieveDefs, String;
Flush: PROGRAM
IMPORTS IODefs, RetrieveDefs, String =
BEGIN
OPEN IODefs;
Yes: PROCEDURE RETURNS [BOOLEAN] =
BEGIN
WriteString[" (y or n)? "L];
DO
SELECT String.LowerCase[ReadChar[]] FROM
'y => {WriteChar['y]; RETURN[TRUE]};
'n => {WriteChar['n]; RETURN[FALSE]};
ENDCASE => WriteChar['?];
ENDLOOP;
END; --Yes--
Run: PROCEDURE =
BEGIN
user: STRING = [64];
pwd: STRING = [32];
server: STRING = [32];
messages: STRING = [4];
msgCount: CARDINAL;
h: RetrieveDefs.Handle = RetrieveDefs.Create[60];
noMore: BOOLEAN;
serverState: RetrieveDefs.ServerState;
retProcs: RetrieveDefs.AccessProcs;
failed: BOOLEAN;
dots: STRING = " ... "L;
firstTime: BOOLEAN ← TRUE;
WriteString["Inbox flushing program for Grapevine administrators."];
DO
WriteChar[CR];
WriteChar[CR];
IF firstTime
THEN firstTime ← FALSE
ELSE {WriteString["Quit"L]; IF Yes[] THEN EXIT ELSE WriteChar[CR]};
WriteString["Account name: "L];
user.length ← 0;
ReadID[user ! Rubout => {WriteString[" xxx"L]; LOOP}];
WriteChar[CR];
WriteString["Password: "L];
pwd.length ← 0;
DO
c: CHARACTER = ReadChar[];
SELECT c FROM
DEL => GOTO delTyped;
CR, SP, ESC => EXIT;
ENDCASE => {WriteChar['*]; String.AppendChar[pwd, c]};
REPEAT delTyped => {WriteString[" xxx"L]; LOOP};
ENDLOOP;
WriteString[dots];
RetrieveDefs.NewUser[h, user, pwd];
SELECT RetrieveDefs.MailboxState[h] FROM
badName =>
{WriteString["bad name."]; LOOP};
badPwd =>
{WriteString["bad password."]; LOOP};
cantAuth, allDown, someEmpty =>
{WriteString["some necessary servers down."]; LOOP};
allEmpty =>
{WriteString["all inboxes empty."]; LOOP};
notEmpty =>
NULL;
ENDCASE => ERROR;
WriteChar[CR];
WriteString["Do you really want to throw away all messages for this user"L];
IF NOT Yes[] THEN LOOP;
failed ← FALSE;
DO
WriteChar[CR];
[noMore, serverState, retProcs] ← RetrieveDefs.NextServer[h];
IF noMore THEN EXIT;
RetrieveDefs.ServerName[h, server];
WriteString[" "L];
WriteString[server];
WriteString[dots];
SELECT serverState FROM
unknown => {WriteString["no response"L]; failed ← TRUE; LOOP};
empty => {WriteString["was empty"L]; LOOP};
notEmpty => NULL;
ENDCASE => ERROR;
BEGIN
ENABLE RetrieveDefs.Failed => BEGIN
failed ← TRUE;
WriteString [SELECT why FROM
communicationFailure => "communication failure"L,
connectionRejected => "connection rejected"L,
noSuchServer, badCredentials, unknownFailure => "failed"L,
ENDCASE => ERROR];
LOOP;
END;
msgCount ← 0;
UNTIL NOT retProcs.nextMessage[h].msgExists DO
msgCount ← msgCount+1;
ENDLOOP;
retProcs.accept[h]; --flushes the inbox--
END;
messages.length ← 0;
String.AppendDecimal[messages, msgCount];
WriteString[messages];
WriteString[" messages flushed"L];
ENDLOOP;
WriteString["Inbox flushing "L];
IF failed THEN WriteString["not completely "L];
WriteString["successful."L];
ENDLOOP;
RetrieveDefs.Destroy[h];
WriteChar[CR];
WriteChar[CR];
WriteLine["Done."L];
END; --Run--
Run[];
END.