10  DIM Y$[2],P[3]
20  DIM F$[9],D$[9],G[12],E$[9]
30  DEF FNA()=INT(100*SIN((S/P-INT(S/P))*6.28318)+.5)
40  REM
50  DIM A$[21],B$[36],C$[72],A[12]
60  REM** A IS AN ARRAY CONTAINING THE NUMBER OF DAYS IN EACH MONTH
70  MAT  READ A
80  REM** FNY IS THE NUMBER OF DAYS IN FEBRUARY OF THE YEAR Y
90  DEF FNY()=29-SGN(/4-INT(/4))
100  REM**  FNS IS THE SINEWAVE FUNCTION
110  DEF FNS()=INT(14*SIN((/P-INT(/P))*6.28318)+30.5)
120  REM** FNM IS THE REMAINDER OF X AND 7
130  DEF FNM()=INT(7*(/7-INT(/7))+.5)
140  A$="MonTueWedThuFriSatSun"
150  B$="JanFebMarAprMayJunJulAugSepOctNovDec"
160  PRINT '10'10
170  K=1
180  PRINT "Birthday [MM,DD,YYYY]";
190  INPUT M,D,Y
200  REM** THE BELOW REDUCES A NUMBER TO ONLY ITS 10'S AND 1'S DIGITS
210  Y=INT(100.1*(Y/100-INT(Y/100)))
220  REM** CHECK FOR ERRORS
230  A[2]=FNY(Y)
240  IF M<1 OR M>12 OR ABS(M)#INT(M) THEN 1370
250  IF D<1 OR D>A[M] OR INT(D) <> ABS(D) THEN 1390
260  REM** NOW CONVERT D TO JULIAN
270  FOR I=1 TO M-1
280  D=D+A[I]
290  NEXT I
300  K=2
310  PRINT "Auto (Y/N)? ";
320  LINPUT D$
330  IF D$[1,1]="Y" THEN 1440
340  PRINT "Plot starting date [MM,DD,YYYY]";
350  INPUT M1,D1,Y1
360  D0=D1
370  REM** THE BELOW DOES THE SAME AS THE ABOVE FOR PLOT DATE
380  Y1=INT(100.1*(Y1/100-INT(Y1/100)))
390  A[2]=FNY(Y1)
400  IF M1<1 OR M1>12 OR ABS(M1)#INT(M1) THEN 1370
410  IF D1<1 OR D1>A[M] OR INT(D1)#ABS(D1) THEN 1390
420  FOR I=1 TO M1-1
430  D1=D1+A[I]
440  NEXT I
450  REM** 'S' WILL END UP BEING HOW MANY DAYS FROM BIRTH TO PLOT DATE
460  S=0
470  REM** FIRST, ADD IN LEAP YEARS FROM BIRTH TO PLOT DATE
480  FOR I=Y+1 TO Y1-1
490  S=S+(I/4=INT(I/4))
500  NEXT I
510  REM** NOW CHECK FOR BIRTH YEAR BEING LEAP
520  S=S+(Y/4=INT(Y/4) AND D>58)
530  REM** WE ADD HOW MANY YEARS OLD YOU ARE * 365
540  S=S+(Y1-Y-1+(D1 >= D))*365
550  REM** AND FINALLY, WE ADD HOW MANY DAYS SINCE THE LAST BIRTHDAY
560  S=S+(D1 >= D)*(D1-D)
570  S=S+(D1<D)*(365-(D-D1))
580  IF S<0 THEN 1410
590  REM** D3= HOW MANY DAYS FROM THE YEAR 1900 TO PLOT DATE
600  D3=Y1*365+D1
610  FOR I=1 TO Y1-1
620  D3=D3+(I/4=INT(I/4))
630  NEXT I
640  PRINT "How many days do you want plotted";
650  INPUT D9
660  D9=D9*2
670  D1=D0
680  REM**            START OF PRINTING  *******************************
690  PRINT '10'10;TAB(20);"(-)     (0)     (+)";
700  PRINT "     (P)   (S)   (C)"
710  FOR Q=1 TO D9
720  REM** C$ IS THE OUTPUT STRING
730  C$=""
740  IF D1 <> INT(D1) THEN 850
750  REM************* SET UP DATE*******
760  E=FNM(D3-1)+1
770  REM** YOU WILL NOTE THAT 1/1/1900 WAS A MONDAY
780  PRINT A$[3*E-2,3*E];
790  PRINT D1;
800  IF D1 <> 1 THEN 850
810  PRINT B$[3*M1-2,3*M1];
820  CONVERT Y1 TO Y$
830  PRINT Y$;
840  REM*********** SET UP PRINTING****
850  FOR X=LEN(C$)+1 TO 72
860  C$[X,X]=" "
870  NEXT X
880  FOR X=1 TO 3
890  P=5*X+18
900  X[X]=FNS(S)
910  P[X]=FNA(S)
920  NEXT X
930  C$[30,30]="I"
940  C$[16,16]="I"
950  C$[44,44]="I"
960  C$[X[1],X[1]]="P"
970  IF X[1]#X[2] OR X[1]#X[3] OR X[2]#X[3] THEN 1000
980  C$[X[1],X[1]]="*"
990  GOTO 1100
1000  IF X[1]#X[2] THEN 1030
1010  C$[X[3],X[3]]="C"
1020  GOTO 1040
1030  IF X[2]#X[3] THEN 1060
1040  C$[X[2],X[2]]="*"
1050  GOTO 1100
1060  C$[X[2],X[2]]="S"
1070  IF X[1]=X[3] THEN 980
1080  C$[X[3],X[3]]="C"
1090  REM** OUTPUT C$
1100  FOR X=15 TO 72
1110  IF C$[X,X]=" " THEN 1130
1120  PRINT TAB(X-1);C$[X,X];
1130  NEXT X
1140  PRINT P[1];P[2];P[3]
1150  REM**  RESET DATE
1160  D3=D3+.5
1170  S=S+.5
1180  D1=D1+.5
1190  IF D1<A[M1]+1 THEN 1260
1200  D1=1
1210  M1=M1+1
1220  IF M1<13 THEN 1260
1230  M1=1
1240  Y1=Y1+1
1250  A[2]=FNY(Y)
1260  NEXT Q
1270  PRINT "Again (Y/N)";
1280  INPUT F$
1290  IF F$[1,1]="N" THEN 1600
1300  PRINT "Same birthday (Y/N)";
1310  INPUT F$
1320  IF F$[1,1]="Y" THEN 310
1330  GOTO 160
1340  PRINT '10'10'10
1350  GOTO 150
1360  REM**       ERRORS  ***
1370  PRINT '10'7"Improper month"
1380  GOTO 1400
1390  PRINT '10'7"Improper day"
1400  GOTO K OF 180,340
1410  PRINT '10'7"Plot starting date earlier than birthday"
1420  GOTO 340
1430  DATA 31,28,31,30,31,30,31,31,30,31,30,31
1440  MAT G=ZER
1450  G[1]=31
1460  FOR X9=2 TO 12
1470  G[X9]=G[X9-1]+A[X9]
1480  NEXT X9
1490  IF TIM(2)>31 THEN 1530
1500  D1=TIM(2)
1510  M1=1
1520  GOTO 1570
1530  FOR M1=2 TO 12
1540  IF TIM(2) <= G[M1] THEN 1560
1550  NEXT M1
1560  D1=TIM(2)-G[M1-1]
1570  Y1=TIM(3)
1580  D0=D1
1590  GOTO 420
1600  END 
