10 ON ERROR:ON ERROR OFF:MODE 26:PRINT REPORT$:END:;" at line ";ERL'';"r1%=";r1%;" r2%=";r2%;" p(p,5)=";p(p,5);" r3%=";r3%;" r4%=";r4%:END
   20 MODE 27:r1%=0:r2%=0:r3%=0:r4%=0
   30 MODE 26:OFF
   40 REM Number of planets in Solar System
   50 solarplnum%=10
   60 
   70 REM Number of Satellites around each planet, excluding Mercury and Venus
   80 eartsatnum%=1
   90 marssatnum%=2
  100 jupisatnum%=22:REM 16 satellites and 6 ring boundaries
  110 satusatnum%=31:REM 18 satellites and 13 ring boundaries
  120 uransatnum%=25:REM 15 satellites and 10 ring boundaries
  130 neptsatnum%=8
  140 plutsatnum%=1
  150 
  160 DIM p(solarplnum%,6),p$(solarplnum%)
  170 DIM s(2,6),s$(2)
  180 DIM eartsat(1,6),eartsat$(1)
  190 DIM marssat(2,6),marssat$(2)
  200 DIM jupisat(jupisatnum%,6),jupisat$(jupisatnum%)
  210 DIM satusat(satusatnum%,6),satusat$(satusatnum%)
  220 DIM uransat(uransatnum%,6),uransat$(uransatnum%)
  230 DIM neptsat(neptsatnum%,6),neptsat$(neptsatnum%)
  240 DIM plutsat(1,6),plutsat$(1)
  250 DIM ll(2,2),mm(2),nn(2),oo(2,2),pp(2),qq(2)
  260 orgx%=640
  270 orgy%=480
  280 orgxdif%=-640
  290 orgydif%=-480
  300 planetnames%=1
  310 orbitdraw%=1
  320 RESTORE
  330 COLOUR 1,0,255,0
  340 COLOUR 2,255,255,0
  350 COLOUR 3,80,80,80
  360 
  370 FOR n=1 TO solarplnum%
  380    READ p$(n),p(n,1),p(n,2),sss,p(n,4),p(n,5),p(n,6)
  390    p(n,3)=0
  400 NEXT n
  410 
  420 FOR n=1 TO eartsatnum%
  430    READ eartsat$(n),eartsat(n,1),eartsat(n,2),sss,eartsat(n,4),eartsat(n,5),eartsat(n,6)
  440    eartsat(n,3)=0
  450 NEXT n
  460 
  470 FOR n=1 TO marssatnum%
  480    READ marssat$(n),marssat(n,1),marssat(n,2),sss,marssat(n,4),marssat(n,5),marssat(n,6)
  490    marssat(n,3)=0
  500    marssat(n,1)=marssat(n,1)+p(4,4)
  510 NEXT n
  520 
  530 FOR n=1 TO jupisatnum%
  540    READ jupisat$(n),jupisat(n,1),jupisat(n,2),sss,jupisat(n,4),jupisat(n,5),jupisat(n,6)
  550    jupisat(n,3)=0
  560    jupisat(n,1)=jupisat(n,1)+p(5,4)
  570 NEXT n
  580 
  590 FOR n=1 TO satusatnum%
  600    READ satusat$(n),satusat(n,1),satusat(n,2),sss,satusat(n,4),satusat(n,5),satusat(n,6)
  610    satusat(n,3)=0
  620    satusat(n,1)=satusat(n,1)+p(6,4)
  630 NEXT n
  640 
  650 FOR n=1 TO uransatnum%
  660    READ uransat$(n),uransat(n,1),uransat(n,2),sss,uransat(n,4),uransat(n,5),uransat(n,6)
  670    uransat(n,3)=0
  680    uransat(n,1)=uransat(n,1)+p(7,4)
  690 NEXT n
  700 
  710 FOR n=1 TO neptsatnum%
  720    READ neptsat$(n),neptsat(n,1),neptsat(n,2),sss,neptsat(n,4),neptsat(n,5),neptsat(n,6)
  730    neptsat(n,3)=0
  740    neptsat(n,1)=neptsat(n,1)+p(8,4)
  750 NEXT n
  760 REM
  770 REM FOR n=1 TO plutsatnum%
  780 REM  READ plutsat$(n),plutsat(n,1),plutsat(n,2),sss,plutsat(n,4),plutsat(n,5),plutsat(n,6)
  790 REM  plutsat(n,3)=0
  800 REM NEXT n
  810 
  820 S1=1:S2=2
  830 ORIGIN orgx%,orgy%
  840 z=1/13
  850 t=100
  860 e=0
  870 i=1
  871 frames%=0
  872 timer%=TIME
  880 REPEAT
  881   frames%=frames%+1
  890   VDU 5
  900   WAIT:SYS 6,112,S1:SYS 6,113,S2:CLS:SWAP S1,S2
  910   GCOL 2
  920   CIRCLEFILL 0,0,0.7*z
  930   FOR p=1 TO 10
  940     p(p,3)=p(p,3)+(t/p(p,2))
  950     
  960     r1% = p(p,1)*z
  970     r2% = p(p,1)*z*COSRADi
  980     
  990     IF orbitdraw%=1 THEN
 1000         IF r1%<1600 OR r2%<1600 THEN
 1010         
 1020             GCOL 3
 1030             IF r1%=r2% THEN
 1040                 CIRCLE 0,0,r1%
 1050             ELSE
 1060                 IF r2%<>0 THEN
 1070                     IF r1%<>0 AND r2%<>0 THEN
 1080                         ELLIPSE 0,0,r1%,r2%,((p(p,5)*PI)/180)
 1090                     ENDIF
 1100                 ENDIF
 1110             ENDIF
 1120         ENDIF
 1130     ENDIF
 1140     
 1150     REM PLANET MATRICES
 1160     
 1170     REM Transition Matrix Construction
 1180     ll(1,1)=COSRADp(p,5)
 1190     ll(1,2)=-SINRADp(p,5)
 1200     ll(2,1)=SINRADp(p,5)
 1210     ll(2,2)=COSRADp(p,5)
 1220     
 1230     REM Start Vector for Transformation
 1240     mm(1)=SINRADp(p,3)*r1%
 1250     mm(2)=COSRADp(p,3)*r2%
 1260     
 1270     REM Matrix Multiplication
 1280     nn()=ll().mm()
 1290     
 1300     IFplanetnames%=1 THEN
 1310         IF z>0.009 THEN
 1320             IF z>0.2 THEN
 1330                 GCOL 1
 1340                 MOVE nn(1)+5,nn(2)+5
 1350                 PRINT p$(p)
 1360             ELSE
 1370                 IF p>4 THEN
 1380                     GCOL 1
 1390                     MOVE nn(1)+5,nn(2)+5
 1400                     PRINT p$(p)
 1410                 ENDIF
 1420             ENDIF
 1430         ENDIF
 1440     ENDIF
 1450     GCOL 2
 1460     opx=nn(1)+orgx%
 1470     opy=nn(2)+orgy%
 1480     IF opx>=0 AND opx<=1280 AND opy>=0 AND opy<=1024 THEN
 1490         MOVE SINRADp(p,3)*r1%,COSRADp(p,3)*r2%
 1500         GCOL 0
 1510         CIRCLE nn(1),nn(2),(p(p,4)*z)+2
 1520         GCOL 2
 1530         CIRCLE FILL nn(1),nn(2),p(p,4)*z:REM SINRADp(p,3)*r1%,COSRADp(p,3)*r2%,p(p,4)*z
 1540         REM DRAW SINRADp(p,3)*r1%,COSRADp(p,3)*r2%
 1550       
 1560     ELSE
 1570         IF opx<0 AND opy<0 THEN
 1580             GCOL 2
 1590             MOVE 0+orgxdif%,0+orgydif%
 1600             DRAW 20+orgxdif%,20+orgydif%
 1610             MOVE 25+orgxdif%,25+orgydif%
 1620             PRINT p$(p)
 1630         ENDIF
 1640         :
 1650         IF opx>1280 AND opy>960 THEN
 1660             GCOL 2
 1670             MOVE 1280+orgxdif%,960+orgydif%
 1680             DRAW 1260+orgxdif%,940+orgydif%
 1690             MOVE (1260-(LEN(p$(p))*16))+orgxdif%,919+orgydif%
 1700             PRINT p$(p)
 1710         ENDIF
 1720         :
 1730         IF opx>0 AND opx<1280 AND opy<0 THEN
 1740             GCOL 2
 1750             MOVE opx+orgxdif%,0+orgydif%
 1760             DRAW opx+orgxdif%,10+orgydif%
 1770             MOVE opx+orgxdif%,15+orgydif%
 1780             PRINT p$(p)
 1790         ENDIF
 1800         :
 1810         IF opx>1280 AND opy>0 AND opy<960 THEN
 1820             GCOL 2
 1830             MOVE 1280+orgxdif%,opy+orgydif%
 1840             DRAW 1270+orgxdif%,opy+orgydif%
 1850             MOVE (1265-(LEN(p$(p))*16))+orgxdif%,(opy+8)+orgydif%
 1860             PRINT p$(p)
 1870         ENDIF
 1880         :
 1890         IF opx>0 AND opx<1280 AND opy>960 THEN
 1900             GCOL 2
 1910             MOVE opx+orgxdif%,960+orgydif%
 1920             DRAW opx+orgxdif%,950+orgydif%
 1930             MOVE opx+orgxdif%,945+orgydif%
 1940             PRINT p$(p)
 1950         ENDIF
 1960         :
 1970         IF opx<0 AND opy>0 AND opy<960 THEN
 1980             GCOL 2
 1990             MOVE 0+orgxdif%,opy+orgydif%
 2000             DRAW 10+orgxdif%,opy+orgydif%
 2010             MOVE 15+orgxdif%,(opy+orgydif%)+8
 2020             PRINT p$(p)
 2030         ENDIF
 2040         :
 2050         IF opx>1280 AND opy<0 THEN
 2060             GCOL 2
 2070             MOVE 1280+orgxdif%,0+orgydif%
 2080             DRAW 1270+orgxdif%,10+orgydif%
 2090             MOVE (1260-(LEN(p$(p))*16))+orgxdif%,15+orgydif%
 2100             PRINT p$(p)
 2110         ENDIF
 2120         :
 2130         IF opx<0 AND opy>960 THEN
 2140             GCOL 2
 2150             MOVE 0+orgxdif%,960+orgydif%
 2160             DRAW 10+orgxdif%,950+orgydif%
 2170             MOVE 15+orgxdif%,945+orgydif%
 2180             PRINT p$(p)
 2190         ENDIF
 2200     ENDIF
 2210   NEXT p
 2220   f=360/(t/365)
 2230   e=e+(1/f)
 2240   VDU 4
 2250   @%="+F8.2"
 2260   PRINT TAB(0,0);e;" years"
 2261   PRINTTAB(0,1);"FPS:";(frames%/(TIME-timer%))*100
 2270   IF INKEY(-58) THEN z=z*1.05         : REM Up Arrow
 2280   IF INKEY(-42) THEN z=z/1.05         : REM Down Arrow
 2290   IF INKEY(-122) THEN t=t*1.05:REM *1.05         : REM Right Arrow
 2300   IF INKEY(-26) THEN  t=t/1.05:REM /1.05         : REM Left Arrow
 2310   IF INKEY(-80) THEN i=i-2            : REM '"
 2320   IF INKEY(-105) THEN i=i+2           : REM /?
 2330   IF INKEY(-98) THEN orgx%=orgx%+25:orgxdif%=orgxdif%-25   : REM Z
 2340   IF INKEY(-67) THEN orgx%=orgx%-25:orgxdif%=orgxdif%+25   : REM X
 2350   IF INKEY(-88) THEN orgy%=orgy%-25:orgydif%=orgydif%+25   : REM ;:
 2360   IF INKEY(-104) THEN orgy%=orgy%+25:orgydif%=orgydif%-25  : REM .>
 2370   IF INKEY(-69) THEN PROCmercury      : REM Y for Mercury
 2380   IF INKEY(-100) THEN PROCvenus       : REM V for Venus
 2390   IF INKEY(-35) THEN PROCearth        : REM E for Earth
 2400   IF INKEY(-102) THEN PROCmars        : REM M for Mars
 2410   IF INKEY(-70) THEN PROCjupiter      : REM J for Jupiter
 2420   IF INKEY(-82) THEN PROCsaturn       : REM S for Saturn
 2430   IF INKEY(-54) THEN PROCuranus       : REM U for Uranus
 2440   IF INKEY(-86) THEN PROCneptune      : REM N for Neptune
 2450   IF INKEY(-56) THEN PROCpluto        : REM P for Pluto
 2460   IF INKEY(-36) THEN SYS 6,112,S1:SYS 6,15:INPUTTAB(0,1)"Time : "t:IFt=0:t=100 : REM T for time set
 2470   IF INKEY(-99) THEN
 2480       CASE planetnames% OF
 2490           WHEN 1
 2500             planetnames%=0
 2510           WHEN 0
 2520             planetnames%=1
 2530       ENDCASE
 2540   ENDIF
 2550   IF INKEY(-55) THEN
 2560       CASE orbitdraw% OF
 2570           WHEN 1
 2580             orbitdraw%=0
 2590           WHEN 0
 2600             orbitdraw%=1
 2610       ENDCASE
 2620   ENDIF
 2630   
 2640   ORIGIN orgx%,orgy%
 2650   IF i<0 THEN i=0
 2660   IF i>90 THEN i=90
 2670   :
 2680   m=(1280/z)
 2690   PRINT TAB(0,58);z
 2700   PRINT TAB(0,57);t
 2710   @%="+F8.1"
 2720   PRINT TAB(0,59);m;" million km";
 2730 UNTIL 0=1
 2740 
 2750 REM Planets
 2760 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt AngSun  Tilt AngEqu
 2770 DATA Mercury,     58.34322,  87.969,     0.38,   0.0049,    7,           0
 2780 DATA Venus,       107.71056, 224.701,    0.95,   0.0121,    3.39,        0
 2790 DATA Earth,       149.598,   365.256,    1,      0.012756,  0,           0
 2800 DATA Mars,        227.38896, 686.980,    0.53,   0.0068,    1.85,        0
 2810 DATA Jupiter,     777.9096,  4332.59,    11.2,   0.143,     1.30,        0
 2820 DATA Saturn,      1427.16492,10759.20,   9.5,    0.12,      2.49,        0
 2830 DATA Uranus,      2872.2816, 30684.9,    4,      0.052,     0.77,        0
 2840 DATA Neptune,     4502.8998, 60190.3,    3.8,    0.048,     1.77,        0
 2850 DATA Pluto,       5909.121,  90465.0,    0.18,   0.003,     17.2,        0
 2860 DATA Planet X,    9800.0000, 219000.0,   0,      0.04,      0,           0
 2870 
 2880 REM  Satellites
 2890 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 2900 REM  EARTH's Satellites
 2910 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 2920 DATA Moon,         0.384400,  27.321661, 0,      0.003476,  23.45,      3.1
 2930 REM  MARS's Satellites
 2940 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 2950 DATA Phobos,       0.009270,   0.3189,   0,      0.000023,   1.1,       4.1
 2960 DATA Deimos,       0.023400,   1.2624,   0,      0.000013,   1.8,       4.2
 2970 REM  JUPITER's Satellites
 2980 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 2990 DATA Metis,        0.127960,   0.295,    0,      0.000040,   0,         5.1
 3000 DATA Adrastea,     0.128980,   0.298,    0,      0.000020,   0,         5.2
 3010 DATA Amalthea,     0.181300,   0.498,    0,      0.000175,   0.45,      5.3
 3020 DATA Thebe,        0.221900,   0.675,    0,      0.000100,   0.9,       5.4
 3030 DATA Io,           0.421600,   1.769,    0,      0.003637,   0.04,      5.5
 3040 DATA Europa,       0.670900,   3.551,    0,      0.003130,   0.47,      5.6
 3050 DATA Ganymede,     1.070000,   7.155,    0,      0.005268,   0.21,      5.7
 3060 DATA Callisto,     1.880000,  16.689,    0,      0.004806,   0.51,      5.8
 3070 DATA Leda,        11.094000, 238.7,      0,      0.000010,  26.1,       5.9
 3080 DATA Himalia,     11.480000, 250.6,      0,      0.000170,  27.6,       5.10
 3090 DATA Lysithea,    11.720000, 259.2,      0,      0.000024,  29.0,       5.11
 3100 DATA Elara,       11.737000, 259.7,      0,      0.000080,  24.8,       5.12
 3110 DATA Ananke,      21.200000, 631,        0,      0.000020, 147,         5.13
 3120 DATA Carme,       22.600000, 692,        0,      0.000030, 164,         5.14
 3130 DATA Pasiphae,    23.500000, 735,        0,      0.000036, 145,         5.15
 3140 DATA Sinope,      23.700000, 758,        0,      0.000028, 153,         5.16
 3150 REM JUPITER's Rings
 3160 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 3170 DATA ,             0.100000,   0,        0,      0.000001,   1.30,      5.R1close
 3180 DATA ,             0.122800,   0,        0,      0.000001,   1.30,      5.R1far
 3190 DATA ,             0.122800,   0,        0,      0.000001,   1.30,      5.R2close
 3200 DATA ,             0.129200,   0,        0,      0.000001,   1.30,      5.R2far
 3210 DATA ,             0.129200,   0,        0,      0.000001,   1.30,      5.R3close
 3220 DATA ,             0.214200,   0,        0,      0.000001,   1.30,      5.R3far
 3230 REM SATURN's Satellites
 3240 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 3250 DATA Pan,          0.133600,   0.570,    0,      0.000020,   0.00,       6.1
 3260 DATA Atlas,        0.137670,   0.602,    0,      0.000034,   0.30,       6.2
 3270 DATA Prometheus,   0.139350,   0.613,    0,      0.000100,   0.00,       6.3
 3280 DATA Pandora,      0.141700,   0.629,    0,      0.000088,   0.10,       6.4
 3290 DATA Janus,        0.151470,   0.695,    0,      0.000110,   0.10,       6.5
 3300 DATA Epimetheus,   0.151420,   0.694,    0,      0.000190,   0.30,       6.6
 3310 DATA Mimas,        0.185540,   0.942,    0,      0.000395,   1.52,       6.7
 3320 DATA Enceladus,    0.238040,   1.370,    0,      0.000495,   0.02,       6.8
 3330 DATA Tethys,       0.294670,   1.888,    0,      0.001046,   1.86,       6.9
 3340 DATA Telesto,      0.294670,   1.888,    0,      0.000025,   2.00,       6.10
 3350 DATA Calypso,      0.294670,   1.888,    0,      0.000016,   2.00,       6.11
 3360 DATA Dione,        0.377420,   2.737,    0,      0.001120,   0.02,       6.12
 3370 DATA Helene,       0.377420,   2.737,    0,      0.000035,   0.20,       6.13
 3380 DATA Rhea,         0.527040,   4.518,    0,      0.001528,   0.35,       6.14
 3390 DATA Titan,        1.221860,  15.945,    0,      0.005150,   0.33,       6.15
 3400 DATA Hyperion,     1.481100,  21.277,    0,      0.000280,   0.43,       6.16
 3410 DATA Iapetus,      3.561300,  79.331,    0,      0.001436,   7.52,       6.17
 3420 DATA Phobe,       12.954000, 550.400,    0,      0.000220, 175.00,       6.18
 3430 REM SATURN's Rings
 3440 REM  Name                       Distance  Orbit Time  Nil  Diameter  Tilt Angle  PlNo
 3450 DATA ,                          0.067000, 0,          0,   0.00001,  2.49,    19:6.R1
 3460 DATA ,                          0.073200, 0,          0,   0.00001,  2.49,    20:6.R2
 3470 DATA ,                          0.087500, 0,          0,   0.00001,  2.49,    21:6.R3
 3480 DATA ,                          0.092200, 0,          0,   0.00001,  2.49,    22:6.R4
 3490 DATA ,                          0.117500, 0,          0,   0.00001,  2.49,    23:6.R5
 3500 DATA ,                          0.119000, 0,          0,   0.00001,  2.49,    24:6.R6
 3510 DATA ,                          0.121000, 0,          0,   0.00001,  2.49,    25:6.R7
 3520 DATA ,                          0.133500, 0,          0,   0.00001,  2.49,    26:6.R8
 3530 DATA ,                          0.136530, 0,          0,   0.00001,  2.49,    27:6.R9
 3540 DATA ,                          0.135200, 0,          0,   0.00001,  2.49,    28:6.R10
 3550 DATA ,                          0.140600, 0,          0,   0.00001,  2.49,    29:6.R11
 3560 DATA ,                          0.170000, 0,          0,   0.00001,  2.49,    30:6.R12
 3570 DATA ,                          0.230000, 0,          0,   0.00001,  2.49,    31:6.R13
 3580 REM URANUS's Satellites
 3590 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 3600 DATA Cordelia,    0.049471,  0.330,      0,      0.000026,  0,          7.1
 3610 DATA Ophelia,     0.053796,  0.372,      0,      0.000030,  0,          7.2
 3620 DATA Bianca,      0.059173,  0.433,      0,      0.000042,  0,          7.3
 3630 DATA Cressida,    0.061777,  0.463,      0,      0.000062,  0,          7.4
 3640 DATA Desdemona,   0.062676,  0.475,      0,      0.000054,  0,          7.5
 3650 DATA Juliet,      0.064352,  0.493,      0,      0.000084,  0,          7.6
 3660 DATA Portia,      0.066085,  0.513,      0,      0.000108,  0,          7.7
 3670 DATA Rosalind,    0.069941,  0.558,      0,      0.000054,  0,          7.8
 3680 DATA Belinda,     0.075258,  0.622,      0,      0.000066,  0,          7.9
 3690 DATA Puck,        0.086000,  0.762,      0,      0.000154,  0,          7.10
 3700 DATA Miranda,     0.129400,  1.414,      0,      0.000472,  0,          7.11
 3710 DATA Ariel,       0.191000,  2.520,      0,      0.001158,  0,          7.12
 3720 DATA Umbriel,     0.266300,  4.144,      0,      0.001169,  0,          7.13
 3730 DATA Titania,     0.435000,  8.706,      0,      0.001578,  0,          7.14
 3740 DATA Oberon,      0.583500, 13.463,      0,      0.001523,  0,          7.15
 3750 REM URANUS's Rings
 3760 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 3770 DATA ,      0.041837,  0,          0,      0.00001,   0.06,       16:7.R1
 3780 DATA ,      0.042234,  0,          0,      0.00001,   0.05,       17:7.R2
 3790 DATA ,      0.042570,  0,          0,      0.00001,   0.03,       18:7.R3
 3800 DATA ,      0.044718,  0,          0,      0.00001,   0.01,       19:7.R4
 3810 DATA ,      0.045661,  0,          0,      0.00001,   0.005,      20:7.R5
 3820 DATA ,      0.047175,  0,          0,      0.00001,   0.001,      21:7.R6
 3830 DATA ,      0.047630,  0,          0,      0.00001,   0.11,       22:7.R7
 3840 DATA ,      0.048320,  0,          0,      0.00001,   0.04,       23:7.R8
 3850 DATA ,      0.050023,  0,          0,      0.00001,   0.0,        24:7.R9
 3860 DATA ,      0.051149,  0,          0,      0.00001,   0.005,      25:7.R10
 3870 REM NEPTUNE's Satellites
 3880 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 3890 DATA Naiad,       0.048000,  0.296,      0,      0.000054,  0,          8.1
 3900 DATA Thalassa,    0.050000,  0.312,      0,      0.000080,  0,          8.2
 3910 DATA Despina,     0.052500,  0.333,      0,      0.000180,  0,          8.3
 3920 DATA Galatea,     0.062000,  0.429,      0,      0.000150,  0,          8.4
 3930 DATA Larissa,     0.073600,  0.554,      0,      0.000192,  0,          8.5
 3940 DATA Proteus,     0.117600,  1.121,      0,      0.000416,  4.5,        8.6
 3950 DATA Triton,      0.354800,  5.877,      0,      0.002705,159.9,        8.7
 3960 DATA Nereid,      5.514000,360.160,      0,      0.000240, 27.2,        8.8
 3970 REM NEPTUNE's Rings - Galle, Le Verrier, 'Plateau', Adams
 3980 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 3990 DATA ,            0.041900,  0,          0,      0.00001,   1.77,       9:8.R1
 4000 DATA ,            0.053200,  0,          0,      0.00001,   1.77,      10:8.R2
 4010 DATA ,            0.055000,  0,          0,      0.00001,   1.77,      11:8.R3
 4020 DATA ,            0.062000,  0,          0,      0.00001,   1.77,      12:8.R4
 4030 DATA ,            0.062900,  0,          0,      0.00001,   1.77,      13:8.R5
 4040 REM PLUTO's Satellites
 4050 REM  Name         Distance   Orbit Time  Unused  Diameter   Tilt Angle  Planet Number
 4060 
 4070 
 4080 REM Individual planetary systems.
 4090 
 4100 DEFPROCmercury
 4110 ENDPROC
 4120 
 4130 DEFPROCvenus
 4140 ENDPROC
 4150 
 4160 DEFPROCearth
 4170 ENDPROC
 4180 
 4190 DEFPROCmars
 4200 maxsolar%=0
 4210 z=15000
 4220 frames%=0
 4221 timer%=TIME
 4230 REPEAT
 4240     frames%=frames%+1
 4250     VDU 5
 4260     WAIT:SYS 6,112,S1:SYS 6,113,S2:CLS:SWAP S1,S2
 4270     GCOL 2
 4280     CIRCLEFILL 0,0,p(4,4)*z
 4300     FOR p1=1 TO marssatnum%
 4310         IF p1<17 THEN
 4320             marssat(p1,3)=marssat(p1,3)+(t/marssat(p1,2))
 4330         ENDIF
 4350         r3% = marssat(p1,1)*z
 4360         r4% = marssat(p1,1)*z*COSRADi
 4380         IF orbitdraw%=1 THEN
 4390           IF r3%<1600 OR r4%<1600 THEN
 4400               GCOL 3
 4410               IF p1>16 THEN GCOL 2
 4420                 IF r3%=r4% THEN
 4430                     CIRCLE 0,0,r3%
 4440                 ELSE
 4450                     IF r4%<>0 THEN
 4460                         IF r3%<>0 AND r4%<>0 THEN
 4470                             ELLIPSE 0,0,r3%,r4%,((marssat(p1,5)*PI)/180)
 4480                         ENDIF
 4490                     ENDIF
 4500                 ENDIF
 4510             ENDIF
 4520         ENDIF
 4530       ENDIF
 4580       oo(1,1)=COSRADmarssat(p1,5)
 4590       oo(1,2)=-SINRADmarssat(p1,5)
 4600       oo(2,1)=SINRADmarssat(p1,5)
 4610       oo(2,2)=COSRADmarssat(p1,5)
 4640       pp(1)=SINRADmarssat(p1,3)*r3%
 4650       pp(2)=COSRADmarssat(p1,3)*r4%
 4680       qq()=oo().pp()
 4690       IF planetnames%=1 THEN
 4710           GCOL 1
 4720           MOVE qq(1)+5,qq(2)+5
 4730           PRINT marssat$(p1)
 4740       ENDIF
 4750       opx1=qq(1)+orgx%
 4780       opy1=qq(2)+orgy%
 4790       IF opx1>=0 AND opx1<=1280 AND opy1>=0 AND opy1<=1024 AND p1<17 THEN
 4810           GCOL 0
 4820           CIRCLE qq(1),qq(2),(marssat(p1,4)*z)+2
 4830           GCOL 2
 4840           CIRCLE FILL qq(1),qq(2),marssat(p1,4)*z
 4850       ENDIF
 4851   NEXT p1
 4880   MOVE 0,0
 4900   MOVE p(4,4)*z,0
 4910   PLOT &B5,-p(4,4)*z,0
 4920   GCOL 0,0
 4930   CIRCLE 0,0,p(4,4)*z
 4940 
 4950   f=360/(t/365)
 4960   e=e+(1/f)
 4970   VDU 4
 4980   @%="+F8.2"
 4990   PRINT TAB(0,0);e;" years"
 4991   PRINTTAB(0,1);"FPS:";(frames%/(TIME-timer%))*100
 5000 
 5010   IF INKEY(-58) THEN z=z*1.05          : REM Up Arrow
 5020   IF INKEY(-42) THEN z=z/1.05          : REM Down Arrow
 5030   IF INKEY(-122) THEN t=t*1.05:REM *1.05         : REM Right Arrow
 5040   IF INKEY(-26) THEN  t=t/1.05:REM 1.05         : REM Left Arrow
 5050   IF INKEY(-80) THEN i=i-2          : REM '"
 5060   IF INKEY(-105) THEN i=i+2         : REM /?
 5070   IF INKEY(-17) THEN maxsolar%=1:i=1:z=1/13: REM Q to return to solar system screen
 5080   IF INKEY(-69) THEN PROCmercury      : REM Y for Mercury
 5090   IF INKEY(-100) THEN PROCvenus       : REM V for Venus
 5100   IF INKEY(-35) THEN PROCearth        : REM E for Earth
 5110   IF INKEY(-102) THEN PROCmars        : REM M for Mars
 5120   IF INKEY(-70) THEN PROCjupiter      : REM J for Jupiter
 5130   IF INKEY(-82) THEN PROCsaturn       : REM S for Saturn
 5140   IF INKEY(-54) THEN PROCuranus       : REM U for Uranus
 5150   IF INKEY(-86) THEN PROCneptune      : REM N for Neptune
 5160   IF INKEY(-56) THEN PROCpluto        : REM P for Pluto
 5170   IF INKEY(-99) THEN
 5180       CASE planetnames% OF
 5190           WHEN 1
 5200             planetnames%=0
 5210           WHEN 0
 5220             planetnames%=1
 5230       ENDCASE
 5240   ENDIF
 5250   IF INKEY(-55) THEN
 5260       CASE orbitdraw% OF
 5270          WHEN 1
 5280             orbitdraw%=0
 5290           WHEN 0
 5300             orbitdraw%=1
 5310       ENDCASE
 5320   ENDIF
 5330   IF i<0 THEN i=0
 5340   IF i>90 THEN i=90
 5350 
 5360   m=(1280/z)
 5370   PRINT TAB(0,58);z
 5380   PRINT TAB(0,57);t
 5390   @%="+F8.1"
 5400   PRINT TAB(0,59);m;" million km";
 5410 
 5420 UNTIL maxsolar%=1
 5430 ENDPROC
 5440 
 5450 DEFPROCjupiter
 5460 maxsolar%=0
 5470 z=20
 5480 
 5490 REPEAT
 5500 
 5510   VDU 5
 5520   WAIT:SYS 6,112,S1:SYS 6,113,S2:CLS:SWAP S1,S2
 5530   GCOL 2
 5540   CIRCLEFILL 0,0,p(5,4)*z
 5550 
 5560   FOR p1=1 TO jupisatnum%
 5570       IF p1<17 THEN
 5580           jupisat(p1,3)=jupisat(p1,3)+(t/jupisat(p1,2))
 5590       ENDIF
 5600   
 5610       r3% = jupisat(p1,1)*z
 5620       r4% = jupisat(p1,1)*z*COSRADi
 5630   
 5640       IF orbitdraw%=1 THEN
 5650         IF r3%<1600 OR r4%<1600 THEN
 5660             GCOL 3
 5670             IF p1>16 THEN GCOL 2
 5680             IF r3%=r4% THEN
 5690                 CIRCLE 0,0,r3%
 5700             ELSE
 5710                 IF r4%<>0 THEN
 5720                     IF r3%<>0 AND r4%<>0 THEN
 5730                         ELLIPSE 0,0,r3%,r4%,((jupisat(p1,5)*PI)/180)
 5740                     ENDIF
 5750                 ENDIF
 5760             ENDIF
 5770         ENDIF
 5780       ENDIF
 5790   
 5800       REM SATELLITE MATRICES
 5810   
 5820       REM Transition Matrix Construction
 5830       oo(1,1)=COSRADjupisat(p1,5)
 5840       oo(1,2)=-SINRADjupisat(p1,5)
 5850       oo(2,1)=SINRADjupisat(p1,5)
 5860       oo(2,2)=COSRADjupisat(p1,5)
 5870   
 5880       REM Start Vector for Transformation
 5890       pp(1)=SINRADjupisat(p1,3)*r3%
 5900       pp(2)=COSRADjupisat(p1,3)*r4%
 5910   
 5920       REM Matrix Multiplication
 5930       qq()=oo().pp()
 5940   
 5950       IF planetnames%=1 THEN
 5960           GCOL 1
 5970           MOVE qq(1)+5,qq(2)+5
 5980           PRINT jupisat$(p1)
 5990       ENDIF
 6000   
 6010       GCOL 2
 6020       opx1=qq(1)+orgx%
 6030       opy1=qq(2)+orgy%
 6040   
 6050       IF opx1>=0 AND opx1<=1280 AND opy1>=0 AND opy1<=1024 AND p1<17 THEN
 6060           GCOL 0
 6070           CIRCLE qq(1),qq(2),(jupisat(p1,4)*z)+2
 6080           GCOL 2
 6090           CIRCLE FILL qq(1),qq(2),jupisat(p1,4)*z
 6100       ENDIF
 6110   
 6120   NEXT p1
 6130 
 6140   MOVE 0,0
 6150   MOVE p(5,4)*z,0
 6160   PLOT &B5,-p(5,4)*z,0
 6170   GCOL 0,0
 6180   CIRCLE 0,0,p(5,4)*z
 6190 
 6200   f=360/(t/365)
 6210   e=e+(1/f)
 6220   VDU 4
 6230   @%="+F8.2"
 6240   PRINT TAB(0,0);e;" years"
 6250 
 6260   IF INKEY(-58) THEN z=z*1.05          : REM Up Arrow
 6270   IF INKEY(-42) THEN z=z/1.05          : REM Down Arrow
 6280   IF INKEY(-122) THEN t=t*1.05:REM *1.05         : REM Right Arrow
 6290   IF INKEY(-26) THEN  t=t/1.05:REM 1.05         : REM Left Arrow
 6300   IF INKEY(-80) THEN i=i-2          : REM '"
 6310   IF INKEY(-105) THEN i=i+2         : REM /?
 6320   IF INKEY(-17) THEN maxsolar%=1:i=1:z=1/13: REM Q to return to solar system screen
 6330   IF INKEY(-49) THEN z=1328         : REM 1 for rings
 6340   IF INKEY(-50) THEN z=229          : REM 2 for inner planets
 6350   IF INKEY(-18) THEN z=39           : REM 3 for middle planets
 6360   IF INKEY(-19) THEN z=20           : REM 4 for far planets
 6370   IF INKEY(-69) THEN PROCmercury      : REM Y for Mercury
 6380   IF INKEY(-100) THEN PROCvenus       : REM V for Venus
 6390   IF INKEY(-35) THEN PROCearth        : REM E for Earth
 6400   IF INKEY(-102) THEN PROCmars        : REM M for Mars
 6410   IF INKEY(-70) THEN PROCjupiter      : REM J for Jupiter
 6420   IF INKEY(-82) THEN PROCsaturn       : REM S for Saturn
 6430   IF INKEY(-54) THEN PROCuranus       : REM U for Uranus
 6440   IF INKEY(-86) THEN PROCneptune      : REM N for Neptune
 6450   IF INKEY(-56) THEN PROCpluto        : REM P for Pluto
 6460   IF INKEY(-99) THEN
 6470       CASE planetnames% OF
 6480           WHEN 1
 6490             planetnames%=0
 6500           WHEN 0
 6510             planetnames%=1
 6520       ENDCASE
 6530   ENDIF
 6540   IF INKEY(-55) THEN
 6550       CASE orbitdraw% OF
 6560          WHEN 1
 6570             orbitdraw%=0
 6580           WHEN 0
 6590             orbitdraw%=1
 6600       ENDCASE
 6610   ENDIF
 6620   IF i<0 THEN i=0
 6630   IF i>90 THEN i=90
 6640 
 6650   m=(1280/z)
 6660   PRINT TAB(0,58);z
 6670   PRINT TAB(0,57);t
 6680   @%="+F8.1"
 6690   PRINT TAB(0,59);m;" million km";
 6700 
 6710 UNTIL maxsolar%=1
 6720 ENDPROC
 6730 
 6740 DEFPROCsaturn
 6750 maxsolar%=0
 6760 z=36
 6770 
 6780 REPEAT
 6790 
 6800   VDU 5
 6810   WAIT:SYS 6,112,S1:SYS 6,113,S2:CLS:SWAP S1,S2
 6820   GCOL 2
 6830   CIRCLEFILL 0,0,p(6,4)*z
 6840   GCOL 2
 6850   CIRCLE 0,0,p(6,4)*z
 6860 
 6870   FOR p1=1 TO satusatnum%
 6880       IF p1<19 THEN
 6890           satusat(p1,3)=satusat(p1,3)+(t/satusat(p1,2))
 6900       ENDIF
 6910   
 6920       r3% = satusat(p1,1)*z
 6930       r4% = satusat(p1,1)*z*COSRADi
 6940   
 6950       IF orbitdraw%=1 THEN
 6960           IF r3%<1600 OR r4%<1600 THEN
 6970               GCOL 3
 6980               REM 21,24,26,27
 6990               IF p1>18 THEN GCOL 2
 7000                 IF p1<>21 AND p1<>24 AND p1<>26 AND p1<>27 THEN
 7010                     IF r3%=r4% THEN
 7020                         CIRCLE 0,0,r3%
 7030                     ELSE
 7040                         IF r4%<>0 THEN
 7050                             IF r3%<>0 AND r4%<>0 THEN
 7060                                 ELLIPSE 0,0,r3%,r4%,((satusat(p1,5)*PI)/180)
 7070                             ENDIF
 7080                         ENDIF
 7090                     ENDIF
 7100                 ENDIF
 7110             ENDIF
 7120         ENDIF
 7130     ENDIF
 7140     REM SATELLITE MATRICES
 7150 
 7160     REM Transition Matrix Construction
 7170     oo(1,1)=COSRADsatusat(p1,5)
 7180     oo(1,2)=-SINRADsatusat(p1,5)
 7190     oo(2,1)=SINRADsatusat(p1,5)
 7200     oo(2,2)=COSRADsatusat(p1,5)
 7210 
 7220     REM Start Vector for Transformation
 7230     pp(1)=SINRADsatusat(p1,3)*r3%
 7240     pp(2)=COSRADsatusat(p1,3)*r4%
 7250 
 7260     REM Matrix Multiplication
 7270     qq()=oo().pp()
 7280 
 7290     IF planetnames%=1 THEN
 7300         GCOL 1
 7310         MOVE qq(1)+5,qq(2)+5
 7320         IF planetnames%=1 THEN PRINT satusat$(p1)
 7330     ENDIF
 7340 
 7350     GCOL 2
 7360     opx1=qq(1)+orgx%
 7370     opy1=qq(2)+orgy%
 7380 
 7390     IF opx1>=0 AND opx1<=1280 AND opy1>=0 AND opy1<=1024 AND p1<17 THEN
 7400         GCOL 0
 7410         CIRCLE qq(1),qq(2),(satusat(p1,4)*z)+2
 7420         GCOL 2
 7430         CIRCLE FILL qq(1),qq(2),satusat(p1,4)*z
 7440     ENDIF
 7450 
 7460   NEXT p1
 7470 
 7480   MOVE 0,0
 7490   MOVE p(6,4)*z,0
 7500   PLOT &B5,-p(6,4)*z,0
 7510   GCOL 0,0
 7520   CIRCLE 0,0,p(6,4)*z
 7530 
 7540   f=360/(t/365)
 7550   e=e+(1/f)
 7560   VDU 4
 7570   @%="+F8.2"
 7580   PRINT TAB(0,0);e;" years"
 7590 
 7600   IF INKEY(-58) THEN z=z*1.05          : REM Up Arrow
 7610   IF INKEY(-42) THEN z=z/1.05          : REM Down Arrow
 7620   IF INKEY(-122) THEN t=t*1.05:REM *1.05         : REM Right Arrow
 7630   IF INKEY(-26) THEN  t=t/1.05:REM 1.05         : REM Left Arrow
 7640   IF INKEY(-80) THEN i=i-2          : REM '"
 7650   IF INKEY(-105) THEN i=i+2         : REM /?
 7660   IF INKEY(-17) THEN maxsolar%=1:i=1:z=1/13: REM Q to return to solar system screen
 7670   IF INKEY(-49) THEN z=1300         : REM 1 for rings
 7680   IF INKEY(-50) THEN z=717          : REM 2 for inner planets
 7690   IF INKEY(-18) THEN z=36           : REM 3 for far planets
 7700   IF INKEY(-69) THEN PROCmercury      : REM Y for Mercury
 7710   IF INKEY(-100) THEN PROCvenus       : REM V for Venus
 7720   IF INKEY(-35) THEN PROCearth        : REM E for Earth
 7730   IF INKEY(-102) THEN PROCmars        : REM M for Mars
 7740   IF INKEY(-70) THEN PROCjupiter      : REM J for Jupiter
 7750   IF INKEY(-82) THEN PROCsaturn       : REM S for Saturn
 7760   IF INKEY(-54) THEN PROCuranus       : REM U for Uranus
 7770   IF INKEY(-86) THEN PROCneptune      : REM N for Neptune
 7780   IF INKEY(-56) THEN PROCpluto        : REM P for Pluto
 7790   IF INKEY(-99) THEN
 7800     CASE planetnames% OF
 7810         WHEN 1
 7820           planetnames%=0
 7830         WHEN 0
 7840           planetnames%=1
 7850     ENDCASE
 7860   ENDIF
 7870   IF INKEY(-55) THEN
 7880     CASE orbitdraw% OF
 7890        WHEN 1
 7900           orbitdraw%=0
 7910         WHEN 0
 7920           orbitdraw%=1
 7930     ENDCASE
 7940   ENDIF
 7950   IF i<0 THEN i=0
 7960   IF i>90 THEN i=90
 7970 
 7980   m=(1280/z)
 7990   PRINT TAB(0,58);z
 8000   PRINT TAB(0,57);t
 8010   @%="+F8.1"
 8020   PRINT TAB(0,59);m;" million km";
 8030 
 8040 UNTIL maxsolar%=1
 8050 ENDPROC
 8060 
 8070 DEFPROCuranus
 8080 maxsolar%=0
 8090 z=741
 8100 
 8110 REPEAT
 8120 
 8130   VDU 5
 8140   WAIT:SYS 6,112,S1:SYS 6,113,S2:CLS:SWAP S1,S2
 8150   GCOL 2
 8160   CIRCLEFILL 0,0,p(7,4)*z
 8170   GCOL 2
 8180   CIRCLE 0,0,p(7,4)*z
 8190 
 8200   FOR p1=1 TO uransatnum%
 8210     IF p1<16 THEN
 8220         uransat(p1,3)=uransat(p1,3)+(t/uransat(p1,2))
 8230     ENDIF
 8240 
 8250     r3% = uransat(p1,1)*z
 8260     r4% = uransat(p1,1)*z*COSRADi
 8270 
 8280     IF orbitdraw%=1 THEN
 8290       IF r3%<1600 OR r4%<1600 THEN
 8300           GCOL 3
 8310           REM 21,24,26,27
 8320           IF p1>15 THEN GCOL 2
 8330             IF r3%=r4% THEN
 8340                 CIRCLE 0,0,r3%
 8350             ELSE
 8360                 IF r4%<>0 THEN
 8370                     IF r3%<>0 AND r4%<>0 THEN
 8380                         ELLIPSE 0,0,r3%,r4%,((uransat(p1,5)*PI)/180)
 8390                     ENDIF
 8400                 ENDIF
 8410             ENDIF
 8420         ENDIF
 8430     ENDIF
 8440     ENDIF
 8450 
 8460     REM SATELLITE MATRICES
 8470 
 8480     REM Transition Matrix Construction
 8490     oo(1,1)=COSRADuransat(p1,5)
 8500     oo(1,2)=-SINRADuransat(p1,5)
 8510     oo(2,1)=SINRADuransat(p1,5)
 8520     oo(2,2)=COSRADuransat(p1,5)
 8530 
 8540     REM Start Vector for Transformation
 8550     pp(1)=SINRADuransat(p1,3)*r3%
 8560     pp(2)=COSRADuransat(p1,3)*r4%
 8570 
 8580     REM Matrix Multiplication
 8590     qq()=oo().pp()
 8600 
 8610     IF planetnames%=1 THEN
 8620       GCOL 1
 8630       MOVE qq(1)+5,qq(2)+5
 8640       IF planetnames%=1 THEN PRINT uransat$(p1)
 8650     ENDIF
 8660 
 8670     GCOL 2
 8680     opx1=qq(1)+orgx%
 8690     opy1=qq(2)+orgy%
 8700 
 8710     IF opx1>=0 AND opx1<=1280 AND opy1>=0 AND opy1<=1024 AND p1<17 THEN
 8720       GCOL 0
 8730       CIRCLE qq(1),qq(2),(uransat(p1,4)*z)+2
 8740       GCOL 2
 8750       CIRCLE FILL qq(1),qq(2),uransat(p1,4)*z
 8760     ENDIF
 8770 
 8780   NEXT p1
 8790 
 8800   MOVE 0,0
 8810   MOVE p(7,4)*z,0
 8820   PLOT &B5,-p(7,4)*z,0
 8830   GCOL 0,0
 8840   CIRCLE 0,0,p(7,4)*z
 8850 
 8860   f=360/(t/365)
 8870   e=e+(1/f)
 8880   VDU 4
 8890   @%="+F8.2"
 8900   PRINT TAB(0,0);e;" years"
 8910 
 8920   IF INKEY(-58) THEN z=z*1.05          : REM Up Arrow
 8930   IF INKEY(-42) THEN z=z/1.05          : REM Down Arrow
 8940   IF INKEY(-122) THEN t=t*1.05:REM *1.05         : REM Right Arrow
 8950   IF INKEY(-26) THEN  t=t/1.05:REM 1.05         : REM Left Arrow
 8960   IF INKEY(-80) THEN i=i-2          : REM '"
 8970   IF INKEY(-105) THEN i=i+2         : REM /?
 8980   IF INKEY(-17) THEN maxsolar%=1:i=1:z=1/13: REM Q to return to solar system screen
 8990   IF INKEY(-49) THEN z=1300         : REM 1 for rings
 9000   IF INKEY(-50) THEN z=717          : REM 2 for inner planets
 9010   IF INKEY(-18) THEN z=36           : REM 3 for far planets
 9020   IF INKEY(-69) THEN PROCmercury      : REM Y for Mercury
 9030   IF INKEY(-100) THEN PROCvenus       : REM V for Venus
 9040   IF INKEY(-35) THEN PROCearth        : REM E for Earth
 9050   IF INKEY(-102) THEN PROCmars        : REM M for Mars
 9060   IF INKEY(-70) THEN PROCjupiter      : REM J for Jupiter
 9070   IF INKEY(-82) THEN PROCsaturn       : REM S for Saturn
 9080   IF INKEY(-54) THEN PROCuranus       : REM U for Uranus
 9090   IF INKEY(-86) THEN PROCneptune      : REM N for Neptune
 9100   IF INKEY(-56) THEN PROCpluto        : REM P for Pluto
 9110   IF INKEY(-99) THEN
 9120     CASE planetnames% OF
 9130       WHEN 1
 9140         planetnames%=0
 9150       WHEN 0
 9160         planetnames%=1
 9170     ENDCASE
 9180   ENDIF
 9190   IF INKEY(-55) THEN
 9200     CASE orbitdraw% OF
 9210      WHEN 1
 9220         orbitdraw%=0
 9230       WHEN 0
 9240         orbitdraw%=1
 9250     ENDCASE
 9260   ENDIF
 9270   IF i<0 THEN i=0
 9280   IF i>90 THEN i=90
 9290 
 9300   m=(1280/z)
 9310   PRINT TAB(0,58);z
 9320   PRINT TAB(0,57);t
 9330   @%="+F8.1"
 9340   PRINT TAB(0,59);m;" million km";
 9350 
 9360 UNTIL maxsolar%=1
 9370 ENDPROC
 9380 
 9390 DEFPROCneptune
 9400 maxsolar%=0
 9410 z=82
 9420 
 9430 REPEAT
 9440 
 9450   VDU 5
 9460   WAIT:SYS 6,112,S1:SYS 6,113,S2:CLS:SWAP S1,S2
 9470   GCOL 2
 9480   CIRCLEFILL 0,0,p(8,4)*z
 9490   GCOL 0
 9500   CIRCLE 0,0,p(8,4)*z
 9510 
 9520   FOR p1=1 TO neptsatnum%
 9530     IF p1<9 THEN
 9540       neptsat(p1,3)=neptsat(p1,3)+(t/neptsat(p1,2))
 9550     ENDIF
 9560 
 9570     r3% = neptsat(p1,1)*z
 9580     r4% = neptsat(p1,1)*z*COSRADi
 9590 
 9600     IF orbitdraw%=1 THEN
 9610     IF r3%<1600 OR r4%<1600 THEN
 9620         GCOL 3
 9630         REM 21,24,26,27
 9640         IF p1>8 THEN GCOL 2
 9650           IF r3%=r4% THEN
 9660               CIRCLE 0,0,r3%
 9670           ELSE
 9680               IF r4%<>0 THEN
 9690                   IF r3%<>0 AND r4%<>0 THEN
 9700                       ELLIPSE 0,0,r3%,r4%,((neptsat(p1,5)*PI)/180)
 9710                   ENDIF
 9720               ENDIF
 9730           ENDIF
 9740       ENDIF
 9750     ENDIF
 9760     ENDIF
 9770 
 9780     REM SATELLITE MATRICES
 9790 
 9800     REM Transition Matrix Construction
 9810     oo(1,1)=COSRADneptsat(p1,5)
 9820     oo(1,2)=-SINRADneptsat(p1,5)
 9830     oo(2,1)=SINRADneptsat(p1,5)
 9840     oo(2,2)=COSRADneptsat(p1,5)
 9850 
 9860     REM Start Vector for Transformation
 9870     pp(1)=SINRADneptsat(p1,3)*r3%
 9880     pp(2)=COSRADneptsat(p1,3)*r4%
 9890 
 9900     REM Matrix Multiplication
 9910     qq()=oo().pp()
 9920 
 9930     IF planetnames%=1 THEN
 9940       GCOL 1
 9950       MOVE qq(1)+5,qq(2)+5
 9960       IF planetnames%=1 THEN PRINT neptsat$(p1)
 9970     ENDIF
 9980 
 9990     GCOL 2
10000     opx1=qq(1)+orgx%
10010     opy1=qq(2)+orgy%
10020 
10030     IF opx1>=0 AND opx1<=1280 AND opy1>=0 AND opy1<=1024 AND p1<17 THEN
10040       GCOL 0
10050       CIRCLE qq(1),qq(2),(neptsat(p1,4)*z)+2
10060       GCOL 2
10070       CIRCLE FILL qq(1),qq(2),neptsat(p1,4)*z
10080     ENDIF
10090 
10100   NEXT p1
10110 
10120   MOVE 0,0
10130   MOVE p(8,4)*z,0
10140   PLOT &B5,-p(8,4)*z,0
10150   GCOL 0,0
10160   CIRCLE 0,0,p(8,4)*z
10170 
10180   f=360/(t/365)
10190   e=e+(1/f)
10200   VDU 4
10210   @%="+F8.2"
10220   PRINT TAB(0,0);e;" years"
10230 
10240   IF INKEY(-58) THEN z=z*1.05          : REM Up Arrow
10250   IF INKEY(-42) THEN z=z/1.05          : REM Down Arrow
10260   IF INKEY(-122) THEN t=t*1.05:REM *1.05         : REM Right Arrow
10270   IF INKEY(-26) THEN  t=t/1.05:REM 1.05         : REM Left Arrow
10280   IF INKEY(-80) THEN i=i-2          : REM '"
10290   IF INKEY(-105) THEN i=i+2         : REM /?
10300   IF INKEY(-17) THEN maxsolar%=1:i=1:z=1/13: REM Q to return to solar system screen
10310   IF INKEY(-49) THEN z=1300         : REM 1 for rings
10320   IF INKEY(-50) THEN z=717          : REM 2 for inner planets
10330   IF INKEY(-18) THEN z=36           : REM 3 for far planets
10340   IF INKEY(-69) THEN PROCmercury      : REM Y for Mercury
10350   IF INKEY(-100) THEN PROCvenus       : REM V for Venus
10360   IF INKEY(-35) THEN PROCearth        : REM E for Earth
10370   IF INKEY(-102) THEN PROCmars        : REM M for Mars
10380   IF INKEY(-70) THEN PROCjupiter      : REM J for Jupiter
10390   IF INKEY(-82) THEN PROCsaturn       : REM S for Saturn
10400   IF INKEY(-54) THEN PROCuranus       : REM U for Uranus
10410   IF INKEY(-86) THEN PROCneptune      : REM N for Neptune
10420   IF INKEY(-56) THEN PROCpluto        : REM P for Pluto
10430   IF INKEY(-99) THEN
10440     CASE planetnames% OF
10450       WHEN 1
10460         planetnames%=0
10470       WHEN 0
10480         planetnames%=1
10490     ENDCASE
10500   ENDIF
10510   IF INKEY(-55) THEN
10520     CASE orbitdraw% OF
10530      WHEN 1
10540         orbitdraw%=0
10550       WHEN 0
10560         orbitdraw%=1
10570     ENDCASE
10580   ENDIF
10590   IF i<0 THEN i=0
10600   IF i>90 THEN i=90
10610 
10620   m=(1280/z)
10630   PRINT TAB(0,58);z
10640   PRINT TAB(0,57);t
10650   @%="+F8.1"
10660   PRINT TAB(0,59);m;" million km";
10670 
10680 UNTIL maxsolar%=1
10690 ENDPROC
10700 
10710 DEFPROCpluto
10720 ENDPROC
10730 GOTO 10730