function newfiles, nfiles, sfd=sfd, sfr=sfr, spd=spd, spr=spr,  $
    bda=bda, hda=hda, wda=wda, oldfiles=oldfiles,       $
    fid=fid, pattern=pattern, select=select, last=last, quiet=quiet, $
        gbh=gbh,gbl=gbl,gbw=gbw,gch=gch,ghh=ghh,ghm=ghm,gki=gki,$
    gkm=gkm,glh=glh,gnp=gnp,gnt=gnt, widget=widget, one=one, $
        ssc=ssc, sss=sss

quiet=keyword_set(quiet)
pathenv='$DIR_SITE_NEWDATA'     ; default location
pathenv=str2arr(pathenv)        ; allow comma delimited env

if keyword_set(fid) then files=uniq_fid(pathenv) else begin
;
;  form prefix scaler/vector (keywords not mutually exclusive)
   prefix=''
   if keyword_set(spr) then prefix=[prefix,'spr']
   if keyword_set(sfr) then prefix=[prefix,'sfr']
   if keyword_set(spd) then prefix=[prefix,'spd']
   if keyword_set(bda) then prefix=[prefix,'bda']
   if keyword_set(sfd) then prefix=[prefix,'sfd']
   if keyword_set(ssc) then prefix=[prefix,'ssc']
   if keyword_set(sss) then prefix=[prefix,'sss']
   if keyword_set(hda) then prefix=[prefix,'hda']

   gbopre=str2arr('gbh,gbl,gbw,gch,ghh,ghm,gki,gkm,glh,gnp,gnt')
   for i=0,n_elements(gbopre)-1 do begin
      exestr='if keyword_set(' + gbopre(i) + $
         ') then prefix=[prefix,"' + gbopre(i) + '"]'
      exestat=execute(exestr)
   endfor

   gbocheck=where(strmid(prefix,0,1) eq 'g',gcnt)

   if gcnt gt 0 then begin
      pathenv=gbo_paths(/noshell,/gbo)
      pathenv=pathenv((n_elements(pathenv) - 4):(n_elements(pathenv) - 1))      
      pattern=['??????.????*']  ; may be compressed
   endif

   if n_elements(prefix) eq 1 then prefix='???' else prefix=prefix(1:*)
  
;  determing file patttern template 
   case 1 of
      keyword_set(pattern):
      is_member(prefix,'ssc'): pattern='????????_????_??????.?'
      is_member(prefix,'sss'): pattern='????????_????_??????_??_.?'
      else: pattern='??????.????' 
   endcase
;  file_list does the dirty work

   times=0.
   files=file_list(pathenv,prefix+pattern,/quiet)
   if files(0) ne '' then times=file2time(files,out='tai',/quiet)

;-- patch for SFD files that use week ID's (e.g. sfd92_10a.12) 
;-- (Zarro, 10-Aug-00)

   if is_member(prefix,'sfd') then begin
    pattern='??_???.??'
    tfiles=trim(file_list(pathenv,prefix+pattern,/quiet))
    if tfiles(0) ne '' then begin
     break_file,tfiles,tdsk,tdir,tname,text
     week_ext=strmid(tname+text,3,100)
     time_ext=time2file(weekid2ex(week_ext),delimit='.',/year)
     t_files=concat_dir(tdsk+tdir,'sfd'+time_ext)
     t_times=file2time(t_files,out='tai',/quiet)
     if times(0) ne 0 then begin
      times=[times,t_times] 
      files=[files,tfiles]
     endif
    endif
   endif
          
;-- now sort on time
     
   if times(0) ne 0. then begin
    sorder=sort(times)
    files=files(sorder)
   endif
     
;  window selection option
   if keyword_set(select) then begin
      ss=wmenu_sel(files,one=one)
      if ss(0) eq -1 then begin
         message,/info,'No files selected!, returning...
      return,''
   endif else files=files(ss)
   endif
endelse

if files(0) eq '' then nfile=0 else nfile=n_elements(files)

; if old, shift the array before selecting final cut
if keyword_set(oldfiles) then files=shift(files,oldfiles)
if keyword_set(last) then nfiles=last else nfiles=nfile

if keyword_set(files(0)) then begin
   if nfiles gt 0 then begin
   if nfiles gt nfile then message,/info, $
        'More files requested than exist (' + strtrim(nfile,2) + ')'
   nfiles = nfiles < nfile
   files=files(nfile-nfiles:nfile-1)
   endif else files=''
endif else begin
   if not quiet then $
    message,/info, 'No files in DIR_SITE_NEWDATA with prefix: ' + prefix(0)
endelse

if n_elements(files) eq 1 then files=files(0) ; make scaler

return,files
end