! size for viewpdf : 85
! For year 89
! Program to draw a Year planner for CS dept holidays.
! J Gordon Hughes (April 1980) for Heather Carlin.
!
! The chart has to last 36 weeks & have 67 staff members on it.
! each staff member (vertical axis) has 36 big boxes, subdivided into 
! 5 smaller boxes.
! The program is written for the EDWIN graphics package, and is designed to
! be used on the departmental HP 7580.

! Updated Feb 83 for the Deparmental HP 7585 plotter

%CONST %INTEGER NUM WEEKS = 53
%CONST %INTEGER NUM STAFF = 30

! Monday dates
%CONST %INTEGER %ARRAY DATES (1:NUM WEEKS) = 
26,2,9,16,23,30,6,13,20,27,6,13,20,27,3,10,17,24,1,8,15,22,29,5,12,19,26,
3,10,17,24,31,7,14,21,28,4,11,18,25,2,9,16,23,30,6,13,20,27,4,11,18,25
!28,4,11,18,25,1,8,15,22,29,7,14,21,28,4,11,18,25,2,9,16,23,30,6,13,20,27,4,11,18,25,1,8,15,
!22,29,5,12,19,26,3,10,17,24,31,7,14,21,28,5,12,19,26

! Number of  Mondays in each month
%CONST %STRING (3) %ARRAY MONTHS(1:NUM WEEKS) =
 "DEC", "JAN" (5), "FEB" (4), "MAR" (4), "APR" (4),
 "MAY" (5), "JUN" (4), "JUL" (5), "AUG" (4),
 "SEP" (4), "OCT" (5), "NOV" (4), "DEC" (4)
%CONST %STRING (5) %ARRAY YEARS  (1:NUM WEEKS) =  "1988","1989"(*)

%include "edwina:specs.inc"
%BEGIN
%INTEGER  I

%ROUTINE OUTPUT NUM (%INTEGER NUM)
   ! This routine outputs a 2 digit number (as a string).
   %STRING (3) ST
   %IF NUM>=10 %THEN ST = TO STRING (NUM//10 + '0') %ELSE ST = " "
   ST = ST . TO STRING (NUM - (NUM//10)*10 + '0')
   TEXT (ST)
%END

   INITIALISE FOR (default device)
   open output(1, "newyear.pdf")
   store on(1)
!? comment out?!
!   viewport (0, 75*400, 0, 55*400)
   WINDOW (0, 50 * NUM WEEKS + 100, 0, 40 * NUM STAFF + 80)
   NEW FRAME

   set colour (1)
   ! Do the outer box first
   MOVE ABS (0                  , 40 * NUM STAFF + 80)
   LINE ABS (0                  , 0)
   LINE ABS (50 * NUM WEEKS + 100, 0)
   LINE ABS (50 * NUM WEEKS + 100, 40 * NUM STAFF + 80)
   LINE ABS (0,                   40 * NUM STAFF + 80)

! Now the annotation at the top.
set colour (1)
MOVE ABS (24, 40*NUM STAFF+80-30)
TEXT ("Week")
%for I = 1,1,NUM WEEKS %cycle
      MOVE ABS (112 + (I-1) * 50, 40*NUM STAFF+80-30)
      OUTPUT NUM (DATES(I))
%REPEAT
MOVE ABS (2, 40*NUM STAFF+80-50)
TEXT ("starting")
%for I= 1,1,NUM WEEKS %cycle
      MOVE ABS (108 + (I-1) * 50, 40*NUM STAFF+80-50)
      TEXT (MONTHS(I))
%REPEAT
%for I=1,1,NUM WEEKS %cycle
      MOVE ABS (102 + (I-1) * 50, 40*NUM STAFF+80-70)
      TEXT (YEARS(I))
%REPEAT


set colour (1)
! Now do the horisontal lines.
MOVE ABS (0, 40*NUM STAFF)
%for I = 1,1,NUM STAFF//2 %cycle
   LINE REL (100 + NUM WEEKS * 50 , 0)
   MOVE REL (0, -40)
   LINE REL (- (100 + NUM WEEKS * 50) , 0)
   MOVE REL (0, -40)
%REPEAT

! We are in the area of the bottom left corner.
! So now do all the vertical lines
MOVE ABS (100,0)
%for I = 1,1,NUM WEEKS %cycle
   MOVE REL (-1,0)
   LINE REL (0, 80 + NUM STAFF * 40)
   MOVE REL (2,0)
   LINE REL (0, -(80 + NUM STAFF * 40))
   MOVE REL (9,0)
   LINE REL (0, NUM STAFF * 40)
   MOVE REL (10,0)
   LINE REL (0, - NUM STAFF * 40)
   MOVE REL (10,0)
   LINE REL (0, NUM STAFF * 40)
   MOVE REL (10, 0)
   LINE REL (0, - NUM STAFF * 40)
   MOVE REL (10,0)
%REPEAT

TERMINATE EDWIN
%END %OF %PROGRAM
