/**********************************************************************/
/* Annotate Facility Program */
%macro cal(mon,yr);
title1 h=5 pct f=zapf "&mon &yr";
data calendar;
length text $ 20 function $8;
xsys='5'; ysys='5'; color='black ';
/*****************************/
/* */
/* Draw calendar grid lines */
/* */
/*****************************/
/* draw horizontal grid lines */
do y=0 to 90 by 18;
x=0;
function='move';
output;
line=1;
x=100;
function='draw';
output;
end;
/* draw vertical grid lines */
do x=0 to 100 by 20;
y=0;
function='move';
output;
y=100;
function='draw';
output;
end;
/* set line style to dashed and draw top line */
line=2;
x=0; y=100;
function='move';
output;
x=100; y=100;
function='draw';
output;
/*************************/
/* */
/* Draw weekday headings */
/* */
/*************************/
position='5';
hsys='5';
size=4;
function='label';
style='zapf ';
x=10; y=96 ; text='Monday'; output;
x=30; y=96 ; text='Tuesday'; output;
x=50; y=96 ; text='Wednesday'; output;
x=70; y=96 ; text='Thursday'; output;
x=90; y=96 ; text='Friday'; output;
/*******************************/
/* */
/* Fill in dates in calendar */
/* */
/*******************************/
/* set size and color for text */
color='cyan';
size=15;
/* calculate first and last day of month */
dt=%unquote(%quote(%'01&mon&yr%'d));
lastday=intnx('month',dt,1)-1;
week=1;
/* for each day, determine what day of week it */
/* is, then place the text accordingly */
do day=dt to lastday;
n+1;
/* day of week */
wkday=weekday(day);
/* wk of month */
if wkday=2 and n gt 3 then week+1;
/* no weekends */
if wkday ne 1 and wkday ne 7 then do;
/* x coordinate */
x=20*(wkday-2)+ 9;
/* y coordinate */
y=90-(18*week)+12;
text=put(day(day),2.);
output;
end;
end;
run;
/* produce the graph */
proc gslide annotate=calendar;
run;
quit;
%mend cal;
%cal(JAN,92);
/**********************************************************************/
/* DSGI Program */
%macro cal(mon,yr);
title1 h=5 pct f=zapf "&mon &yr";
data _null_;
rc=ginit();
rc=graph('clear');
/****************************/
/* */
/* Draw calendar grid lines */
/* */
/****************************/
/* Set up window in screen pct (excluding */
/* title space) */
rc=gset('window',1,0,0,100,100);
rc=gset('transno',1);
/* Color 1 is for grid lines and column */
/* headings. Color 2 is for the days */
rc=gset('colrep',1,'black');
rc=gset('colrep',2,'cyan');
rc=gset('lincolor',1);
rc=gset('texcolor',1);
/* set line style to solid */
rc=gset('lintype',1);
/* draw horizontal grid lines */
do y=0 to 90 by 18;
rc=gdraw('line',2,0,100,y,y);
end;
/* draw vertical grid lines */
do x=0 to 100 by 20;
rc=gdraw('line',2,x,x,0,100);
end;
/* set line style to dashed and draw top line */
rc=gset('lintype',2);
rc=gdraw('line',2,0,100,100,100);
/***************************/
/* */
/* Draw weekday headings */
/* */
/***************************/
rc=gset('texfont','zapf');
rc=gset('texalign','center','half');
rc=gset('texheight',3.2);
rc=gdraw('text',10,96,'Monday');
rc=gdraw('text',30,96,'Tuesday');
rc=gdraw('text',50,96,'Wednesday');
rc=gdraw('text',70,96,'Thursday');
rc=gdraw('text',90,96,'Friday');
/*****************************/
/* */
/* Fill in dates in calendar */
/* */
/*****************************/
/* reset text color and height to draw the days */
rc=gset('texcolor',2);
rc=gset('texheight',15);
/* calculate first and last day of the month */
dt=%unquote(%quote(%'01&mon&yr%'d));
lastday=intnx('month',dt,1)-1;
week=1;
/* For each day, determine what day of week it */
/* is. Then place the text accordingly */
do day=dt to lastday;
n+1;
/* day of week */
wkday=weekday(day);
/* week of month */
if wkday=2 and n gt 3 then week+1;
/* no weekends */
if wkday ne 1 and wkday ne 7 then do;
/* x coordinate */
x=20*(wkday-2)+9;
/* y coordinate */
y=90-(18*week)+12;
rc=gdraw('text',x,y,put(day(day),2.));
end;
end;
/* produce the graph */
rc=graph('update');
rc=gterm();
run;
%mend cal;
%cal(JAN, 92);
/**********************************************************************/