-- Transport Mechanism Mail Server - public DEFS for SL queues --
-- [Indigo]<Grapevine>MS>SLDefs.mesa
-- Andrew Birrell September 13, 1982 3:36 pm --
DIRECTORY
BodyDefs USING[ Timestamp ],
HeapDefs USING[ ReaderHandle, WriterHandle ],
ObjectDirDefs USING[ ObjectNumber ],
ServerDefs USING[ ServerHandle ],
VMDefs USING[ pageSize, PageAddress ];
SLDefs: DEFINITIONS = BEGIN
-- General --
SLQueue: TYPE = { express, input, forward, pending, foreign, mailbox };
ItemIndex: TYPE = [0 .. VMDefs.pageSize / SIZE[Item] );
ItemAddress: TYPE = RECORD[ page: VMDefs.PageAddress, item: ItemIndex ];
Item: TYPE = MACHINE DEPENDENT RECORD[
body: ObjectDirDefs.ObjectNumber,
SL: ObjectDirDefs.ObjectNumber,
state: {free, full, reading} --2 bits--,
fill: [0..16383] --ugh! 14 bits-- ];
SLHeader: TYPE = MACHINE DEPENDENT RECORD[
created: BodyDefs.Timestamp,
received: BodyDefs.Timestamp,
server: ServerDefs.ServerHandle ];
-- placed at start of each steering list --
-- Writer (single event) --
SLWrite: PROCEDURE[
body: ObjectDirDefs.ObjectNumber,
SL: HeapDefs.WriterHandle,
queue: SLQueue ];
-- Adds a message, consisting of the data which has
-- previously been written on the given message body
-- and steering list, to the given queue. Increments
-- the reference count on the message body.
-- Subsequent use of this WriterHandle is illegal. --
-- Reader (many per queue) --
SLReadHandle: TYPE = ItemAddress;
WaitForNonEmpty: PROCEDURE[ queue: SLQueue ];
-- returns when the queue is non-empty --
GetCount: PROCEDURE[ queue: SLQueue ]
RETURNS[CARDINAL];
-- returns the queue length, 0 if it's empty --
SLStartRead: PROCEDURE[ queue: SLQueue ] RETURNS[
handle: SLReadHandle,
body: ObjectDirDefs.ObjectNumber,
SL: HeapDefs.ReaderHandle ];
-- Waits until the queue is non-empty.
-- Gives caller exclusive right to read the message
-- body and steering list of the next item in the
-- given queue. --
SLTransfer: PROCEDURE[ handle: SLReadHandle, queue: SLQueue ];
-- Abandons reading an item from a queue, and
-- transfers it from its present queue to the given
-- one. The caller is responsible for terminating
-- reading the associated steering list. Subsequent
-- use of this SLReadHandle is illegal. --
SLEndRead: PROCEDURE[ handle: SLReadHandle ];
-- Deletes the item from the queue. Decrements the
-- reference counts on the associated message body and
-- steering list. The caller is responsible for
-- terminating reading the associated steering list.
-- Subsequent use of this SLReadHandle is illegal. --
END.