<> <> <> <<>> <> <<>> DIRECTORY Basics USING [bytesPerWord], CommBuffer USING [Overhead], Endian USING [BYTE, bytesPerFWord, bytesPerHWord, FWORD, HWORD], XNSBuf USING[Hdr, maxBodyBytes], XNSSPPTypes USING [SubSequenceType]; XNSSPPBuf: CEDAR DEFINITIONS ~ BEGIN BYTE: TYPE ~ Endian.BYTE; HWORD: TYPE ~ Endian.HWORD; FWORD: TYPE ~ Endian.FWORD; SubSequenceType: TYPE ~ XNSSPPTypes.SubSequenceType; maxBytes: CARDINAL ~ XNSBuf.maxBodyBytes; <
> ConnCtl: TYPE ~ MACHINE DEPENDENT RECORD [ system(0: 0..0): BOOL, sendAck(0: 1..1): BOOL, attn(0: 2..2): BOOL, endOfMsg(0: 3..3): BOOL, filler(0: 4..7): [0..0fH]]; <<>> Hdr: TYPE ~ MACHINE DEPENDENT RECORD [ connCtl: ConnCtl, sst: SubSequenceType, sourceConnID: HWORD, destConnID: HWORD, seqNum: HWORD, ackNum: HWORD, allocNum: HWORD]; hdrBytes: CARDINAL ~ SIZE[Hdr] * Basics.bytesPerWord; -- Should be BYTES[Hdr]? <> Body: TYPE ~ MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM bytes => [bytes: PACKED ARRAY [0..maxBodyBytes) OF BYTE], chars => [chars: PACKED ARRAY [0..maxBodyChars) OF CHAR], hWords => [hWords: PACKED ARRAY [0..maxBodyHWords) OF HWORD], fWords => [fWords: PACKED ARRAY [0..maxBodyFWords) OF FWORD] ENDCASE ]; maxBodyBytes: CARDINAL ~ maxBytes - hdrBytes; maxBodyChars: CARDINAL ~ maxBodyBytes; maxBodyHWords: CARDINAL ~ maxBodyBytes/Endian.bytesPerHWord; maxBodyFWords: CARDINAL ~ maxBodyBytes/Endian.bytesPerFWord; <> Packet: TYPE ~ REF PacketObject; PacketObject: TYPE ~ MACHINE DEPENDENT RECORD [ hdr: Hdr, body: Body]; <> <> <<>> Buffer: TYPE ~ REF BufferObject; BufferObject: TYPE ~ MACHINE DEPENDENT RECORD [ ovh: CommBuffer.Overhead, hdr1: XNSBuf.Hdr, hdr2: Hdr, body: Body]; <<>> END.