idlastro / Miscellaneous (Non-Astronomy) Procedures: FINDPRO

[Source code]

NAME
FINDPRO
PURPOSE
Find all locations of a procedure in the IDL !PATH
EXPLANATION
FINDPRO searces for the procedure name (as a .pro or a .sav file) in all 
IDL libraries or directories given in the !PATH system variable.    This
differs from the intrinsic FILE_WHICH() function which only finds the 
first occurence of the procedure name.
CALLING SEQUENCE
FINDPRO, [ Proc_Name, /NoPrint, DirList = , ProList = ]
OPTIONAL INPUT
Proc_Name - Character string giving the name of the IDL procedure or 
        function. Do not include the ".pro" extension. If Proc_Name is
        omitted, the program will prompt for PROC_NAME.  "*" wildcards
        are permitted.
OPTIONAL KEYWORD INPUT
/NoPrint - if set, then the file's path is not printed on the screen and
        absolutely no error messages are printed on the screen.  If not
        set, then - since the MESSAGE routine is used - error messages 
        will be printed but the printing of informational messages
        depends on the value of the !Quiet variable.
OPTIONAL KEYWORD OUTPUTS
DirList - The directories in which the file is located are returned in
        the keyword as a string array.
        If the procedure is an intrinsic IDL procedure, then the 
        value of DirList = ['INTRINSIC'].
        If the procedure is not found, the value of DirList = [''].
ProList - The list (full pathnames) of procedures found.  Useful if you
        are looking for the name of a procedure using wildcards.
The order of the names in DirList and ProList is identical to the order
in which the procedure name appears in the !PATH
PROCEDURE
The system variable !PATH is parsed using EXPAND_PATH into individual 
directories.  FILE_SEARCH() is used to search the directories for
the procedure name.  If not found in !PATH, then the name is compared 
with the list of intrinsic IDL procedures given by the ROUTINE_INFO()
function. 
EXAMPLE
(1) Find the procedure CURVEFIT.  Assume for this example that the user
also has a copy of the curvefit.pro procedure in her home directory
on a Unix machine.
  IDL> findpro, 'curvefit', DIRLIST=DirList
  Procedure curvefit.pro found in directory  /home/user/.
  Procedure curvefit.pro found in directory  /software/IDL/idl82/lib/
  IDL> help, DirList
  DIRLIST         STRING    = Array(2) 
  IDL> help, DirList[0], DirList[1]
      STRING    = '/home/user'
      STRING    = '/software/IDL/idl82/lib/' 
(2) Find all procedures in one's !path containing the characters "zoom" 
  IDL> findpro,'*zoom*'
RESTRICTIONS
User will be unable to find a path for a native IDL function
or procedure, or for a FORTRAN or C routine added with CALL_EXTERNAL.
Remember that Unix is case sensitive, and most procedures will be in
lower case.
PROCEDURES USED
FDECOMP   -- Decompose file name
REVISION HISTORY
Based on code extracted from the GETPRO procedure, J. Parker 1994
Use the intrinsic EXPAND_PATH function    W. Landsman Nov. 1994
Use ROUTINE_NAMES() to check for intrinsic procs   W. Landsman Jul 95
Added Macintosh, WINDOWS compatibility    W. Landsman   Sep. 95
Removed spurious first element in PROLIST  W. Landsman  March 1997
Don't include duplicate directories  in !PATH  WL   May 1997
Use ROUTINE_INFO instead of undocumented ROUTINE_NAMES W.L. October 1998
Also check for save sets   W. Landsman  October 1999 
Force lower case check for VMS  W. Landsman January 2000 
Only return .pro or .sav files in PROLIST   W. Landsman  January 2002 
Force lower case check for .pro and .sav    D. Swain  September 2002 
Use FILE_SEARCH() if V5.5 or later   W. Landsman June 2006
Assume since V55, remove VMS support W. Landsman Sep. 2006
Assume since V6.0, use file_basename() W.Landsman Feb 2009
Specify whether an intrinsic function or procedure W.L.  Jan 2013