DEFINITION MODULE Mailboxes; (********************************************************) (* *) (* Mailboxes for intertask communication *) (* *) (* Programmer: P. Moylan *) (* Last edited: 30 September 1996 *) (* Status: Working *) (* *) (********************************************************) FROM SYSTEM IMPORT (* type *) ADDRESS; TYPE Mailbox; (* is private *) PROCEDURE CreateMailbox (LengthLimit: CARDINAL): Mailbox; (* Creates a new mailbox. LengthLimit is the maximum number of *) (* characters in a single message. (A limit is needed so that a *) (* task reading the mailbox knows how much space to allocate.) *) PROCEDURE SendMessage (MB: Mailbox; messageptr: ADDRESS; length: CARDINAL): BOOLEAN; (* Copies a string, specified by its address and length, into the *) (* specified mailbox. Returns TRUE if successful, and FALSE if the *) (* message is too long or the mailbox does not exist. *) PROCEDURE ReceiveMessage (MB: Mailbox; VAR (*OUT*) message: ARRAY OF CHAR; TimeLimit: CARDINAL): CARDINAL; (* Returns the next message (after waiting if necessary) from *) (* mailbox MB. TimeLimit is a timeout value in milliseconds. *) (* (Specify TimeLimit=0 for infinite patience.) The function *) (* return value is the message length; this is zero if no message *) (* was obtained, either because of a faulty mailbox or because of *) (* timeout. Note: it is also possible to have a genuine message of *) (* zero length. *) END Mailboxes.