-- Transport Mechanism Mail Server - public DEFS for SL queues -- -- [Indigo]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.