**NEW** Postscript Calendar Generator 
Author Message
 **NEW** Postscript Calendar Generator

Oops, I sent the wrong file out in my previous posting and
there was no way for me to cancel that one (Cancel article
does not work).   Here's the real goodie.

------------------ cut here -------------
%!
% postscript program to draw calendar
% Copyright (C) 1987 by Pipeline Associates, Inc.
% Permission is granted to modify and distribute this free of charge.
% Leap year bug fixed 1/19/88: Alex Pang, UCLA

% The number after /month should be set to a number from 1 to 12.
% The number after /year should be set to the year you want.
% You can change the title and date fonts, if you want.
% We figure out the rest.
% This program won't produce valid calendars before 1800 (weird stuff
% happened in September of 1752)

% To get the calendar out, save this file in a file called "foo",
% and say "lpr foo", voila!

/month    1 def
/year  1988 def
/titlefont /Times-Bold     def
/dayfont   /Helvetica-Bold def

/month_names [ (January) (February) (March) (April) (May) (June) (July)
                (August) (September) (October) (November) (December) ] def
/month_name month_names month 1 sub get 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
                90 center
                100 mul 38 moveto
                .5 setlinewidth
                60 {
                        gsave
                        90 0 rlineto stroke
                        grestore
                        0 -10 rmoveto
                } repeat
        } for

Quote:
} def

/drawnums {             % place day numbers on calendar
        dayfont findfont 40 scalefont setfont
        /start startday def
        /days ndays def
        start 100 mul 0 rmoveto
        1 1 days {
                /day exch def
                gsave
                  isdouble
                  {
                        day prtdouble
                  }
                  {
                        day prtnum
                  } ifelse
                grestore
                day start add 7 mod 0 eq
                {
                        currentpoint exch pop 100 sub 0 exch moveto
                }
                {
                        100 0 rmoveto
                } ifelse
        } for

Quote:
} def

/isdouble {             % is today going to be overlaid on next week's?
        days start add 35 gt
        {
                day start add 35 gt
                {
                        true true
                }
                {
                        day start add 28 gt
                        day 7 add days le and
                        {
                                false true
                        }
                        {
                                false
                        } ifelse
                } ifelse
        }
        {
                false
        } ifelse

Quote:
} def

/prtdouble {
        gsave
          dayfont findfont 20 scalefont setfont
          exch
          {
                30 100 rmoveto
                prtnum
          }
          {
                0 12 rmoveto
                prtnum
                0 -12 rmoveto
                gsave
                  dayfont findfont 40 scalefont setfont
                  (/) show
                grestore
          } ifelse
        grestore

Quote:
} 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

Quote:
} 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

Quote:
} def

/firsttime true def     % firsttime = true

/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 {
                days_month exch 1 sub get
                month 3 ge
                isleap and
                firsttime and
                {
                        1 add
                        /firsttime false def    % firsttime = false
                } if
                /off exch off add def
        } for
        off 7 mod               % 0--Sunday, 1--monday, etc.

Quote:
} def

/center {               % center string in given width
        /width exch def
        /str exch def width str
        stringwidth pop sub 2 div 0 rmoveto str show

Quote:
} def

90 rotate
50 -120 translate

titlefont findfont 48 scalefont setfont
0 60 moveto
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
drawgrid

showpage



Fri, 19 Jun 1992 04:56:00 GMT  
 
 [ 1 post ] 

 Relevant Pages 

1. pcal - another version of the PostScript calendar generator

2. Postscript Calendar Generator

3. calendar generator

4. Question regarding PostScript random number generator

5. Mailing Label generator in Postscript

6. A simple PostScript fractal generator

7. Example of Simple Form PostScript Generator?

8. ANNOUNCING prg 1.3 - PostScript report generator

9. Word PostScript file generator?

10. Word PostScript file generator

11. Postscript table generator source

12. TclVSrpt ASCII/Postscript Report Generator

 

 
Powered by phpBB® Forum Software