;+
; Project     : SOLAR-B - EIS
;
; Name        : EIS_CPT_READ_INTEL_HEX_FILE
;
; Purpose     : Reads Hex format file.
;
; Explanation : If read fails then returns 0.
;               Expects data to be continuous in file.
;
; Use         : < res = eis_cpt_read_intel_hex_file(filename,start_address,header,ulba,data) >
;
; Inputs      : filename : STRING file name.
;
; Opt. Inputs : None.
;
; Outputs     : res    : INT FLAG indicating result
;                           1 : ok
;                           0 : not ok
;               start_address : UINT 16 least significant bits of start address
;               header   : STRING OBSTBL header string.
;               ulba     : UINT upper linear base address.
;               data     : BYTARR[] OBSTBL data
;
; Opt. Outputs: None.
;
; Keywords    : NOENDOFFILE : FLAG indicating should be no end of file record.
;
; Calls       : None.
;
; Common      : None.
;
; Restrictions: None.
;
; Side effects: None.
;
; Category    : EIS_CPT.
;
; Prev. Hist. : None.
;
; Written     : Martin Carter RAL 15/10/04
;
; Modified    : Version 0.1, 01/11/04, MKC
;                 Added HEADER keyword.
;               Version 0.2, 04/03/05, MKC
;                 Changed so that returns data through arguments and an
;                 error code through function call.
;                 Changed calls to eis cpt read unformatted and eis cpt parse intel hex file.
;               Version 0.3, 29/04/05, MKC
;                 Added start_address argument.
;               Version 0.4, 12/05/05, MKC
;                 Changed file unit argumnet to file name argument.
;                 Added NOENDOFFILE keyword.
;               Version 0.5, 17/09/06, MKC
;                 Added errro message.
;
; Version     : 0.5, 17/09/06
;-
;**********************************************************

FUNCTION eis_cpt_read_intel_hex_file, filename, start_address, header, ulba, data, NOENDOFFILE=noendoffile

  ; open file for reading

  unit = eis_cpt_open_file(filename,/READ)

  IF NOT KEYWORD_SET(unit) THEN GOTO, error

  ; read data

  res = eis_cpt_read_unformatted_file(unit, raw_data)

  ; close file

  IF NOT KEYWORD_SET( eis_cpt_close_file(unit) ) THEN GOTO, error

  ; check file read OK

  IF NOT KEYWORD_SET(res) THEN GOTO, error

  ; parse hex file data

  IF NOT eis_cpt_parse_intel_hex_file(raw_data, start_address, header, ulba, data, NOENDOFFILE=noendoffile) THEN GOTO, error

  ; return ok

  RETURN, 1

error :

  ; output file name

  eis_cpt_message, 'ERROR, READING FILE : ' + filename

  ; issue routine name

  MESSAGE, 'ERROR', /INFORMATIONAL

  ; return error

  RETURN, 0

END





