;+
; NAME: findpath.pro
; SYNTAX:
; PURPOSE: Finds the path to a particular file in current IDL paths
; ARGUMENTS:
; FILENAME -> Name of the file to find - STRING
; PATH <- Path to file (without "/") - STRING
;
; RETURNS: Status of find
; 0 - Failure
; 1 - Success (exact match)
; 2 - Success (after adding ".pro")
;
; KEYWORDS:
; EXACT / Find exact match only (Don't try to add '.pro')
; VERBOSE / Print out search pathes
;
; CALLING SEQUENCE: found=findpath('filename',pathname)
; case found of
; 0 : ERROR
; 1 : fullpath=pathname+'/'+filename
; 2 : fullpath=pathname+'/'+filename+'.pro'
; endcase
; or
; if not findpath('filename',path,/exact) then ERROR
;
; NOTES: By default, FINDPATH searches for exact match. If not found
; looks for 'filename' with ".pro" appended (unless /EXACT keyword
; is set).
;
; CREATED BY: John P. Dombeck 7/03/2001
;
; MODIFICATION HISTORY:
;
; 07/03/01- J. Dombeck Original writing
; 06/25/04- J. Dombeck Added VERBOSE keyword
; Changed close -> free_lun
; VERSION:
; $LastChangedBy: aaronbreneman $
; $LastChangedDate: 2014-09-10 07:48:14 -0700 (Wed, 10 Sep 2014) $
; $LastChangedRevision: 15750 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/general/missions/rbsp/efw/utils/findpath.pro $
;-
function findpath,filename,path,exact=exact,verbose=verbose
; Initialize path in case of error
path=''
; Check filename
n_elem=n_elements(filename)
if n_elem ne 1 then begin
message,"File name required as scalar string",/cont
return,0
endif
if data_type(filename) ne 7 then begin
message,"FILENAME requires string",/cont
return,0
endif
if filename eq '' then begin
message,"FILENAME requires non-null string",/cont
return,0
endif
; Get IDL system pathes and add './' to the beginning
pathes=strsplit(!PATH,":",/extract)
n_pathes=n_elements(pathes)+1
pathes=['.',pathes]
; Look for exact file in pathes
pathcount=0
err=-1
while (pathcount lt n_pathes) and (err ne 0) do begin
if keyword_set(verbose) then $
print,'Checking '+pathes(pathcount)
fullfile=pathes(pathcount)+'/'+filename
openr,unit,fullfile,error=err,/get_lun
pathcount=pathcount+1
endwhile
; Not found
if err ne 0 then begin
; Finally not found, Return 0
if keyword_set(exact) $
or strmid(filename,strlen(filename)-4,3) eq ".pro" then begin
return,0
; Search with '.pro' extention
endif else begin
found=findpath(filename+'.pro',path,/exact)
if found eq 0 then return,0 $
else return,2
endelse
; Found
endif else begin
path=pathes(pathcount-1)
free_lun,unit
return,1
endelse
end ;*** MAIN *** : * FINDPATH *