<> <> <> <<>> <> <<>> DIRECTORY Basics USING [bytesPerWord], CommBuffer USING [Overhead], Endian USING [BYTE, bytesPerFWord, bytesPerHWord, FWORD, HWORD], XNS USING [Address]; XNSBuf: CEDAR DEFINITIONS ~ BEGIN BYTE: TYPE ~ Endian.BYTE; HWORD: TYPE ~ Endian.HWORD; FWORD: TYPE ~ Endian.FWORD; <> maxBytes: CARDINAL ~ 576; <> <
> TransportCtl: TYPE ~ MACHINE DEPENDENT RECORD [ trace: BOOL, filler: [0..7H], hopCount: [0 .. 0fH]]; Type: TYPE ~ MACHINE DEPENDENT { private(0), routing(1), echo(2), error(3), exchange(4), spp(5), (LAST[BYTE]) }; Hdr: TYPE ~ MACHINE DEPENDENT RECORD [ checksum: HWORD, length: HWORD, transportCtl: TransportCtl, type: Type, dest: XNS.Address, source: XNS.Address]; 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: Hdr, body: Body]; <<>> END.