<> <> <> <<>> <> <<>> DIRECTORY Basics USING [bytesPerWord], CommBuffer USING [Overhead], Endian USING [BYTE, HWORD], XNS USING [Net], XNSBuf USING [Hdr, maxBodyBytes]; XNSRoutingBuf: CEDAR DEFINITIONS ~ BEGIN BYTE: TYPE ~ Endian.BYTE; HWORD: TYPE ~ Endian.HWORD; maxBytes: CARDINAL ~ XNSBuf.maxBodyBytes; <
> Type: TYPE ~ MACHINE DEPENDENT { request(1), response(2), (LAST[BYTE]) }; Hdr: TYPE ~ MACHINE DEPENDENT RECORD [ filler: BYTE, type: Type]; hdrBytes: CARDINAL ~ SIZE[Hdr] * Basics.bytesPerWord; -- Should be BYTES[Hdr]? <> Tuple: TYPE ~ MACHINE DEPENDENT RECORD [ net: XNS.Net, delay: HWORD]; Body: TYPE ~ MACHINE DEPENDENT RECORD [ tuples: PACKED ARRAY [0..maxTuples) OF Tuple]; <<>> maxBodyBytes: CARDINAL ~ maxBytes - hdrBytes; tupleBytes: CARDINAL ~ SIZE[Tuple] * Basics.bytesPerWord; -- Should be BYTES[Tuple]? maxTuples: CARDINAL ~ (maxBodyBytes)/tupleBytes; NumTuplesFromUserBytes: PROC [bytes: CARDINAL] RETURNS [CARDINAL] ~ INLINE { RETURN [ (bytes - hdrBytes) / tupleBytes ] }; UserBytesFromNumTuples: PROC [numTuples: CARDINAL] RETURNS [CARDINAL] ~ INLINE { RETURN [ hdrBytes + numTuples*tupleBytes ] }; <> 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.