DIRECTORY Xl, Basics, IO; XlEndianPrivate--Big32--: CEDAR DEFINITIONS IMPORTS IO SHARES Xl ~ BEGIN OPEN Xl; Endian: TYPE = {lsbFirst, msbFirst}; FourBytes: TYPE = MACHINE DEPENDENT RECORD [ hh, hl, lh, ll: BYTE ]; TwoBytes: TYPE = MACHINE DEPENDENT RECORD [ hi, lo: BYTE ]; communicationByteOrder: Endian = msbFirst; bitmapBitInByteOrder: Endian = msbFirst; hhOff: INT = 0; hlOff: INT = 1; lHOff: INT = 2; llOff: INT = 3; highOff: INT = 0; lowOff: INT = 1; Byte0: PROC [n: CARD32] RETURNS [BYTE] = INLINE { RETURN[LOOPHOLE[n, FourBytes].hh] }; Byte1: PROC [n: CARD32] RETURNS [BYTE] = INLINE { RETURN[LOOPHOLE[n, FourBytes].hl] }; Byte2: PROC [n: CARD32] RETURNS [BYTE] = INLINE { RETURN[LOOPHOLE[n, FourBytes].lh] }; Byte3: PROC [n: CARD32] RETURNS [BYTE] = INLINE { RETURN[LOOPHOLE[n, FourBytes].ll] }; Byte0Of16: PROC [n: CARD16] RETURNS [BYTE] = INLINE { RETURN[LOOPHOLE[n, TwoBytes].hi] }; Byte1Of16: PROC [n: CARD16] RETURNS [BYTE] = INLINE { RETURN[LOOPHOLE[n, TwoBytes].lo] }; InlineGet8: PROC [c: Connection] RETURNS [BYTE] ~ INLINE { byte: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; RETURN [byte] }; InlineGet16: PROC [c: Connection] RETURNS [CARD16] ~ INLINE { byte0: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; byte1: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; RETURN [byte0*256 + byte1] }; InlineGet32: PROC [c: Connection] RETURNS [CARD32] ~ INLINE { byte0: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; byte1: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; byte2: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; byte3: BYTE ~ ORD[IO.InlineGetChar[c.recv]]; ln: FourBytes ~ [hh: byte0, hl: byte1, lh: byte2, ll: byte3]; RETURN [LOOPHOLE[ln]] }; InlineRawGet8: UNSAFE PROC [b: POINTER TO Basics.RawBytes, startPos: INT] RETURNS [BYTE] = TRUSTED INLINE { RETURN [b[startPos]] }; InlineRawGet16: UNSAFE PROC [b: POINTER TO Basics.RawBytes, startPos: INT] RETURNS [CARD16] = TRUSTED INLINE { byte0: BYTE ~ b[startPos]; byte1: BYTE ~ b[startPos+1]; RETURN [byte0*256 + byte1] }; InlineRawGet32: UNSAFE PROC [b: POINTER TO Basics.RawBytes, startPos: INT] RETURNS [CARD32] = TRUSTED INLINE { ln: FourBytes ~ [hh: b[startPos], hl: b[startPos+1], lh: b[startPos+2], ll: b[startPos+3]]; RETURN [LOOPHOLE[ln]] }; InlineTextGet8: PROC [text: REF TEXT, startPos: INT] RETURNS [BYTE] = INLINE { RETURN [ORD[text[startPos]]] }; InlineTextGet16: PROC [text: REF TEXT, startPos: INT] RETURNS [CARD16] = INLINE { byte0: BYTE ~ ORD[text[startPos]]; byte1: BYTE ~ ORD[text[startPos+1]]; RETURN [byte0*256 + byte1] }; InlineTextGet32: PROC [text: REF TEXT, startPos: INT] RETURNS [CARD32] = INLINE { ln: FourBytes ~ [hh: ORD[text[startPos]], hl: ORD[text[startPos+1]], lh: ORD[text[startPos+2]], ll: ORD[text[startPos+3]]]; RETURN [LOOPHOLE[ln]] }; InlineExtensionGet8: PROC [e: ExtensionEvent, startPos: INT] RETURNS [BYTE] = INLINE { RETURN [e.bytes[startPos]] }; InlineExtensionGet16: PROC [e: ExtensionEvent, startPos: INT] RETURNS [CARD16] = INLINE { RETURN [e.bytes[startPos]*256 + e.bytes[startPos+1]] }; InlineExtensionGet32: PROC [e: ExtensionEvent, startPos: INT] RETURNS [CARD32] = INLINE { ln: FourBytes ~ [hh: e.bytes[startPos], hl: e.bytes[startPos+1], lh: e.bytes[startPos+2], ll: e.bytes[startPos+3]]; RETURN [LOOPHOLE[ln]] }; InlinePut8: PROC [c: Connection, val: BYTE] ~ INLINE { IO.InlinePutChar[c.xmit, VAL[val]]; c.bufSkipped ¬ c.bufSkipped+1 }; InlinePut16: PROC [c: Connection, val: CARD16] ~ INLINE { IO.InlinePutChar[c.xmit, VAL[Byte0Of16[val]]]; IO.InlinePutChar[c.xmit, VAL[Byte1Of16[val]]]; c.bufSkipped ¬ c.bufSkipped+2 }; InlinePut32: PROC [c: Connection, val: CARD32] ~ INLINE { l: FourBytes ~ LOOPHOLE[val]; IO.InlinePutChar[c.xmit, VAL[l.hh]]; IO.InlinePutChar[c.xmit, VAL[l.hl]]; IO.InlinePutChar[c.xmit, VAL[l.lh]]; IO.InlinePutChar[c.xmit, VAL[l.ll]]; c.bufSkipped ¬ c.bufSkipped+4 }; END. œ XlEndianPrivate-Big32.mesa Copyright Σ 1989..1992 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, February 1, 1989 2:52:14 pm PST Christian Jacobi, February 12, 1992 6:56 pm PST Endian specific private types for Xl Types consider byte order of host [here big endian] --byte order of host --byte order of host Procs consider byte order used for X protocol [here big endian] Κθ•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ Οeœ7™BKšœ9Οk™