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. * SendMailParseMsg.mesa - Types for Parsing messages Copyright Σ 1984, 1985, 1989, 1992 by Xerox Corporation. All rights reserved. Willie-Sue on: August 4, 1989 1:38:05 pm PDT Russ Atkinson (RRA) March 21, 1985 0:13:10 am PST Global types types and procedures for parsing messages proc is called for each fieldName encountered in the message (which starts at the current pos and is no more than len characters long). If EndOfStream is encountered, the parsing is exited cleanly proc is called for each fieldName encountered in the headers Κ4•NewlineDelimiter –(cedarcode) style™codešΟbœ™2Kšœ ΟeœC™NKšœ,™,K™1K˜—šΟk ˜ KšŸœŸœŸœ˜Kšœ Ÿœ ˜KšœŸœŸœ˜K˜—KšΟnœŸœŸ œŸ˜+˜KšŸœŸœŸœ˜KšŸœŸœŸœŸœ˜—K™šœ ™ K˜KšœŸœ.˜AšœŸœΟc˜5K˜KK˜K˜—KšœŸœ'˜9Kšœ ŸœŸœŸœ˜