100! THIS PROGRAM IS DESIGNED TO CALCULATE THE AZIMUTH AND
110! ELEVATION OF THE MOON.
120!
130! THE REQUIRED INPUT IS THE GMT MONTH, DAY, AND YEAR FOR
140! WHICH THE MOON'S AZIMUTH AND ELEVATION ARE DESIRED.  IN
150! ADDITION, IF PRINTOUT IS DESIRED NOT ONLY WHEN THE MOON
160! IS NEAR THE HORIZON, THE TIME INTERVAL OVER WHICH THE
170! POSITION IS DESIRED MUST BE ENTERED.
180!
190! THE COMPLETE INPUT FORMAT FOR THE ABOVE IS:
200!
210!  MM,DD,YYYY,TTTT,TTTT
220!
230! IF YOU ELECT TO HAVE PRINTOUT OCCUR ONLY WHEN THE MOON IS
240! NEAR THE HORIZON, YOU WILL BE ASKED TO INPUT THE MAXIMUM
250! ELEVATION FOR WHICH YOU WANT THE PRINTOUT.  IN THIS CASE,
260! YOU WILL NOT BE ASKED TO SUPPLY TIMES FOR THE TIME INTERVALS.
270!
280! PRINTOUT IS SUSPENDED WHENEVER THE ELEVATION OF THE MOON
290! IS NEGATIVE.
300!
310! YOU CAN ASK FOR DATA FOR UP TO 25 DAYS AT ONCE: SIMPLY TYPE
320! IN THE INFORMATION FOR ONE DAY (AS IN THE REQUIRED FORMAT
330! FOR YOUR PARTICULAR NEEDS) EACH TIME THE COMPUTER PRINTS A
340! "?".  WHEN YOU HAVE ENTERED ALL THE DATA YOU WISH, FOLLOW
350! THE LAST "?" BY AN INPUT OF ZEROES SEPERATED BY COMMAS --
360! JUST AS IN THE FORMAT YOU WERE USING TO ENTER THE DATA.
370!
380! ALL DATES AND TIMES USED IN THIS PROGRAM ARE IN GREENWICH
390! MEAN TIME.  IN ADDITION, ALL TIMES ARE IN THE 0000 TO 2400
395! HOUR SYSTEM.
400!
410! THE BASIC USED IN THIS PROGRAM HAS BEEN KEPT AS EL!ENTARY
420! AS POSSIBLE TO FACILITATE ITS USE ON OTHER TIME SHARING
430! SYSTEMS.  I WISH TO ACKNOWLEDGE THE GENEROUS ASSISTANCE OF
440! THOMAS AKE OF THE WARNER-SWASEY OBSERVATORY, WITHOUT WHOM
450! THE VITAL EQUATIONS FOR COMPUTING THE MOON'S POSITION WOULD
455! NOT HAVE BEEN AVAILABLE.
460!
470!					LANCE COLLISTER
480!					WA1JXN/WA3GPL
490!					CLEVELAND, OHIO
500!					MARCH 1974
510!
520!
530 DIM F(25), V(25), Y(25), Q(25), S(25)
540 DEF FNA(X)=INT(X*D5*10+.5)/10
550 DEF FNB(X)=(X-INT(X))*P5
560 LET P5=2.0000000000*3.1415926535
570 LET D5=360.0000000000/P5 : ! CONVERSION TO DEGREES
580 LET R5=P5/360.0000000000 : ! CONVERSION TO RADIANS
583 STRING Z8
584 PRINT
585 PRINT "WHAT ARE THE CALL LETTERS OF THE STATION":
586 INPUT Z8
590 PRINT "WHAT IS THE LATITUDE IN DEGREES, MINUTES":
600 INPUT L5,U5
610 PRINT "WHAT IS THE LONGITUDE IN DEGREES, MINUTES":
620 INPUT L6,U6
630 LET L5=(L5+U5/60)*R5
640 LET L6=(L6+U6/60)*R5
650 PRINT "WHAT IS THE DESIRED PRINTING INCREMENT IN MINUTES":
660 INPUT I
670 PRINT "DO YOU ONLY WANT PRINTOUT WHEN THE MOON"
680 PRINT "IS NEAR THE HORIZON":
690 INPUT B$
700 IF B$="YES" THEN 730
710 LET I6=100
720 GOTO 800
730 PRINT "BELOW WHAT ELEVATION IN DEGREES DO YOU WANT PRINTOUT TO OCCUR":
740 INPUT I6
750 PRINT "WHAT ARE THE GMT MONTH,DAY,YEAR DESIRED":
760 FOR N=1 TO 25
770 INPUT F(N),V(N),Y(N),Q(N),S(N)
780 IF F(N)=0 THEN 860
790 GOTO 760
800 PRINT "WHAT ARE THE GMT MONTH,DAY,YEAR,TIME INTERVAL (BEGINNING,"
810 PRINT "ENDING) DESIRED":
820 FOR N=1 TO 25
830 INPUT F(N),V(N),Y(N),Q(N),S(N)
840 IF F(N)=0 THEN 860
850 GOTO 820
860 LET N5=N-1
870 FOR N=1 TO N5
880 IF B$="YES" THEN 900
890 GOTO 930
900 LET E1=2400
910 LET B=0
920 GOTO 950
930 LET E1=S(N)
940 LET B=Q(N)
950 LET M=F(N)
960 LET D=V(N)
970 LET Y=Y(N)
980 LET Y1=Y-(INT(Y/100)*100)
990 PRINT
1000 PRINT
1010 PRINT "POSITION OF MOON ON ":M:"/":D:"/":Y1:"GMT"
1020 PRINT
1030 PRINT "GMT","AZ","EL","GHA","DEC"
1040 PRINT "---","--","--","---","---"
1050 PRINT
1060 LET I1=2
1070 !HERE BEGINS CALCULATION OF JULIAN DATE
1080 IF M>=3 THEN 1160
1090 IF INT((Y-1853)/4)<11 THEN 1120
1100 LET C1=-1
1110 GOTO 1130
1120 LET C1=0
1130 LET J1=365*(Y-1853)+D+30*(M+9)+INT((M+10)/2)
1140 LET J2=INT((Y-1853)/4)+1+C1
1150 GOTO 1270
1160 IF INT((Y-1852)/4)<11 THEN 1190
1170 LET C1=-1
1180 GOTO 1200
1190 LET C1=0
1200 IF M=9 THEN 1240
1210 IF M=11 THEN 1240
1220 LET C2=0
1230 GOTO 1250
1240 LET C2=1
1250 LET J1=365*(Y-1852)+D+30*(M-3)+INT((M-2)/2)
1260 LET J2=INT((Y-1852)/4)+C1+C2
1270 LET J=J1+J2 !(JULIAN DATE-2397547.5) FOR 0 HOURS GMT
1280 LET T1=J-17472.5
1290 LET D9=(B-INT(B/100)*100)+INT(B/100)*60
1300 LET D6=(E1-INT(E1/100)*100)+INT(E1/100)*60
1310 LET D7=D9-D6
1320 LET D8=D7-I
1330 IF D7>0 THEN 1350
1340 GOTO 1380
1350 IF D8>=0 THEN 2220
1360 LET B=E1
1370 !CALCULATION OF LATITUDE AND LONGITUDE OF MOON
1380 LET T=(B-INT(B/100)*100)/1440+INT(B/100)*24
1390 LET T5=T1+T
1400 LET K1=FNB(.751213+.036601102*T5)
1410 LET K2=FNB(.822513+.0362916457*T5)
1420 LET K3=FNB(.995766+.00273777852*T5)
1430 LET K4=FNB(.974271+.0338631922*T5)
1440 LET K5=FNB(.0312525+.0367481957*T5)
1450 LET L8=K1+.658*R5*SIN(2*K4)+6.289*R5*SIN(K2)
1460 LET L8=L8-1.274*R5*SIN(K2-2*K4)-.186*R5*SIN(K2-2*K4)-.186*R5*SIN(K3)
1470 LET L8=L8+.214*R5*SIN(2*K2)-.114*R5*SIN(2*K5)
1480 LET L8=L8-.059*R5*SIN(2*K2-2*K4)-.057*R5*SIN(K2+K3-2*K4)
1490 LET K6=K5+.6593*R5*SIN(2*K4)+6.2303*R5*SIN(K2)-1.272*R5*SIN(K2-2*K4)
1500 LET L7=5.144*R5*SIN(K6)-.146*R5*SIN(K5-2*K4)
1510 !CALCULATION OF RIGHT ASCENSION (A=R1) AND DECLINATION (D1)
1520 LET D1=COS(L7)*SIN(L8)*.397821+SIN(L7)*.917463
1530 LET D1=ATN(D1/(SQR(1-D1^2)))
1540 LET A2=COS(L7)*COS(L8)/COS(D1)
1550 LET A2=COS(L7)*SIN(L8)*.917463-SIN(L7)*.397821)/COS(D1)
1560 LET A=ATN(A1/A2)
1570 GOSUB 1860
1580 LET R1=A
1590 LET L1=.065709822*T1
1600 LET L=T*24*1.002738+6.646055+(L1-INT(L1/24)*24
1610 LET L=(L-INT(L/24)*24)
1620! CALCULATION OF GREENWICH HOUR ANGLE,G, FROM LOCAL SIDEREAL TIME
1630 LET G=(L/24)*P5-R1
1640 IF G<P5 THEN 1670
1650 G=G-P5
1660 GOTO 1710
1670 IF G<0 THEN 1690
1680 GOTO 1710
1690 G=G+P5
1700! CALCULATION OF YOUR LOCAL HOUR ANGLE,H, FROM GHA
1710 LET H=L6-G
1720! CALCULATION OF ELEVATION,E, OF OBJECT
1730 LET E3=COS(L5)*COS(H)*COS(D1)+SIN(D1)*SIN(L5) !SIN OF ELEVATION
1740 LET E2=SQR(1-(E3*E3))
1750 LET E=ATN(E3/E2)
1760 IF E<0 THEN 2170
1770 IF E>I6*R5 THEN 2170
1780! CALCULATION OF AZIMUTH,A, OF OBJECT
1790 LET A2=SIN(D1)/(COS(L5)*COS(E))
1800 LET A2=A2-(SIN(L5)/COS(L5))*(SIN(E)/COS(E))
1810 LET A1=SIN(L5)*SIN(D1)+COS(L5)*COS(D1)*COS(H)
1820 LET A1=(SIN(H)*COS(D1))/(SQR(1-A1^2))
1830 LET A=ATN(A1/A2) !AZIMUTH=ARCTAN (SIN OF AZ/COS OF AZ)
1840 GOSUB 1860
1850 GOTO 2020
1860! REMOVAL OF AMBIGUITIES INCURRED WITH ATN FUNCTION
1870 IF A=0 THEN 1890
1880 GOTO 1930
1890 IF A2<0 THEN 1910
1900 GOTO 2010
1910 LET A=P5/2
1920 GOTO 2010
1930 IF A>0THEN 1990
1940 IF A2<0 THEN 1970
1950 LET A=P5+A
1960 GOTO 2010
1970 LET A=P5+(A-P5/2)
1980 GOTO 2010
1990 IF A2>=0 THEN 2010
2000 LET A=A+P5/2
2010 RETURN
2020 IF (T-I1)>(2*I)/1440 THEN 2040
2030 GOTO 2145
2040 PRINT
2145 PRINT IN FORM "4D":(INT(B+.5))
2150 PRINT IN IMAGE "          %%%.%          %%.%
%%%.%         %%%.%":FNA(A),FNA(E),FNA(G),FNA(D1)
2160 LET I1=T
2170 LET B=B+1
2180 LET Z=(B-INT(B/100)*100)-60
2190 IF Z<0 THEN 1290
2200 LET B=INT(B/100)*100+1100+Z
2210 GOTO 1290
2220 NEXT N
2230 LET N=0
2240 PRINT
2250 PRINT
2260 PRINT
2270 PRINT "DO YOU WANT MORE INFORMATION":
2280 INPUT D$
2290 IF D$="YES" THEN 540
2300 END
