100 DIM M$(12) 110 DATA JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE 120 DATA JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER 130 FOR I=1 TO 12 140 READ M$(I) 150 NEXT I 160 CLS 170 PRINT@3,"PERPETUAL CALENDAR PROGRAM" 180 PRINT@64,"ENTER CURRENT MONTH(1-12)";: INPUT MM 190 PRINT@106,"YEAR(1601-2399)";: INPUT YY 200 IF (MM>0) AND (MM<13) THEN 230 210 PRINT@160,"M0NTH ";MM;" INVALID--TRY AGAIN" 220 FOR T=1 TO 400: NEXT T: GOTO160 230 IF (YY>1600) AND (YY<2400) THEN 260 240 PRINT@224,"YEAR ";YY;" INVALID--TRY AGAIN" 250 FOR T=1 TO 400: NEXT T: GOTO16O 260 REM COMPUTE LEAP YR, DAYS OF MO AND WEEK 270 OF=6 280 IF YY>2000 THEN OF=0 290 OF=(OF+(YY-1600))+INT((YY-1600-1)/4)+1-INT((YY-1600-1)/100) 300 OF=OF-INT(OF/7)*7 310 LY=O 320 IF YY=INT(YY/4)*4-O THEN LY=1 330 IF YY=INT(YY/100)*100=0 THEN LY=0 340 IF YY=2000 THEN LY=1 350 IF MM=2 THEN OF=OF+3 360 IF MM=3 THEN OF=OF+3+LY 370 IF MM=4 THEN OF=OF+6+LY 380 IF MN=5 THEN OF=OF+8+LY 390 IF HM=6 THEN OF=OF+11+LY 400 IF MM=7 THEN OF=OF+13+LY 410 IF MM=8 THEN OF=OF+16+LY 420 IF HM=9 THEN OF-OF+19+LY 430 IF MM=10 THEN OF=OF+21+LY 440 IF MM=11 THEN OF=OF+24+LY 450 IF MM=12 THEN OF=OF+26+LY 460 OF=OF-INT(OF/7)*7 470 DM=31 480 IF MM=2 THEN DM=28+LY 490 IF (MM=4) OR (MM=6) OR (MM=9) OR (MN=11) THEN DM=30 500 REM DRAW LINES AND PRINT DAYS OF WEEK 510 CLS 520 PRINT@34,"SUN MON TUE WED THU FRI SAT" 530 FOR I=65 TO 93 540 PRINT@I,CHR$(131); 550 NEXT I 560 FOR I=93 TO 477 STEP 32 570 J=138 580 IF I=93 THEN J=130 590 PRINT@I,CHR$(J); 600 NEXT I 610 FOR I=477 TO 449 STEP -1 620 J=140 630 IF I=477 THEN J=136 640 PRINT@I,CHR$(J); 650 NEXT I 660 FOR I=449 TO 65 STEP -32 670 J=133 680 IF I=449 THEN J=132 690 IF I=65 THEN J=129 700 PRINT@I,CHR$(J); 710 NEXT I 720 REM PRINT CURR MONTH,YEAR 730 ML=LEN(M$(MM)) 740 PRINT@496-(ML+5)/2,M$(MM);",";YY; 750 REM PRINT CALENDAR DAYS 760 PP=0 770 FOR I=1 TO DM 780 IF I=1 THEN PP=99+(OF*4):GOTO840 790 IF (PP=187) AND (I>9) THEN PP=PP+39: GOTO840 800 IF (PP=123) OR (PP=186) OR (PP=187) THEN PP=PP+40: GOTO840 810 IF (PP=250) OR (PP=314) OR (PP=378) THEN PP=PP+40: GOTO840 820 IF I=10 THEN PP=PP+3: GOTO840 830 PP=PP+4 840 B$=STR$(I) 850 PRINT@PP,B$; 860 NEXT I 870 REM MONITOR KEYBOARD FOR RESTART 880 A$=INKEY$ 890 IF A$="" THEN 880 900 SOUND 220,3 910 GOTO160