<> <> <> <> 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]; }; }.