Planet Finder

Developer(s): Eric Burgess
Date: 198x
Type: Program
Platform(s): TS 2068
Tags: Astronomy

Planet Finder is an astronomy program that calculates and displays the position of any of the nine planets, the Sun, or the Moon among the zodiacal constellations for a user-specified date and geographic longitude. The program computes heliocentric orbital elements stored as packed numeric strings in a 9×9 array, parsing seven-character fixed-width fields with VAL to reconstruct floating-point orbital parameters for each body. Right ascension and declination are derived through trigonometric conversions using the law of cosines applied to the ecliptic plane, with the results displayed numerically before a schematic star chart is rendered in black-on-white inverse Spectrum colors. The Moon’s position uses a separate simplified Keplerian routine at line 3910 that accounts for the equation of center and ecliptic latitude.


Program Analysis

Program Structure

The program is organized into a clear sequence of phases: initialization and title display (lines 10–390), date entry and Julian Day Number computation (lines 400–590), planet selection (lines 600–720), orbital calculation dispatch (lines 730–930), and star chart rendering (lines 1970–4090). Several well-defined subroutines handle distinct tasks:

  • Lines 940–1330: Load orbital element arrays from packed strings and populate planet name array P$().
  • Lines 1340–1510: Outer loop computing mean anomaly, true anomaly, heliocentric distance, and ecliptic latitude for all nine planets.
  • Lines 1520–1560: Parser subroutine extracting 7-character numeric fields from M$ into row U of array P(,).
  • Lines 1570–1680: Per-planet orbital position computation (mean anomaly → eccentric correction → ecliptic longitude and distance).
  • Lines 1690–1920: Geocentric right ascension and declination computation using spherical trigonometry.
  • Lines 3910–4080: Standalone Moon position routine using a simplified lunar theory.
  • Lines 2170–3900: Star chart renderer with one branch per zodiacal constellation (lines 2320–3750) plus planet symbol overlay.

Orbital Data Storage and Parsing

Nine orbital elements per planet are packed into fixed-width 7-character decimal fields concatenated into the string M$ (63 characters per planet, matching the DIM at line 60). The subroutine at line 1520 uses VAL (M$(1+((K-1)*7) TO (K*7))) to slice and convert each field, storing results in the 9×9 array P(,). This is a compact way to embed a lookup table in BASIC string data without DATA/READ statements, at the cost of readability. The elements stored in each row appear to be, in order: mean daily motion, epoch mean longitude, equation-of-center amplitude, longitude of perihelion, semi-major axis (or mean distance), some reference distance, argument of latitude, and two additional angular parameters.

Julian Day Number Computation

Lines 520–590 compute a modified Julian Day Number DG and then subtract an epoch offset at line 590 (NI = DG - 715875) to yield days since the program’s reference epoch. The formula handles the Gregorian calendar correction differently for months before and from March onward (the two-branch structure at lines 540–580), which is a standard algorithmic approach to converting calendar dates to a continuous day count.

Geocentric Position Computation

The subroutine at lines 1690–1920 converts heliocentric ecliptic coordinates to geocentric right ascension and declination. It uses the law of cosines in the form at line 1720–1730 to compute the Earth–planet distance Q, then applies ACS (arc cosine) at line 1750 to find the elongation angle X. Right ascension R and declination V are computed by branching on the sign of Z (the difference in heliocentric longitudes), handling the cases where the planet leads or trails the Sun in the sky. The Sun’s own RA and declination are set directly at lines 1870–1910 using the ecliptic obliquity constant 23.44194°.

Moon Computation

The Moon routine (lines 3910–4080) uses a simplified two-term lunar theory. It computes the mean longitude LMD from a synodic period of 27.32158 days, applies a single equation-of-center correction using 6.2886° amplitude at line 3960, and derives ecliptic latitude from a 5.1454° inclination term. The result is stored directly into R(10), L(10), and V(10), bypassing the general planet subroutine.

Star Chart Rendering

The chart is drawn with BORDER 0: PAPER 0: INK 7 giving white-on-black stars. A dotted ecliptic line is drawn across row 10 at line 2190. The constellation branch is selected via CH (computed as (CA+2)/2 from the 2-hour RA sector), dispatching to one of twelve hard-coded star pattern blocks (lines 2320–3750). Each block uses PRINT AT to place period and asterisk characters representing stars at approximate on-screen positions.

The planet symbol is placed at screen row CF = 10 - FD*L(PS) (declination offset from the ecliptic line) and column PL = 31 - INT(1.1*RA), where the 1.1 factor compresses 30 RA degrees into ~27 character columns. The symbol string Q$ = "+VOMJSUNP)" encodes one character per body (Mercury=+, Venus=V, Sun=O, Mars=M, etc.; Moon=)).

Notable Techniques and Idioms

  • VAL "200" in PAUSE VAL "200" at line 270 is a memory-saving idiom storing the number as a short string rather than a floating-point literal.
  • The use of (STR$ (R(PS)))( TO 5) at line 810 is a compact way to truncate a numeric display to 5 characters without a formatting subroutine.
  • Lines 1580–1600 and 1630–1650 use repeated conditional correction loops to normalize angles into [0, P2], a common pattern when BASIC lacks a MOD operator for floats.
  • The longitude input LO at line 260 feeds into DL = DY + 24/LO at line 520, adding a fractional day correction for the observer’s longitude — though division by longitude in degrees rather than conversion to hours is unconventional and may introduce error for longitudes far from 24°.

Bugs and Anomalies

LineIssue
300Typo: “DECLINAION” (missing T) in the screen message.
170Typo: “ASTRONOMY PROGAM” (missing R).
520Longitude correction formula 24/LO is dimensionally inconsistent — dividing 24 (hours) by longitude in degrees does not yield a meaningful day fraction for all values of LO.
1430, 1500The idiom IF I=3 THEN NEXT I skips the Sun (index 3) in the geocentric conversion loop, since the Sun’s position is computed directly. However, line 1510 repeats this skip and immediately RETURNs, making the second FOR loop (lines 1490–1510) functionally a no-op.
3200PRINT AT PI,11 uses the constant PI (≈3.14159) as a row number; BASIC will truncate this to row 3, which appears to be the intended row for Virgo’s top star but is an unusual use of the constant.
3790IF N=11 THEN GO TO 3900 inside a loop running 1 TO 10 can never be true; the loop exits normally after N=10, making this a dead branch.

Constants

VariableValueMeaning
P22π ≈ 6.28318Full circle in radians
FD57.29578Degrees per radian (180/π)
FR0.01745328Radians per degree (π/180)
715875Epoch offsetReference Julian Day for orbital elements

Content

Appears On

Pilot a flight from London, lay pipes against an AI opponent, find planets in the night sky, or teach a computer to guess animals — ISTUG Library 7 mixes strategy and science with some of the most inventive programs in the series.

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   10 REM PLNTF 4/16/83
   20 BORDER 7: PAPER 7: INK 0: CLS 
   30 CLEAR 
   40 DIM A$(10): DIM U(9)
   50 DIM P(9,9): DIM N$(22)
   60 DIM M$(63): DIM P$(10,7)
   70 DIM A(9): DIM D(9)
   80 DIM L(10): DIM Q(9)
   90 DIM R(10): DIM V(10)
  100 DIM K(9)
  110 LET P2=2*PI
  120 LET FD=57.29578
  130 LET FR=.01745328
  140 PRINT '''"      -----------------"
  150 PRINT "      I PLANET FINDER I"
  160 PRINT "      -----------------"
  170 PRINT "      ASTRONOMY PROGAM"
  180 PRINT '"   BY ERIC BURGESS F.R.A.S."
  190 PRINT '"    ALL RIGHTS RESERVED BY"
  200 PRINT "   S AND T SOFTWARE SERVICE"
  210 PRINT ''"     THIS PROGRAM PLACES"
  220 PRINT "    A PLANET, OR THE SUN,"
  230 PRINT "    OR THE MOON AMONG THE"
  240 PRINT "   ZODIACAL CONSTELLATIONS"
  250 PRINT "     FOR ANY DATE."
  260 INPUT "TYPE LONGITUDE ";LO
  270 PAUSE VAL "200"
  280 CLS : PRINT ''"BECAUSE OF LIMITATIONS OF"
  290 PRINT "SCREEN RESOLUTION, RIGHT"
  300 PRINT "ASCENSION AND DECLINAION OF"
  310 PRINT "THE CHOSEN PLANET, SUN,"
  320 PRINT "OR MOON ARE GIVEN BEFORE"
  330 PRINT "ZODIACAL STAR CHART IS"
  340 PRINT "DISPLAYED ON MONITOR SCREEN."
  350 PRINT '"HORIZONTAL DOTTED LINE"
  360 PRINT "ACROSS MIDDLE OF EACH STAR"
  370 PRINT "CHART IS ECLIPTIC."
  380 PRINT '''"NOW LOADING ARRAYS"
  390 GO SUB 940
  400 BORDER 7: PAPER 7: INK 0: CLS 
  410 PRINT '"ENTER DATE"
  420 PRINT '"      YEAR.... ";
  430 INPUT Y: PRINT Y
  440 PRINT '"      MONTH... ";
  450 INPUT M: PRINT M
  460 IF M<1 OR M>12 THEN GO TO 440
  470 PRINT '"      DAY..... ";
  480 INPUT DY: PRINT DY
  490 IF DY<1 OR DY>31 THEN GO TO 470
  500 IF M=2 AND DY>29 THEN GO TO 470
  510 PRINT 
  520 LET DL=DY+24/LO
  530 LET DG=365*Y+DL+((M-1)*31)
  540 IF M>=3 THEN GO TO 570
  550 LET DG=DG+INT ((Y-1)/4)-INT ((.75)*INT ((Y-1)/100+1))
  560 GO TO 590
  570 LET DG=DG-INT (M*.4+2.3)+INT (Y/4)
  580 LET DG=DG-INT ((.75)*INT ((Y/100)+1))
  590 LET NI=DG-715875
  600 BORDER 7: PAPER 7: INK 0: CLS : PRINT "SELECT BY NUMBER.."
  610 PRINT '"MERCURY(+)..1"
  620 PRINT "VENUS(V)....2"
  630 PRINT "            3   SUN(O)"
  640 PRINT "MARS(M).....4"
  650 PRINT "JUPITER(J)..5"
  660 PRINT "SATURN(S)...6"
  670 PRINT "URANUS(U)...7"
  680 PRINT "NEPTUNE(N)..8"
  690 PRINT "PLUTO(P)....9"
  700 PRINT "MOON       10())"
  710 INPUT PS
  720 CLS 
  730 GO SUB 3910
  740 GO SUB 1340
  750 PRINT 
  760 PRINT P$(PS);" ON..";Y;" ";M;" ";DY
  770 PRINT "-:-:-:-:-:-:-:-:-:-"
  780 PRINT "          R.A. DEC."
  790 PRINT "          HRS  DEG."
  800 PRINT "-:-:-:-:-:-:-:-:-:-"
  810 PRINT P$(PS);TAB 9;(STR$ (R(PS)))( TO 5);
  820 PRINT TAB 15;(STR$ (V(PS)))( TO 5)
  830 PRINT "-:-:-:-:-:-:-:-:-:-"
  840 INPUT "WANT COPY y/n? ";C$
  850 IF C$="n" THEN GO TO 870
  860 COPY 
  870 LET RA=R(PS)
  880 CLS 
  890 GO SUB 1970
  900 LET Q$="+VOMJSUNP)"
  910 GO SUB 2170
  920 PRINT ''"ANOTHER DATE y/n? "
  930 GO TO 1930
  940 LET U=1
  950 LET N$=".0714223.84840.3883011"
  960 LET M$=N$+".34041.387100.0797402.73514.122173.836013"
  970 GO SUB 1520
  980 LET N$=".0279623.02812.0131952"
  990 LET M$=N$+".28638.723300.0050603.85017.0593411.33168"
 1000 GO SUB 1520
 1010 LET N$=".0172021.74044.0320441"
 1020 LET M$=N$+".785471.00000.0170003.3392600000000000000"
 1030 GO SUB 1520
 1040 LET N$=".0091464.51234.1753015"
 1050 LET M$=N$+".852091.52370.1417041.04656.031420.858702"
 1060 GO SUB 1520
 1070 LET N$=".0014504.53364.090478"
 1080 LET M$=N$+".239110.20280.2493741.76188.0197201.74533"
 1090 GO SUB 1520
 1100 LET N$=".0005844.89884.1055581"
 1110 LET M$=N$+".610949.53850.5341563.12570.0436331.97746"
 1120 GO SUB 1520
 1130 LET N$=".0002052.46615.0885932"
 1140 LET M$=N$+".9670619.1820.9015544.49084.0139601.28805"
 1150 GO SUB 1520
 1160 LET N$=".0001043.78556.016965."
 1170 LET M$=N$+"77318130.0600.2705402.33498.0314162.29162"
 1180 GO SUB 1520
 1190 LET N$=".0000693.16948.4712393"
 1200 LET M$=N$+".9130339.44009.860005.23114.3001971.91812"
 1210 GO SUB 1520
 1220 LET M$=""
 1230 LET P$(1)="MERCURY"
 1240 LET P$(2)="VENUS"
 1250 LET P$(3)="SUN"
 1260 LET P$(4)="MARS"
 1270 LET P$(5)="JUPITER"
 1280 LET P$(6)="SATURN"
 1290 LET P$(7)="URANUS"
 1300 LET P$(8)="NEPTUNE"
 1310 LET P$(9)="PLUTO"
 1320 LET P$(10)="MOON"
 1330 RETURN 
 1340 LET I=1
 1350 FOR J=1 TO 9
 1360 GO SUB 1570
 1370 LET A(I)=A
 1380 LET D(I)=D
 1390 LET L(I)=L
 1400 LET I=I+1
 1410 NEXT J
 1420 FOR I=1 TO 9
 1430 IF I=3 THEN NEXT I
 1440 GO SUB 1690
 1450 LET Q(I)=Q
 1460 LET R(I)=R
 1470 LET V(I)=V
 1480 NEXT I
 1490 FOR I=1 TO 9
 1500 IF I=3 THEN NEXT I
 1510 RETURN 
 1520 FOR K=1 TO 9
 1530 LET P(U,K)=VAL (M$(1+((K-1)*7) TO (K*7)))
 1540 NEXT K
 1550 LET U=U+1
 1560 RETURN 
 1570 LET A=NI*P(J,1)+P(J,2)
 1580 IF A>P2 THEN LET A=((A/P2)-INT (A/P2))*P2
 1590 IF A<0 THEN LET A=A+P2
 1600 IF A<0 THEN GO TO 1590
 1610 LET C=P(J,3)*SIN (A-P(J,4))
 1620 LET A=A+C
 1630 IF A>P2 THEN LET A=A-P2
 1640 IF A<0 THEN LET A=A+P2
 1650 IF A<0 THEN GO TO 1640
 1660 LET D=P(J,5)+P(J,6)*SIN (A-P(J,7))
 1670 LET L=P(J,8)*SIN (A-P(J,9))
 1680 RETURN 
 1690 LET Z=A(3)-A(I)
 1700 IF ABS (Z)>PI AND Z<0 THEN LET Z=Z+P2
 1710 IF ABS (Z)>PI AND Z>0 THEN LET Z=Z-P2
 1720 LET Q=D(I)^2+D(3)^2-2*D(I)*D(3)*COS (Z)
 1730 LET Q=SQR (Q)
 1740 LET P=(D(I)+D(3)+Q)/2
 1750 LET X=2*ACS (SQR (((P*(P-D(I)))/(D(3)*Q))))
 1760 IF Z<0 THEN LET R=57.29578*(A(3)+3.14159-X)/15
 1770 IF Z>0 THEN LET R=57.29578*(A(3)+3.14159+X)/15
 1780 IF R>24 THEN LET R=R-24
 1790 IF R>24 THEN GO TO 1780
 1800 IF R<-24 THEN LET R=R+24
 1810 IF R<-24 THEN GO TO 1800
 1820 IF R<0 THEN LET R=R+24
 1830 IF R<0 THEN GO TO 1820
 1840 IF Z<0 THEN LET V=SIN (A(3)+PI-X)*23.44194+FD*L(I)
 1850 IF Z>0 THEN LET V=SIN (A(3)+PI+X)*23.44194+FD*L(I)
 1860 LET X=57.29578*X
 1870 LET R(3)=(FD*A(3)-180)/15
 1880 IF R(3)<0 THEN LET R(3)=R(3)+24
 1890 IF R(3)>24 THEN LET R(3)=R(3)-24
 1900 LET V(3)=(SIN (FR*(A(3)-180)))*23.44194
 1910 LET L(3)=0
 1920 RETURN 
 1930 LET A$=""
 1940 INPUT A$
 1950 IF A$="Y" OR A$="y" THEN GO TO 400
 1960 CLS 
 1970 IF RA>=22 AND RA<24 THEN LET CA=22
 1980 IF RA>=20 AND RA<22 THEN LET CA=20
 1990 IF RA>=18 AND RA<20 THEN LET CA=18
 2000 IF RA>=16 AND RA<18 THEN LET CA=16
 2010 IF RA>=14 AND RA<16 THEN LET CA=14
 2020 IF RA>=12 AND RA<14 THEN LET CA=12
 2030 IF RA>=10 AND RA<12 THEN LET CA=10
 2040 IF RA>=8 AND RA<10 THEN LET CA=8
 2050 IF RA>=6 AND RA<8 THEN LET CA=6
 2060 IF RA>=4 AND RA<6 THEN LET CA=4
 2070 IF RA>=2 AND RA<4 THEN LET CA=2
 2080 IF RA>=0 AND RA<2 THEN LET CA=0
 2090 LET RA=RA-CA
 2100 LET CH=(CA+2)/2
 2110 LET RA=RA*15
 2120 IF (RA-INT (RA))>.49 THEN LET RA=1+INT (RA)
 2130 LET PL=INT (1.1*RA)
 2140 LET CF=10-FD*(L(PS))
 2150 LET PL=31-PL
 2160 RETURN 
 2170 BORDER 0: PAPER 0: INK 7: CLS 
 2180 FOR J=0 TO 31 STEP 2
 2190 PRINT AT 10,J;"-": NEXT J
 2200 IF CH=1 THEN GO TO 2320
 2210 IF CH=2 THEN GO TO 2570
 2220 IF CH=3 THEN GO TO 2720
 2230 IF CH=4 THEN GO TO 2830
 2240 IF CH=5 THEN GO TO 2960
 2250 IF CH=6 THEN GO TO 3080
 2260 IF CH=7 THEN GO TO 3180
 2270 IF CH=8 THEN GO TO 3260
 2280 IF CH=9 THEN GO TO 3320
 2290 IF CH=10 THEN GO TO 3440
 2300 IF CH=11 THEN GO TO 3550
 2310 IF CH=12 THEN GO TO 3660
 2320 LET C$="PISCES"
 2330 GO SUB 2350
 2340 GO TO 2480
 2350 LET W$="         "
 2360 IF FD*(L(PS))<-10 THEN GO TO 2390
 2370 IF FD*(L(PS))>10 THEN GO TO 2410
 2380 GO TO 2420
 2390 LET W$="OFF CHART BOTTOM"
 2400 GO TO 2420
 2410 LET W$="OFF CHART TOP"
 2420 PRINT AT 0,0;P$(PS);":IN ";C$;" ";W$
 2430 PRINT AT 1,0;"ON ";Y;" ";M;" ";DY
 2440 IF W$( TO 3)="OFF" THEN GO TO 2460
 2450 PRINT AT 2,0;"AS DISPLAYED ON CHART BELOW"
 2460 LET W$="        "
 2470 RETURN 
 2480 PRINT AT 5,7;".";
 2490 PRINT TAB 28;"*"
 2500 PRINT AT 8,16;"."
 2510 PRINT AT 9,15;"."
 2520 PRINT AT 11,4;"."
 2530 PRINT AT 13,6;"."
 2540 PRINT AT 17,4;"."
 2550 PRINT AT 18,28;"."
 2560 GO TO 3760
 2570 LET C$="ARIES"
 2580 GO SUB 2350
 2590 PRINT AT 3,24;"X"
 2600 PRINT TAB 28;"*"
 2610 PRINT TAB 28;"*"
 2620 PRINT AT 8,3;".::";
 2630 PRINT TAB 11;"."
 2640 PRINT AT 13,28;"."
 2650 PRINT AT 14,22;"."
 2660 PRINT AT 17,25;"."
 2670 PRINT AT 16,4;"*";
 2680 PRINT TAB 12;".."
 2690 PRINT AT 19,18;"*";
 2700 PRINT TAB 24;"*"
 2710 GO TO 3760
 2720 LET C$="TAURUS"
 2730 GO SUB 2350
 2740 PRINT AT 4,8;"*"
 2750 PRINT AT 11,7;"*"
 2760 PRINT AT 11,15;"."
 2770 PRINT AT 11,23;"."
 2780 PRINT AT 12,24;"."
 2790 PRINT AT 14,22;"X: ."
 2800 PRINT AT 19,16;"."
 2810 PRINT AT 20,8;".","."
 2820 GO TO 3760
 2830 LET C$="GEMINI"
 2840 GO SUB 2350
 2850 PRINT AT 4,5;"*"
 2860 PRINT AT 5,7;"."
 2870 PRINT AT 6,5;"."
 2880 PRINT AT 7,17;"*"
 2890 PRINT AT 9,12;"*"
 2900 PRINT AT 11,15;".";TAB 24;"* *"
 2910 PRINT AT 12,24;"."
 2920 PRINT AT 14,20;"*"
 2930 PRINT AT 17,17;"."
 2940 PRINT AT 20,15;"*"
 2950 GO TO 3760
 2960 LET C$="CANCER"
 2970 GO SUB 2350
 2980 PRINT AT 7,20;"."
 2990 PRINT AT 8,20;"."
 3000 PRINT AT 10,17;"."
 3010 PRINT AT 12,5;"*"
 3020 PRINT AT 13,15;"."
 3030 PRINT AT 16,14;"* *"
 3040 PRINT AT 17,20;".  *"
 3050 PRINT AT 18,10;"."," ."
 3060 PRINT AT 19,15;"."
 3070 GO TO 3760
 3080 LET C$="LEO"
 3090 GO SUB 2350
 3100 PRINT AT 3,15;"*";TAB 28;"*"
 3110 PRINT AT 5,2;".";TAB 29;"*"
 3120 PRINT AT 6,6;"."
 3130 PRINT AT 8,11;".   ."
 3140 PRINT AT 9,2;"*";TAB 22;".     X"
 3150 PRINT AT 12,6;"."
 3160 PRINT AT 16,10;"."
 3170 GO TO 3760
 3180 LET C$="VIRGO"
 3190 GO SUB 2350
 3200 PRINT AT PI,11;"*";TAB 20;"*"
 3210 PRINT AT 7,21;"*"
 3220 PRINT AT 9,14;".";TAB 26;"*"
 3230 PRINT AT 12,11;"X"
 3240 PRINT AT 19,19;"*"
 3250 GO TO 3760
 3260 LET C$="LIBRA"
 3270 GO SUB 2350
 3280 PRINT AT 4,15;"*"
 3290 PRINT AT 9,17;"*"
 3300 PRINT AT 17,13;"."
 3310 GO TO 3760
 3320 LET C$="SCORPIO"
 3330 GO SUB 2350
 3340 PRINT AT 3,7;".   ."
 3350 PRINT AT 5,8;"*     *"
 3360 PRINT AT 8,28;"*"
 3370 PRINT AT 11,29;"*"
 3380 PRINT TAB 23;"*"
 3390 PRINT TAB 21;"X"
 3400 PRINT TAB 29;"."
 3410 PRINT TAB 20;"*"
 3420 PRINT AT 19,16;"*"
 3430 GO TO 3760
 3440 LET C$="SAGITTARIUS"
 3450 GO SUB 2350
 3460 PRINT AT 8,23;"."
 3470 PRINT TAB 14;". ."
 3480 PRINT AT 12,24;"*"
 3490 PRINT TAB 17;"*"
 3500 PRINT TAB 19;"."
 3510 PRINT TAB 19;"*"
 3520 PRINT TAB 15;"*"
 3530 PRINT AT 20,24;"*"
 3540 GO TO 3760
 3550 LET C$="CAPRICORNUS"
 3560 GO SUB 2350
 3570 PRINT AT 3,5;"*"
 3580 PRINT AT 4,15;".       *"
 3590 PRINT AT 6,23;"*"
 3600 PRINT AT 11,11;".   *"
 3610 PRINT AT 12,5;"* *"
 3620 PRINT AT 15,10;".."
 3630 PRINT TAB 20;"."
 3640 PRINT AT 17,15;".   ."
 3650 GO TO 3760
 3660 LET C$="AQUARIUS"
 3670 GO SUB 2350
 3680 PRINT AT 3,6;".    .";TAB 25;"*"
 3690 PRINT AT 4,4;".    .","   *  *"
 3700 PRINT AT 11,17;"."
 3710 PRINT AT 14,14;".."
 3720 PRINT TAB 20;"."
 3730 PRINT AT 17,20;"*"
 3740 PRINT AT 18,1;"*"
 3750 GO TO 3760
 3760 IF CF<0 OR CF>20 THEN GO TO 3780
 3770 PRINT AT CF,PL;Q$(PS)
 3780 FOR N=1 TO 10
 3790 IF N=11 THEN GO TO 3900
 3800 IF N=PS THEN GO TO 3890
 3810 LET R2=R(N)-(CH*2-2)
 3820 IF R2<0 OR R2>1.9999 THEN GO TO 3890
 3830 LET PL=R2*15
 3840 IF (PL-INT (PL))>.49 THEN LET PL=1+INT (PL)
 3850 LET PL=31-INT (1.1*PL)
 3860 LET CF=10-FD*(L(N))
 3870 IF CF<0 OR CF>20 THEN GO TO 3890
 3880 PRINT AT CF,PL;Q$(N)
 3890 NEXT N
 3900 GO TO 4090
 3910 LET NM=NI-.4
 3920 LET PG=.111404*NM+255.7433
 3930 LET LMD=311.1687+360*NM/27.32158
 3940 LET PG=LMD-PG
 3950 LET PG=(PG/360-INT (PG/360))*360
 3960 LET DR=6.2886*SIN (FR*PG)
 3970 LET LMD=LMD+DR
 3980 LET LMD=(LMD/360-INT (LMD/360))*360
 3990 LET R(10)=LMD/15
 4000 LET AL=178.699-NM*.052954
 4010 LET AL=(AL/360-INT (AL/360))*360
 4020 LET AL=LMD-AL
 4030 IF AL<0 THEN LET AL=AL+360
 4040 IF AL>360 THEN LET AL=AL-360
 4050 LET HE=5.1454*(SIN (AL*FR))
 4060 LET L(10)=HE*FR
 4070 LET V(10)=HE+23.1444*SIN (LMD*FR)
 4080 RETURN 
 4090 INPUT "WANT COPY y/n? ";G$
 4100 IF G$="Y" OR G$="y" THEN COPY 
 4110 CLS 
 4120 INPUT "ANOTHER PLANET y/n? ";H$
 4130 IF H$="y" OR H$="Y" THEN GO TO 600
 4140 INPUT "ANOTHER DATE y/n? ";I$
 4150 IF I$="y" OR I$="Y" THEN GO TO 400
 4160 CLS 
 9998 SAVE "PLNTF"

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top