Here's another approach to a checksum. Not tested, but it will give you the concept. It gives a checksum on any text handle, and while it's quick and simple, it's not _particularly_ easy for a hacker to adjust for changes. It works equally well on ZTXT handles, or resource handles, or any handle for that matter!
LOCAL FN checkSum&(hndle&)
DIM checkVal&,numLongs&,loop&
XREF@ textArray&(99) 'Turn handle into array of long int's
LONG IF hndl&
textArray& = hndle&
checkVal& = FN GETHANDLESIZE(hndle&) 'Use length for inil value
numLongs& = (checkVal& >> 2) - 1 'Treat as long int's--how many?
LONG IF numLongs& >= 0
FOR loop& = 0 TO numLongs&
checkVal& = checkVal& XOR textArray&(loop&) 'calc checksum
NEXT
END IF
END IF
END FN = checkVal&