6.10 File Checksum Subroutines
The following routines either compute or validate the checksums for the
CHDU. The DATASUM keyword is used to store the numerical value of the
32-bit, 1's complement checksum for the data unit alone. If there is
no data unit then the value is set to zero. The numerical value is
stored as an ASCII string of digits, enclosed in quotes, because the
value may be too large to represent as a 32-bit signed integer. The
CHECKSUM keyword is used to store the ASCII encoded COMPLEMENT of the
checksum for the entire HDU. Storing the complement, rather than the
actual checksum, forces the checksum for the whole HDU to equal zero.
If the file has been modified since the checksums were computed, then
the HDU checksum will usually not equal zero. These checksum keyword
conventions are based on a paper by Rob Seaman published in the
proceedings of the ADASS IV conference in Baltimore in November 1994
and a later revision in June 1995.
- 1
- Compute and write the DATASUM and CHECKSUM keyword values for the CHDU
into the current header. The DATASUM value is the 32-bit checksum
for the data unit, expressed as a decimal integer enclosed in single
quotes. The CHECKSUM keyword value is a 16-character string which
is the ASCII-encoded value for the complement of the checksum for
the whole HDU. If these keywords already exist, their values
will be updated only if necessary (i.e., if the file has been modified
since the original keyword values were computed).
FTPCKS(unit, > status)
- 2
- Update the CHECKSUM keyword value in the CHDU, assuming that the
DATASUM keyword exists and already has the correct value. This routine
calculates the new checksum for the current header unit, adds it to the
data unit checksum, encodes the value into an ASCII string, and writes
the string to the CHECKSUM keyword.
FTUCKS(unit, > status)
- 3
- Verify the CHDU by computing the checksums and comparing
them with the keywords. The data unit is verified correctly
if the computed checksum equals the value of the DATASUM
keyword. The checksum for the entire HDU (header plus data unit) is
correct if it equals zero. The output DATAOK and HDUOK parameters
in this subroutine are integers which will have a value = 1
if the data or HDU is verified correctly, a value = 0
if the DATASUM or CHECKSUM keyword is not present, or value = -1
if the computed checksum is not correct.
FTVCKS(unit, > dataok,hduok,status)
- 4
- Compute and return the checksum values for the CHDU (as
double precision variables) without creating or modifying the
CHECKSUM and DATASUM keywords. This routine is used internally by
FTVCKS, but may be useful in other situations as well.
FTGCKS(unit, > datasum,hdusum,status)
- 5
- Encode a checksum value (stored in a double precision variable)
into a 16-character string. If COMPLEMENT = .true. then the 32-bit
sum value will be complemented before encoding.
FTESUM(sum,complement, > checksum)
- 6
- Decode a 16 character checksum string into a double precision value.
If COMPLEMENT = .true. then the 32-bit sum value will be complemented
after decoding.
FTDSUM(checksum,complement, > sum)