<<>> <> <> <> <> DIRECTORY IO USING [STREAM], MailBasics USING [RNameList], Rope USING [ROPE]; SendMailParseMsg: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; <<>> <> Qualification: TYPE = {unqualified, dotQualified, arpaQualified}; MessageFieldIndex: TYPE = { -- order is significant replyToF, senderF, fromF, toF, ccF, cF, bccF, dateF, subjectF, categoriesF, inReplyToF, voiceF}; MessageFType: TYPE = { simpleRope, rCatList, rNameList }; MessageInfo: TYPE = RECORD[name: ROPE, fType: MessageFType]; messageParseArray: ARRAY MessageFieldIndex OF MessageInfo; ParseStatus: TYPE = {ok, syntaxError}; SendParseStatus: TYPE = { ok, pdlNotFound, pdlSyntaxError, includesPublicDL, includesPrivateDL, fieldNotAllowed, syntaxError }; <> MsgHeaders: TYPE = LIST OF MsgHeaderItem; MsgHeaderItem: TYPE = RECORD[fieldName, value: ROPE]; ParseProc: TYPE = PROC[fieldName: ROPE] RETURNS[wantThisOne, continue: BOOL]; ParseMsgFromStream: PROC[strm: STREAM, len: INT, proc: ParseProc] RETURNS[msgHeaders: MsgHeaders]; <> ParseHeadersFromRope: PROC[headers: ROPE, proc: ParseProc] RETURNS[msgHeaders: MsgHeaders]; <> Parse: PROC[text: ROPE, transport: ATOM ¬ NIL] RETURNS[status: SendParseStatus, sPos, mPos: INT, rList: MailBasics.RNameList]; END.