home *** CD-ROM | disk | FTP | other *** search
- 10 PRINT
- 20 PRINT "****************************"
- 30 PRINT "* THE GREGORIAN CALENDR1 *"
- 40 PRINT "* *"
- 50 PRINT "****************************"
- 60 REM
- 70 REM Original program obtained from CP/Mug.
- 80 REM Program adapted to read the TP-100 TimEPROMmer card
- 90 REM from Optronics Technology, 2990 Atlantic Avenue,
- 100 REM Penfield, NY 14526, and to compute astronomical "Julian
- 110 REM Date," by D. Mc Lanahan, Box 17, Marlow, NH 03456.
- 120 REM Program computes day-of-week and ignores TP-100 d-o-w.
- 130 REM
- 140 DIM M$(12),D$(6),TIME(6)
- 150 P=40 : REM: P is the base location of the TimEPROMmer card.
- 160 P1=P+1
- 170 DATA January,February,March,April,May,June,July,August
- 180 DATA September,October,November,December
- 190 FOR A=1 TO 12:READ M$(A):NEXT A
- 200 DATA Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
- 210 FOR A=0 TO 6:READ D$(A):NEXT A
- 220 DEF FND(V)=INT(7*(V/7-INT(V/7))+.05)
- 230 PRINT:PRINT
- 240 PRINT "The Routines:":PRINT
- 250 PRINT " 1. Print a calendar"
- 260 PRINT " 2. Day of the week"
- 270 PRINT " 3. Days between dates"
- 280 PRINT " 4. Date before or after"
- 290 PRINT " 5. Astronomical Julian date"
- 300 PRINT " 6. Return to Basic"
- 310 PRINT " 7. Return to System" : PRINT
- 320 INPUT "Enter Routine Number";R
- 330 PRINT CHR$(12)
- 340 ON R GOTO 370,660,750,860,1000,1560,1550
- 350 GOTO 320
- 360 REM
- 370 PRINT "This routine will print a calendar for each month"
- 380 PRINT "starting with the month and year entered and"
- 390 PRINT "continuing for the number of months specified."
- 400 REM PRINT "CALENDARS WILL BE PRINTED ON LINE PRINTER"
- 410 REM PRINT "IF SENSE SWITCH 'A15' IS RAISED."
- 420 GOSUB 1290:DM=1:C=0
- 430 PRINT:INPUT "Number of months";N:IF (INP(255) AND INP(128))<>0 GOTO 530
- 440 IF C=N THEN PRINT CHR$(12):GOTO 240
- 450 PRINT CHR$(12);"******** ";M$(MY);TAB(20);YR;"********"
- 460 PRINT " SUN MON TUE WED THU FRI SAT"
- 470 PRINT "***********************************"
- 480 GOSUB 1220
- 490 DW=FND(X)
- 500 PRINT TAB(5*DW);DM;:IF DM=6 THEN PRINT
- 510 X=X+1:GOSUB 1160:IF DM=1 THEN C=C+1:GOTO 440
- 520 GOTO 490
- 530 IF C=N THEN PRINT:PRINT CHR$(12):GOTO 240
- 540 PRINT:PRINT:PRINT
- 550 PRINT "******** "M$(MY);TAB(20);YR;"********"
- 560 PRINT " SUN MON TUE WED THU FRI SAT"
- 570 FOR I=1 TO 34:PRINT "*";:NEXT I:PRINT
- 580 GOSUB 1220
- 590 DW=FND(X)
- 600 PRINT TAB(5*DW);DM;:IF DW=6 THEN PRINT
- 610 X=X+1:GOSUB 1160:IF DM=1 THEN C=C+1:GOTO 530
- 620 GOTO 590
- 630 REM
- 640 REM ***DAY OF WEEK***
- 650 REM
- 660 PRINT "This routine will determine the day of the week"
- 670 PRINT "For any Gregorian date after December 31, 1582."
- 680 GOSUB 1130
- 690 DW=FND(X)
- 700 PRINT:PRINT M$(MY);" ";STR$(DM);",";YR;" is a ";D$(DW)
- 710 GOTO 230
- 720 REM
- 730 REM ***NUMBER OF DAYS***
- 740 REM
- 750 PRINT "This routine will determine the number of days"
- 760 PRINT "between two Gregorian dates after December 31, 1582."
- 770 GOSUB 1130:D2=D1:M2=M1:Y2=Y1:X2=X:GOSUB 1130
- 780 PRINT M$(M2);" ";STR$(D2);",";Y2;"is";ABS(X2-X);"day";
- 790 IF ABS(X2-X<>1) THEN PRINT "s";
- 800 IF X2>X THEN PRINT " after ":GOTO 820
- 810 PRINT " before "
- 820 PRINT M$(MY);" ";STR$(DM);","YR:GOTO 230
- 830 REM
- 840 REM ***DATE***
- 850 REM
- 860 PRINT "This routine will determine the Gregorian date for a"
- 870 PRINT "given number of days before (-) or after a specified date."
- 880 GOSUB 1130:INPUT "Number of days before (-) or after date";Z
- 890 X=X+Z:IF X>139753! GOTO 920
- 900 PRINT:PRINT "The date is prior to the adoption of the Gregorian Calendar."
- 910 GOTO 880
- 920 GOSUB 1160:PRINT:PRINT ABS(Z);"day";:IF ABS(Z)<>1 THEN PRINT "s"
- 930 IF Z<0 THEN PRINT " before ";:GOTO 950
- 940 PRINT " after ";
- 950 PRINT M$(M1);" ";STR$(D1);",";Y1
- 960 PRINT " is ";M$(MY);" ";STR$(DM);",";YR:GOTO 230
- 970 REM
- 980 REM ***JULIAN DATE***
- 990 REM
- 1000 PRINT "This routine will determine the Julian Date"
- 1010 PRINT "for a Gregorian date after 31 December 1582"
- 1020 GOSUB 1030
- 1030 GOSUB 1130
- 1040 OFFSET#=2159407.5#
- 1050 PRINT M$(MY);" ";STR$(DM);",";YR;"is Julian Day ";
- 1060 PRINT USING "########,.#";(X+OFFSET#)
- 1070 PRINT "Before noon UT (GMT), ignore the decimal."
- 1080 PRINT "After noon UT, add 0.5.":GOTO 230
- 1090 STOP
- 1100 REM
- 1110 REM ***SUBROUTINES***
- 1120 REM
- 1130 GOSUB 1260:GOSUB 1220:D1=DM:M1=MY:Y1=YR:GOSUB 1160:REM***TEST DATE***
- 1140 IF D1<>DM OR M1<>MY OR Y1<>YR THEN PRINT:PRINT "INVALID DATE":GOTO 1130
- 1150 RETURN
- 1160 Y=INT((X+60)/365.25):REM ***NUMBER TO DATE***
- 1170 I=X-INT(Y*365.25)+120+INT(Y/100)-INT(Y/400)
- 1180 M=INT((I-.1)/30.6):IF M<4 THEN M=M+12:Y=Y-1:GOTO 1170
- 1190 I=I-INT(M*30.6):IF M>13 THEN M=M-12:Y=Y+1
- 1200 YR=Y+1200:MY=M-1:DM=I
- 1210 RETURN
- 1220 D=DM:M=MY:Y=YR-1200:REM ***DATE TO NUMBER***
- 1230 M=M+1:IF M<=3 THEN Y=Y-1:M=M+12
- 1240 X=INT(365.25*Y)+INT(30.6*M)+D-120-INT(Y/100)+INT(Y/400)
- 1250 RETURN
- 1260 PRINT : PRINT "Day of the month-"
- 1270 INPUT "(for today, enter 0)",DM:IF DM=0 GOTO 1350 : REM***ENTER DATE***
- 1280 GOTO 1320
- 1290 PRINT : PRINT "Starting Month (1-12)---?";
- 1300 PRINT:INPUT "(for this month, enter 0)",MY:IF MY=0 GOTO 1350 : IF MY<1 OR MY>12 GOTO 1290
- 1310 GOTO 1330
- 1320 PRINT : INPUT "Enter month";MY:IF MY<1 OR MY>12 GOTO 1320
- 1330 PRINT:INPUT "YEAR (>1582)";YR:IF YR<1583 GOTO 1330
- 1340 PRINT:RETURN
- 1350 REM
- 1360 REM ****** READ TP-100 (CALENDAR BOARD) DATA ******
- 1370 REM
- 1380 REM ....OUTPUT HOLD BIT
- 1390 OUT P,16
- 1400 REM ....OUTPUT HOLD + READ BITS
- 1410 OUT P,48
- 1420 REM ....OUTPUT ADDRESS AND INPUT DATA FOR RANGE
- 1430 FOR X=1 TO 6
- 1440 OUT P,61-X
- 1450 TIME(X)=(INP(P1) AND 15): NEXT X
- 1460 REM ....REMOVE HOLD RESUME CLOCK FUNCTIONS
- 1470 OUT P,0
- 1480 REM
- 1490 REM ****** FORMAT DATA ******
- 1500 REM
- 1510 YR=(TIME(1)*10+TIME(2)+1900)
- 1520 MY=(TIME(3) AND 1)*10+TIME(4)
- 1530 DM=(TIME(5) AND 3)*10+TIME(6)
- 1540 RETURN
- 1550 SYSTEM
- 1560 END
-