;+
; Project     :	SOLAR-B - EIS
;
; Name        :	EIS_CPT_CHECKSUM
;
; Purpose     :	Calculates checksum for data.
;
; Explanation :
;
; Use         :	< checksum = eis_cpt_checksum(bytes) >
;
; Inputs      :	bytes : BYTARR[] data.
;
; Opt. Inputs : None.
;
; Outputs     : checksum : BYTE checksum or checksum test (0:not ok, 1:ok)
;
; Opt. Outputs:	None.
;
; Keywords    : CHECK : INT FLAG indicating should check the checksum adds to zero.
;               XXOR  : INT FLAG indicating should perform XOR checksum
;
; Calls       : None.
;
; Common      :	None.
;
; Restrictions:	None.
;
; Side effects:	None.
;
; Category    :	EIS_CPT.
;
; Prev. Hist. :	None.
;
; Written     :	Martin Carter RAL 22/10/04
;
; Modified    :	Version 0.0, 22/10/04, MKC
;
; Version     :	Version 0.0, 22/10/04
;-
;**********************************************************

FUNCTION eis_cpt_checksum, bytes, CHECK=check, XXOR=xxor

  IF NOT KEYWORD_SET(xxor) THEN BEGIN

    sum = BYTE(LONG(TOTAL(bytes)))

    IF KEYWORD_SET(check) THEN $
      RETURN, sum EQ 0 $
    ELSE $
      RETURN, 1B + (NOT sum)

  ENDIF ELSE BEGIN

    sum = 0B

    FOR k = 0, N_ELEMENTS(bytes)-1 DO sum = sum XOR bytes[k]

    IF KEYWORD_SET(check) THEN $
      RETURN, sum EQ 0 $
    ELSE $
      RETURN, sum

  ENDELSE

END





