/*
/ Program : fmtpath.sas
/ Version : 1.0
/ Author : Roland Rashleigh-Berry
/ Date : 13-Apr-2011
/ Purpose : Function-style macro to get the full fmtsearch path
/ SubMacros : %words
/ Notes : All single-named catalogs will be completed with .FORMATS
/ and WORK.FORMATS and LIBRARY.FORMATS will be added if missing.
/ This macro will not check whether the catalogs actually exist.
/ It just prepares the list for later processing and it is at
/ that later stage that the existence of the catalogs must be
/ checked.
/ Usage : %let path=%fmtpath;
/
/===============================================================================
/ PARAMETERS:
/-------name------- -------------------------description------------------------
/ N/A
/===============================================================================
/ AMENDMENT HISTORY:
/ init --date-- mod-id ----------------------description------------------------
/ rrb 22Feb07 "macro called" message added
/ rrb 30Jul07 Header tidy
/ rrb 13Apr11 Code tidy
/===============================================================================
/ This is public domain software. No guarantee as to suitability or accuracy is
/ given or implied. User uses this code entirely at their own risk.
/=============================================================================*/
%put MACRO CALLED: fmtpath v1.0;
%macro fmtpath;
%local i cat cats catlist;
%let cats=%sysfunc(compress(%sysfunc(getoption(fmtsearch)),%(%)));
%let cats=%sysfunc(translate(%quote(&cats),%str( ),%str(,)));
%do i=1 %to %words(&cats);
%let cat=%qscan(&cats,&i,%str( ));
%if not %index(&cat,.) %then %let cat=&cat..FORMATS;
%let catlist=&catlist &cat;
%end;
%if not %index(&catlist,LIBRARY.FORMATS) %then %let catlist=LIBRARY.FORMATS &catlist;
%if not %index(&catlist,WORK.FORMATS) %then %let catlist=WORK.FORMATS &catlist;
&catlist
%mend fmtpath;