DIRECTORY Basics USING [bytesPerWord], CommBuffer USING [Overhead], Endian USING [BYTE, bytesPerFWord, bytesPerHWord, FWORD, HWORD], XNSBuf USING[Hdr, maxBodyBytes], XNSErrorTypes USING[ErrorParam, ErrorType]; XNSErrorBuf: CEDAR DEFINITIONS ~ BEGIN BYTE: TYPE ~ Endian.BYTE; HWORD: TYPE ~ Endian.HWORD; FWORD: TYPE ~ Endian.FWORD; maxBytes: CARDINAL ~ XNSBuf.maxBodyBytes; Hdr: TYPE ~ MACHINE DEPENDENT RECORD [ type: XNSErrorTypes.ErrorType, param: XNSErrorTypes.ErrorParam]; 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; minBodyBytes: CARDINAL ~ 42; -- min bytes that should be copied into error packet 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. ΤXNSErrorBuf.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Demers, October 14, 1986 5:37:59 pm PDT Packet format for XNS Level 2 Error Protocol per XSIS 028112, December 1981. Header Body Packet Buffer All buffers are actually Driver.Buffer's that have been SmashType'd to XNSBuf.Buffer's. Clients may LOOPHOLE between XNSBuf.Buffer and XNSErrorBuf.Buffer, but should never NEW one of these and should NARROW one only to XNSBuf.Buffer. Κ΄˜codešœ™Kšœ Οmœ1™