DIRECTORY Checksum USING [ComputeChecksum], PupRouterDefs USING [Checksum], BufferDefs USING [PupBuffer]; PupChecksums: PROGRAM IMPORTS Checksum EXPORTS PupRouterDefs = { checksum: PUBLIC PupRouterDefs.Checksum _ princOps; SetPupChecksum: PUBLIC PROC [b: BufferDefs.PupBuffer] = { size: CARDINAL _ (b.pupLength - 1)/2; checksumLoc: LONG POINTER _ @b.pupLength + size; SELECT checksum FROM princOps => { checksumLoc^ _ Checksum.ComputeChecksum[0, size, @b.pupLength]; }; none => { checksumLoc^ _ 177777B; }; ENDCASE => ERROR; }; TestPupChecksum: PUBLIC PROC [b: BufferDefs.PupBuffer] RETURNS [BOOLEAN] = { size: CARDINAL _ ((LOOPHOLE[b.pupLength - 1, CARDINAL])/2); checksumLoc: LONG POINTER _ @b.pupLength + size; cs: CARDINAL; IF checksumLoc^ = 177777B THEN RETURN[TRUE]; SELECT checksum FROM princOps => { cs _ Checksum.ComputeChecksum[0, size, @b.pupLength]; }; none => { RETURN[TRUE]; }; ENDCASE => ERROR; RETURN[checksumLoc^ = cs]; }; }. ςPupChecksums.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. HGM October 15, 1980 7:37 PM Russ Atkinson (RRA) February 4, 1985 12:53:24 pm PST BEWARE: The stack must be empty. Dont try RETURN[xx^=PupChecksum[xxx]]; ΚΑ˜codešœ™Kšœ Οmœ1™