;+
; Project     : SOHO - CDS     
;                   
; Name        : EMON        
;               
; Purpose     : Gather/plot engineering data statistics.
;               
; Explanation : Reads engineering A/B packets from the science telemetry
;               files and gathers data on selected parameters.
;               
; Use         :      IDL> emon [, time, data, names ]
;
;                 or IDL> emon, time, data, names, /batch, fname=fname, $
;                               pname=pname
;
; Inputs      : None
;               
; Opt. Inputs : None
;
; Outputs     : None
;               
; Opt. Outputs: time  - array containing timings of parameter values
;               data  - array containing values of parameters chosen
;               names - array giving the parameter names, in case you forgot
;               
; Keywords    : QUIET - if present, suppresses counting of packets read.
;
;               FNAME - file name (array) of telemetry file to be searched.
;
;               ARRAY - size of storage arrays to overide the default 30000
;
;               BATCH - if present, EMON works in non-interactive mode and
;                       then REQUIRES the following parameters......
;
;               FNAME - file name (array) of telemetry file to be searched.
;               PNAME - parameter name (array) to be monitored.
;
;               BSTART -  packet at which to start reading (default 0)
;               BEND   -  packet at which to end reading (default end of file)
;
; Calls       :
;
; Common      :
;               
; Restrictions: 
;               
; Side effects: 
;               
; Category    : Telemetry
;               
; Prev. Hist. : None
;
; Written     : C D Pike, RAL, 29-Sep-94
;               
; Modified    : Upgrade for batch mode.  CDP, 23-Dec-94
;               Update documentation.  CDP, 8-Mar-95
;               Allow use of FNAME keyword in interactive mode. CDP, 05-Dec-95
;               Include packet limits in batch mode.  CDP, 8-Jan-96
;               Allow increased array size.  CDP, 8-Jan-97
;               Close telemetry file.  CDP, 25-Sep-97
;
; Version     : Version 7, 25-Sep-97
;-            

pro emon, t_arr, d_arr, n_arr, $
           fname=fname,$
             pname=pname,$
               batch=batch, quiet=quiet, bstart=bstart, bend=bend,$
                array=array

; 
;  common for communication
;
@emon.com

;
;  set array sizes
;
if not keyword_set(array) then array_size = 30000L else array_size = array

;
;  set up the data structures
;
eng_struct,enga,engb

;
;  and the mask etc details
;
get_mask_etc, mask

;
;  BATCH mode requested then go that way
;
if keyword_set(batch) then begin

;
;  check enough information
;
   if not keyword_set(fname) then begin
      bell
      print,'Files names must be supplied.'
      t_arr=0 & d_arr=0 & n_arr=0
      return
   endif

   if not keyword_set(pname) then begin
      bell
      print,'Parameter names must be supplied.'
      t_arr=0 & d_arr=0 & n_arr=0
      return
   endif

;
;  start/end packets specified?
;
   if not keyword_set(bstart) then bstart = 0L
   if not keyword_set(bend)   then bend   = array_size
   

   ut_data     = strarr(array_size)
   wanted_parms = strupcase(pname)
   parm_data   = lonarr(n_elements(wanted_parms),array_size)
   file_seq_no = 0
   nparm_data  = 0L
   file_name=fname
   num_data_files = n_elements(file_name)
   wanted_packets = strupcase(strmid(wanted_parms(0),0,1))

   openr, eng_lun, file_name(file_seq_no), /get_lun, error=err
   if err ne 0 then begin
      bell
      print,'Error opening data file ', file_name(file_seq_no)
      t_arr=0 & d_arr=0 & n_arr=0
      return
   endif

;
;  call batch version of data gatherer.
;
   status = 1
   count = 0L
   if bstart gt 0 then point_lun,eng_lun,bstart*306L

   while status and (count+bstart le bend) do begin
      b_input_engAB,status
      if (count mod 500) eq 0 and not keyword_set(quiet) then begin
         print,'Reading packet ',count+bstart,form='(a,i7)'
      endif
      count = count + 1
   endwhile
endif else begin

;
;  INTERACTIVE, so get the widgets going
;
   if keyword_set(fname) then begin
      file_seq_no = 0
      file_name=fname
      num_data_files = n_elements(file_name)
   endif else begin
      num_data_files = 0
   endelse
   eng_mon_menu
endelse

;
;  Tidy telemetry file
;
if n_elements(eng_lun) gt 0 then free_lun, eng_lun

;
;  in case they were needed, transfer data to outside world
;
if n_elements(ut_data) gt 0 then begin
   n = where(ut_data ne '')
   if n(0) ge 0 then begin
      t_arr = ut_data(n)
      d_arr = parm_data(*,n)
   endif else begin
      t_arr = 0
      d_arr = 0
   endelse
endif

if n_elements(wanted_parms) gt 0 then  n_arr = wanted_parms

end

