<> <> <> <> DIRECTORY Basics USING [RawCards, RawChars]; MesaBasics: DEFINITIONS = { CHARPtr: TYPE ~ ORDERED POINTER TO Basics.RawChars; WORDPtr: TYPE ~ ORDERED POINTER TO Basics.RawCards; <> <<(Actually, the current implementation does not require disjointedness.)>> MoveWords: PROC [dst, src: WORDPtr, len: CARDINAL]; <<>> <> MoveWordsDisjoint: PROC [dst, src: WORDPtr, len: CARDINAL]; <> EqualWords: PROC [src1, src2: WORDPtr, len: CARDINAL] RETURNS[CARD]; <> MoveBytes: PROC [dest, src: CHARPtr, len: CARDINAL]; <> <<(Actually, the current implementation does not require disjointedness.)>> MoveBytesDisjoint: PROC [dest, src: CHARPtr, len: CARDINAL]; <> ExtractField: PROC [base: WORDPtr, offset: INT, bits: CARD] RETURNS [WORD]; <> DepositField: PROC[base: WORDPtr, offset: INT, bits: CARD, w: WORD]; <> MoveField: PROC [dst: WORDPtr, dstOffset: INT, src: WORDPtr, srcOffset: INT, bits: CARD]; <> EqualFields: PROC[x: WORDPtr, xOffset: INT, y: WORDPtr, yOffset: INT, bits: CARD] RETURNS [CARD]; <> FillFields: PROC [dst: WORDPtr, dstOffset: INT, bits: CARD, times: CARD, value: CARD]; <> FillLongFields: PROC[dst: WORDPtr, dstOffset: INT, src: WORDPtr, srcOffset: INT, bits: CARD, times: CARD]; <> FillWords: PROC[dst: WORDPtr, times: CARD, value: CARD]; <> FillLongWords: PROC[dst, src: WORDPtr, nWords, times: CARD]; }...