AMS-81

Products: AMS-81
Date: 1983
Type: Program
Platform(s): TS 1000
Tags: Ham Radio

This program is a satellite tracking and scheduling utility for amateur radio operators. It provides four main functions: pass scheduling, real-time tracking, Keplerian element file editing, and ground station (QTH) configuration. The orbital mechanics engine uses Keplerian elements (inclination, RAAN, eccentricity, argument of perigee, mean motion, and mean anomaly) to propagate satellite positions via iterative solution of Kepler’s equation. The program employs a rich set of symbolic variable aliases (e.g., U, G, TEN, HEX, INF) to compress numeric constants, and uses SLOW/FAST mode switching to manage computation speed versus display responsiveness.


Content

Appears On

Related Products

A Timex/Sinclair computer port of W3IWI’s BASIC TRACK program for earth satellite tracking.

Related Articles

Related Content

Image Gallery

AMS-81

Source Code

  10 LET GO=U
  20 LET FS=G
  30 CLS 
  40 SLOW 
  50 PRINT H$
  60 PRINT "    VERSION N5BF 1.4 01APR83"
  70 PRINT AT U8,U7;"%<%<%<% %A%C%T%I%V%I%T%I%E%S% %>%>%>";AT TEN,U7;;"1 = SCHEDULE";TAB U7;"2 = TRACK";TAB U7;"3 = KEPLERIAN FILE";TAB U7;"4 = QTH INFO";AT HEX,TEN;"\@@SELECT 1-4\@@"
  80 IF SV=1 THEN PRINT AT U14,U7;"5 = NEED TO RESAVE";AT HEX,U20;"5"
  90 LET A$=INKEY$
 100 IF A$="" THEN GOTO 90
 110 PRINT AT HEX,U22;A$
 120 IF A$<>"1" THEN GOTO 970
 130 GOSUB 4890
 140 IF GO=G THEN GOTO G
 150 GOSUB HD1
 160 GOSUB INK
 170 GOSUB CO3
 180 LET LOS=U
 190 GOSUB SCH
 200 IF GO=G THEN GOTO G
 210 LET A(U)=D
 220 LET A(U2)=R5
 230 LET LOS=-U
 240 LET QS=U
 250 GOSUB SCH
 260 IF GO=G THEN GOTO G
 270 LET A(U3)=D
 280 LET A(U4)=R5
 290 LET PHI=G
 300 IF E(I)<U01 AND N>TEN THEN GOTO 430
 310 LET D=D+(INT Q-Q+HA)/N
 320 LET T=G
 330 GOSUB CO1
 340 IF A(U)>D OR A(U3)<D OR E(I)<U01 THEN GOTO 370
 350 LET E9=R0*(COS (E9*P0)*ASN (R5/R)+ACS (R0/R))
 360 GOTO LP1
 370 LET D=A(U)
 380 IF A(U4)>A(U2) THEN LET D=A(U3)
 390 LET T=U
 400 GOSUB CO1
 410 LET E9=U2*R0*ACS (R0/R)
 420 GOTO LP1
 430 LET D=(A(U)+A(U3))/U2
 440 GOSUB CO1
 450 LET T=U2
 460 GOTO LP1
 470 CLS 
 480 GOSUB DAO
 490 PRINT AT G,G;H$;"ACCESS SKED FROM: ";D$;"  >>";C$;" VIA ";S$(I);"<<","% %D%A%Y% % % %A%O%S% % %L%O%S% % % %M%A%X% %D%X%/%E%L% % % %A%Z"
 500 LET LP=U4
 510 RETURN 
 520 IF GO=G THEN GOTO G
 530 LET A(U5)=D
 540 LET D=A(U)
 550 GOSUB DAO
 560 LET D$=D$( TO U5)+D$(U8 TO U12)+N$
 570 LET J=U12
 580 LET D=A(U3)
 590 GOSUB TIM
 600 LET D$(HEX TO 17)=" "
 610 LET D=A(U5)
 620 LET J=U18
 630 GOSUB TIM
 640 LET D$=D$( TO U21)+" "
 650 IF T=U2 THEN GOTO 720
 660 LET D$=D$+STR$ INT E9+"  "
 670 IF LEN D$>=29 THEN GOTO 700
 680 LET D$=D$( TO U22)+D$(U22 TO )
 690 GOTO 670
 700 IF T=U THEN LET D$(U28)="*"
 710 GOTO 740
 720 GOSUB LZ2
 730 LET D$=D$( TO 24)+" %E%L  "
 740 GOSUB LZ3
 750 PRINT AT LP,G;D$( TO U32)
 760 LET LP=LP+U
 770 IF A(U3)-A(U)<U THEN GOTO 840
 780 LET D=A(U3)
 790 LET D$=N$+"  "
 800 LET J=U9
 810 GOSUB DAO
 820 PRINT AT LP,U4;"(LOS DATE = ";D$( TO U7);")"
 830 LET LP=LP+U1
 840 IF LP<U20 THEN GOTO 930
 850 LET GO=U9
 860 PRINT "\## RETURN = 0, CONT = 1 \##"
 870 GOSUB KSC
 880 IF F$="Z" AND PRIN=U THEN COPY 
 890 IF GO=U9 THEN GOTO 870
 900 GOSUB CLB
 910 IF GO=G THEN GOTO G
 920 GOSUB HD1
 930 LET D=A(U3)
 940 GOSUB INK
 950 LET QS=-U
 960 GOTO 180
 970 IF A$<>"2" THEN GOTO 2300
 980 LET CT=1.2*CA
 990 LET CB=.8*CA
\n1000 GOSUB 4890
\n1010 LET LOS=U
\n1020 IF GO=G THEN GOTO G
\n1030 GOSUB HD2
\n1040 GOSUB INK
\n1050 GOSUB CO1
\n1060 IF GO=G THEN GOTO G
\n1070 IF E9>G THEN GOTO 1140
\n1080 LET QS=-U
\n1090 LET LOS=U
\n1100 GOSUB SCH
\n1110 LET PHI=G
\n1120 GOSUB CO1
\n1130 IF GO=G THEN GOTO G
\n1140 LET FS=G
\n1150 LET F8=G
\n1160 LET T6=D
\n1170 LET R6=R5
\n1180 LET PHI=CA*R*AF
\n1190 GOSUB LP2
\n1200 IF GO=G THEN GOTO G
\n1210 IF LP=U4 THEN GOSUB LP2
\n1220 IF LOS=-U THEN GOTO 1080
\n1230 GOSUB INK
\n1240 LET D2=D
\n1250 LET E8=E9
\n1260 LET A8=A9
\n1270 LET PH2=PHI
\n1280 FOR L=U TO U5
\n1290 GOSUB CO1
\n1300 IF GO=G THEN GOTO G
\n1310 GOSUB DD
\n1320 IF DAZ>CT OR DEL>CT THEN GOTO 1340
\n1330 IF (DAZ>CB OR DEL>CB) AND INT Q=INT Q1 THEN GOTO 1540
\n1340 LET D1=DAZ
\n1350 IF DEL>DAZ THEN LET D1=DEL
\n1360 LET PHI=CA*PHI/D1
\n1370 LET D=D2
\n1380 IF INT Q=INT Q1 AND PHI>1E-5 THEN NEXT L
\n1390 LET PHI=PH2
\n1400 LET ER=G
\n1410 GOSUB CO1
\n1420 IF GO=G THEN GOTO G
\n1430 GOSUB DD
\n1440 IF DAZ>CT OR DEL>CT THEN GOTO 1470
\n1450 IF DAZ>CB OR DEL>CB THEN GOTO 1530
\n1460 IF ER=G THEN GOTO LSC
\n1470 LET ER=U
\n1480 LET D1=DAZ
\n1490 IF DEL>DAZ THEN LET D1=DEL
\n1500 LET D1=SGN (D1-CA)
\n1510 LET PHI=-HA*ABS PHI*D1
\n1520 GOTO LSC
\n1530 LET PHI=PH2
\n1540 IF E9>HA THEN GOTO 1580
\n1550 LET LOS=-U
\n1560 GOSUB SCH
\n1570 IF GO=G THEN GOTO G
\n1580 IF T6<>D THEN LET F8=F(I)*(R6-R5)/(D-T6)/CL
\n1590 LET R6=R5
\n1600 LET T6=D
\n1610 GOTO 1190
\n1620 LET DAZ=ABS (A9-A8)
\n1630 IF DAZ>180 THEN LET DAZ=360-DAZ
\n1640 LET DAZ=ABS (DAZ*(COS (E9*P0)))
\n1650 LET DEL=ABS (E9-E8)
\n1660 RETURN 
\n1670 IF INT D=D0 THEN GOTO 1760
\n1680 LET D$=N$
\n1690 LET J=U9
\n1700 GOSUB DAO
\n1710 IF GO=U2 OR GO=U7 THEN GOSUB SS
\n1720 PRINT AT LP,G;"       ----";D$( TO U7);"----          "
\n1730 LET D0=INT D
\n1740 LET LP=LP+U
\n1750 IF LP>U20 AND GO<>U2 AND GO<>U7 THEN GOTO HD2
\n1760 LET D$="       "
\n1770 LET J=U
\n1780 GOSUB TIM
\n1790 IF GO=G THEN RETURN 
\n1800 GOSUB LZ3
\n1810 GOSUB LZ2
\n1820 LET D$=D$( TO U4)+":"+D$(U5 TO )+STR$ INT R5+" "
\n1830 IF LEN D$>=U21 THEN GOTO 1860
\n1840 LET D$=D$( TO U15)+D$(U15 TO )
\n1850 GOTO 1830
\n1860 IF E(I)>=U01 THEN LET D$=D$+STR$ INT (M/P2*256)+" "
\n1870 IF E(I)<U01 THEN LET D$=D$+"--- "
\n1880 IF LEN D$>=U25 THEN GOTO 1910
\n1890 LET D$=D$( TO U21)+D$(U21 TO )
\n1900 GOTO 1880
\n1910 LET A$=STR$ (INT (F8/HUN+HA)/TEN)
\n1920 IF INT VAL A$=VAL A$ THEN LET A$=A$+".0"
\n1930 IF F8=G THEN LET A$=STR$ F(I)
\n1940 LET D$=D$+A$+" "
\n1950 IF LEN D$>=U32 THEN GOTO 1980
\n1960 LET D$=D$( TO U25)+D$(U25 TO )
\n1970 GOTO 1950
\n1980 IF GO=U2 OR GO=U7 THEN GOSUB SS
\n1990 IF GO=G THEN RETURN 
\n2000 PRINT AT LP,G;D$( TO U32)
\n2010 LET LP=LP+U
\n2020 IF LP<U21 OR GO=U2 OR GO=U7 THEN RETURN 
\n2030 IF GO=U3 THEN GOTO HD2
\n2040 LET GO=U9
\n2050 PRINT J$
\n2060 GOSUB KSC
\n2070 IF GO=U9 THEN GOTO 2060
\n2080 GOSUB CLB
\n2090 IF GO=G OR GO=U2 OR GO=U7 THEN RETURN 
\n2100 CLS 
\n2110 LET D0=INT D
\n2120 GOSUB DAO
\n2130 PRINT AT G,G;H$;"  TRACKING FROM ";D$,"  >>";C$;" VIA ";S$(I);"<<","% % %U%T%C% % % % %A%Z% %E%L% %R%A%N%G%E% %P%H%S% %D%O%P%P%L%E%R"
\n2140 LET LP=U4
\n2150 LET GO=U
\n2160 RETURN 
\n2170 IF GO=U2 AND ST=U9 THEN GOTO 2240
\n2180 PRINT AT U21,G;J$
\n2190 LET GO=U9
\n2200 GOSUB KSC
\n2210 IF GO=U9 THEN GOTO 2200
\n2220 GOSUB CLB
\n2230 IF GO<>U2 AND GO<>U7 AND GO<>G THEN LET GO=U3
\n2240 SCROLL 
\n2250 LET LP=U20
\n2260 PRINT AT U21,U31;
\n2270 RETURN 
\n2280 PRINT AT U21,G;N$;N$;" "
\n2290 RETURN 
\n2300 IF A$<>"3" THEN GOTO 2820
\n2310 GOSUB SAT
\n2320 IF GO=G THEN GOTO G
\n2330 CLS 
\n2340 PRINT H$;AT U2,G;"%N%A%M%E% ";AT U2,U7;S$(I)
\n2350 PRINT AT U18,G;L$;K$
\n2360 INPUT A$
\n2370 IF A$="" THEN GOTO 2410
\n2380 LET SV=U
\n2390 LET S$(I)=A$
\n2400 PRINT AT U2,U7;S$(I);N$
\n2410 PRINT AT U3,G;"%I%D% % % ";AT U3,U7;I$(I)
\n2420 INPUT A$
\n2430 IF A$="" THEN GOTO 2470
\n2440 LET SV=U
\n2450 LET I$(I)=A$
\n2460 PRINT AT U3,U7;I$(I);N$
\n2470 LET D=T(I)
\n2480 GOSUB DAO
\n2485 IF GO=G THEN GOTO G
\n2490 PRINT AT U4,G;"%E%P%O%C%H";AT U4,U7;D$
\n2500 INPUT D$
\n2510 IF D$="" THEN GOTO 2610
\n2520 PRINT AT U4,U7;D$;X$
\n2530 GOSUB DAY
\n2540 IF ER=G THEN GOTO 2570
\n2550 GOSUB 3250
\n2560 GOTO 2500
\n2570 LET T(I)=D
\n2580 LET SV=U
\n2590 GOSUB DAO
\n2600 PRINT AT U4,U7;D$;N$
\n2610 FOR J=U TO U8
\n2620 LET A(J)=VAL E$(J,U5 TO TEN)
\n2630 PRINT AT J+U4,G;E$(J, TO U4);"%   ";A(J);X$
\n2640 INPUT A$
\n2650 IF A$="" THEN GOTO 2690
\n2660 LET A(J)=VAL A$
\n2670 PRINT AT J+U4,U7;A(J);X$
\n2680 LET SV=U
\n2690 NEXT J
\n2700 LET N(U2,I)=A(U7)
\n2710 LET I(I)=A(U)
\n2720 LET O(I)=A(U2)
\n2730 LET E(I)=A(U3)
\n2740 LET W(I)=A(U4)
\n2750 LET M(I)=A(U5)
\n2760 LET N(U,I)=A(U6)
\n2770 LET F(I)=A(U8)
\n2780 IF A$="" THEN GOTO G
\n2790 PRINT AT U18,G;"\##";K$;N$
\n2800 INPUT A$
\n2810 GOTO G
\n2820 IF A$<>"4" THEN GOTO 3130
\n2830 CLS 
\n2840 PRINT H$,,"%C%A%L%L%   ";C$;AT U18,G;L$;K$
\n2850 INPUT A$
\n2860 IF A$="" THEN GOTO 2900
\n2870 LET C$=A$
\n2880 PRINT AT U2,U7;C$;N$
\n2890 LET SV=U
\n2900 FOR J=U9 TO 11
\n2910 LET A(J-U8)=VAL E$(J,U6 TO U9)
\n2920 PRINT AT J-U6,G;E$(J, TO U5);TAB U7;A(J-U8)
\n2930 INPUT A$
\n2940 IF A$="" THEN GOTO 2980
\n2950 LET A(J-U8)=VAL A$
\n2960 PRINT AT J-U6,U7;A(J-U8);N$
\n2970 LET SV=U
\n2980 NEXT J
\n2990 LET L9=A(U)
\n3000 LET W9=A(U2)
\n3010 LET H9=A(U3)
\n3020 LET L8=L9*P0
\n3030 LET S9=SIN L8
\n3040 LET C9=COS L8
\n3050 LET S8=SIN (-W9*P0)
\n3060 LET C8=COS (W9*P0)
\n3070 LET R9=R0*(U-F/U2+F/U2*COS (U2*L8))+H9/THO
\n3080 LET L8=ATN ((U-F)**U2*S9/C9)
\n3090 LET Z9=R9*SIN L8
\n3100 LET X9=R9*COS L8*C8
\n3110 LET Y9=R9*COS L8*S8
\n3120 GOTO 2780
\n3130 IF A$<>"5" OR SV=G THEN GOTO G
\n3140 CLS 
\n3150 PRINT H$,TAB U2;"\@@START RECORDER.....";K$
\n3160 LET A$=INKEY$
\n3170 IF A$="" THEN GOTO 3160
\n3180 IF A$="0" THEN GOTO G
\n3190 PRINT ,,TAB U3;" SAVE BEGINS IN 20 SECONDS"
\n3200 PAUSE THO
\n3210 LET SV=G
\n3220 SAVE "AMS8%1"
\n3230 GOTO G
\n3240 CLS 
\n3250 PRINT AT U6,G;D$;AT U7,G;"EPOCH INPUT ERROR. USE FORMAT:","83 105.46677538",,"   > OR <",,"15APR83 111209"
\n3260 RETURN 
\n3270 IF GO=U9 AND ST=U9 OR FS=G THEN SLOW 
\n3280 LET F$=INKEY$
\n3290 IF F$="" THEN GOTO 3410
\n3300 PRINT AT U21,U31;F$
\n3310 IF F$<>"0" THEN GOTO 3350
\n3320 LET GO=G
\n3330 LET ST=U9
\n3340 RETURN 
\n3350 IF CODE F$<38 AND CODE F$>27 THEN GOTO 3400
\n3360 IF F$="F" THEN LET FS=U
\n3370 IF F$="D" THEN LET FS=G
\n3380 IF F$="T" THEN LET D0=INF
\n3390 GOTO KSE
\n3400 LET ST=VAL F$
\n3410 IF GO<>U9 THEN GOTO KSE
\n3420 LET GO=ST
\n3430 LET ST=U9
\n3440 IF FS=U AND GO<>U9 THEN FAST 
\n3450 RETURN 
\n3460 GOSUB KSC
\n3470 IF GO=G OR K=K9 THEN RETURN 
\n3480 IF N(U,I)=G THEN LET N(U,I)=HUN
\n3490 IF N(U,I)>HUN THEN GOTO 3530
\n3500 LET N0=N(U,I)
\n3510 LET A0=(G0/N0/N0)**(U/U3)
\n3520 GOTO 3550
\n3530 LET A0=N(U,I)
\n3540 LET N0=SQR (G0/N(U,I)**U3)
\n3550 LET N=N0+U2*(D-T(I))*N(U2,I)
\n3560 LET A=(G0/N/N)**(U/U3)
\n3570 IF N<G OR A<R0 THEN GOTO 3930
\n3580 IF E(I)>=0 AND E(I)<1 THEN GOTO 3610
\n3590 PRINT "BAD ECCENTRICITY"
\n3600 GOTO 3940
\n3610 LET E2=U-E(I)**U2
\n3620 LET E1=SQR E2
\n3630 LET Q0=M(I)/360
\n3640 LET AF=U/ABS (U-SQR ABS (COS (I(I)*P0)*COS (L9*P0))/N)/A/N/360
\n3650 LET K2=9.95*(R0/A)**3.5/E2**U2
\n3660 LET S1=SIN (I(I)*P0)
\n3670 LET C1=COS (I(I)*P0)
\n3680 LET O=O(I)-(D-T(I))*K2*C1
\n3690 LET S0=SIN (O*P0)
\n3700 LET C0=COS (O*P0)
\n3710 LET W=W(I)+(D-T(I))*K2*(2.5*C1*C1-HA)
\n3720 LET S2=SIN (W*P0)
\n3730 LET C2=COS (W*P0)
\n3740 LET C(U,U)=C2*C0-S2*S0*C1
\n3750 LET C(U2,U)=C2*S0+S2*C0*C1
\n3760 LET C(U3,U)=S2*S1
\n3770 LET C(U,U2)=-S2*C0-C2*S0*C1
\n3780 LET C(U2,U2)=-S2*S0+C2*C0*C1
\n3790 LET C(U3,U2)=C2*S1
\n3800 LET G2=G(INT (T(I)/DYR)+U3)
\n3810 LET D1=D
\n3820 LET D=INT (T(I)/DYR)+U81
\n3830 LET D$=STR$ D+" 000."
\n3840 GOSUB DAY
\n3850 LET Y0=D
\n3860 LET K9=K
\n3870 LET D=D1
\n3880 LET D1=P2/U4
\n3890 IF L9<G THEN LET D1=D1*U3
\n3900 LET J=I(I)*P0
\n3910 IF J>PI/U2 THEN LET J=PI-J
\n3920 IF ACS (R0*(U+E(I)*COS (D1-W*P0))/A/(U-E(I)**U2))+J>ABS L9*P0 THEN RETURN 
\n3930 PRINT "\##PASSES CANNOT OCCUR ";K$
\n3940 SLOW 
\n3950 LET GO=G
\n3960 IF INKEY$="" THEN GOTO 3960
\n3970 RETURN 
\n3980 LET D2=D
\n3990 LET D=D+PHI
\n4000 LET Q1=Q
\n4010 LET Q=Q0+(D-T(I))*(N0+N(U2,I)*(D-T(I)))
\n4020 LET K=INT Q
\n4030 LET M=(Q-K)*P2
\n4040 RETURN 
\n4050 GOSUB KSC
\n4060 IF GO=G THEN RETURN 
\n4070 LET ER=U
\n4080 IF LEN D$<U7 THEN RETURN 
\n4090 IF CODE D$(U3)>37 THEN GOTO 4220
\n4100 FOR L=U TO LEN D$
\n4110 IF L=U3 OR L=U7 THEN GOTO 4130
\n4120 IF CODE D$(L)>U37 OR CODE D$(L)<U28 THEN RETURN 
\n4130 NEXT L
\n4140 IF D$(U7)<>"." AND D$(U7)<>" " THEN RETURN 
\n4150 LET D=INT (VAL D$(U4 TO U6)+DYR*(VAL D$(U TO U2)-U81))
\n4160 IF D$(U7)="." THEN LET D=D+VAL D$(U7 TO LEN D$)
\n4170 IF LEN D$>=U13 THEN GOTO 4190
\n4180 LET D$=D$+"000000"
\n4190 IF D$(U7)<>"." THEN LET D=D+((VAL D$(U12 TO U13)/U60+VAL D$(TEN TO 11))/U60+VAL D$(U8 TO U9))/U24
\n4200 LET ER=G
\n4210 RETURN 
\n4220 IF LEN D$<U8 THEN RETURN 
\n4230 FOR L=U TO U12
\n4240 IF D$(U3 TO U5)=M$(L,U TO U3) THEN GOTO 4270
\n4250 NEXT L
\n4260 RETURN 
\n4270 LET D$(U3 TO U5)=M$(L,U4 TO U6)
\n4280 FOR L=U TO LEN D$
\n4290 IF L=U8 THEN GOTO 4310
\n4300 IF CODE D$(L)>U37 OR CODE D$(L)<U28 THEN RETURN 
\n4310 NEXT L
\n4320 LET Y3=VAL D$(U6 TO U7)
\n4330 IF Y3<TEN THEN RETURN 
\n4340 LET F9=G
\n4350 IF Y3/U4=INT (Y3/U4) AND VAL D$(U3 TO U5)>58 THEN LET F9=U
\n4360 LET D=INT ((Y3-U81)*DYR)
\n4370 LET D=D+VAL D$(U3 TO U5)+VAL D$(U TO U2)+F9
\n4380 LET D$=D$(U2 TO LEN D$)
\n4390 GOTO 4160
\n4400 LET ER=G
\n4410 LET Y3=U81+(INT D-U01)/DYR
\n4420 LET D1=INT (DYR*(Y3-INT Y3))
\n4430 LET Y3=INT Y3
\n4440 LET F9=G
\n4450 IF Y3/U4=INT (Y3/U4) AND D1>=59 THEN LET F9=U
\n4460 LET D1=D1-F9
\n4470 FOR L=U TO U12
\n4480 IF D1>=VAL M$(L,U4 TO U6) THEN NEXT L
\n4490 LET D$=M$(L-U,U TO U3)
\n4500 IF F9=U AND D1=58 THEN LET D1=59
\n4510 LET D1=D1+U-VAL M$(L-U,U4 TO U6)
\n4520 LET D$=STR$ INT D1+D$+STR$ Y3
\n4530 IF D1<TEN THEN LET D$="0"+D$
\n4540 LET J=U9
\n4550 LET D$=D$+"       "
\n4560 LET D1=(D-INT D+5E-6)*24
\n4570 GOSUB KSC
\n4580 FOR L=J TO J+U4 STEP U2
\n4590 LET D$(L TO L+U)=STR$ INT D1
\n4600 IF D1<TEN THEN LET D$(L TO L+U)="0"+STR$ INT D1
\n4610 LET D1=(D1-INT D1)*U60
\n4620 NEXT L
\n4630 RETURN 
\n4640 CLS 
\n4650 PRINT H$,
\n4660 IF A$="1" THEN PRINT TAB U2;"%<%<%<% %S%C%H%E%D%U%L%I%N%G% % %A%C%T%I%V%I%T%Y% %>%>%>"
\n4670 IF A$="2" THEN PRINT TAB U3;"%<%<%<% %T%R%A%C%K%I%N%G% % %A%C%T%I%V%I%T%Y% %>%>%>"
\n4680 IF A$="3" THEN PRINT TAB U2;"%<%<% %K%E%P%L%E%R%I%A%N% %F%I%L%E% %U%P%D%A%T%E% %>%>%>"
\n4690 PRINT 
\n4700 FOR I=U TO U14
\n4710 PRINT CHR$ (I+U37);" = ";S$(I)
\n4720 LET A$=INKEY$
\n4730 IF A$<>"" THEN GOTO 4780
\n4740 NEXT I
\n4750 PRINT ,,"\##SELECT A-N (RETURN=0)\##";
\n4760 LET A$=INKEY$
\n4770 IF A$="" THEN GOTO 4760
\n4780 PRINT AT U19,U24;A$
\n4790 LET I=CODE A$-U37
\n4800 IF I>U14 OR I<U THEN LET GO=G
\n4810 RETURN 
\n4820 IF E9<U9H THEN LET D$=D$+"0"
\n4830 LET D$=D$+STR$ INT (E9+HA)+" "
\n4840 RETURN 
\n4850 IF A9<99.5 THEN LET D$=D$+"0"
\n4860 IF A9<U9H THEN LET D$=D$+"0"
\n4870 LET D$=D$+STR$ INT (A9+HA)+" "
\n4880 RETURN 
\n4890 LET K9=INF
\n4900 LET PHI=G
\n4910 GOSUB SAT
\n4920 IF GO=G THEN RETURN 
\n4930 PRINT ,,S$(I, TO U9);" EPOCH: ";AT U19,G;"\@@ENTER EPOCH DATE+TIME ";K$
\n4940 INPUT D$
\n4950 LET FS=U
\n4960 PRINT AT U21,17;D$
\n4970 IF D$<>"S" THEN GOTO 5000
\n4980 LET D=D3
\n4990 RETURN 
\n5000 IF D$<>"0" THEN GOTO 5030
\n5010 LET GO=G
\n5020 RETURN 
\n5030 GOSUB DAY
\n5040 IF ER<>G THEN GOTO 5070
\n5050 LET D3=D
\n5060 RETURN 
\n5070 GOSUB 3240
\n5080 SLOW 
\n5090 GOTO 4940
\n5100 LET E=M+E(I)*SIN M+HA*E(I)**U2*SIN (U2*M)
\n5110 LET M5=E-E(I)*SIN E-M
\n5120 LET R3=U-E(I)*COS E
\n5130 IF ABS M5<1E-6 THEN GOTO 5160
\n5140 LET E=E-M5/R3
\n5150 GOTO 5110
\n5160 LET X=A*(COS E-E(I))
\n5170 LET Y=A*E1*SIN E
\n5180 LET R=A*R3
\n5190 LET Z=X*C(U3,U)+Y*C(U3,U2)
\n5200 LET X0=X*C(U,U)+Y*C(U,U2)
\n5210 LET Y=X*C(U2,U)+Y*C(U2,U2)
\n5220 LET G7=(D-Y0)*G1+G2
\n5230 LET G7=(G7-INT G7)*P2
\n5240 LET X=X0*COS G7+Y*SIN G7
\n5250 LET Y=-X0*SIN G7+Y*COS G7
\n5260 RETURN 
\n5270 GOSUB CO4
\n5280 IF GO=G THEN RETURN 
\n5290 LET X8=-X5*C8*S9-Y5*S8*S9+Z5*C9
\n5300 LET Y8=Y5*C8-X5*S8
\n5310 GOSUB KSC
\n5320 IF X8<>G THEN GOTO 5360
\n5330 LET A9=90
\n5340 IF Y8<G THEN LET A9=270
\n5350 RETURN 
\n5360 LET A9=ATN (Y8/X8)/P0
\n5370 IF X8<G THEN LET A9=A9+180
\n5380 IF A9<G THEN LET A9=A9+360
\n5390 RETURN 
\n5400 GOSUB 3980
\n5410 GOSUB KSC
\n5420 IF GO=G THEN RETURN 
\n5430 GOSUB 5100
\n5440 LET X5=X-X9
\n5450 LET Y5=Y-Y9
\n5460 LET Z5=Z-Z9
\n5470 LET QS=X5*X9+Y5*Y9+Z5*Z9
\n5480 GOSUB KSC
\n5490 RETURN 
\n5500 GOSUB CO3
\n5510 IF GO=G THEN RETURN 
\n5520 LET R5=SQR (X5*X5+Y5*Y5+Z5*Z5)
\n5530 LET E9=ASN ((X5*C8*C9+Y5*S8*C9+Z5*S9)/R5)/P0
\n5540 RETURN 
\n5550 LET E8=SGN QS
\n5560 LET PHI=-SGN QS*IN*R*AF*LOS
\n5570 GOSUB INK
\n5580 GOSUB CO3
\n5590 IF GO=G THEN RETURN 
\n5600 IF SGN QS=E8 THEN GOTO 5560
\n5610 LET PHI=-HA*ABS PHI*SGN QS*LOS
\n5620 GOSUB CO4
\n5630 IF GO=G THEN RETURN 
\n5640 IF ABS E9<HA THEN RETURN 
\n5650 GOTO 5610

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

Scroll to Top