FUNCTION get_list,inst=inst,day=day,filter=filter,polar=polar, $
            wave=wave,cols=cols,rows=rows,ql_img=ql_img,lz_img=lz_img
;+
; NAME:
;	GET_LIST
;
; PURPOSE:
;	This procedure will return a list of images for selected day(s) from
;       LASCO/EIT image tree (QL_IMG or LZ_IMG), create reduce image header
;       catalog, query images on selected keywords and sort images on time.
;
; CATEGORY:
;	LASCO DATA ANALYSIS
;
; CALLING SEQUENCE:
;	GET_LIST
;
; INPUTS:
;
; KEYWORD PARAMETERS:
;	INST:    A string for instrument: 'C1' is default.
;       DAY:     A string array: day = ['960703','960704']
;       ROWS:    An integer value for # of rows
;       COLS:    An integer value for # of cols
;       FILTER:  A string for the filter: filter = 'Fe XIV'
;       POLAR:   A string for the polarizer
;       WAVE:    A float array for the wavelength: wave = [5309.2] 
;       QL_IMG:  Location of QuickLook images
;       LZ_IMG:  Location of LZ images
;
; SIDE EFFECTS:
;	
;
; PROCEDURE:
;      
;
; EXAMPLE:
;
;          list = GET_LIST(day='960704')
;          list = GET_LIST(day=['960703','960704'],inst='C1',filter='Fe XIV',/wave)
;
; MODIFICATION HISTORY:
; 	Written by:	B Podlipnik, 13 March 1997
;
;
;	@(#)get_list.pro	1.1 11/02/01 LASCO IDL LIBRARY
;-
;

  IF NOT KEYWORD_SET(inst) THEN inst = 'C1'           ; default detector
  
  imgdir = GETENV('IMAGES')                                         
  IF KEYWORD_SET(ql_img) THEN imgdir = GETENV('QL_IMG')
  IF KEYWORD_SET(lz_img) THEN imgdir = GETENV('LZ_IMG')

  imgdir = imgdir+!delimiter+'level_05'

  IF KEYWORD_SET(day) THEN BEGIN
     for i=0,n_elements(day)-1 do begin
        IF datatype(day(i))  NE 'STR' THEN BEGIN
          print," %DAY_MOVIE: Error: Not a valid data type:"
          print," %DAY_MOVIE: example:"
          print," %DAY_MOVIE: mmod,day=['960703','960704']
        RETURN," %DAY_MOVIE: Error: Not a valid data type:"
        ENDIF
        ;day(i) = STRCOMPRESS(STRING(day(i)),/REMOVE_ALL)
     endfor
  ENDIF
  
  IF NOT KEYWORD_SET(day) THEN BEGIN
    
    ff = yymmdd(FINDFILE(imgdir)) 

    n = n_elements(ff)
    for i=0,n-1 do begin
      ff(i) = STRMID(ff(i),0,6)
    endfor
    IF n GT 0 THEN BEGIN
    
     IF n GT 1 THEN day = [ff(n-2),ff(n-1)] ELSE day = [ff(n-1)] 
     ;IF n GT 2 THEN day = [ff(n-3),ff(n-2),ff(n-1)] ELSE day = [ff(n-1)] 
        
     ; n is always GT 1! I hope!
     IF ABS(LONG(day(0))-LONG(day(1))) NE 1 THEN day = [ff(n-3),ff(n-2)] 
    ENDIF ELSE BEGIN
     RETURN,"Can't find any 'yymmdd' folder!"
    ENDELSE
  ENDIF

list = ''
files = ''
FOR j=0,n_elements(day)-1 do begin
  ff = imgdir+!delimiter+day(j)+!delimiter+STRLOWCASE(inst)+'/*.fts' 
  
  files = [files,FINDFILE(ff)]

  ENDFOR

  pf = path_file(files)
  files_f = pf.files_f
  dirs_f  = pf.dirs_f

  f_index = WHERE(files_f GT '')
  IF  f_index(0) GT -1 THEN BEGIN
    files = files(f_index)
    files_f = files_f(f_index)
    dirs_f  = dirs_f(f_index)
  ENDIF ELSE BEGIN
      print,'No directory or file found!'
      RETURN,'No directory or file found!'
  ENDELSE

  n = n_elements(files_f)
  pf = dirs_f+files_f
  scat = STRARR(n)

  FOR i=0,n-1 DO BEGIN

    f = FINDFILE(dirs_f(i) + files_f(i))
    IF STRLEN(f(0)) GT 0 THEN BEGIN
      head = HEADFITSL(f(0))
      IF datatype(head) NE "INT" THEN BEGIN
        date_o = SXPAR(head,'DATE-OBS')
        date_x = SXPAR(head,'DATE-OBS')
        IF ( STRLEN(date_o) OR STRLEN(date_x) ) EQ 10 THEN $
          scat(i) = files_f(i) + head_info(head)
      ENDIF	
    ENDIF
  ENDFOR

  ind = WHERE( scat GT '' )
  tmp = scat(ind)
  scat = tmp
  field = 3
  tmp = QUERYCAT(scat,field,inst=inst,pf=pf)
  scat = tmp.tmps
  IF n_elements(scat) LT 2 THEN GOTO,finish

  IF KEYWORD_SET(cols) THEN BEGIN
   field = 5
   tmp = QUERYCAT(scat,field,cols=cols,pf=pf )
   scat = tmp.tmps
   IF n_elements(scat) LT 2 THEN GOTO,finish
  END

  IF KEYWORD_SET(rows) THEN BEGIN
   field = 6
   tmp = QUERYCAT(scat,field,rows=rows,pf=pf )
   scat = tmp.tmps
   IF n_elements(scat) LT 2 THEN GOTO,finish
  ENDIF

  IF KEYWORD_SET(wave) THEN BEGIN
   IF wave(0) EQ 1 THEN BEGIN
     IF KEYWORD_SET(filter) THEN BEGIN
        IF filter EQ 'Fe XIV' THEN wave = [5309.2,5302.4] $
                              ELSE wave = [6376.4,6380.9]
     ENDIF
     IF NOT KEYWORD_SET(filter) THEN wave = [5309.2,5302.4]
   ENDIF  
   field =  12 ; for wavelength
   tmp = QUERYCAT(scat,field,wave=wave,pf=pf)
   scat = tmp.tmps
   IF n_elements(scat) LT 2 THEN GOTO,finish
 ENDIF
 
  IF KEYWORD_SET(filter) THEN BEGIN
   field = 9 ; if no wavelength present in reduce image header: field = 9
   tmp = QUERYCAT(scat,field,filter=filter,pf=pf)
   scat = tmp.tmps

   IF n_elements(scat) LT 2 THEN GOTO,finish
  ENDIF

  IF KEYWORD_SET(polar) THEN BEGIN
   field = 10 ; polarizer
   tmp = QUERYCAT(scat,field,filter=polar,pf=pf)
   scat = tmp.tmps
   IF n_elements(scat) LT 2 THEN GOTO,finish 
  ENDIF
        
  ; ready to sort on scat:

  field = 1   ; field #1 and #2 are date and time in scat 
  dt = 1      ; sort on time ascending  
  
  tmp = ''
  n = n_elements(scat)
  IF n EQ 0 THEN GOTO,finish
  sorted = DBLARR(n)
  for i=0,n-1 do begin
    line = scat(i)
    
    fn = STRPOS(line,' ')
    IF fn NE 12 THEN BEGIN    
     fp1 = 14 + (fn-12); (fn-12) ????
     fp2 = 28 + (fn-12); (fn-12) ????
    ENDIF ELSE BEGIN
     fp1 = 14
     fp2 = 28 
    ENDELSE
     
    tmp1 = STRCOMPRESS(STRMID(line,fp1,12),/REMOVE_ALL)
    tmp2 = STRCOMPRESS(STRMID(line,fp2, 8),/REMOVE_ALL)
    
    ;tmp = STR_SEP(line,' ')
    ;ii = WHERE(tmp GT '')
    ;tmp = tmp(ii)
    tmp = tmp1 + " " + tmp2
    IF FIX(tmp) EQ 0 THEN sorted(i) = 0 ELSE sorted(i) = utc2tai(anytim2utc(tmp))
  endfor

  ind = SORT(sorted)

  scat = TEMPORARY(scat(ind))  
  sorted = TEMPORARY(sorted(ind))
  list = TEMPORARY(files(ind))

  fdt = sorted ; date_time array

 IF KEYWORD_SET(wave) AND (inst eq "C1") THEN BEGIN
  list = ''
  ; scat is sorted, dat_time array is present, field wavelength as array needed.
  
  field = 12
  swave = get_array(scat,field,fp=104,fl=14)
  print,swave
  fwave = FLTARR(n_elements(swave))
  
  for i=0,n_elements(swave)-1 do begin
  
   fwave(i) = FLOAT(STRMID(STRTRIM(swave(i),2),0,6)) ; 6 for 'xxxx.x' wl
  
  endfor

 iw0 = WHERE( fwave eq wave(0)) ; off line - continuum
 iw1 = WHERE( fwave eq wave(1)) ; on  line

 for i=0,n_elements(iw1)-1 do begin
 
  midl = where( iw0 lt iw1(i) )
 
  IF midl(0) GT -1 THEN  midl = iw0(midl(n_elements(midl)-1))
 
  midr = where( iw0 gt iw1(i) )
  IF midr(0) GT -1 THEN  midr = iw0(midr(0))
 
  IF (midl(0) EQ -1) AND (midr(0) EQ -1) THEN BEGIN 
   print," No continuum present"
   GOTO,finish 
  ENDIF

  IF midl(0) GT -1 AND midr(0) GT -1 THEN BEGIN
   ;print,midl(0),iw1(i),midr(0)
   deltal = ABS( fdt(midl(0)) - fdt(iw1(i)) )
   deltar = ABS( fdt(midr(0)) - fdt(iw1(i)) )
  
   if deltal ge deltar then begin
    ioff = midr(0)
   endif else begin
    ioff = midl(0)
   endelse
 
  ENDIF
 

  IF midl(0) LT 0 THEN ioff = midr(0)
 
  list = [ list,scat(iw1(i)),scat(ioff) ]

 endfor 

  ind = WHERE( list gt '',count )
  if ind(0) eq -1 then return,'nothing to return'
  
  list = list(ind)  
  if n_elements(list) LT 2 THEN RETURN,'nothing to return'
  
  for i=0,n_elements(list)-1 do begin
   yymmdd = STRMID(list(i),18,2)+STRMID(list(i),21,2)+STRMID(list(i),24,2)
   path = imgdir+!delimiter+yymmdd+!delimiter+STRLOWCASE(inst)
   list(i) = path + !delimiter + STRCOMPRESS(STRMID(list(i),0,12))
  endfor

ENDIF	; end of C1 

finish:

RETURN,list
END                                                  

