! ******************************** ! * PROGRAM TO GET DAY OF WEEK * ! * FOR ANY DATE * ! * AND (OPTIONALLY) A * ! * CALENDAR FOR THE YEAR * ! * * ! * BASED UPON BHAIRAV JOSHI * ! * ALGORITHM PUBLISHED IN * ! * 1/14/80 COMPUTER WORLD * ! * * ! * THIS IS THE RESULT OF A * ! * STUDY OF THE PRINCIPLES * ! * OF THE GREGORIAN CALENDAR * ! * * ! * DATA PRODUCED SHOULD BE * ! * ACCURATE OVER THE INTERVAL * ! * YEAR ZERO A.D. TO ABOUT * ! * 3000 A.D. * ! * * ! * PROGRAMMED BY E. WILLIAMS * ! * FEBRUARY 17, 1980 * ! ******************************** ! ! Tidy up displays ! Allow lower case input ! Give the option to print immediately, or just make a file ! 11/04/87 Steve Elliott ! ! MAP1 DAPRMO(12),F DAPRMO(1) = 31 : DAPRMO(2) = 28 : DAPRMO(3) = 31 : DAPRMO(4) = 30 DAPRMO(5) = 31 : DAPRMO(6) = 30 : DAPRMO(7) = 31 : DAPRMO(8) = 31 DAPRMO(9) = 30 : DAPRMO(10) = 31 : DAPRMO(11) = 30 : DAPRMO(12) = 31 MAP1 DAOFWK(7),S,9 DAOFWK(1) = "Saturday" : DAOFWK(2) = "Sunday" : DAOFWK(3) = "Monday" DAOFWK(4) = "Tuesday" : DAOFWK(5) = "Wednesday" : DAOFWK(6) = "Thursday" DAOFWK(7) = "Friday" MAP1 TITLE(4),S,74 TITLE(1) = " January February March" TITLE(2) = " April May June" TITLE(3) = " July August September" TITLE(4) = " October November December" MAP1 HDR,S,22," S M T W T F S" MAP1 MONTH(3,42),S,2 MAP1 PLINE,S,80," " MAP1 DECIS,S,3 ! BEGIN: PRINT TAB(-1,0) PRINT " This program will give the day of the week for any date" : PRINT PRINT " and print out a calendar for the entire year if you like" : PRINT PRINT " What date would you like to select? (year 0 will end the program)" : PRINT ! INPYR: YEAR = 0 : MONTH = 0 : DAY = 0 INPUT " Enter the year as a number (ex. 1980) ",YEAR IF YEAR = 0 THEN GOTO QUIT IF (YEAR < 0) THEN PRINT "ILLEGAL YEAR" : GOTO INPYR ELSE PRINT IF (YEAR/4 - INT(YEAR/4)) = 0 THEN LPYR = 1 ELSE LPYR = 0 IF (YEAR/100 - INT(YEAR/100)) = 0 THEN LPYR = LPYR - 1 IF (YEAR/400 - INT(YEAR/400)) = 0 THEN LPYR = LPYR + 1 IF (YEAR/4000 - INT(YEAR/4000)) = 0 THEN LPYR = LPYR - 1 IF (LPYR = 1) THEN DAPRMO(2) = 29 ELSE DAPRMO(2) = 28 ! INPMTH: INPUT " Enter the month as a number (1 to 12) ",MONTH IF (MONTH<1 OR MONTH>12) THEN PRINT "ILLEGAL MONTH" : GOTO INPMTH ELSE PRINT ! INPDAY: INPUT " Enter the day of the month as a number ",DAY IF (DAY<1 OR DAY>DAPRMO(MONTH)) THEN PRINT "ILLEGAL DAY" : GOTO INPDAY ELSE PRINT CALL CALC PRINT " The date ";MONTH;"/";DAY;"/";YEAR; PRINT "will fall on a ";DAOFWK(TOTDYS) : PRINT : PRINT : PRINT INPUT "Would you like a calendar for the whole year? ",DECIS DECIS = UCS(DECIS[1,1]) IF DECIS <> "Y" THEN GOTO BEGIN ? "One moment while I generate the calendar"; OPEN #1,"DAYCAL.PRT",OUTPUT POSITION = 0 : MONTH = 1 : DAY = 1 : CALL CALC FOR I = 1 TO 7 : PRINT #1 : NEXT ? "."; PRINT #1, SPACE(30);"CALENDAR FOR YEAR ";YEAR : PRINT #1 : PRINT #1 FOR I = 1 TO 4 ?"."; PRINT #1, TITLE(I): FRSTMO = 3*(I-1) + 1 : CALL PRINT NEXT I CLOSE #1 ? INPUT LINE "Would you like to print it out now? ", DECIS DECIS = UCS(DECIS[1,1]) IF DECIS <> "Y" & THEN & ? "The file is called DAYCAL.PRT and is ready for your inspection" :& CALL PAUSE & ELSE & XCALL SPOOL,"DAYCAL.PRT" GO TO BEGIN ! CALC: X = YEAR - 1 TOTDYS=YEAR+DAY+INT(X/4)-INT(X/100)+INT(X/400)-INT(X/4000)+INT(X/1000)-INT(X/2000) IF (MONTH <> 1) THEN FOR I=1 TO MONTH-1 : TOTDYS=TOTDYS+DAPRMO(I) : NEXT I TOTDYS = 1 + INT(10*(7*((TOTDYS-1)/7 - INT((TOTDYS-1)/7))) + .5)/10 RETURN ! PRINT: PRINT #1 PRINT #1, HDR+" "+HDR+" "+HDR IF (POSITION = 0) THEN IF (TOTDYS = 1) THEN POSITION=7 ELSE POSITION=TOTDYS-1 FOR J = FRSTMO TO FRSTMO+2 FOR K = 1 TO POSITION-1 MONTH(J+1-FRSTMO,K) = " " NEXT K FOR K = 1 TO DAPRMO(J) MONTH(J+1-FRSTMO,POSITION+K-1) = STR(K) NEXT K Y = POSITION + K - 1 POSITION = (POSITION+K-1) - 7*INT((POSITION+K-1.1)/7) FOR K = Y TO 42 MONTH(J+1-FRSTMO,K) = " " NEXT K NEXT J N = 0 FOR J = 1 TO 6 PRINT #1," "; FOR K = 1 TO 3 FOR L = 1 TO 7 IF (VAL(MONTH(K,L+N)>0)) THEN PLINE[3*L+29*K-31;2] = MONTH(K,L+N) USING "##" NEXT L NEXT K PRINT #1, PLINE PLINE = " " N = N + 7 NEXT J PRINT #1 : PRINT #1 RETURN END ! QUIT: ? TAB(23,1); END PAUSE: ? TAB(23,1); TAB(-1,10); INPUT LINE "Hit RETURN to continue --> ", DECIS ? tab(23,1); tab(-1,10); RETURN