A Timex/Sinclair computer port of W3IWI’s BASIC TRACK program for earth satellite tracking.
Related Products
A Timex/Sinclair computer port of W3IWI’s BASIC TRACK program for earth satellite tracking.
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 1000 GOSUB 4890 1010 LET LOS=U 1020 IF GO=G THEN GOTO G 1030 GOSUB HD2 1040 GOSUB INK 1050 GOSUB CO1 1060 IF GO=G THEN GOTO G 1070 IF E9>G THEN GOTO 1140 1080 LET QS=-U 1090 LET LOS=U 1100 GOSUB SCH 1110 LET PHI=G 1120 GOSUB CO1 1130 IF GO=G THEN GOTO G 1140 LET FS=G 1150 LET F8=G 1160 LET T6=D 1170 LET R6=R5 1180 LET PHI=CA*R*AF 1190 GOSUB LP2 1200 IF GO=G THEN GOTO G 1210 IF LP=U4 THEN GOSUB LP2 1220 IF LOS=-U THEN GOTO 1080 1230 GOSUB INK 1240 LET D2=D 1250 LET E8=E9 1260 LET A8=A9 1270 LET PH2=PHI 1280 FOR L=U TO U5 1290 GOSUB CO1 1300 IF GO=G THEN GOTO G 1310 GOSUB DD 1320 IF DAZ>CT OR DEL>CT THEN GOTO 1340 1330 IF (DAZ>CB OR DEL>CB) AND INT Q=INT Q1 THEN GOTO 1540 1340 LET D1=DAZ 1350 IF DEL>DAZ THEN LET D1=DEL 1360 LET PHI=CA*PHI/D1 1370 LET D=D2 1380 IF INT Q=INT Q1 AND PHI>1E-5 THEN NEXT L 1390 LET PHI=PH2 1400 LET ER=G 1410 GOSUB CO1 1420 IF GO=G THEN GOTO G 1430 GOSUB DD 1440 IF DAZ>CT OR DEL>CT THEN GOTO 1470 1450 IF DAZ>CB OR DEL>CB THEN GOTO 1530 1460 IF ER=G THEN GOTO LSC 1470 LET ER=U 1480 LET D1=DAZ 1490 IF DEL>DAZ THEN LET D1=DEL 1500 LET D1=SGN (D1-CA) 1510 LET PHI=-HA*ABS PHI*D1 1520 GOTO LSC 1530 LET PHI=PH2 1540 IF E9>HA THEN GOTO 1580 1550 LET LOS=-U 1560 GOSUB SCH 1570 IF GO=G THEN GOTO G 1580 IF T6<>D THEN LET F8=F(I)*(R6-R5)/(D-T6)/CL 1590 LET R6=R5 1600 LET T6=D 1610 GOTO 1190 1620 LET DAZ=ABS (A9-A8) 1630 IF DAZ>180 THEN LET DAZ=360-DAZ 1640 LET DAZ=ABS (DAZ*(COS (E9*P0))) 1650 LET DEL=ABS (E9-E8) 1660 RETURN 1670 IF INT D=D0 THEN GOTO 1760 1680 LET D$=N$ 1690 LET J=U9 1700 GOSUB DAO 1710 IF GO=U2 OR GO=U7 THEN GOSUB SS 1720 PRINT AT LP,G;" ----";D$( TO U7);"---- " 1730 LET D0=INT D 1740 LET LP=LP+U 1750 IF LP>U20 AND GO<>U2 AND GO<>U7 THEN GOTO HD2 1760 LET D$=" " 1770 LET J=U 1780 GOSUB TIM 1790 IF GO=G THEN RETURN 1800 GOSUB LZ3 1810 GOSUB LZ2 1820 LET D$=D$( TO U4)+":"+D$(U5 TO )+STR$ INT R5+" " 1830 IF LEN D$>=U21 THEN GOTO 1860 1840 LET D$=D$( TO U15)+D$(U15 TO ) 1850 GOTO 1830 1860 IF E(I)>=U01 THEN LET D$=D$+STR$ INT (M/P2*256)+" " 1870 IF E(I)<U01 THEN LET D$=D$+"--- " 1880 IF LEN D$>=U25 THEN GOTO 1910 1890 LET D$=D$( TO U21)+D$(U21 TO ) 1900 GOTO 1880 1910 LET A$=STR$ (INT (F8/HUN+HA)/TEN) 1920 IF INT VAL A$=VAL A$ THEN LET A$=A$+".0" 1930 IF F8=G THEN LET A$=STR$ F(I) 1940 LET D$=D$+A$+" " 1950 IF LEN D$>=U32 THEN GOTO 1980 1960 LET D$=D$( TO U25)+D$(U25 TO ) 1970 GOTO 1950 1980 IF GO=U2 OR GO=U7 THEN GOSUB SS 1990 IF GO=G THEN RETURN 2000 PRINT AT LP,G;D$( TO U32) 2010 LET LP=LP+U 2020 IF LP<U21 OR GO=U2 OR GO=U7 THEN RETURN 2030 IF GO=U3 THEN GOTO HD2 2040 LET GO=U9 2050 PRINT J$ 2060 GOSUB KSC 2070 IF GO=U9 THEN GOTO 2060 2080 GOSUB CLB 2090 IF GO=G OR GO=U2 OR GO=U7 THEN RETURN 2100 CLS 2110 LET D0=INT D 2120 GOSUB DAO 2130 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" 2140 LET LP=U4 2150 LET GO=U 2160 RETURN 2170 IF GO=U2 AND ST=U9 THEN GOTO 2240 2180 PRINT AT U21,G;J$ 2190 LET GO=U9 2200 GOSUB KSC 2210 IF GO=U9 THEN GOTO 2200 2220 GOSUB CLB 2230 IF GO<>U2 AND GO<>U7 AND GO<>G THEN LET GO=U3 2240 SCROLL 2250 LET LP=U20 2260 PRINT AT U21,U31; 2270 RETURN 2280 PRINT AT U21,G;N$;N$;" " 2290 RETURN 2300 IF A$<>"3" THEN GOTO 2820 2310 GOSUB SAT 2320 IF GO=G THEN GOTO G 2330 CLS 2340 PRINT H$;AT U2,G;"%N%A%M%E% ";AT U2,U7;S$(I) 2350 PRINT AT U18,G;L$;K$ 2360 INPUT A$ 2370 IF A$="" THEN GOTO 2410 2380 LET SV=U 2390 LET S$(I)=A$ 2400 PRINT AT U2,U7;S$(I);N$ 2410 PRINT AT U3,G;"%I%D% % % ";AT U3,U7;I$(I) 2420 INPUT A$ 2430 IF A$="" THEN GOTO 2470 2440 LET SV=U 2450 LET I$(I)=A$ 2460 PRINT AT U3,U7;I$(I);N$ 2470 LET D=T(I) 2480 GOSUB DAO 2485 IF GO=G THEN GOTO G 2490 PRINT AT U4,G;"%E%P%O%C%H";AT U4,U7;D$ 2500 INPUT D$ 2510 IF D$="" THEN GOTO 2610 2520 PRINT AT U4,U7;D$;X$ 2530 GOSUB DAY 2540 IF ER=G THEN GOTO 2570 2550 GOSUB 3250 2560 GOTO 2500 2570 LET T(I)=D 2580 LET SV=U 2590 GOSUB DAO 2600 PRINT AT U4,U7;D$;N$ 2610 FOR J=U TO U8 2620 LET A(J)=VAL E$(J,U5 TO TEN) 2630 PRINT AT J+U4,G;E$(J, TO U4);"% ";A(J);X$ 2640 INPUT A$ 2650 IF A$="" THEN GOTO 2690 2660 LET A(J)=VAL A$ 2670 PRINT AT J+U4,U7;A(J);X$ 2680 LET SV=U 2690 NEXT J 2700 LET N(U2,I)=A(U7) 2710 LET I(I)=A(U) 2720 LET O(I)=A(U2) 2730 LET E(I)=A(U3) 2740 LET W(I)=A(U4) 2750 LET M(I)=A(U5) 2760 LET N(U,I)=A(U6) 2770 LET F(I)=A(U8) 2780 IF A$="" THEN GOTO G 2790 PRINT AT U18,G;"\##";K$;N$ 2800 INPUT A$ 2810 GOTO G 2820 IF A$<>"4" THEN GOTO 3130 2830 CLS 2840 PRINT H$,,"%C%A%L%L% ";C$;AT U18,G;L$;K$ 2850 INPUT A$ 2860 IF A$="" THEN GOTO 2900 2870 LET C$=A$ 2880 PRINT AT U2,U7;C$;N$ 2890 LET SV=U 2900 FOR J=U9 TO 11 2910 LET A(J-U8)=VAL E$(J,U6 TO U9) 2920 PRINT AT J-U6,G;E$(J, TO U5);TAB U7;A(J-U8) 2930 INPUT A$ 2940 IF A$="" THEN GOTO 2980 2950 LET A(J-U8)=VAL A$ 2960 PRINT AT J-U6,U7;A(J-U8);N$ 2970 LET SV=U 2980 NEXT J 2990 LET L9=A(U) 3000 LET W9=A(U2) 3010 LET H9=A(U3) 3020 LET L8=L9*P0 3030 LET S9=SIN L8 3040 LET C9=COS L8 3050 LET S8=SIN (-W9*P0) 3060 LET C8=COS (W9*P0) 3070 LET R9=R0*(U-F/U2+F/U2*COS (U2*L8))+H9/THO 3080 LET L8=ATN ((U-F)**U2*S9/C9) 3090 LET Z9=R9*SIN L8 3100 LET X9=R9*COS L8*C8 3110 LET Y9=R9*COS L8*S8 3120 GOTO 2780 3130 IF A$<>"5" OR SV=G THEN GOTO G 3140 CLS 3150 PRINT H$,TAB U2;"\@@START RECORDER.....";K$ 3160 LET A$=INKEY$ 3170 IF A$="" THEN GOTO 3160 3180 IF A$="0" THEN GOTO G 3190 PRINT ,,TAB U3;" SAVE BEGINS IN 20 SECONDS" 3200 PAUSE THO 3210 LET SV=G 3220 SAVE "AMS8%1" 3230 GOTO G 3240 CLS 3250 PRINT AT U6,G;D$;AT U7,G;"EPOCH INPUT ERROR. USE FORMAT:","83 105.46677538",," > OR <",,"15APR83 111209" 3260 RETURN 3270 IF GO=U9 AND ST=U9 OR FS=G THEN SLOW 3280 LET F$=INKEY$ 3290 IF F$="" THEN GOTO 3410 3300 PRINT AT U21,U31;F$ 3310 IF F$<>"0" THEN GOTO 3350 3320 LET GO=G 3330 LET ST=U9 3340 RETURN 3350 IF CODE F$<38 AND CODE F$>27 THEN GOTO 3400 3360 IF F$="F" THEN LET FS=U 3370 IF F$="D" THEN LET FS=G 3380 IF F$="T" THEN LET D0=INF 3390 GOTO KSE 3400 LET ST=VAL F$ 3410 IF GO<>U9 THEN GOTO KSE 3420 LET GO=ST 3430 LET ST=U9 3440 IF FS=U AND GO<>U9 THEN FAST 3450 RETURN 3460 GOSUB KSC 3470 IF GO=G OR K=K9 THEN RETURN 3480 IF N(U,I)=G THEN LET N(U,I)=HUN 3490 IF N(U,I)>HUN THEN GOTO 3530 3500 LET N0=N(U,I) 3510 LET A0=(G0/N0/N0)**(U/U3) 3520 GOTO 3550 3530 LET A0=N(U,I) 3540 LET N0=SQR (G0/N(U,I)**U3) 3550 LET N=N0+U2*(D-T(I))*N(U2,I) 3560 LET A=(G0/N/N)**(U/U3) 3570 IF N<G OR A<R0 THEN GOTO 3930 3580 IF E(I)>=0 AND E(I)<1 THEN GOTO 3610 3590 PRINT "BAD ECCENTRICITY" 3600 GOTO 3940 3610 LET E2=U-E(I)**U2 3620 LET E1=SQR E2 3630 LET Q0=M(I)/360 3640 LET AF=U/ABS (U-SQR ABS (COS (I(I)*P0)*COS (L9*P0))/N)/A/N/360 3650 LET K2=9.95*(R0/A)**3.5/E2**U2 3660 LET S1=SIN (I(I)*P0) 3670 LET C1=COS (I(I)*P0) 3680 LET O=O(I)-(D-T(I))*K2*C1 3690 LET S0=SIN (O*P0) 3700 LET C0=COS (O*P0) 3710 LET W=W(I)+(D-T(I))*K2*(2.5*C1*C1-HA) 3720 LET S2=SIN (W*P0) 3730 LET C2=COS (W*P0) 3740 LET C(U,U)=C2*C0-S2*S0*C1 3750 LET C(U2,U)=C2*S0+S2*C0*C1 3760 LET C(U3,U)=S2*S1 3770 LET C(U,U2)=-S2*C0-C2*S0*C1 3780 LET C(U2,U2)=-S2*S0+C2*C0*C1 3790 LET C(U3,U2)=C2*S1 3800 LET G2=G(INT (T(I)/DYR)+U3) 3810 LET D1=D 3820 LET D=INT (T(I)/DYR)+U81 3830 LET D$=STR$ D+" 000." 3840 GOSUB DAY 3850 LET Y0=D 3860 LET K9=K 3870 LET D=D1 3880 LET D1=P2/U4 3890 IF L9<G THEN LET D1=D1*U3 3900 LET J=I(I)*P0 3910 IF J>PI/U2 THEN LET J=PI-J 3920 IF ACS (R0*(U+E(I)*COS (D1-W*P0))/A/(U-E(I)**U2))+J>ABS L9*P0 THEN RETURN 3930 PRINT "\##PASSES CANNOT OCCUR ";K$ 3940 SLOW 3950 LET GO=G 3960 IF INKEY$="" THEN GOTO 3960 3970 RETURN 3980 LET D2=D 3990 LET D=D+PHI 4000 LET Q1=Q 4010 LET Q=Q0+(D-T(I))*(N0+N(U2,I)*(D-T(I))) 4020 LET K=INT Q 4030 LET M=(Q-K)*P2 4040 RETURN 4050 GOSUB KSC 4060 IF GO=G THEN RETURN 4070 LET ER=U 4080 IF LEN D$<U7 THEN RETURN 4090 IF CODE D$(U3)>37 THEN GOTO 4220 4100 FOR L=U TO LEN D$ 4110 IF L=U3 OR L=U7 THEN GOTO 4130 4120 IF CODE D$(L)>U37 OR CODE D$(L)<U28 THEN RETURN 4130 NEXT L 4140 IF D$(U7)<>"." AND D$(U7)<>" " THEN RETURN 4150 LET D=INT (VAL D$(U4 TO U6)+DYR*(VAL D$(U TO U2)-U81)) 4160 IF D$(U7)="." THEN LET D=D+VAL D$(U7 TO LEN D$) 4170 IF LEN D$>=U13 THEN GOTO 4190 4180 LET D$=D$+"000000" 4190 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 4200 LET ER=G 4210 RETURN 4220 IF LEN D$<U8 THEN RETURN 4230 FOR L=U TO U12 4240 IF D$(U3 TO U5)=M$(L,U TO U3) THEN GOTO 4270 4250 NEXT L 4260 RETURN 4270 LET D$(U3 TO U5)=M$(L,U4 TO U6) 4280 FOR L=U TO LEN D$ 4290 IF L=U8 THEN GOTO 4310 4300 IF CODE D$(L)>U37 OR CODE D$(L)<U28 THEN RETURN 4310 NEXT L 4320 LET Y3=VAL D$(U6 TO U7) 4330 IF Y3<TEN THEN RETURN 4340 LET F9=G 4350 IF Y3/U4=INT (Y3/U4) AND VAL D$(U3 TO U5)>58 THEN LET F9=U 4360 LET D=INT ((Y3-U81)*DYR) 4370 LET D=D+VAL D$(U3 TO U5)+VAL D$(U TO U2)+F9 4380 LET D$=D$(U2 TO LEN D$) 4390 GOTO 4160 4400 LET ER=G 4410 LET Y3=U81+(INT D-U01)/DYR 4420 LET D1=INT (DYR*(Y3-INT Y3)) 4430 LET Y3=INT Y3 4440 LET F9=G 4450 IF Y3/U4=INT (Y3/U4) AND D1>=59 THEN LET F9=U 4460 LET D1=D1-F9 4470 FOR L=U TO U12 4480 IF D1>=VAL M$(L,U4 TO U6) THEN NEXT L 4490 LET D$=M$(L-U,U TO U3) 4500 IF F9=U AND D1=58 THEN LET D1=59 4510 LET D1=D1+U-VAL M$(L-U,U4 TO U6) 4520 LET D$=STR$ INT D1+D$+STR$ Y3 4530 IF D1<TEN THEN LET D$="0"+D$ 4540 LET J=U9 4550 LET D$=D$+" " 4560 LET D1=(D-INT D+5E-6)*24 4570 GOSUB KSC 4580 FOR L=J TO J+U4 STEP U2 4590 LET D$(L TO L+U)=STR$ INT D1 4600 IF D1<TEN THEN LET D$(L TO L+U)="0"+STR$ INT D1 4610 LET D1=(D1-INT D1)*U60 4620 NEXT L 4630 RETURN 4640 CLS 4650 PRINT H$, 4660 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% %>%>%>" 4670 IF A$="2" THEN PRINT TAB U3;"%<%<%<% %T%R%A%C%K%I%N%G% % %A%C%T%I%V%I%T%Y% %>%>%>" 4680 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% %>%>%>" 4690 PRINT 4700 FOR I=U TO U14 4710 PRINT CHR$ (I+U37);" = ";S$(I) 4720 LET A$=INKEY$ 4730 IF A$<>"" THEN GOTO 4780 4740 NEXT I 4750 PRINT ,,"\##SELECT A-N (RETURN=0)\##"; 4760 LET A$=INKEY$ 4770 IF A$="" THEN GOTO 4760 4780 PRINT AT U19,U24;A$ 4790 LET I=CODE A$-U37 4800 IF I>U14 OR I<U THEN LET GO=G 4810 RETURN 4820 IF E9<U9H THEN LET D$=D$+"0" 4830 LET D$=D$+STR$ INT (E9+HA)+" " 4840 RETURN 4850 IF A9<99.5 THEN LET D$=D$+"0" 4860 IF A9<U9H THEN LET D$=D$+"0" 4870 LET D$=D$+STR$ INT (A9+HA)+" " 4880 RETURN 4890 LET K9=INF 4900 LET PHI=G 4910 GOSUB SAT 4920 IF GO=G THEN RETURN 4930 PRINT ,,S$(I, TO U9);" EPOCH: ";AT U19,G;"\@@ENTER EPOCH DATE+TIME ";K$ 4940 INPUT D$ 4950 LET FS=U 4960 PRINT AT U21,17;D$ 4970 IF D$<>"S" THEN GOTO 5000 4980 LET D=D3 4990 RETURN 5000 IF D$<>"0" THEN GOTO 5030 5010 LET GO=G 5020 RETURN 5030 GOSUB DAY 5040 IF ER<>G THEN GOTO 5070 5050 LET D3=D 5060 RETURN 5070 GOSUB 3240 5080 SLOW 5090 GOTO 4940 5100 LET E=M+E(I)*SIN M+HA*E(I)**U2*SIN (U2*M) 5110 LET M5=E-E(I)*SIN E-M 5120 LET R3=U-E(I)*COS E 5130 IF ABS M5<1E-6 THEN GOTO 5160 5140 LET E=E-M5/R3 5150 GOTO 5110 5160 LET X=A*(COS E-E(I)) 5170 LET Y=A*E1*SIN E 5180 LET R=A*R3 5190 LET Z=X*C(U3,U)+Y*C(U3,U2) 5200 LET X0=X*C(U,U)+Y*C(U,U2) 5210 LET Y=X*C(U2,U)+Y*C(U2,U2) 5220 LET G7=(D-Y0)*G1+G2 5230 LET G7=(G7-INT G7)*P2 5240 LET X=X0*COS G7+Y*SIN G7 5250 LET Y=-X0*SIN G7+Y*COS G7 5260 RETURN 5270 GOSUB CO4 5280 IF GO=G THEN RETURN 5290 LET X8=-X5*C8*S9-Y5*S8*S9+Z5*C9 5300 LET Y8=Y5*C8-X5*S8 5310 GOSUB KSC 5320 IF X8<>G THEN GOTO 5360 5330 LET A9=90 5340 IF Y8<G THEN LET A9=270 5350 RETURN 5360 LET A9=ATN (Y8/X8)/P0 5370 IF X8<G THEN LET A9=A9+180 5380 IF A9<G THEN LET A9=A9+360 5390 RETURN 5400 GOSUB 3980 5410 GOSUB KSC 5420 IF GO=G THEN RETURN 5430 GOSUB 5100 5440 LET X5=X-X9 5450 LET Y5=Y-Y9 5460 LET Z5=Z-Z9 5470 LET QS=X5*X9+Y5*Y9+Z5*Z9 5480 GOSUB KSC 5490 RETURN 5500 GOSUB CO3 5510 IF GO=G THEN RETURN 5520 LET R5=SQR (X5*X5+Y5*Y5+Z5*Z5) 5530 LET E9=ASN ((X5*C8*C9+Y5*S8*C9+Z5*S9)/R5)/P0 5540 RETURN 5550 LET E8=SGN QS 5560 LET PHI=-SGN QS*IN*R*AF*LOS 5570 GOSUB INK 5580 GOSUB CO3 5590 IF GO=G THEN RETURN 5600 IF SGN QS=E8 THEN GOTO 5560 5610 LET PHI=-HA*ABS PHI*SGN QS*LOS 5620 GOSUB CO4 5630 IF GO=G THEN RETURN 5640 IF ABS E9<HA THEN RETURN 5650 GOTO 5610