home *** CD-ROM | disk | FTP | other *** search
Wrap
10 ' REMOVE LINES 3790 AND 3810 FOR INTERPRETERRUN , THE DELAYS ARE IN THERE 20 ' FOR TIMING IN THE COMPILED RUN ONLY 30 ' YOU WILL NEED THE FILES "MAP.DAT","Kepeler.DAT" AND "GROUND.DAT" TO RUN THIS PROGRAM 40 '**** SATAUS Menuprogramm de OE1HSI VERSION 1.5 26.JAN. 1985 50 KEY OFF:SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS:CLEAR:PRINT:PRINT 60 REM: ON ERROR GOTO 50 70 KEY(9) OFF:KEY(10) OFF 80 CLS:PRINT" USAT90.BAS - Version 1989-91" 90 PRINT:PRINT"======================================================================" 100 PRINT:PRINT" SELECT ONE OF THE FOLLOWING OPTIONS:" 110 PRINT:PRINT" (P) ORBITAL PREDICTION PROGRAM" 120 PRINT:PRINT" (R) REALTIME TRACKING AND HIGH RESOLUTION SCREEN" 130 PRINT:PRINT" (C) CHANGE, ADD, DELETE ELEMENTS OF SATELLITES" 140 PRINT:PRINT" (G) CHANGE OR ENTER GROUNDSTATION DATA" 150 COLOR 12,1,0:PRINT:PRINT" (D) RETURN TO DOS":COLOR 14,1,0 160 BEEP 165 ?:COLOR 12,1,0:?"Please turn on your CAPS LOCK for proper program operation.":color 14,1,0 170 PRINT:PRINT"ENTER SELECTION (P,R,C,G,D)--> " 180 Z$="PpRrCcDdGg" 190 K$=INKEY$:IF K$="" THEN 190 200 COLOR 14,1,0:K=INSTR(Z$,K$) 210 ON K GOTO 4820,4820,2090,2090,240,240,230,230,1620,1620 220 BEEP:COLOR 28,1,0:GOTO 80 230 CLS:PRINT" Thanks for using USAT!":SYSTEM 240 ' ****** SATFILE.BAS - VERSION 1.0, ISSUE 1.0 - HSIMODIF.1/25/85 ****** 250 KEY OFF:SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS 260 DEFDBL T,N 270 OPEN "KEPELER.DAT" AS #1 LEN =56 280 FIELD #1, 10 AS I$, 2 AS Y3$, 8 AS T0$, 4 AS I0$, 4 AS O0$, 4 AS E0$, 4 AS W0$, 4 AS M0$, 8 AS N0$, 4 AS K0$, 4 AS F1$ 290 V1$="":PRINT 300 PRINT "Elements of the following SATELLITES are in the file:":PRINT 310 FOR J%=1 TO 20:GET #1,J% 320 IF ASC(I$)<33 THEN 340 ELSE IF ASC(I$)>126 THEN 340 330 PRINT I$:NEXT 340 PRINT:PRINT "Do you wish to Add (A) , Change (C) , or Delete (D) a satellite ?" 350 PRINT "record or Exit (E) from this program ?" 360 Z$="EeAaCcDd" 370 K$=INKEY$:IF K$="" THEN 370 380 K=INSTR(Z$,K$) 390 ON K GOTO 1600,1600,430,430,460,460,610,610 400 BEEP:GOTO 370 410 ' 420 ' ****** ADD A NEW RECORD ****** 430 GOSUB 740:GOSUB 1440:GOSUB 990:GOSUB 1030:GOTO 700 440 ' 450 ' ****** CHANGE AN EXISTING RECORD ****** 460 GOSUB 730:IF I$<>U$ THEN CLS:PRINT "Record not found":GOTO 290 470 GOSUB 820 480 PRINT "Do you wish to update elemts of this satellite ? (Y/N) " 490 Z$="YyNn" 500 K$=INKEY$:IF K$="" THEN 500 510 K=INSTR(Z$,K$) 520 ON K GOTO 540,540,580,580 530 BEEP:GOTO 500 540 CLS:PRINT"Editing a Satellite Record" 550 PRINT:PRINT"When editing an existing satellite simply press ENTER to retain an" 560 PRINT"entry for that particular piece of data. You MUST re-enter the sat. name." 565 ?"Be sure to turn on your CAPS LOCK for proper data entry." 570 PRINT:GOSUB 1040:GOTO 700 580 CLS:GOTO 290 590 ' 600 ' ****** DELETE AN EXISTING RECORD ****** 610 GOSUB 730:IF I$<>U$ THEN CLS:PRINT "Record not found":GOTO 290 620 COLOR 28:PRINT :PRINT "DO YOU REALLY MEAN IT ?? (Y/N) ":COLOR 14 630 Z$="YyNn" 640 K$=INKEY$:IF K$="" THEN 640 650 K=INSTR(Z$,K$) 660 ON K GOTO 690,690,680,680 670 BEEP:GOTO 640 680 CLS:GOTO 290 690 GOSUB 990:GOSUB 1320:GOSUB 1380 700 CLS:PRINT "Update complete.":GOTO 290 710 ' 720 ' ****** FIND SATELLITE RECORD ****** 730 PRINT:INPUT "Which satellite? ";V1$:IF V1$="" THEN 340 740 U$=SPACE$(10):LSET U$=V1$ 750 FOR J%=1 TO 20:GET #1,J% 760 IF I$=U$ THEN 790 ELSE IF ASC(I$)<33 THEN 790 ELSE IF ASC(I$)>90 THEN 790 770 IF LEFT$(I$,1)="" THEN 790 780 NEXT 790 RETURN 800 ' 810 ' ****** DISPLAY SATELLITE RECORD ****** 820 CLS:Y3=CVI(Y3$) 830 T0=CVD(T0$):I0=CVS(I0$):O0=CVS(O0$):E0=CVS(E0$):W0=CVS(W0$) 840 M0=CVS(M0$):N0=CVD(N0$):K0=CVS(K0$):F1=CVS(F1$) 850 PRINT "Satellite = ";I$ 860 PRINT "Epoch year = ";Y3 870 PRINT "Epoch day = ";T0 880 PRINT "Inclination = ";I0 890 PRINT "R.A.A.N. = ";O0 900 PRINT "Eccentricity = ";E0 910 PRINT "Arg. of perigee = ";W0 920 PRINT "Mean anomaly = ";M0 930 PRINT "Mean motion = ";N0 940 PRINT "Epoch orbit no. = ";K0 950 PRINT "Beacon freq. = ";F1 960 PRINT:RETURN 970 ' 980 ' ****** SETUP SATELLITE ELEMENTS FOR DELETE ACTION ****** 990 Q$=SPACE$(10):Y3=0:T0=0:I0=0:O0=0:E0=0:W0=0:M0=0:N0=0:K0=0:F1=0 1000 CLS:RETURN 1010 ' 1020 ' ****** UPDATE/DELETE SATELLITE ELEMENTS ****** 1040 INPUT "SATELLITE DESIGNATION = ",U$:IF U$<>"" THEN Q$=U$ ELSE Q$="UNKNOWN" 1060 INPUT "EPOCH YEAR (YY) = ",U$:IF U$<>"" THEN Y3=VAL(U$) 1080 INPUT "EPOCH DAY (DD.DDDD-) = ",U$:IF U$<>"" THEN T0=VAL(U$) 1100 INPUT "INCLINATION (DEG.) = ",U$:IF U$<>"" THEN I0=VAL(U$) 1120 INPUT "R.A.A.N. (DEG.) = ",U$:IF U$<>"" THEN O0=VAL(U$) 1140 INPUT "ECCENTRICITY = ",U$:IF U$<>"" THEN E0=VAL(U$) 1160 INPUT "ARG. OF PERIGEE (DEG.) = ",U$:IF U$<>"" THEN W0=VAL(U$) 1180 INPUT "MEAN ANOMALY (DEG.) = ",U$:IF U$<>"" THEN M0=VAL(U$) 1200 INPUT "MEAN MOTION (ORB/DAY) = ",U$:IF U$<>"" THEN N0=VAL(U$) 1220 INPUT "EPOCH ORBIT NO. = ",U$:IF U$<>"" THEN K0=VAL(U$) 1240 INPUT "BEACON FREQUENCY (Mhz) = ",U$:IF U$<>"" THEN F1=VAL (U$) 1250 PRINT:PRINT "Is this CORRECT? (Y/N) " 1260 Z$="YyNn" 1270 K$=INKEY$:IF K$="" THEN 1270 1280 K=INSTR(Z$,K$) 1290 ON K GOTO 1320,1320,1310,1310 1300 BEEP:GOTO 1270 1310 CLS:GOTO 1040 1320 LSET I$=Q$:RSET Y3$=MKI$(Y3):RSET T0$=MKD$(T0):RSET I0$=MKS$(I0) 1330 RSET O0$=MKS$(O0):RSET E0$=MKS$(E0):RSET W0$=MKS$(W0):RSET M0$=MKS$(M0) 1340 RSET N0$=MKD$(N0):RSET K0$=MKS$(K0):RSET F1$=MKS$(F1) 1350 PUT #1,J%:CLS:RETURN 1360 ' 1370 ' ****** ADJUST RECORDS TO FILL DELETED RECORD SPACE ****** 1380 FOR K%=J% TO 19 1390 GET #1,K%+1:PUT #1,K%:NEXT 1400 GOSUB 990:J%=20:GOSUB 1320 1410 RETURN 1420 ' 1430 ' ****** ADJUST RECORDS TO INSERT NEW RECORD ****** 1440 PRINT 1450 PRINT "Do you wish to insert the record in a specific postion ? (Y/N) " 1460 Z$="YyNn" 1470 K$=INKEY$:IF K$="" THEN 1470 1480 K=INSTR(Z$,K$) 1490 ON K GOTO 1510,1510,1570,1570 1500 BEEP:GOTO 1470 1510 PRINT "Which position ? ( 1 to";J%-1;")"; 1520 INPUT R%:IF R%=0 THEN 1450 1530 IF R%>J%-1 THEN 1510 1540 J%=R% 1550 FOR K%=19 TO R% STEP-1 1560 GET #1,K%:PUT #1,K%+1:NEXT 1570 RETURN 1580 ' 1590 ' ****** END OF JOB ROUTINE ****** 1600 CLOSE #1:GOTO 40 1610 'END PART CHANGE/ADD/DELETE ELEMENTS 1620 REM ******* Groundsation data change v.1.0 OE1HSI jan.-1985********** 1630 SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS 1640 PRINT"CURRENT GROUND STATION DATA":PRINT:GOSUB 1950 1650 PRINT"Do you want to CHANGE this DATA ? (Y/N)" 1660 Z$="YyNn" 1670 K$=INKEY$:IF K$=""THEN 1670 1680 K=INSTR(Z$,K$) 1690 ON K GOTO 1780,1780,2060,2060 1700 BEEP:COLOR 28:GOTO 1650 1710 PRINT:PRINT:GOSUB 1980 1720 PRINT"Do you want a further CHANGE ? (Y/N) " 1730 Z$="YyNn" 1740 K$=INKEY$:IF K$=""THEN 1740 1750 K=INSTR(Z$,K$) 1760 ON K GOTO 1780,1780,2050,2050 1770 BEEP:COLOR 28:GOTO 1720 1780 COLOR 14:PRINT:PRINT "ENTER NEW DATA OR <RETURN> FOR UNCHANGED DATA": 1790 OPEN "GROUND.DAT" AS #1 LEN=42 1800 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$ 1810 PRINT:INPUT "CALL max. 10 chrs.) : ",U$: IF U$ <>"" THEN GS$=U$ ELSE GS$=GR1$ 1820 INPUT "Location of station (max. 20 chrs.) : ",U$: IF U$ <>"" THEN GC$=U$ ELSE GC$=GL1$ 1830 INPUT "Groundstation height above sealevel in mtrs. : ",U$: IF U$ <>"" THEN SH=VAL(U$) ELSE SH=CVS(GH1$) 1840 PRINT "LONGITUDE WEST of Greenwich (max +360) or East of Greenw. entered as -0 to -180":PRINT:INPUT "Enter (with decimals) : ",U$: IF U$ <>"" THEN LO=VAL(U$) ELSE LO=CVS(LO1$) 1850 IF LO < 0 THEN LO=360+LO 1860 PRINT "LATITUDE NORTH of Equator + (max 90) SOUTH of Equator - (max 90)":PRINT:INPUT "ENTER (With decimals) : ",U$: IF U$ <>"" THEN LA=VAL(U$) ELSE LA=CVS(LA1$) 1870 LSET GR$=GS$ 1880 LSET GL$=GC$ 1890 RSET GH$=MKS$(SH) 1900 RSET LO$=MKS$(LO) 1910 RSET LA$=MKS$(LA) 1920 PUT #1,1 1930 CLOSE 1940 GOTO 1710 1950 OPEN "GROUND.DAT" AS #1 LEN=42 1960 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$ 1970 GET #1,1 1980 PRINT "CALL IS : ";GR$ 1990 PRINT "LOCATION IS : ";GL$ 2000 PRINT USING "HEIGHT AB. SEAL. (mtrs.)= : #####";CVS(GH$) 2010 PRINT USING "WESTERN LONGITUDE (deg.)= : ###.##";CVS(LO$) 2020 PRINT USING "LATITUDE (deg.)= : +##.##";CVS(LA$):PRINT 2030 GR1$=GR$:GL1$=GL$:GH1$=GH$:LO1$=LO$:LA1$=LA$ 2040 CLOSE:RETURN 2050 COLOR 14:PRINT:PRINT "DATA SAVED AS GROUND.DAT":GOTO 2070 2060 COLOR 14:PRINT:PRINT "DATA NOT CHANGED" 2070 GOTO 50 'MAIN MENU 2080 '**** END PROGRAM GROUNDSTATION DATA CHANGE/STORAGE OE1HSI JAN. 1985 **** 2090 ' ****** ORBITS2 - VERSION 1.0, ISSUE 1.2 -11/1/83 ****** 2100 CLS:KEY OFF:SCREEN 2,0:WIDTH 80 2110 OUT 985,12 ' Set foreground color for high resolution screen 2120 LOCATE 2 2130 PRINT" SATELLITE TRACKING PROGRAM de W0SL - May,1983" 2140 PRINT" COPYRIGHT 1983 by R. D. Welch, W0SL" 2150 PRINT" 908 Dutch Mill Drive" 2160 PRINT" Manchester, Mo. 63011":PRINT 2170 PRINT" Enhanced by OE1HSI JAN 26 1985" 2180 PRINT" Ing. Herbert F. Strasser" 2190 PRINT" 176 Rud. Waisenhorngasse" 2200 PRINT" A 1238 VIENNA / AUSTRIA" 2210 LOCATE 25,3:PRINT"F9 TOGGLES THE GRAPH/TABLE F10 TO SELECT SINGLE SAT IN GRAPH ESC TO END"; 2220 ' 2230 ' ****** HOUSE KEEPING ITEMS ****** 2240 ' 2250 ' ****** GROUND STATION CONSTANTS ****** 2260 OPEN "GROUND.DAT" AS #1 LEN=42 2270 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$ 2280 GET #1,1 2290 L9=CVS(LA$):W9=CVS(LO$):H9=CVS(GH$) 2300 CLOSE #1 2310 'L9=Latitude in degrees 2320 'W9=Longitude in degrees 2330 'H9=Height above sea level in meters 2340 'C$=GRUND STATION CALL+LOCATION STRING 2350 FOR I=1 TO 10 '**** I = STRINGLENGHT TO BE STRIPED OF TRAILING SPACES**** 2360 GRT$=MID$(GR$,11-I,1) 2370 IF GRT$ <> " " THEN GRR$=LEFT$(GR$,11-I):I=10 ' GRR$ IS GR$ STRIPPED OFTRAILING PADDED SPACES 2380 NEXT 2390 I=0 2400 FOR I=1 TO 20 '**** I = STRINGLENGHT TO BE STRIPED OF TRAILING SPACES**** 2410 GLT$=MID$(GL$,21-I,1) 2420 IF GLT$ <> " " THEN GLR$=LEFT$(GL$,21-I):I=20 ' GLR$ IS GL$ STRIPPED OFTRAILING PADDED SPACES 2430 NEXT 2440 C$=GRR$+" "+GLR$ '**** END PROGRAM STRIP TRAILING SPACES, HSI JAN.1985 2450 ' 2460 ' ***** OPEN KEPELER DATA FILE FOR USE 2470 OPEN "KEPELER.DAT" AS #1 LEN=56 2480 FIELD #1, 10 AS I$, 2 AS Y3$, 8 AS T0$, 4 AS I0$, 4 AS O0$, 4 AS E0$, 4 AS W0$, 4 AS M0$, 8 AS N0$, 4 AS K0$, 4 AS F1$ 2490 DEFDBL T:DEFINT J:OPTION BASE 1 2500 DEF FNMTH=VAL(LEFT$(D$,2)):DEF FNDAY=VAL(MID$(D$,4,2)) 2510 DEF FNYR=VAL(RIGHT$(D$,2)):DEF FNHR=VAL(LEFT$(T$,2)) 2520 DEF FNMIN=VAL(MID$(T$,4,2)):DEF FNSEC=VAL(RIGHT$(T$,2)) 2530 DIM C(3,2),Y1(5),G3(5),SAT(6),SATL(10,2) 2540 DIM PKT(6),KEP (6) 2550 ' 2560 ' ****** SETUP UTC DATE AND TIME ****** 2570 LOCATE 15,30,0:PRINT "UTC DATE = ";DATE$ 2580 LOCATE 16,30:PRINT "UTC TIME = ";TIME$ 2590 LOCATE 20,3:INPUT "ENTER NEW UTC DATE (MM-DD-YY)?.. IF NOT HIT RETURN ",D$ 2600 IF D$="" THEN D$=DATE$ 2610 DATE$=D$:D$=DATE$ 'Quick format check 2620 LOCATE 20,50:PRINT SPACE$(14) 2630 LOCATE 20,3:INPUT "ENTER NEW UTC TIME (HH:MM:SS)?.. IF NOT HIT RETURN ",T$ 2640 IF T$="" THEN T$=TIME$ 2650 TIME$=T$:T$=TIME$ ' Quick format check 2660 CLS 2670 ' 2680 ' ****** DRAW AND STORE SATELLITE INDICATOR ****** 2690 CLS 2700 LINE (4,0)-(4,4):LINE (0,2)-(8,2) 2710 GET (0,0)-(8,4),SAT:PUT (0,0),SAT 2720 CLS 2730 LINE (4,1)-(4,3):LINE (3,2)-(5,2) 2740 GET (0,0)-(8,4),PKT:PUT (0,0),PKT 2750 ' 2760 ' ****** NUMERIC CONSTANTS ****** 2770 P1=3.1415926535# ' Value of PI 2780 R0=6378.16:F=298.16 ' Earth's radius, 1/Earth flattening coef. 2790 G0=75369793000000# ' GM of Earth in (Orbits/day)^2/km^3 2800 G1=1.0027379093# ' Sidereal/Solar time rate ratio 2810 ' 2820 ' ****** DERIVED CONSTANTS ****** 2830 P2=2*P1:P0=P1/180:F=1/F:L8=L9*P0:S9=SIN(L8):C9=COS(L8) 2840 S8=SIN(-W9*P0):C8=COS(W9*P0) 2850 R9=R0*(1-(F/2)+(F/2)*COS(2*L8))+H9/1000 2860 L8=ATN((1-F)^2*S9/C9):Z9=R9*SIN(L8) 2870 X9=R9*COS(L8)*C8:Y9=R9*COS(L8)*S8 2880 ' 2890 ' ****** ESTABLISH SIDEREAL TIME TABLE MATRIX ****** 2900 RESTORE 3010:FLG1=0:FLG2=0:D$=DATE$:CLS 2910 FOR I1=1 TO 5 2920 READ Y1(I1), G3(I1) ' Read sidereal time table 2930 IF Y1(I1)=FNYR THEN FLG1=1 2940 IF Y1(I1)=FNYR-1 THEN FLG2=1 2950 IF Y1(I1)=0 THEN 2970 2960 NEXT 2970 IF FLG1=1 AND FLG2=1 THEN 3080 2980 PRINT "UNABLE TO FIND CURRENT AND/OR PRECEEDING YEAR IN SIDERAL TIME TABLE":STOP 2990 ' 3000 ' ****** SIDEREAL TIME TABLE ****** 3010 DATA 88, 0.27469296 3020 DATA 89, 0.276767772 3030 DATA 90, 0.27610467 3040 DATA 91, 0.27544157 3050 DATA 0,0 3060 ' 3070 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ****** 3080 I=0 3090 I=I+1:IF I>8 THEN 3230 3100 GET #1,I 3110 FOR J=1 TO 10 3120 IF MID$(I$,J,1)=SPACE$(1) THEN 3150 3130 NEXT 3140 PRINT "END OF FILE ERROR, CORRECT & RESTART":STOP 3150 I$(I)=LEFT$(I$,J-1):IF I$(I)="END" THEN 3230 3160 IF LEFT$(I$,1)=SPACE$(1) THEN 3230 3170 Y3(I)=CVI(Y3$):T0(I)=CVD(T0$):I0(I)=CVS(I0$):O0(I)=CVS(O0$) 3180 E0(I)=CVS(E0$):W0(I)=CVS(W0$):M0(I)=CVS(M0$):N0(I)=CVD(N0$) 3190 K0(I)=CVS(K0$):F1(I)=CVS(F1$) 3200 IF Y3(I)=FNYR THEN 3090 ELSE IF Y3(I)=FNYR-1 THEN 3090 ELSE PRINT "ELEMENTS FOR SATELLITE ";I$(I);" NOT FROM CURRENT OR PRECEEDING YEAR.":STOP 3210 ' 3220 ' ****** SET UP KEY TRAPPING ****** 3230 ON KEY(9) GOSUB 4760:KEY(9) STOP 3240 ON KEY(10) GOSUB 4790:KEY(10) OFF 3250 FLG9=0:FLG10=0::GOSUB 4290 3260 ' 3270 ' ****** ORBIT DETERMINATION LOOP STARTS HERE ****** 3280 FOR J=1 TO I-1 3290 Q$=INKEY$:IF Q$=CHR$(27) GOTO 4630 3300 GOSUB 3380 3310 IF FLG9=0 THEN 3330 3320 GOSUB 3830:GOSUB 3890 3330 GOSUB 4040 3340 NEXT 3350 GOTO 3280 3360 ' 3370 ' ****** ORBIT CALCULATION ROUTINE ****** 3380 A0(J)=((G0/(N0(J)*N0(J)))^(1/3)) 3390 E2=1-E0(J)*E0(J):E1=SQR(E2):Q0=M0(J)/360+K0(J) 3400 K2=9.95*((R0/A0(J))^3.5)/(E2*E2) 3410 S1=SIN(I0(J)*P0):C1=COS(I0(J)*P0):D$=DATE$ 3420 T=INT(30.55*(FNMTH+2))-2*(INT(.1*(FNMTH+7)))-91 3430 IF FNMTH>2 THEN IF FNYR/4=INT(FNYR/4) THEN T=T+1 3440 IF Y3(J)=FNYR-1 THEN T=T+365 ELSE 3460 3450 IF Y3(J)/4=INT(Y3(J)/4) THEN T=T+1 3460 T$=TIME$:T=T+FNDAY+FNHR/24+FNMIN/1440+FNSEC/86400! 3470 O=O0(J)-(T-T0(J))*K2*C1:S0=SIN(O*P0):C0=COS(O*P0) 3480 W=W0(J)+(T-T0(J))*K2*(2.5*(C1*C1)-.5) 3490 S2=SIN(W*P0):C2=COS(W*P0) 3500 C(1,1)=+(C2*C0)-(S2*S0*C1):C(1,2)=-(S2*C0)-(C2*S0*C1) 3510 C(2,1)=+(C2*S0)+(S2*C0*C1):C(2,2)=-(S2*S0)+(C2*C0*C1) 3520 C(3,1)=+(S2*S1):C(3,2)=+(C2*S1) 3530 Q=N0(J)*(T-T0(J))+Q0:K=INT(Q):M=(Q-K)*P2 3540 E=M+E0(J)*SIN(M)+.5*(E0(J)*E0(J))*SIN(2*M) 3550 S3=SIN(E):C3=COS(E):R3=1-E0(J)*C3:M1=E-E0(J)*S3 3560 M5=M1-M:IF ABS(M5)<.000001 THEN 3580 ELSE E=E-M5/R3 3570 GOTO 3550 3580 X0=A0(J)*(C3-E0(J)):Y0=A0(J)*E1*S3:R=A0(J)*R3 3590 X1=X0*C(1,1)+Y0*C(1,2):Y1=X0*C(2,1)+Y0*C(2,2):Z1=X0*C(3,1)+Y0*C(3,2) 3600 FOR I2=1 TO I1:IF Y3(J)=Y1(I2) THEN G2=G3(I2) 3610 NEXT 3620 G7=T*G1+G2:G7=(G7-INT(G7))*P2:S7=-SIN(G7):C7=COS(G7) 3630 X=+(X1*C7)-(Y1*S7):Y=+(X1*S7)+(Y1*C7):Z=Z1 3640 X5=(X-X9):Y5=(Y-Y9):Z5=(Z-Z9):R5=SQR(X5*X5+Y5*Y5+Z5*Z5) 3650 Z8=+(X5*C8*C9)+(Y5*S8*C9)+(Z5*S9) 3660 X8=-(X5*C8*S9)-(Y5*S8*S9)+(Z5*C9):Y8=+(Y5*C8)-(X5*S8) 3670 S5=Z8/R5:C5=SQR(1-S5*S5):E9=ATN(S5/C5)/P0 3680 IF X8<0 THEN A9=P1+ATN(Y8/X8) ELSE 3700 3690 GOTO 3730 3700 IF X8>0 AND Y8>=0 THEN A9=ATN(Y8/X8) ELSE IF X8>0 THEN A9=P2+ATN(Y8/X8) ELSE 3720 3710 GOTO 3730 3720 IF Y8<0 THEN A9=3*P1/2 ELSE A9=P1/2 3730 A9=A9/P0 3740 IF X<0 THEN W5=P1+ATN(Y/X) ELSE 3760 3750 GOTO 3790 3760 IF X>0 AND Y>=0 THEN W5=ATN(Y/X) ELSE IF X>0 THEN W5=P2+ATN(Y/X) ELSE 3780 3770 GOTO 3790 3780 IF Y<0 THEN W5=3*P1/2 ELSE W5=P1/2 3790 W5=360-W5/P0:B5=Z/R:L5=ATN(B5/(SQR(1-B5^2)))/P0 3800 RETURN 3810 ' 3820 ' ****** LAT./LONG. PLOT ROUTINE ****** 3830 Y6=CINT(.7111*(90-L5)+3) 3840 IF W5<=270 AND W5>=0 THEN X6=CINT(477-W5*1.7444) 3850 IF W5>270 AND W5<=360 THEN X6=CINT(1105-W5*1.7444) 3860 RETURN 3870 ' 3880 ' ****** PUT SATELLITE ON SCREEN ROUTINE ****** 3890 GET(X6-4,Y6-2)-(X6+4,Y6+2),KEP 3900 REM:FOR ZD=1 TO 2000:NEXT ZD 'LINEDELAY REMOVE FOR INTERPRETER RUN ***** 3910 PUT(X6-4,Y6-2),SAT,PRESET 3920 REM:FOR ZL=1 TO 800:NEXT ZL 'BLINKDELAY REMOVE OR REDUCE FOR INTERPR. RUN ***** 3930 PUT(X6-4,Y6-2),SAT 3940 PUT(X6-4,Y6-2),KEP,PSET 3950 PUT(X6-4,Y6-2),SAT 3960 IF FLG0=0 THEN 3990 3970 PUT (SATL(J,1),SATL(J,2)),SAT 3980 PUT (SATL(J,1),SATL(J,2)),PKT,OR 3990 SATL(J,1)=X6-4:SATL(J,2)=Y6-2 4000 IF J=I-1 THEN FLG0=1 4010 RETURN 4020 ' 4030 ' ****** PRINT SATELLITE DETAILS ROUTINE ****** 4040 KEY(9) ON:KEY(10) ON 4050 KEY(10) STOP:KEY(9) STOP 4060 IF FLGK=1 THEN GOSUB 4270 4070 IF FLG9=0 GOTO 4160 4080 IF FLG10=1 THEN GOSUB 4540 4090 IF FLG10=0 THEN 4120 ELSE V$=SPACE$(10):LSET V$=I$(J) 4100 IF V$<>U$ THEN 4240 4110 LOCATE 25,69:PRINT "SELECTED"; 4120 LOCATE 25,1:PRINT SPACE$(68); 4130 LOCATE 25,(12-LEN(I$(J)))/2+1:PRINT I$(J); 4140 LOCATE 25,15 4150 GOTO 4220 4160 COLOR 3:LOCATE 3,44:PRINT DATE$:LOCATE 4,37:PRINT T$ 4170 IF E9>=0 THEN COLOR 12 ELSE 4190 4180 IF E9>0 AND E9<1 THEN COLOR 28:BEEP 4190 LOCATE 2*J+7,15:PRINT SPACE$(50) 4200 LOCATE 2*J+7,(12-LEN(I$(J)))/2+1:PRINT I$(J) 4210 LOCATE 2*J+7,15 4220 PRINT USING "### ### ##### ##### ###.# ###.# ######";A9,E9,R5,(R-R0),L5,W5,K; 4230 IF FLG9=0 GOTO 4240 ELSE LOCATE 20,48:PRINT TIME$; 4240 RETURN 4250 ' 4260 ' ****** SET UP SCREEN DISPLAY ROUTINE ****** 4270 CLS:FLG0=0:FLGK=0 4280 IF FLG9=1 THEN 4380 'IF FLG9=0 THEN FLG9=1:GOTO 8280 4290 ' FLG9=0 4300 SCREEN 0,1:COLOR 2,0,0 4310 LOCATE 1,40-LEN(C$)/2,0:PRINT C$ 4320 LOCATE 2,28:PRINT "REALTIME SATELLITE TRACKING" 4330 LOCATE 3,29:PRINT "COORDINATES ON" 4340 LOCATE 4,34:PRINT "AT":LOCATE 4,46:PRINT "UTC" 4350 LOCATE 25,3:PRINT"F9 TOGGLES THE GRAPH/TABLE F10 TO SELECT SINGLE SAT IN GRAPH ESC TO END"; 4360 L1=6:L2=7:L3=8 4370 GOTO 4450 4380 GOSUB 4710:SCREEN 2,0:OUT 985,3 4390 DEF SEG=&HB800:BLOAD "MAP.DAT",0:DEF SEG=0 4400 W5=W9:L5=L9:GOSUB 3830 4410 CIRCLE (X6,Y6),2 4420 GOSUB 4640:L1=22:L2=23:L3=24 4430 LOCATE 20,3:PRINT "Data for Groundstation At Time= UTC On: ";DATE$ 4440 LOCATE 20,26:PRINT GRR$ 4450 LOCATE L1,3 4460 PRINT " NAME OR AZ EL RANGE HEIGHT LAT. LONG. ORBIT" 4470 LOCATE L2,3 4480 PRINT "DESIGNATOR DEG DEG KM KM DEG DEG NO." 4490 LOCATE L3,3 4500 PRINT "---------- --- --- ----- ------ ----- ----- ------"; 4510 RETURN 4520 ' 4530 ' ****** SELECT SINGLE SATELLITE ROUTINE ****** 4540 LOCATE 25,1:PRINT SPACE$(79); 4550 LOCATE 25,1:INPUT; "WHICH SATELLITE? (CR FOR ALL)";I1$ 4560 FOR QQQ = 1 TO LEN(I1$) 4570 IF MID$(I1$,QQQ,1) > CHR$(&H60) AND MID$(I1$,QQQ,1) < CHR$(&H7B) THEN MID$(I1$,QQQ,1) = CHR$(ASC(MID$(I1$,QQQ,1)) AND 223) 4580 NEXT QQQ 4590 IF I1$="" THEN FLG10=0:GOTO 4610 4600 U$=SPACE$(10):LSET U$=I1$:FLG10=2 4610 LOCATE 25,1:PRINT SPACE$(79); 4620 RETURN 4630 CLOSE #1:GOTO 50 4640 GOTO 4680 4650 DEF SEG =0 4660 POKE &H410,(PEEK(&H410) OR &H30) 4670 SCREEN 0 4680 WIDTH 80 4690 LOCATE ,,1,12,13 4700 RETURN 4710 ' SWITCH TO COLOR 4720 DEF SEG=0 4730 POKE &H410,(PEEK(&H410) AND &HCF) OR &H10 4740 OUT 980,2:OUT 981,85 4750 RETURN 4760 IF FLG9=0 THEN FLG9=1:GOTO 4780 'FLAG9 TOGGELN 4770 FLG9=0 4780 FLGK=1:RETURN 4050 4790 IF FLG9=1 THEN FLG10=1 ELSE FLG10=0:RETURN 4050 4800 RETURN 4050 4810 GOTO 50 'ENDE PROGRAMMTEIL ECHTZEITDISPLAY 4820 '****** ORBIT2 - VERSION 2.0, ISSUE 1.0/HSI - 17/01/85 ***** 4830 KEY OFF:SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS 'dls 4840 PRINT" AMSAT ORBITAL PREDICTION PROGRAM de W3IWI - May,1980" 4850 PRINT" COPYRIGHT 1980 by Dr. Thomas A. Clark, W3IWI" 4860 PRINT" 6388 Guilford Road" 4870 PRINT" Clarksville, MD. 21029" 4880 PRINT 4890 PRINT"REVISED & MODIFIED FOR IBM-PC by R. D. Welch, W0SL - May, 1983" 4900 PRINT" 908 Dutch Mill Dr." 4910 PRINT" Manchester, Mo. 63011 4920 PRINT 4930 PRINT"ENHANCED AND DEBUGED BY Ing. H.F.STRASSER OE1HSI- JAN. 1985" 4940 PRINT" A 1238 VIENNA/AUSTRIA":PRINT: 4950 PRINT" Permission granted for non-commercial use providing" 4960 PRINT" credit is given to the author, AMSAT and ORBIT Magazine.":PRINT 4970 ' 4980 ' ****** HOUSEKEEPING ITEMS ****** 4990 CLEAR 5000 OPEN "LPT1:" FOR OUTPUT AS # 2 5010 OPEN "SCRN:" FOR OUTPUT AS # 3 5020 DEFDBL H,T 5030 DIM T$(20),S$(40),II$(40),CC(3,2) 5040 C8$=CHR$(10)+CHR$(10)+CHR$(10)+CHR$(10) 5050 C9$=CHR$(12)+CHR$(7) 5060 DEF FNT$(D)=CHR$(48+INT(D/10))+CHR$(48+D-10*INT(D/10)) 5070 YY=0 5080 '****** NUMERIC CONSTANTS ****** 5090 P1=3.1415926535# ' Value of PI 5100 R0=6378.16:F=298.16 ' Earth's radius, 1/Earth flattening coef. 5110 G0=75369793000000# ' GM of Earth in (orbits/day)^2/km^3 5120 G1=1.0027379093#:C=299792.5 ' Sidereal/Solar time rate ratio 5130 ' 5140 ' ****** GROUND STATION CONSTANTS ****** 5150 OPEN "GROUND.DAT" AS #1 LEN=42 5160 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$ 5170 GET #1,1 5180 L9=CVS(LA$):W9=CVS(LO$):H9=CVS(GH$) 5190 CLOSE #1 5200 'L9=Latitude in degrees 5210 'W9=Longitude in degrees 5220 'H9=Height above sea level in meters 5230 'C$=GROUND STATION CALL+LOCATION STRING 5240 FOR I=1 TO 10 '**** I = STRINGLENGHT TO BE STRIPPED OF TRAILING SPACES**** 5250 GRT$=MID$(GR$,11-I,1) 5260 IF GRT$ <> " " THEN GRR$=LEFT$(GR$,11-I):I=10 ' GRR$ IS GR$ STRIPPED OFTRAILING PADDED SPACES 5270 NEXT 5280 I=0 5290 FOR I=1 TO 20 '**** I = STRINGLENGHT TO BE STRIPPED OF TRAILING SPACES**** 5300 GLT$=MID$(GL$,21-I,1) 5310 IF GLT$ <> " " THEN GLR$=LEFT$(GL$,21-I):I=20 ' GLR$ IS GL$ STRIPPED OFTRAILING PADDED SPACES 5320 NEXT 5330 C$=GRR$+" "+GLR$ '**** END PROGRAM STRIP TRAILING SPACES, HSI JAN.1985 5340 ' 5350 ' ****** DERIVED CONSTANTS ****** 5360 P2=2*P1:P0=P1/180:F=1/F:L8=L9*P0:S9=SIN(L8):C9=COS(L8) 5370 S8=SIN(-W9*P0):C8=COS(W9*P0) 5380 R9=R0*(1-(F/2)+(F/2)*COS(2*L8))+H9/1000 5390 L8=ATN((1-F)^2*S9/C9):Z9=R9*SIN(L8) 5400 X9=R9*COS(L8)*C8:Y9=R9*COS(L8)*S8 5410 GOTO 5440 5420 BEEP:COLOR 12:PRINT" enter YEAR 1982 or higher !":COLOR 14,1,0 5430 ' ****** INPUT DATA ****** 5440 INPUT; "Start: Year (19YY) = ",Y:IF Y<1982 GOTO 5420 ELSE YY=Y:Y=Y/100:Y=INT(100*(Y-INT(Y))+.1) 5450 INPUT; " Month (1-12) = ",M:INPUT; " Day = ",D 5460 T$=FNT$(Y)+"/"+FNT$(M)+"/"+FNT$(D)+" at " 5470 TE$=FNT$(D)+"."+FNT$(M)+"."+FNT$(Y)+" at " 5480 D8=D+INT(30.55*(M+2))-2*(INT(.1*(M+7)))-91 5490 IF M>2 THEN IF Y/4=INT(Y/4) THEN D8=D8+1 5500 PRINT " Day # ";D8:PRINT 5510 INPUT; "Start: UTC Hours(HH) = ",H 5520 INPUT " Min. = ",M:T7=D8+H/24+M/1440 5530 T$=T$+FNT$(H)+FNT$(M)+ ":00 H" 5540 INPUT; "Duration: Hours = ",H1 5550 INPUT " Min. = ",M1:T8=T7+H1/24+M1/1440 5560 INPUT; "Timestep : Min. = ",M2:T9=M2/1440 5570 PRINT USING " From ###.####### to ###.#######";T7,T8 5580 PRINT:INPUT "MINIMUM ELEVATION ? (DEFAULT 0) Deg. = ",E8 5590 GOTO 5610 5600 COLOR 28,1,0:BEEP 5610 PRINT:INPUT "Output to Printer (P) or Screen (S) ?-->",P$ 5620 IF ( P$="P" OR P$="p" OR P$="S" OR P$="s" ) THEN 5630: ELSE 5600 5630 COLOR 14,1,0:IF P$="P" OR P$="p" THEN P%=2 ELSE P%=3 5640 IF P%=3 THEN C9$=C8$:GOTO 5740 5650 CLS:COLOR 12:LOCATE 12,20:PRINT"IS THE PRINTER READY ??":LOCATE 14,9 5660 PRINT "SWITCH PRINTER ON AND ALIGN PAGE !! (Y/N) ":COLOR 14 5670 Z$="YyNn" 5680 K$=INKEY$:IF K$="" THEN 5680 5690 K=INSTR(Z$,K$) 5700 ON K GOTO 5740,5740,5720,5720 5710 BEEP:GOTO 5680 5720 BEEP:BEEP:BEEP:GOTO 5650 5730 ' ****** ESTABLISH SIDEREAL TIME TABLE MATRIX ****** 5740 RESTORE 5850:FLG1=0:FLG2=0:CLS 5750 FOR I1=1 TO 5 5760 READ Y1(I1), G3(I1) 5770 IF Y1(I1)=Y THEN FLG1=1 5780 IF Y1(I1)=Y-1 THEN FLG2=1 5790 IF Y1(I1)=0 THEN 5810 5800 NEXT 5810 IF FLG1=1 AND FLG2=1 THEN 5910 5820 PRINT "UNABLE TO FIND INQUIRY YEAR AND/OR PREVIOUS YEAR IN SIDERAL TIMETABLE.":STOP 5830 ' 5840 DATA 88, 0.27469296 5850 DATA 89, 0.276767772 5860 DATA 90, 0.27610467 5870 DATA 91, 0.27544157 5880 DATA 0,0 5890 ' 5900 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ****** 5910 I=0 5920 OPEN "KEPELER.DAT" AS #1 LEN=56 5930 FIELD #1, 10 AS II$, 2 AS Y3$, 8 AS T0$, 4 AS I0$, 4 AS O0$, 4 AS E0$, 4 AS W0$, 4 AS M0$, 8 AS N0$, 4 AS K0$, 4 AS F1$ 5940 I=I+1:IF I>20 THEN 6080 5950 GET #1,I 5960 FOR J=1 TO 10 5970 IF MID$(II$,J,1)=SPACE$(1) THEN 6000 ELSE IF J=10 THEN J=11 5980 NEXT 5990 CLOSE #1 6000 II$(I)=LEFT$(II$,J-1):IF II$(I)="END" THEN 6080 6010 IF LEFT$(II$,1)=SPACE$(1) THEN 6080 6020 Y3(I)=CVI(Y3$):T0(I)=CVD(T0$):I0(I)=CVS(I0$):O0(I)=CVS(O0$) 6030 E0(I)=CVS(E0$):W0(I)=CVS(W0$):M0(I)=CVS(M0$):N0(I)=CVD(N0$) 6040 K0(I)=CVS(K0$):F1(I)=CVS(F1$) 6050 IF Y3(I)=Y THEN 5940 ELSE IF Y3(I)=Y-1 THEN 5940 ELSE PRINT "ELEMENTS for satellite";II$(I);" NOT from CURRENT or PRECEEDING YEAR.":STOP 6060 ' 6070 ' ****** SELECT SATELLITE FROM MENU ****** 6080 PRINT "SATELLITE SELECTION MENU":PRINT 6090 FOR J=1 TO I-1 6100 PRINT "Entry # ";J;" for ";II$(J) 6110 NEXT 6120 PRINT:INPUT "SELECT Entry # : ",J 6130 IF J<1 OR J>20 THEN 6100 6140 PRINT :PRINT "Doppler calculated for frequ. = ";F1(J);" MHz" 6150 INPUT " Change frequency to: (0 for default) ",D 6160 IF D<>0 THEN F1(J)=D 6170 PRINT#P%, :PRINT#P%, "Orbital ELEMENTS for ";II$(J) 6180 PRINT#P%, 6190 PRINT#P%, "Reference epoch = ";Y3(J);" +";T0(J) 6200 PRINT#P%, "Starting epoch = ";Y;" +";T7;" = ";T$ 6210 PRINT#P%, 6220 PRINT#P%, "Parameter";TAB(20);"Reference";TAB(40);"Starting" 6230 T=T7 6240 IF Y3(J)=Y-1 THEN T=T+365:T8=T8+365 ELSE 6260 6250 IF Y3(J)/4=INT(Y3(J)/4) THEN T=T+1:T8=T8+1 6260 FOR I2=1 TO I1:IF Y3(J)=Y1(I2) THEN G2=G3(I2) 6270 NEXT 6280 GOSUB 6780 6290 PRINT#P%, "Orbit Number ";TAB(20);K0(J);TAB(40);K 6300 PRINT#P%, "Mean Anomaly ";TAB(20);M0(J);TAB(40);M/P0 6310 PRINT#P%, "Inclination ";TAB(20);I0(J) 6320 PRINT#P%, "Eccentricity ";TAB(20);E0(J) 6330 PRINT#P%, "Mean Motion ";TAB(20);N0(J) 6340 PRINT#P%, "S.M.A.,km ";TAB(20);A0(J) 6350 PRINT#P%, "Arg. Perigee ";TAB(20);W0(J);TAB(40);W 6360 PRINT#P%, "R. A. A. N. ";TAB(20);O0(J);TAB(40);O 6370 PRINT#P%, "Freq.,MHz ";TAB(20);F1(J):K9=9E+07:K8=9E+07 6380 ' 6390 '****** COMPUTATION LOOP ****** 6400 T=T+T9:K7=INT(T):GOSUB 6780 6410 IF K7=K8 THEN 6430 6420 K8=9E+07:K9=9E+07 6430 GOSUB 6910:IF E9<E8 THEN 6580 6440 IF K7=K8 AND K=K9 THEN 6500 6450 IF K7=K8 THEN 6490 ELSE GOSUB 6690 6460 K8=K7 6470 PRINT#P%, " U.T.C. AZ EL DOPPLER RANGE HEIGHT LAT. LONG. PHASE" 6480 PRINT#P%, "HHMM:SS deg deg Hz km km deg deg <256> 6490 PRINT#P%, TAB(21) "- - - ORBIT #";K;"- - -" 6500 K9=K:T4=T-K7:S4=INT(T4*86400!):H4=INT(S4/3600+.000001) 6510 M4=INT((S4-H4*3600)/60+.000001) 6520 S4=S4-3600*H4-60*M4 6530 T$=FNT$(H4)+FNT$(M4)+":"+FNT$(S4) 6540 F9=-F1(J)*1000000!*R8/C 6550 PRINT#P%, T$; 6560 PRINT#P%, USING " ### ### #####";A9;E9;F9; 6570 PRINT#P%, USING " ##### ##### ###.# ###.# ###";R5;(R-R0);L5;W5;M9 6580 IF T<T8 THEN GOTO 6400 6590 PRINT#P%, C9$ 6600 PRINT "Do YOU have another INQUIRY ? (Y/N) " 6610 PRINT:PRINT"Else you return to the MAIN MENU !":PRINT 6620 Z$="YyNn" 6630 K$=INKEY$:IF K$="" THEN 6630 6640 K=INSTR(Z$,K$) 6650 ON K GOTO 4830,4830,6670,6670 6660 BEEP:GOTO 6630 6670 CLOSE :GOTO 50 6680 '****** PAGE HEADER SUBROUTINE ****** 6690 PRINT#P%, C9$;C$;" Lat.=";L9;" W.Long.=";W9;" Ht.=";H9; 6700 P=P+1:PRINT#P%, TAB(70) "Page # ";P 6710 PRINT#P%, TAB(15)" - - - Minimum Elevation = ";E8;"Deg. - - -" 6720 PRINT#P%, 6730 DN=K7:GOSUB 7230 6740 PRINT#P%, TAB(14) "- - - DAY #";K7;"- - - ";M$;" ";DD;",";YY;"- - -" 6750 PRINT#P%, :RETURN 6760 ' 6770 '****** ORBIT DETERMINATION AND UTILITY ROUTINES ****** 6780 A0(J)=((G0/(N0(J)*N0(J)))^(1/3)) 6790 E2=1-E0(J)*E0(J):E1=SQR(E2):Q0=M0(J)/360+K0(J) 6800 K2=9.95*((R0/A0(J))^3.5)/(E2*E2) 6810 S1=SIN(I0(J)*P0):C1=COS(I0(J)*P0) 6820 O=O0(J)-(T-T0(J))*K2*C1 6830 S0=SIN(O*P0):C0=COS(O*P0) 6840 W=W0(J)+(T-T0(J))*K2*(2.5*(C1*C1)-.5) 6850 S2=SIN(W*P0):C2=COS(W*P0) 6860 CC(1,1)=+(C2*C0)-(S2*S0*C1):CC(1,2)=-(S2*C0)-(C2*S0*C1) 6870 CC(2,1)=+(C2*S0)+(S2*C0*C1):CC(2,2)=-(S2*S0)+(C2*C0*C1) 6880 CC(3,1)=+(S2*S1):CC(3,2)=+(C2*S1) 6890 Q=N0(J)*(T-T0(J))+Q0:K=INT(Q):M9=INT((Q-K)*256):M=(Q-K)*P2 6900 RETURN 6910 E=M+E0(J)*SIN(M)+.5*(E0(J)*E0(J))*SIN(2*M) 6920 S3=SIN(E):C3=COS(E):R3=1-E0(J)*C3:M1=E-E0(J)*S3 6930 M5=M1-M:IF ABS(M5)<.000001 THEN 6950 ELSE E=E-M5/R3 6940 GOTO 6920 6950 X0=A0(J)*(C3-E0(J)):Y0=A0(J)*E1*S3:R=A0(J)*R3 6960 X1=X0*CC(1,1)+Y0*CC(1,2):Y1=X0*CC(2,1)+Y0*CC(2,2):Z1=X0*CC(3,1)+Y0*CC(3,2) 6970 G7=T*G1+G2:G7=(G7-INT(G7))*P2:S7=-SIN(G7):C7=COS(G7) 6980 X=+(X1*C7)-(Y1*S7):Y=+(X1*S7)+(Y1*C7):Z=Z1 6990 X5=(X-X9):Y5=(Y-Y9):Z5=(Z-Z9):R5=SQR(X5*X5+Y5*Y5+Z5*Z5) 7000 IF T6<>T THEN R8=((R6-R5)/(T6-T))/86400! ELSE R8=-9000000000# 7010 R6=R5:T6=T 7020 Z8=+(X5*C8*C9)+(Y5*S8*C9)+(Z5*S9) 7030 X8=-(X5*C8*S9)-(Y5*S8*S9)+(Z5*C9):Y8=+(Y5*C8)-(X5*S8) 7040 S5=Z8/R5:C5=SQR(1-S5*S5):E9=ATN(S5/C5)/P0 7050 IF X8<0 THEN A9=P1+ATN(Y8/X8) ELSE 7070 7060 GOTO 7100 7070 IF X8>0 AND Y8>=0 THEN A9=ATN(Y8/X8) ELSE IF X8>0 THEN A9=P2+ATN(Y8/X8) ELSE 7090 7080 GOTO 7100 7090 IF Y8<0 THEN A9=3*P1/2 ELSE A9=P1/2 7100 A9=A9/P0 7110 IF X<0 THEN W5=P1+ATN(Y/X) ELSE 7130 7120 GOTO 7160 7130 IF X>0 AND Y>=0 THEN W5=ATN(Y/X) ELSE IF X>0 THEN W5=P2+ATN(Y/X) ELSE 7150 7140 GOTO 7160 7150 IF Y<0 THEN W5=3*P1/2 ELSE W5=P1/2 7160 W5=360-W5/P0 7170 B5=Z/R:L5=ATN(B5/(SQR(1-B5^2)))/P0 7180 RETURN 7190 INPUT"DAY OF YEAR NUMBER:";DN 7200 GOSUB 7230 7210 PRINT DD,M$ 7220 GOTO 7190 7230 ' ****** DATE FROM DAY OF YEAR NUMBER ****** 7240 ' 7250 DD=0 7260 YS=Y3(J) 7270 DN=DN-31:IF DN<=0 GOTO 7430 7280 REM - modified for leap year in 1992 7290 IF YS=92 GOTO 7560 7300 IF YS<>92 THEN DN=DN-28: IF DN<=0 GOTO 7450 7310 DN=DN-31: IF DN<=0 GOTO 7460 7320 DN=DN-30: IF DN<=0 GOTO 7470 7330 DN=DN-31: IF DN<=0 GOTO 7480 7340 DN=DN-30: IF DN<=0 GOTO 7490 7350 DN=DN-31: IF DN<=0 GOTO 7500 7360 DN=DN-31: IF DN<=0 GOTO 7510 7370 DN=DN-30: IF DN<=0 GOTO 7520 7380 DN=DN-31: IF DN<=0 GOTO 7530 7390 DN=DN-30: IF DN<=0 GOTO 7540 7400 DN=DN-31: IF DN<=0 GOTO 7550 7410 YS=YS+1 7420 GOTO 7270 7430 M$="JAN": DD=DN+31: RETURN 7440 M$="FEB": DD=DN+29: RETURN 7450 M$="FEB": DD=DN+28: RETURN 7460 M$="MAR": DD=DN+31: RETURN 7470 M$="APR": DD=DN+30: RETURN 7480 M$="MAY": DD=DN+31: RETURN 7490 M$="JUN": DD=DN+30: RETURN 7500 M$="JLY": DD=DN+31: RETURN 7510 M$="AUG": DD=DN+31: RETURN 7520 M$="SEP": DD=DN+30: RETURN 7530 M$="OCT": DD=DN+31: RETURN 7540 M$="NOV": DD=DN+30: RETURN 7550 M$="DEC": DD=DN+31: RETURN 7560 DN=DN-29: IF DN<=0 THEN 7440 ELSE 7310 7570 GOTO 240 'END