<> <> <> <> <> DIRECTORY Basics USING [BYTE], PupTypes USING [PupType], PupDefs USING [PupAddress]; Sequin: DEFINITIONS = BEGIN <> <> <> <> Handle: TYPE = REF SequinRep; SequinRep: TYPE; -- OPAQUE Buffer: TYPE = RECORD [ data: -- READONLY -- LONG POINTER TO BufferData, nBytes: CARDINAL, maxBytes: -- READONLY -- CARDINAL]; <> BufferData: TYPE = RECORD [ SELECT OVERLAID * FROM words => [words: ARRAY [0..0) OF WORD], bytes => [bytes: ARRAY [0..0) OF Basics.BYTE], chars => [chars: ARRAY [0..0) OF CHAR], ENDCASE]; noBuffer: Buffer = [NIL, 0, 0]; <> Broken: ERROR; <<... occurs when the Sequin connection has been broken. Broken may be raised by 'Get', 'GetIfAvailable', or 'Put' (not by 'Create' or 'Destroy').>> Create: PROC [dest: PupDefs.PupAddress, pupType: PupTypes.PupType] RETURNS [Handle]; <> Destroy: PROC [sequin: Handle]; <> Get: PROC [sequin: Handle] RETURNS [Buffer]; <> GetIfAvailable: PROC [sequin: Handle] RETURNS [Buffer]; <> Put: PROC [sequin: Handle, buffer: Buffer]; <> GetEmptyBuffer: PROC RETURNS [Buffer]; <> ReleaseBuffer: PROC [buffer: Buffer]; <> END.