-- File: SequinPrivate.mesa -- Last edited by Levin: 6-Jul-81 15:30:41 DIRECTORY AltoDefs USING [BYTE], BufferDefs USING [Buffer, QueueObject], ControlDefs USING [FrameHandle], PupDefs USING [PupBuffer, PupSocket], PupTypes USING [PupType]; SequinPrivate: DEFINITIONS = BEGIN -- Types -- Handle: TYPE = POINTER TO SequinObject; SequinObject: TYPE = MONITORED RECORD [ id: SequinID ← [inOut[0, 0]], allocate: Byte ← 1, retransmitSequence: SequenceNumber ← 0, retransmitQueue: BufferDefs.QueueObject ← NULL, getQueue: BufferDefs.QueueObject ← NULL, socket: PupDefs.PupSocket ← NULL, goAhead: CONDITION, buffersToRequeue: Byte ← 0, pupType: PupTypes.PupType, state: {init, open, destroyed} ← init, broken: BOOLEAN ← FALSE, recentRestart, restartRequested: BOOLEAN ← FALSE, pings: PingCount ← 0, lastPacketTime: Seconds ← NULL, requeuer: PROCEDURE [BufferDefs.Buffer] ← NULL, closure: RequeueClosure ← NULL]; SequinID: TYPE = MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM inOut => [inPart: WORD, outPart: WORD], pieces => [allocate: Byte, receiveSequence: SequenceNumber, control: SequinControl, sendSequence: SequenceNumber], ENDCASE]; SequinControl: TYPE = MACHINE DEPENDENT{ data(0), ack(1), nop(2), restart(3), check(4), open(5), break(6), close(7), closed(8), destroy(9), dallying(10), quit(11), broken(12), retransmit(13), stifle(14), openclose(15), opendestroy(16), (255)}; SequenceNumber: TYPE = Byte; Byte: TYPE = AltoDefs.BYTE; Seconds: TYPE = LONG CARDINAL; RequeueClosure: TYPE = ControlDefs.FrameHandle; maxPings: CARDINAL = 10; PingCount: TYPE = [0..maxPings]; -- Variables -- maxBytes: CARDINAL; maxAllocate: CARDINAL; -- Procedures -- MakeRequeueClosure: PROCEDURE [sequin: Handle] RETURNS [RequeueClosure]; Send: PROCEDURE [sequin: Handle, packet: PupDefs.PupBuffer, control: SequinControl]; SocketWarmer: PROCEDURE [sequin: Handle]; END.