5 'Solar System
6 'Graeme Watt Porteous
7 'Amstrad Action December 1988
10 DATA 1,114.7122,102.972,0.016773,1.000018,0,0
20 DATA 0.24085,209.6643,77.434,0.205629,0.387099,48.350,7.0059
30 DATA 0.61519,67.1413,131.70,0.006772,0.723326,76.723,3.3947
40 DATA 1.8807,11.8733,335.942,0.093298,1.523638,49.604,1.8509
50 DATA 11.861,300.3429,15.662,0.048058,5.20248,100.467,1.3047
60 DATA 29.57,227.2512,93.444,0.050916,9.56329,113.713,2.4846
70 DATA 84.746,249.2488,177.048,0.047285,19.2937,74.056,0.7746
80 DATA 166.57,272.2648,357.07,0.006851,30.2743,131.8,1.7693
90 DATA 249.98,217.4574,224.499,0.252786,39.6823,110.421,17.1313
100 PEN 1:INK 0,0:BORDER 0,0:DIM D(9,13)
110 FOR H=1 TO 9:FOR L=1 TO 7:READ C:D(H,L)=C:NEXT L:NEXT H
120 MODE 1:LOCATE 11,2:PRINT"PLANETARY POSITIONS":GOSUB 2100
130 PRINT:PRINT:INPUT"YEAR  ";Y:Y$=STR$(Y):Y$=MID$(Y$,2,LEN(Y$))
140 INPUT"MONTH ";M:WHILE M<1 OR M>12:GOTO 140:WEND:MN=M:MN$=STR$(MN):IF LEN(MN$)=2 THEN MN$="0"+MID$(MN$,2,1) ELSE MN$=MID$(MN$,2,2)
150 INPUT"DAY   ";DA:WHILE DA<1 OR DA>31:GOTO 150:WEND:DA$=STR$(DA):IF LEN(DA$)=2 THEN DA$="0"+MID$(DA$,2,1) ELSE DA$=MID$(DA$,2,2)
160 INPUT"HOUR  ";HR:WHILE HR<0 OR HR>23:GOTO 160:WEND:HOUR=HR*(1/24):HR$=STR$(HR):IF LEN(HR$)=2 THEN HR$="0"+MID$(HR$,2,1) ELSE HR$=MID$(HR$,2,2)
170 INPUT"MINUTE";MI:WHILE MI<0 OR MI>59:GOTO 170:WEND:MINUTE=MI*(1/1440):MI$=STR$(MI):IF LEN(MI$)=2 THEN MI$="0"+MID$(MI$,2,1) ELSE MI$=MID$(MI$,2,2)
180 IF M=1 OR M=2 THEN GOSUB 1000
190 A=INT(Y/100):B=2-A+INT(A/4):C=INT(365.25*Y):D=INT(30.6001*(M+1))+B+C+DA+HOUR+MINUTE-725085.75
200 MODE 1:DEG
210 LOCATE 9,1:PRINT"MERCURY/VENUS/EARTH/MARS"
220 LOCATE 1,4:PRINT"DATE:";DA$;"/";MN$;"/";Y$:LOCATE 1,6:PRINT"TIME:";HR$;"h ";MI$;"m"
230 ORIGIN 435,160:FOR AN=1 TO 360 STEP 12:PLOT 2*COS(AN),2*SIN(AN),1:NEXT
240 INK 2,10:FOR AN=1 TO 50:PLOT 195+AN,0:NEXT AN
250 FOR P=1 TO 9:GOSUB 700:NEXT P
260 FOR P=2 TO 9
270 T=SIN(D(P,8)-D(P,6))*SIN(D(P,7)):D(P,11)=ATN(T/SQR(-T*T+1))
280 Y=SIN(D(P,8)-D(P,6))*COS(D(P,7))
290 X=COS(D(P,8)-D(P,6))
300 F=ATN(Y/X):GOSUB 1010
310 D(P,12)=F+D(P,6):D(P,13)=D(P,10)*COS(D(P,11))
320 NEXT P
330 FOR P=2 TO 3
340 A=ATN((D(P,13)*SIN(D(1,8)-D(P,12)))/(D(1,10)-D(P,13)*COS(D(1,8)-D(P,12))))
350 L=180+D(1,8)+A:IF L<0 THEN L=L+360
360 IF L>360 THEN L=L-360
370 B=ATN((D(P,13)*TAN(D(P,11))*SIN(L-D(P,12)))/(D(1,10)*SIN(D(P,12)-D(1,8)))):GOSUB 1210
380 PEN 1:IF P=2 THEN LOCATE 1,9:PRINT"MERCURY":L=10:GOSUB 650
390 PEN 1:IF P=3 THEN LOCATE 1,13:PRINT"VENUS":L=14:GOSUB 650
400 NEXT P
410 P=4:GOSUB 670:GOSUB 1210
420 PEN 1:LOCATE 1,17:PRINT"MARS":L=18:GOSUB 650
430 S=100
440 FOR P=1 TO 4:GOSUB 1500:GOSUB 800:NEXT P
450 PRINT CHR$(7)
460 A$=INKEY$:IF A$<>"S" AND A$<>"s" AND A$<>"C" AND A$<>"c" THEN GOTO 460
470 IF A$="S" OR A$="s" THEN ùSCREENSWAP,1,2
480 MODE 1:DEG:ORIGIN 380,160:PEN 1:LOCATE 1,1:PRINT"EARTH/JUPITER/SATURN":LOCATE 1,2:PRINT"URANUS/NEPTUNE/PLUTO":FOR AN=1 TO 360 STEP 36:PLOT 1*COS(AN),1*SIN(AN),1:NEXT
490 FOR AN=1 TO 360 STEP 36:PLOT 1*COS(AN),1*SIN(AN),1:NEXT
500 FOR AN=1 TO 25:PLOT 250+AN,0:NEXT AN
510 PEN 1:P=5:GOSUB 670:GOSUB 1210:LOCATE 1,5:PRINT"JUPITER":L=6:GOSUB 650
520 PEN 1:P=6:GOSUB 670:GOSUB 1210:LOCATE 1,9:PRINT"SATURN":L=10:GOSUB 650
530 PEN 1:P=7:GOSUB 670:GOSUB 1210:LOCATE 1,13:PRINT"URANUS":L=14:GOSUB 650
540 PEN 1:P=8:GOSUB 670:GOSUB 1210:LOCATE 1,17:PRINT"NEPTUNE":L=18:GOSUB 650
550 PEN 1:P=9:GOSUB 670:GOSUB 1210:LOCATE 1,21:PRINT"PLUTO":L=22:GOSUB 650
560 S=5:P=1:K=28
570 GOSUB 800
580 S=5
590 FOR P=5 TO 9
600 GOSUB 1550:GOSUB 800
610 NEXT P:PRINT CHR$(7)
620 A$=INKEY$:IF A$="S" OR A$="s" THEN ùSCREENSWAP,1,2:GOTO 620
630 IF A$="e" OR A$="E" THEN END
640 GOTO 620
650 LOCATE 1,L:PEN 2:PRINT"R.A.  ";B$;"h ";B1$;"m":LOCATE 1,L+1:PEN 3:PRINT"DEC. ";SD$;C$;"d ";C1$;"m"
660 RETURN
670 L=ATN(D(1,10)*SIN(D(P,12)-D(1,8))/(D(P,13)-D(1,10)*COS(D(P,12)-D(1,8))))+D(P,12):IF L>360THEN L=L-360
680 IF L<0 THEN L=L+360
690 B=ATN(D(P,13)*TAN(D(P,11))*SIN(L-D(P,12))/(D(1,10)*SIN(D(P,12)-D(1,8)))):RETURN
700 N=(360*D)/(365.2422*D(P,1))
710 WHILE N>360:N=N-360:WEND
720 M=N+D(P,2)-D(P,3):IF M<0 THEN M=M+360
730 RAD:M=M*PI/180:E=M:DL=1
740 WHILE DL>0.000001:J=E-(D(P,4)*SIN(E))-M
750 DE=J/(1-D(P,4)*COS(E)):E=E-DE:DL=ABS(J)
760 WEND:E=E+DE
770 X=SQR((1+D(P,4))/(1-D(P,4))):X=X*TAN(E/2):V=2*ATN(X):V=V*180/PI:DEG:D(P,9)=V:L=V+D(P,3):D(P,8)=L
780 R=D(P,5)*(1-D(P,4)^2)/(1+D(P,4)*COS(D(P,9))):D(P,10)=R
790 RETURN
800 FOR AN=1 TO 360 STEP K
810 X=D(P,5)*(COS(AN)-D(P,4)):Y=D(P,5)*SIN(AN)*SQR(1-D(P,4)^2)
820 X1=X*COS(D(P,3))-Y*SIN(D(P,3)):Y1=X*SIN(D(P,3))+Y*COS(D(P,3))
830 PLOT X1*S,Y1*S,2
840 NEXT AN
850 X2=D(P,5)*(COS(D(P,9))-D(P,4))*S:Y2=D(P,5)*SIN(D(P,9))*SQR(1-D(P,4)^2)*S
860 X3=X2*COS(D(P,3))-Y2*SIN(D(P,3)):Y3=X2*SIN(D(P,3))+Y2*COS(D(P,3))
870 FOR AN=1 TO 360 STEP 12:MOVE X3,Y3
880 DRAW X3+2*COS(AN),Y3+2*SIN(AN),3
890 NEXT AN:RETURN
1000 Y=Y-1:M=M+12:RETURN
1010 IF SGN(X)=1 AND SGN(Y)=1 THEN Q=1
1020 IF SGN(X)=-1 AND SGN(Y)=1 THEN Q=2
1030 IF SGN(X)=-1 AND SGN(Y)=-1 THEN Q=3
1040 IF SGN(X)=1 AND SGN(Y)=-1 THEN Q=4
1050 IF F<0 THEN F=F+360
1060 GOSUB 1160
1070 IF Q1=Q THEN RETURN
1080 F=F+180
1090 GOSUB 1160
1100 IF Q1=Q THEN RETURN
1110 F=F-360
1120 GOSUB 1160
1130 IF Q1=Q THEN RETURN
1140 F=F-720
1150 RETURN
1160 IF F>=0 AND F<=90 THEN Q1=1
1170 IF F>90 AND F<=180 THEN Q1=2
1180 IF F>180 AND F<=270 THEN Q1=3
1190 IF F>270 AND F<=360 THEN Q1=4
1200 RETURN
1210 E=23.441884:D=SIN(B)*COS(E)+COS(B)*SIN(E)*SIN(L):D=ATN(D/SQR(-D*D+1)):Y=SIN(L)*COS(E)-TAN(B)*SIN(E):X=COS(L)
1220 F=ATN(Y/X):GOSUB 1010:A=F/15
1230 IF SGN(A)=-1  THEN GOSUB 1300
1240 IF SGN(A)>=0 THEN GOSUB 1310
1250 GOSUB 1340
1260 IF SGN(D)=-1 THEN GOSUB 1320:SD$="-"
1270 IF SGN(D)>=0 THEN GOSUB 1330:SD$="+"
1280 GOSUB 1400
1290 RETURN
1300 B=ABS(FIX(A)):B1=INT((ABS(A)-ABS(B))*60):RETURN
1310 B=INT(A):B1=INT((A-B)*60):RETURN
1320 C=ABS(FIX(D)):C1=INT((ABS(D)-ABS(C))*60):RETURN
1330 C=INT(D):C1=INT((D-C)*60):RETURN
1340 B$=STR$(B):B1$=STR$(B1)
1350 IF LEN(B$)=2 THEN B$=MID$(B$,2,1):B$="0"+B$
1360 IF LEN(B$)=3 THEN B$=MID$(B$,2,2)
1370 IF LEN(B1$)=2 THEN B1$=MID$(B1$,2,1):B1$="0"+B1$
1380 IF LEN (B1$)=3 THEN B1$=MID$(B1$,2,2)
1390 RETURN
1400 C$=STR$(C):C1$=STR$(C1)
1410 IF LEN(C$)=2 THEN C$=MID$(C$,2,1):C$="0"+C$
1420 IF LEN(C$)=3 THEN C$=MID$(C$,2,2)
1430 IF LEN(C1$)=2 THEN C1$=MID$(C1$,2,1):C1$="0"+C1$
1440 IF LEN(C1$)=3 THEN C1$=MID$(C1$,2,2)
1450 RETURN
1500 IF P=1 THEN K=1 ELSE IF P=2 THEN K=3 ELSE IF P=3 THEN K=1.5 ELSE IF P=4 THEN K=0.7
1540 RETURN
1550 IF P=5 THEN K=3.5 ELSE IF P=6 THEN K=2 ELSE IF P=7 THEN K=1.1 ELSE IF P=8 THEN K=0.7 ELSE IF P=9 THEN K=0.6
1600 RETURN
2100 PRINT:PRINT:PRINT"Enter year(e.g.1978)":PRINT "      month(1-12)":PRINT"      day(1-31)":PRINT"      hour(0-23)":PRINT"      minute(0-59)":PRINT:PRINT:RETURN