100 REM*****************************************************************
110 REM
120 REM                BIORHYTHM WALL CALENDAR
130 REM
140 REM                     WRITTEN BY
150 REM
160 REM                    RON WILLIAMS
170 REM                    1845 COCHRAN RD.
180 REM                    MORGAN HILL, CA   95037
190 REM                    (408) 779-8655
200 REM
210 REM                    BASED ON A CONCEPT BY
220 REM                    DR. ROBERT SMITH AT
230 REM                    CONTROL DATA CORP.
240 REM
250 REM
260 REM   THE ONLY INPUT THE PROGRAM REQUIRES IS YOUR NAME AND YOUR
270 REM   DATE OF BIRTH (GIVEN AS MM,DD,YYYY OR MM,DD,YY).
280 REM   THIS PROGRAM PRINTS OUT A 12-MONTH CALENDER FOR 1978.  IF SOME
290 REM   PARTICULAR DAY HAS A 'P', AN 'S' OR AN 'I' INSTEAD OF A
300 REM   NUMBER, IT MEANS THAT DAY IS A P(HYSICAL), S(ENSITIVITY) OR
310 REM   I(NTELLECTUAL) CRITICAL DAY FOR YOU.  A '+' OR '-' FOLLOWING
320 REM   ONE OF THE THREE LETTERS ABOVE MEANS THE SINE CURVE IS
330 REM   BEGINNING ITS UPWARD(+) OR DOWNWARD(-) SWING.  
340 REM
350 REM   IF TWO LETTERS APPEAR ON THE CALENDAR, IT MEANS YOU HAVE A
360 REM   DOUBLE-CRITICAL DAY!  (E.G.  'PS' MEANS YOUR PHYSICAL AND
370 REM   SENSITIVITY CYCLES ARE BOTH CRITICAL ON THAT DAY).
380 REM
390 REM   IF A DOUBLE ASTERISK (**) APPEARS ON THE CALENDAR, IT MEANS
400 REM   ALL THREE CYCLES ARE CRITICAL ON THAT DAY!  YOU'D BEST JUST
410 REM   STAY HOME N BED!!  ONE GOOD(?) THING YOU MIGHT SAY
420 REM   ABOUT A TRIPLE-CRITICAL DAY IS THAT YOU ONLY HAVE 9 OF THEM
430 REM   IN THE 58-YEAR BIORHYTHM LIFE CYCLE  (YOUR THREE CYCLES
440 REM   START OVER AGAIN ABOUT EVERY 58 YEARS).
450 REM
460 REM   THIS PROGRAM WAS ORIGINALLY WRITTEN IN PL/M FOR THE INTELLEC
470 REM   MICROCOMPUTER DEVELOPMENT SYSTEM.
480 REM   BEING INNATELY LAZY, I MERELY TRANSLATED THE CODE (INSTEAD OF
490 REM   REDESIGNING IT) WHEN I REWROTE IT IN MICROSOFT DISK BASIC.
500 REM   THIS LAME EXCUSE IS MY WAY OF TELLING THE USER THAT THE
510 REM   PROGRAM RUNS SLO-O-O-W AS COMPARED TO THE PL/M VERSION.
520 REM
530 REM
540 REM******************************************************************
550 REM
560 CLEAR 1000
570 DEFINT A-E:DEFINT G-Z
580 DIM CA(583),CB$(71)
590 WIDTH80
600 GOSUB 1600
610 LINEINPUT"PLEASE ENTER YOUR NAME ===> ";N$
620 INPUT"NOW ENTER YOUR BIRTHDATE  (E.G. 5,22,1934) ===> ";MM,DD,YY
630 IF YY<1000 THEN YY=YY+1900
640 PRINT:LINEINPUT"POSITION PAPER AT TOP OF FORM, THEN HIT -RETURN-";A$
650 PRINT:PRINT"WAIT....YOUR BIORHYTHM CALENDAR WILL BE PRINTING SHORTLY....."
660 CY=1978
670 X=MM:Y=DD:Z=YY:IFX<3THENGOSUB1770ELSEGOSUB1780
680 F1=F
690 X=1:Y=1:Z=1978:GOSUB1770
700 TD=F-F1+1
710 IF CY MOD 4=0 THEN MV(13)=29
720 FOR K=0TO583:CA(K)=0:NEXT
730 MV(1)=MV(13):CP=SD(CY-1971)
740 FORJ=1TO12
750   L=MV(J-1)
760   RP=6*(J-1)+1
770   FOR K=1TOL
780     CA(CP+7*(RP-1))=K
790     CP=CP+1
800     IF CP>7 THEN CP=1:RP=RP+1
810   NEXT K
820 NEXTJ
830 CL=23:RP=0
840 FOR L=1 TO 3
850   MC=TD MOD CL
860   FOR J=1 TO 72
870     FOR K=1 TO 7
880       SL=K+7*(J-1)
890       IF CA(SL)=0 THEN 960
900       IF MC-CL\2-1 = 0 THEN 940
910       IF MC>CL THEN CA(SL)=CA(SL)+1000*(L+RP)+200:MC=1
920       MC=MC+1
930       GOTO 960
940       CA(SL)=CA(SL)+1000*(L+RP)+100
950       MC=MC+1
960     NEXT K
970   NEXT J
980   CL=CL+5:RP=RP+1
990 NEXT L
1000 REM
1010 L=0:KL=7*(CY-1971)
1020 FOR J=1TO7
1030   MG=10000
1040   FOR K=0TO71:CB$(K)=" ":NEXTK
1050   L=L+1:M=HP(L-1):IF M<>0 THEN CB$(M)="$":GOTO 1050
1060   CP=KL+J:K=HN(CP-1)
1070   IF K=0 THEN FOR I=48TO53:CB$(I)="$":NEXTI:GOTO 1120
1080   FOR N=1 TO 5:LP=K\MG:K=K-LP*MG
1090     IF LP<>0 THEN CB$(LP+47)="$"
1100     MG=MG\10
1110   NEXT N
1120   LPRINTTAB(5);:FOR I=0 TO 71:LPRINT CB$(I);:NEXT I:LPRINT
1130 NEXT J
1140 PRINT
1150 FOR I=0TO71:CB$(I)=" ":NEXT I
1160 LPRINT:LPRINTTAB(23);"BIORHYTHM CALENDAR FOR ";N$:LPRINT
1170 LPRINT:LPRINTTAB(11);"P=PHYSICAL          S=SENSITIVITY          I=INTELLECTUAL"
1180 LPRINTTAB(18);"+ = CURVE RISING          - = CURVE FALLING"
1190 LPRINTTAB(25);"** = TRIPLE CRITICAL DAY!":LPRINT
1200 FOR L=1 TO 12 STEP 3
1210   ON L\3+1 GOSUB 1560,1570,1580,1590
1220   LPRINTTAB(5);"   S  M  T  W  T  F  S      S  M  T  W  T  F  S      S  M  T  W  T  F  S":LPRINT
1230   N=6*(L-1)+1
1240   FOR M=1 TO 6
1250     LP=3
1260     RP=N
1270     JL=RP+12
1280     FOR K=0 TO 71:CB$(K)=" ":NEXT K
1290     IF RP>JL THEN 1500
1300     FOR K=1 TO 7
1310       IF CA(K+7*(RP-1))=0 THEN 1460
1320       SL=K+7*(RP-1)
1330       IF CA(SL)>8500 THEN CB$(LP)="*":CB$(LP-1)="*":GOTO1460
1340       IF CA(SL)>8200 THEN CB$(LP)="I":CB$(LP-1)="S":GOTO1460
1350       IF CA(SL)>6200 THEN CB$(LP)="I":CB$(LP-1)="P":GOTO1460
1360       IF CA(SL)>5200 THEN CB$(LP)="+":CB$(LP-1)="I":GOTO1460
1370       IF CA(SL)>5100 THEN CB$(LP)="-":CB$(LP-1)="I":GOTO1460
1380       IF CA(SL)>4200 THEN CB$(LP)="S":CB$(LP-1)="P":GOTO1460
1390       IF CA(SL)>3200 THEN CB$(LP)="+":CB$(LP-1)="S":GOTO1460
1400       IF CA(SL)>3100 THEN CB$(LP)="-":CB$(LP-1)="S":GOTO1460
1410       IF CA(SL)>1200 THEN CB$(LP)="+":CB$(LP-1)="P":GOTO1460
1420       IF CA(SL)>1100 THEN CB$(LP)="-":CB$(LP-1)="P":GOTO1460
1430       CB$(LP)=MID$(STR$(CA(SL) MOD 10),2)
1440       CB$(LP-1)=MID$(STR$(CA(SL)\10),2)
1450       IF CB$(LP-1)="0"THENCB$(LP-1)=" "
1460       LP=LP+3
1470     NEXT K
1480     RP=RP+6:LP=LP+4
1490     GOTO 1290
1500     LPRINTTAB(5);:FOR I=0 TO 71:LPRINTCB$(I);:NEXT I:LPRINT
1510     N=N+1
1520   NEXT M
1530   LPRINT
1540 NEXT L
1550 END
1560 LPRINTTAB(5);"     J A N U A R Y           F E B R U A R Y             M A R C H":LPRINT:RETURN
1570 LPRINTTAB(5);"       A P R I L                  M A Y                   J U N E":LPRINT:RETURN
1580 LPRINTTAB(5);"        J U L Y                A U G U S T           S E P T E M B E R":LPRINT:RETURN
1590 LPRINTTAB(5);"     O C T O B E R           N O V E M B E R          D E C E M B E R":LPRINT:RETURN
1600 DIM HP(49)
1610 FOR I=0TO48:READHP(I):NEXT
1620 DATA 21,29,30,31,32,38,39,40,41,42,43,0,20,21,28,33,38,43,0
1630 DATA 19,21,28,32,33,41,42,0,21,29,30,31,33,40,0,21,32,40,0
1640 DATA 21,31,40,0,19,20,21,22,30,40,0
1650 DIM MV(24)
1660 FOR I=0TO23:READMV(I):NEXT
1670 DATA 31,28,31,30,31,30,31,31,30,31,30,31,31,28,31,30,31,30,31,31
1680 DATA 30,31,30,31
1690 DIM SD(9)
1700 FOR I=0TO8:READSD(I):NEXT
1710 DATA 6,7,2,3,4,5,7,1,2
1720 DIM HN(63)
1730 FOR I=49 TO 55:READHN(I):NEXT
1740 DATA 2345,16,16,2345,16,16,2345
1750 PRINT:PRINT
1760 RETURN
1770 F=365*Z+Y+31*(X-1)+INT((Z-1)/4)-INT(.75*(INT((Z-1)/100)+1)):RETURN
1780 F=365*Z+Y+31*(X-1)-INT(.4*X+2.3)+INT(Z/4)-INT(.75*(INT(Z/100)+1)):RETURN
NT((Z-1)/4)-INT(.75*(INT((Z-1)/10