-- File: QueueCool.mesa, Last Edit: JGS February 7, 1980 9:11 AM

-- Copyright Xerox Corporation 1979, 1980

DIRECTORY
DriverDefs: FROM "DriverDefs" USING [dataWordsPerBuffer],
PupDefs: FROM "PupDefs", -- EXPORTs
BufferDefs: FROM "BufferDefs" USING [
Buffer, BufferObject, Queue, Dequeue, ReturnFreeBuffer],
DriverTypes: FROM "DriverTypes" USING [queueSeal];

QueueCool: PROGRAM
IMPORTS DriverDefs, BufferDefs
EXPORTS PupDefs, BufferDefs, DriverDefs
SHARES BufferDefs =
BEGIN OPEN DriverDefs, BufferDefs;

rawOverhead: CARDINAL = SIZE[raw BufferDefs.BufferObject];
pupOverhead: CARDINAL = SIZE[pupWords pup BufferDefs.BufferObject]+1;
overhead: CARDINAL = MAX[
pupOverhead,
SIZE
[rppWords rpp BufferDefs.BufferObject]+1];

DataWordsPerPupBuffer: PUBLIC PROCEDURE RETURNS [CARDINAL] =
BEGIN
RETURN[DriverDefs.dataWord
sPerBuffer+(overhead-pupOverhead)];
END;

DataWordsPerRawBuffer: PUBLIC PROCEDURE RETURNS [CARDINAL] =
BEGIN
RETURN[DriverDefs.dataWord
sPerBuffer+(overhead-rawOverhead)];
END;

QueueInitialize: PUBLIC PROCEDURE [q: Queue] =
BEGIN
q↑ ← [ length: 0, first: NIL, last: NIL, seal: DriverTypes.queueSeal ];
E
ND;

-- put
all buffers back onto freeQueue
QueueCleanup: PUBLIC PROCEDURE [q: Queue] =
BEGIN
b: Buffer;
UNTIL (b←Dequeue[q])=NIL DO ReturnFreeBuffer[b]; ENDLOOP;
END;

-- initialization
END. -- QueueCool