-- Transport Mechanism Mail Server - public DEFS for mailboxes -- -- [Indigo]MS>MailboxDefs.mesa -- Andrew Birrell September 14, 1982 2:15 pm -- DIRECTORY BodyDefs USING[ ItemLength, RName, Timestamp ], HeapDefs USING[ ObjectNumber ], ProtocolDefs USING[ Handle, Remark ]; MailboxDefs: DEFINITIONS = BEGIN MBXHandle: TYPE[ SIZE[POINTER] ]; -- Writer (single operation) -- MBXWrite: PROCEDURE[ who: BodyDefs.RName, obj: HeapDefs.ObjectNumber, postmark: BodyDefs.Timestamp ] RETURNS[done: BOOLEAN]; -- Claims the mailbox, returning FALSE if this isn't -- possible, appends the item to the mailbox, -- increments the reference count on the object -- number, then frees the mailbox for others -- WaitForUnlocked: PROC; -- returns if some mailbox has been unlocked since last call of this -- -- Reader (one only per Mailbox) -- Poll: PROC[ who: BodyDefs.RName ] RETURNS[ found: BOOLEAN ]; -- determines whether there is mail for the R-Name -- Open: PROC[ who: BodyDefs.RName ] RETURNS[ found: BOOLEAN, count: CARDINAL, mbx: MBXHandle ]; -- Claims the mailbox, or returns FALSE. Count is the -- number of messages in the mailbox. -- NextMessage: PROC[ mbx: MBXHandle ] RETURNS[ msgExists, archived, deleted: BOOLEAN ]; ReadTOC: PROC[ mbx: MBXHandle, text: ProtocolDefs.Remark ]; InaccessibleArchive: ERROR; -- may be raised by SendBody, SendText, DeleteMessage, FlushAndClose, -- FlushCacheAndRemail, and Remail, and by Archive. SendBody: PROC[ mbx: MBXHandle, str: ProtocolDefs.Handle ]; -- Sends the complete body object on the given stream. SendText: PROC[ mbx: MBXHandle, sendLength: PROC[BodyDefs.ItemLength], str: UNSPECIFIED, sendBytes: PROC[UNSPECIFIED,POINTER,CARDINAL] ]; -- This procedure is for the MTP server. -- If the body has a Text item, calls "sendLength", then -- make multiple calls of "sendBytes". WriteTOC: PROC[ mbx: MBXHandle, text: ProtocolDefs.Remark ]; DeleteMessage: PROC[ mbx: MBXHandle ]; FlushAndClose: PROC[ mbx: MBXHandle ]; Close: PROC[ mbx: MBXHandle ]; FlushCacheAndRemail: PROC[who: BodyDefs.RName]; Remail: PROC[who: BodyDefs.RName, valid: BOOLEAN]; Archive: PROC[who: BodyDefs.RName, keep: CARDINAL]; -- archives specified mailbox, keeping "keep" messages un-archived -- -- May raise InaccessibleArchive if all archive servers are down -- END.