/*
/ Program : openrep.sas / Version : 2.0 / Author : Roland Rashleigh-Berry / Date : 30-Jul-2007 / Purpose : Spectre (Clinical) macro to redirect print output to a / temporary file. / SubMacros : %endwith %readpipe %dequote. Relies on your having already / called the %titles macro so that global variables are set. At / the very least, %jobinfo must have been run. / Notes : none / Usage : Should be used with the %titles and %closerep macros as below. / / %allocr / %titles / %openrep // %closerep / /=============================================================================== / PARAMETERS: /-------name------- -------------------------description------------------------ / missing=' ' By default, set missing option to a space. If you set this / to null then no action will be taken. / formchar='|_---|+|---+=|-/\<>*' By default, set formchar option so that / across spanning characters are underscores. If you set this / to null then no action will be taken. /=============================================================================== / AMENDMENT HISTORY: / init --date-- mod-id ----------------------description------------------------ / rrb 19mar06 Handling for figures added / rrb 13Feb07 "macro called" message added / rrb 22Feb07 Made Windows compliant for version 2.0 / rrb 23Feb07 Use "systask command" instead of "x" / rrb 30Jul07 Header 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: openrep v2.0; %macro openrep(missing=' ',formchar='|_---|+|---+=|-/\<>*'); %local outdir outfile; %*- abort check -; %global _abort_; %if %length(&_abort_) %then %do; %put ERROR: (openrep) There has been an error in a previous macro so this macro will now exit; %goto error; %end; %*- make sure titles macro has run -; %global _repid_; %if not %length(&_repid_) %then %do; %put ERROR: (openrep) You need to run the "titles" macro before calling this macro; %let _abort_=1; %goto error; %end; %*- Get contents of OUTDIR environment variable if set. -; %*- Note that for Cygwin users doing a full run of Spectre then -; %*- you have to set up the OUTDIR environment variable manually -; %*- as a user environment variable within the Windows environment. -; %if "&sysscp" EQ "WIN" %then %do; %let outdir=%dequote(%readpipe(echo '%OUTDIRWIN%')); %*- if it did not resolve then set to null -; %if "%qsubstr(&outdir,1,1)" EQ "%" %then %let outdir=; %*- make sure it ends with a directory slash -; %let outdir=%endwith(&outdir,\); %end; %else %let outdir=%endwith(%readpipe(echo $OUTDIR),/); %put NOTE: (openrep) outdir=&outdir; *- set options -; %if %length(&missing) %then %do; options missing=&missing; %put NOTE: (openrep) "missing" option changed to missing=&missing; %end; %if %length(&formchar) %then %do; options formchar=&formchar; %put NOTE: (openrep) "formchar" option changed to formchar=&formchar; %end; /*=================================* TABLES AND LISINGS *=================================*/ %if "&_reptype_" NE "FIGURE" %then %do; %*- set up name of temporary file -; %let outfile=&outdir&_prog_..tmp; *- delete temporary file if it already exists -; %if "&sysscp" EQ "WIN" %then %do; systask command "erase &outfile" taskname=del; %end; %else %do; systask command "rm -f &outfile" taskname=del; %end; waitfor del; *- direct standard print output to the temporary file -; run; proc printto print="&outfile"; run; %end; /*=================================* FIGURES *=================================*/ %else %do; %*- set up name of temporary postscript file -; %let outfile=&outdir&_prog_..pzz&_replabel_; *- set up psfile fileref -; filename psfile "&outfile" new; *- set goptions -; goptions device=&_device_ targetdevice=&_device_ rotate=&_rotate_ colors=(black) cback=white ftext=swiss ftitle=swiss htext=0.4cm gsfname=psfile gunit=cm gsfmode=replace vsize=&_vsize_ hsize=&_hsize_ vorigin=&_vorigin_ horigin=&_horigin_ ; run; %end; %goto skip; %error: %put ERROR: (openrep) Leaving macro due to error(s) listed; %skip: %mend;