%! % /titlefont /Times-Bold def % /dayfont /Helvetica-Bold def /month_names [ (January) (February) (March) (April) (May) (June) (July) (August) (September) (October) (November) (December) ] def /prtnum { 3 string cvs show} def /drawgrid % draw calendar boxes { dayfont findfont 10 scalefont setfont 0 1 6 { dup dup 100 mul 40 moveto [ (Sunday) (Monday) (Tuesday) (Wednesday) (Thursday) (Friday) (Saturday) ] exch get 100 center 100 mul 35 moveto 1.0 setlinewidth 0 1 5 { gsave 100 0 rlineto 0 -80 rlineto -100 0 rlineto closepath stroke grestore 0 -80 rmoveto pop } for } for } def /drawnums % place day numbers on calendar { dayfont findfont 30 scalefont setfont /start startday def /days ndays def start 100 mul 5 add 10 rmoveto 1 1 days { /day exch def gsave % #ifndef SATBLK % day start add 7 mod 0 eq % { % submonth 0 eq % { % .8 setgray % } if % } if % #endif day start add 7 mod 1 eq { submonth 0 eq { .8 setgray } if } if day prtnum grestore day start add 7 mod 0 eq { currentpoint exch pop 80 sub 5 exch moveto } { 100 0 rmoveto } ifelse } for } def /drawfill % place fill squares on calendar { /start startday def /days ndays def 0 35 rmoveto 1.0 setlinewidth 0 1 start 1 sub { gsave .9 setgray 100 0 rlineto 0 -80 rlineto -100 0 rlineto closepath fill grestore 100 0 rmoveto pop } for submonth 1 eq { /lastday 42 def 600 -365 moveto } { /lastday 40 def 400 -365 moveto } ifelse lastday -1 ndays start 1 add add { /day exch def gsave .9 setgray 100 0 rlineto 0 -80 rlineto -100 0 rlineto closepath fill grestore day 7 mod 1 eq { 600 -365 80 add moveto } { -100 0 rmoveto } ifelse } for } def /isleap % is this a leap year? { year 4 mod 0 eq % multiple of 4 year 100 mod 0 ne % not century year 1000 mod 0 eq or and % unless it's a millenia } def /days_month [ 31 28 31 30 31 30 31 31 30 31 30 31 ] def /ndays % number of days in this month { days_month month 1 sub get month 2 eq % Feb isleap and { 1 add } if } def /startday % starting day-of-week for this month { /off year 2000 sub def % offset from start of epoch off off 4 idiv add % number of leap years off 100 idiv sub % number of centuries off 1000 idiv add % number of millenia 6 add 7 mod 7 add % offset from Jan 1 2000 /off exch def 1 1 month 1 sub { /idx exch def days_month idx 1 sub get idx 2 eq isleap and { 1 add } if /off exch off add def } for off 7 mod % 0--Sunday, 1--monday, etc. } def /center % center string in given width { /width exch def /str exch def width str stringwidth pop sub 2 div 0 rmoveto str show } def /calendar { titlefont findfont 48 scalefont setfont 0 60 moveto /month_name month_names month 1 sub get def month_name show /yearstring year 10 string cvs def 700 yearstring stringwidth pop sub 60 moveto yearstring show 0 0 moveto drawnums 0 0 moveto drawfill 0 0 moveto drawgrid } def /daytext { /Helvetica findfont 6 scalefont setfont /mytext exch def /myday exch def startday myday 1 sub add dup 7 mod 100 mul 5 add % gives column exch 7 idiv -80 mul % gives row dup /ypos exch def moveto /LM currentpoint pop def /RM LM 95 add def mytext { dup (.p) eq { crlf pop} {prstr ( ) show} ifelse } forall } def /crlf { ypos 8 sub /ypos exch def LM ypos moveto } def /prstr { dup stringwidth pop currentpoint pop add RM gt {crlf} if show } def /printmonth { % 90 rotate % 50 -120 translate /submonth 0 def calendar month 1 sub 0 eq { /lmonth 12 def /lyear year 1 sub def } { /lmonth month 1 sub def /lyear year def } ifelse month 1 add 13 eq { /nmonth 1 def /nyear year 1 add def } { /nmonth month 1 add def /nyear year def } ifelse /savemonth month def /saveyear year def /submonth 1 def /year lyear def /month lmonth def gsave 500 -365 translate gsave .138 .138 scale 10 -120 translate calendar grestore /submonth 1 def /year nyear def /month nmonth def 100 0 translate gsave .138 .138 scale 10 -120 translate calendar grestore /month savemonth def /year saveyear def /submonth 0 def grestore /Helvetica findfont 6 scalefont setfont 700 dateprinted stringwidth pop sub -455 moveto dateprinted show } def