
FUNCTION SORTCAT,headls,field,filter=filter, wave=wave, $
                 exptime1 = exptime1, exptime2 = exptime2, $
                 rows = rows, cols = cols, dt = dt, inst = inst

 IF headls(0) EQ '' THEN RETURN,headls



 IF KEYWORD_SET(filter) THEN BEGIN

   f = STR_SEP( filter, ' ')
   i = WHERE( f GT '')
   ni = n_elements(i)
   tmp = f(i(0))

   for j=1,ni-1 do tmp = tmp + " " + f(i(j))
   filter = tmp
   
   tmp = ''
   n = n_elements(headls)

   IF n EQ 0 THEN RETURN," "
   sorted = STRARR(n)
   for i=0,n-1 do begin
      line = headls(i)

      tmp = STR_SEP(line,' ')
      ii = WHERE(tmp GT '')
      sorted(i) = tmp(ii(field))
      if ni eq 2 then sorted(i) = sorted(i) + " " + tmp(ii(field+1))
      if STRMID(sorted(i),0,1) EQ 'X' then sorted(i) = tmp(ii(field+1)) 
   endfor

   ind = WHERE(sorted EQ filter)
   tmp = ''
   IF ind(0) GT -1 THEN tmp = headls(ind)
               
   tmps = tmp

 ENDIF

 IF KEYWORD_SET(exptime1) THEN BEGIN

   time1 = exptime1 < exptime2
   time2 = exptime1 > exptime2

   tmp = ''
   n = n_elements(headls)
   IF n EQ 0 THEN RETURN," "
   sorted = FLTARR(n)
   for i=0,n-1 do begin
      line = headls(i)
      tmp = STR_SEP(line,' ')
      ii = WHERE(tmp GT '')
      sorted(i) = FLOAT(tmp(ii(field)))
   endfor
   ind = WHERE(sorted  GE time1 AND  sorted LE time2)
   tmp = ''
   IF ind(0) GT -1 THEN  tmp = headls(ind)
               
   tmps = tmp

 ENDIF

 IF KEYWORD_SET(rows) THEN BEGIN

     tmp = ''
     n = n_elements(headls)
     IF n EQ 0 THEN RETURN," "
     sorted = FLTARR(n)
     for i=0,n-1 do begin
       line = headls(i)
       tmp = STR_SEP(line,' ')
       ii = WHERE(tmp GT '')
       sorted(i) = FIX(tmp(ii(field)))
     endfor
     ind = WHERE(sorted EQ rows )
     tmp = ''
     IF ind(0) GT -1 THEN  tmp = headls(ind)
               
     tmps = tmp  
   
 ENDIF

 IF KEYWORD_SET(cols) THEN BEGIN

     tmp = ''
     n = n_elements(headls)
     IF n EQ 0 THEN RETURN," "
     sorted = FLTARR(n)
     for i=0,n-1 do begin
       line = headls(i)
       tmp = STR_SEP(line,' ')
       ii = WHERE(tmp GT '')
       sorted(i) = FIX(tmp(ii(field)))
     endfor
     ind = WHERE(sorted EQ cols )
     tmp = ''
     IF ind(0) GT -1 THEN  tmp = headls(ind)
               
     tmps = tmp  
   
 ENDIF

 IF KEYWORD_SET(inst) THEN BEGIN

     tmp = ''
     n = n_elements(headls)
     IF n EQ 0 THEN RETURN," "
     sorted = STRARR(n)
     for i=0,n-1 do begin
       line = headls(i)
       tmp = STR_SEP(line,' ')
       ii = WHERE(tmp GT '')
       sorted(i) = STRING(tmp(ii(field)))
     endfor
     ind = WHERE(sorted EQ inst )
     tmp = ''
     IF ind(0) GT -1 THEN  tmp = headls(ind)
               
     tmps = tmp  
   
 ENDIF 

 IF KEYWORD_SET(wave) THEN BEGIN

     m = n_elements(wave) - 1

     tmp = ''
     n = n_elements(headls)
     IF n EQ 0 THEN RETURN," "
     sorted = STRARR(n)
     for i=0,n-1 do begin
       line = headls(i)
       tmp = STR_SEP(line,' ')
       ii = WHERE(tmp GT '')
       sorted(i) = STRMID( STRCOMPRESS(tmp(ii(field)),/REMOVE_ALL),0,6)
     endfor
     ;ind = WHERE(sorted EQ wave )
      CASE m OF
       0: ind = WHERE( sorted EQ wave(0) )
       1: ind = WHERE((sorted EQ wave(0)) OR (sorted EQ wave(1)) )
       2: ind = WHERE((sorted EQ wave(0)) OR (sorted EQ wave(1)) OR (sorted EQ wave(2)) )
       ELSE: donothing = 0
      ENDCASE       

     tmp = ''
     IF ind(0) GT -1 THEN  tmp = headls(ind)
               
     tmps = tmp  
   
 ENDIF
  
  IF KEYWORD_SET(dt) THEN BEGIN

     tmp = ''
     n = n_elements(headls)
     IF n EQ 0 THEN RETURN," "
     sorted = DBLARR(n)
     for i=0,n-1 do begin
       line = headls(i)
       tmp = STR_SEP(line,' ')
       ii = WHERE(tmp GT '')
       tmp = tmp(ii)
       tmp = tmp(field) + " "  + tmp(field+1)
   
       IF FIX(tmp) EQ 0 THEN BEGIN
            sorted(i) = 0
       ENDIF ELSE BEGIN
            sorted(i) = utc2tai(anytim2utc(tmp))
       ENDELSE
     endfor

     
     IF dt EQ 1 THEN ind = SORT(sorted) ELSE ind = REVERSE(SORT(sorted))
     tmp = ''
     IF ind(0) GT -1 THEN  tmp = headls(ind)
               
     tmps = tmp  
   
 ENDIF
 
RETURN,tmps
END
