!       PROGRAM : DATE - This calculates the day of the week from a given
!                       month, day, and year
!       AUTHOR  : Bob Livesay; Data Pulse, Inc.
!               We got this code out of a book of handy subroutines.
!               I don't like its use of simplistic data names but it
!               seems to work so I decided not to mess with it.
!               NOTE: It is up to you to verify the validity of the
!               date and the year must really be 4 digits.
!------------------------------------------------------------------------

map1    DAY(7),                         S,      9
map1    MONTH'TABLE(12)
       map2    MONTH'DAYS,             B,      1
       map2    MONTH'CODE,             B,      1
       map2    MONTH,                  S,      9

       DAY(1)="Sunday"    :  DAY(2)="Monday"   :  DAY(3)="Tuesday"
               DAY(4)="Wednesday" :  DAY(5)="Thursday" :  DAY(6)="Friday"
               DAY(7)="Saturday"
       MONTH'DAYS(1)=31  :  MONTH'CODE(1)=0 : MONTH(1)="January"
               MONTH'DAYS(2)=28  :  MONTH'CODE(2)=3  :  MONTH(2)="February"
               MONTH'DAYS(3)=31  :  MONTH'CODE(3)=3  :  MONTH(3)="March"
               MONTH'DAYS(4)=30  :  MONTH'CODE(4)=6  :  MONTH(4)="April"
               MONTH'DAYS(5)=31  :  MONTH'CODE(5)=1  :  MONTH(5)="May"
               MONTH'DAYS(6)=30  :  MONTH'CODE(6)=4  :  MONTH(6)="June"
               MONTH'DAYS(7)=31  :  MONTH'CODE(7)=6  :  MONTH(7)="July"
               MONTH'DAYS(8)=31  :  MONTH'CODE(8)=2  :  MONTH(8)="August"
               MONTH'DAYS(9)=30  :  MONTH'CODE(9)=5  :  MONTH(9)="September"
               MONTH'DAYS(10)=31 :  MONTH'CODE(10)=0 :  MONTH(10)="October"
               MONTH'DAYS(11)=30 :  MONTH'CODE(11)=3 :  MONTH(11)="November"
               MONTH'DAYS(12)=31 :  MONTH'CODE(12)=5 :  MONTH(12)="December"

START'JOB:
       MO=2  : DA=27 : YR=1987
       gosub   GET'DAY
       ?tab(-1,0); "When the date is "; MONTH(MO); " ";        &
               DA using "#Z"; ", "; YR using "####"; "    ";   &
               "The day is "; DAY(DAY'OF'WEEK)
       end

GET'DAY:
       I1=int((YR-1500)/100)
       A=I1*5+(I1+3)/4
       I2=int(A-int(A/7)*7)
       Y2=int(YR/100)
       Y3=int(YR-Y2*100)
       A=Y3/4+Y3+DA+MONTH'CODE(MO)+I2
       DAY'OF'WEEK=int(A-int(A/7)*7)+1
       if  MO>2  goto  WRAPUP'DATE
       if  Y3=0  then  A=I1-1                                  :&
               T1=int(A-int(A/4)*4)                            :&
               if  T1=0  then  DAY'OF'WEEK=DAY'OF'WEEK-1       :&
                       goto    WRAPUP'DATE
       T1=int(YR-int(YR/4)*4)
       if  T1<>0  goto  WRAPUP'DATE
       if DAY'OF'WEEK=0  then  DAY'OF'WEEK=6
       DAY'OF'WEEK=DAY'OF'WEEK-1
WRAPUP'DATE:
       if DAY'OF'WEEK=0  then  DAY'OF'WEEK=7
       return