DIRECTORY IO USING [STREAM], Rope USING [ROPE]; WalnutParseMsg: CEDAR DEFINITIONS = BEGIN OPEN IO, Rope; 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] RETURNS[status: SendParseStatus, sPos, mPos: INT, rList: LIST OF ROPE]; CanonicalName: PROC[simpleName, registry: ROPE] RETURNS[name: ROPE]; END. WalnutParseMsg.mesa - Types for Parsing messages Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Willie-Sue on: June 26, 1985 8:58:20 am 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 Κ˜codešœ0™0Kšœ Οmœ7™BKšœ+™+K™1K˜—šΟk ˜ Kšžœžœžœ˜Kšœžœžœ˜K˜—Kš œžœž œžœžœžœ˜8K˜Kšœ ™ K˜Kšœžœ.˜AšœžœΟc˜5K˜KK˜K˜—Kšœžœ%˜7Kšœ žœžœžœ˜