home *** CD-ROM | disk | FTP | other *** search
- 10 '**** SATAUS Programm von OE1HSI VERSION 7.4E 4.APRIL 1990
- 20 '**** VERSION MIT MEMSTORAGE DER MAP UND SATKEPN.DAT,HELLGRÜN
- 30 '**** MIT DRUCKERTEST hsi version **** ohne LOGO, >32k orbits
- 40 '**** MA 256 hinzugefügt 11/88, ESC 0,0 bereinigt,<D> enhanced
- 50 ' ** QUICKBASIC COMPILER PROBLEM CIRCUMVENTED with DIVISION**
- 60 'F10 Auswahl SINGLE DISPLAY REPETITION, Defproblems removed
- 70 ON ERROR GOTO 10020
- 80 OPEN "SATKEPN.DAT" FOR INPUT AS #1: CLOSE 'TEST FILE PRESENCE
- 90 OPEN "SATBODN.DAT" FOR INPUT AS #1: CLOSE
- 100 OPEN "SATMAP.DAT" FOR INPUT AS #1: CLOSE
- 110 CLEAR
- 120 DEFDBL H, N, T: DEFINT J: OPTION BASE 1
- 130 '**** defs *****
- 140 DIM T$(20), S$(40), CC(3, 2), GG3(20)
- 150 DIM C(3, 2), Y1(20), G3(20), SAT(6), SATL(20, 2), K0(20), N0(20), A0(20), F1(20), I$(20)
- 160 DIM PKT(6), KEP(6), E0(20), M0(20), Y3(20), W0(20), T0(20), I0(20), O0(20)
- 170 DIM WLT(3000)
- 180 KEY OFF: SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS : PRINT : PRINT 'CLEAR
- 190 ON ERROR GOTO 10000
- 200 KEY(9) OFF: KEY(10) OFF: KEY(8) OFF: KEY(7) OFF
- 210 GOSUB 6120
- 220 COLOR 10, 4: LOCATE 3, 20: PRINT " SELECT ONE of the FOLLOWING ": COLOR 14, 1
- 230 LOCATE 7, 20: PRINT "<P> Prediction for ONE satellite"
- 240 LOCATE 9, 20: PRINT "<R> Realtime tracking of satellites GRAPH or TABLE"
- 250 LOCATE 11, 20: PRINT "<U> Update/add/delete satellite elements"
- 260 LOCATE 13, 20: PRINT "<G> change/enter Groundstation data"
- 270 COLOR 12, 1, 0: LOCATE 15, 20: PRINT "<Esc> RETURN TO DOS": COLOR 14, 1, 1
- 280 GOSUB 9500
- 290 LOCATE 19, 20, 0, 0, 7: COLOR 10, 4: PRINT " SELECT <P,R,U,G,Esc>--> "; : COLOR 30: PRINT STRING$(2, 176):
- 300 Z$ = "PpRrUuGg" + CHR$(27)
- 310 K$ = INKEY$: IF K$ = "" THEN 310
- 320 COLOR 14, 1, 0: LOCATE 12, 60: PRINT SPACE$(2): K = INSTR(Z$, K$)
- 330 ON K GOTO 6000, 6000, 3500, 3500, 400, 400, 2500, 2500, 350, 350
- 340 GOSUB 9510: COLOR 28, 1, 0: GOTO 280
- 350 CLOSE : CLS : END
- 400 ' ****** SATFILE.BAS enhanced 12/88 ***********
- 410 KEY OFF: SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS
- 420 GOSUB 6120
- 430 OPEN "SATKEPN.DAT" FOR RANDOM AS #1 LEN = 56
- 440 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$
- 450 V1$ = "": COLOR 14, 1, 0
- 460 LOCATE 2, 16
- 470 PRINT "ELEMENTS of the following SATELLITES are AVAILABLE:"
- 480 FOR J% = 1 TO 20: GET #1, J%
- 490 IF ASC(I$) < 33 THEN 510 ELSE IF ASC(I$) > 90 THEN 510
- 500 LOCATE (J% + 2), 10: PRINT I$: NEXT
- 510 LOCATE 7, 35: PRINT "(A) Add a satellite"
- 520 LOCATE 8, 35: PRINT "(D) Delete a satellite"
- 530 LOCATE 9, 35: PRINT "(C) Change elements"
- 540 LOCATE 10, 35: PRINT "(L) List satellite elements"
- 550 LOCATE 11, 35: PRINT "(R) Return to MAIN MENU"
- 560 LOCATE 12, 35: PRINT "select <A,D,C,L,R> -->"
- 570 LOCATE 12, 61: COLOR 30: PRINT STRING$(2, 176)
- 580 Z$ = "RrAaCcDdLl"
- 590 K$ = INKEY$: IF K$ = "" THEN 590
- 600 COLOR 14, 1, 0: LOCATE 12, 61: PRINT SPACE$(2)
- 610 K = INSTR(Z$, K$)
- 620 ON K GOTO 1900, 1900, 660, 660, 710, 710, 880, 880, 670, 670
- 630 GOSUB 9510: GOTO 570
- 640 '
- 650 ' ****** ADD A NEW RECORD ******
- 660 GOSUB 1110: GOSUB 1730: GOSUB 1360: GOSUB 1400: GOTO 1020
- 670 ' ****** list A RECORD ******
- 680 GOSUB 1920: CLS : GOTO 450
- 690 '
- 700 ' ****** CHANGE AN EXISTING RECORD ******
- 710 GOSUB 1050:
- 720 IF I$ <> U$ THEN
- 730 CLS : LOCATE 16, 35: PRINT "SATELLITE not found"
- 740 LOCATE 18, 35: PRINT "TRY ONCE MORE": GOSUB 9510
- 750 GOTO 450
- 760 END IF
- 770 GOSUB 1190
- 780 PRINT "CHANGE ELEMENTS OF THIS SATELLITE ? (Y/N) "
- 790 Z$ = "YyNn"
- 800 K$ = INKEY$: IF K$ = "" THEN 800
- 810 K = INSTR(Z$, K$)
- 820 ON K GOTO 840, 840, 850, 850
- 830 GOSUB 9510: GOTO 800
- 840 CLS : GOSUB 1410: GOTO 1020
- 850 CLS : GOTO 450
- 860 '
- 870 ' ****** DELETE AN EXISTING RECORD ******
- 880 GOSUB 1050
- 890 IF I$ <> U$ THEN
- 900 CLS : LOCATE 16, 35: PRINT "SATELLITE not found"
- 910 LOCATE 18, 35: PRINT "TRY ONCE MORE": GOSUB 9510
- 920 GOTO 450
- 930 END IF
- 940 COLOR 28: LOCATE 22, 25: PRINT "DELETE, are YOU sure ?? (Y/N) "; : COLOR 14
- 950 Z$ = "YyNn"
- 960 K$ = INKEY$: IF K$ = "" THEN 960
- 970 K = INSTR(Z$, K$)
- 980 ON K GOTO 1010, 1010, 1000, 1000
- 990 GOSUB 9510: GOTO 960
- 1000 CLS : GOTO 450
- 1010 GOSUB 1360: GOSUB 1610: GOSUB 1670
- 1020 LOCATE 18, 31: COLOR 10, 4: PRINT "CHANGES are filed ": SLEEP 3: GOTO 450
- 1030 '
- 1040 ' ****** FIND SATELLITE RECORD ******
- 1050 LOCATE 14, 35: INPUT "WHICH SATELLITE ? "; V1$
- 1060 IF V1$ = "" THEN
- 1070 CLS : LOCATE 16, 35: PRINT "NONAME, try again"
- 1080 LOCATE 18, 35: PRINT "TRY ONCE MORE": GOSUB 9510
- 1090 GOTO 450
- 1100 END IF
- 1110 U$ = SPACE$(10): V1$ = UCASE$(V1$): LSET U$ = V1$
- 1120 FOR J% = 1 TO 20: GET #1, J%
- 1130 IF I$ = U$ THEN 1160 ELSE IF ASC(I$) < 33 THEN 1160 ELSE IF ASC(I$) > 90 THEN 1160
- 1140 IF LEFT$(I$, 1) = "" THEN 1160
- 1150 NEXT
- 1160 RETURN
- 1170 '
- 1180 ' ****** DISPLAY SATELLITE RECORD ******
- 1190 CLS : Y3 = CVI(Y3$)
- 1200 T0 = CVD(T0$): I0 = CVS(I0$): O0 = CVS(O0$): E0 = CVS(E0$): W0 = CVS(W0$)
- 1210 M0 = CVS(M0$): N0 = CVD(N0$): K0 = CVS(K0$): F1 = CVS(F1$)
- 1220 PRINT "Satellite = "; I$
- 1230 PRINT "Epoch year = "; Y3
- 1240 PRINT "Epoch day = "; T0
- 1250 PRINT "Inclination = "; I0
- 1260 PRINT "R.A.A.N. = "; O0
- 1270 PRINT "Eccentricity = "; E0
- 1280 PRINT "Arg. of perigee = "; W0
- 1290 PRINT "Mean anomaly = "; M0
- 1300 PRINT "Mean motion = "; N0
- 1310 PRINT "Epoch orbit no. = "; K0
- 1320 PRINT "Beacon Frequ. = "; F1
- 1330 PRINT : RETURN
- 1340 '
- 1350 ' ****** SETUP SATELLITE ELEMENTS FOR DELETE ACTION ******
- 1360 Q$ = SPACE$(10): Y3 = 0: T0 = 0: I0 = 0: O0 = 0: E0 = 0: W0 = 0: M0 = 0: N0 = 0: K0 = 0: F1 = 0
- 1370 CLS : RETURN
- 1380 '
- 1390 ' ****** UPDATE/DELETE SATELLITE ELEMENTS ******
- 1400 PRINT : PRINT "New SATELLITE. Enter following DATA:": PRINT : GOTO 1420
- 1410 COLOR 12: LOCATE 2, 26: PRINT "ENTER NEW DATA or "; CHR$(17) + CHR$(196) + CHR$(217); " for unchanged DATA ": COLOR 14
- 1420 INPUT ; "SATELLITE DESIGNATION = ", U$: IF U$ <> "" THEN Q$ = U$: PRINT : ELSE Q$ = I$: PRINT Q$
- 1430 Q$ = UCASE$(Q$)
- 1440 INPUT ; "EPOCH YEAR (YY) = ", U$: IF U$ <> "" THEN Y3 = VAL(U$): PRINT : ELSE PRINT Y3
- 1450 INPUT ; "EPOCH DAY (DD.DDDD-) = ", U$: IF U$ <> "" THEN T0 = VAL(U$): PRINT : ELSE PRINT USING "###.########"; T0
- 1460 INPUT ; "INCLINATION (DEG.) = ", U$: IF U$ <> "" THEN I0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; I0
- 1470 INPUT ; "R.A.A.N. (DEG.) = ", U$: IF U$ <> "" THEN O0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; O0
- 1480 INPUT ; "ECCENTRICITY = ", U$: IF U$ <> "" THEN E0 = VAL(U$): PRINT : ELSE PRINT USING ".#######"; E0
- 1490 INPUT ; "ARG. OF PERIGEE (DEG.) = ", U$: IF U$ <> "" THEN W0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; W0
- 1500 INPUT ; "MEAN ANOMALY (DEG.) = ", U$: IF U$ <> "" THEN M0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; M0
- 1510 INPUT ; "MEAN MOTION (ORB/DAY) = ", U$: IF U$ <> "" THEN N0 = VAL(U$): PRINT : ELSE PRINT USING "###.########"; N0
- 1520 INPUT ; "EPOCH ORBIT NO. = ", U$: IF U$ <> "" THEN K0 = VAL(U$): PRINT : ELSE PRINT USING "######"; K0
- 1530 INPUT ; "BEACON FREQUENCY (Mhz) = ", U$: IF U$ <> "" THEN F1 = VAL(U$): PRINT : ELSE PRINT USING "###.###"; F1
- 1540 PRINT : PRINT "ALL CORRECT ? (Y/N) "
- 1550 Z$ = "YyNn"
- 1560 K$ = INKEY$: IF K$ = "" THEN 1560
- 1570 K = INSTR(Z$, K$)
- 1580 ON K GOTO 1610, 1610, 1600, 1600
- 1590 GOSUB 9510: GOTO 1560
- 1600 CLS : GOTO 1410
- 1610 LSET I$ = Q$: RSET Y3$ = MKI$(Y3): RSET T0$ = MKD$(T0): RSET I0$ = MKS$(I0)
- 1620 RSET O0$ = MKS$(O0): RSET E0$ = MKS$(E0): RSET W0$ = MKS$(W0): RSET M0$ = MKS$(M0)
- 1630 RSET N0$ = MKD$(N0): RSET K0$ = MKS$(K0): RSET F1$ = MKS$(F1)
- 1640 PUT #1, J%: CLS : RETURN
- 1650 '
- 1660 ' ****** ADJUST RECORDS TO FILL DELETED RECORD SPACE ******
- 1670 FOR K% = J% TO 19
- 1680 GET #1, K% + 1: PUT #1, K%: NEXT
- 1690 GOSUB 1360: J% = 20: GOSUB 1610
- 1700 RETURN
- 1710 '
- 1720 ' ****** ADJUST RECORDS TO INSERT NEW RECORD ******
- 1730 LOCATE 19, 25: PRINT "Do you wish to insert the record";
- 1740 LOCATE 20, 25: PRINT "in a specific position (Y/N) "; : COLOR 30: PRINT STRING$(2, 176)
- 1750 Z$ = "YyNn"
- 1760 K$ = INKEY$: IF K$ = "" THEN 1760
- 1770 COLOR 14, 1, 0: LOCATE 20, 55: PRINT SPACE$(3)
- 1780 K = INSTR(Z$, K$)
- 1790 ON K GOTO 1810, 1810, 1870, 1870
- 1800 GOSUB 9510: GOTO 1740
- 1810 LOCATE 21, 25: PRINT "Which position ( 1 TO "; J% - 1; ")";
- 1820 INPUT R%: IF R% = 0 THEN GOSUB 9510: LOCATE 21, 25: PRINT SPACE$(40): GOTO 1740
- 1830 IF R% > J% - 1 THEN GOSUB 9510: LOCATE 21, 60: PRINT SPACE$(4): GOTO 1810
- 1840 J% = R%
- 1850 FOR K% = 19 TO R% STEP -1
- 1860 GET #1, K%: PUT #1, K% + 1: NEXT
- 1870 RETURN
- 1880 '
- 1890 ' ****** END OF JOB ROUTINE ******
- 1900 CLOSE #1: GOTO 70
- 1910 ' ****** LIST SATELLITE RECORD ******
- 1920 FOR J% = 1 TO 20: GET #1, J%
- 1930 IF ASC(I$) < 33 THEN 2040 ELSE IF ASC(I$) > 90 THEN 2040
- 1940 IF LEFT$(I$, 1) = "" THEN 2040
- 1950 GOSUB 1190
- 1960 PRINT : PRINT "ALL CORRECT ? (Y/N) "
- 1970 Z$ = "YyNn"
- 1980 K$ = INKEY$: IF K$ = "" THEN 1980
- 1990 K = INSTR(Z$, K$)
- 2000 ON K GOTO 2030, 2030, 2020, 2020
- 2010 GOSUB 9510: GOTO 1980
- 2020 CLS : GOSUB 1410
- 2030 NEXT
- 2040 RETURN
- 2050 'END PART CHANGE/ADD/DELETE ELEMENTS
- 2060 ' ****************************************************************
- 2500 ' *****Bodenstations Daten eingeben/ändern v.1.6- OE1HSI APR. 90*****
- 2510 SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS
- 2520 GOSUB 6120
- 2530 COLOR 14, 1, 0
- 2540 LOCATE 3, 29: PRINT " GROUNDSTATION DATA ": PRINT : GOSUB 2870
- 2550 LOCATE 12, 30: PRINT " CHANGE ? (Y/N)"
- 2560 Z$ = "YyNn"
- 2570 K$ = INKEY$: IF K$ = "" THEN 2570
- 2580 K = INSTR(Z$, K$)
- 2590 ON K GOTO 2680, 2680, 2980, 2980
- 2600 GOSUB 9510: COLOR 28: GOTO 2550
- 2610 LOCATE 12, 18: PRINT STRING$(255, 32): FOR I = 16 TO 21: LOCATE I, 17: PRINT STRING$(55, 32): NEXT: GOSUB 2870
- 2620 LOCATE 13, 22: PRINT "Do YOU want to CHANGE AGAIN ? (Y/N) "
- 2630 Z$ = "YyNn"
- 2640 K$ = INKEY$: IF K$ = "" THEN 2640
- 2650 K = INSTR(Z$, K$)
- 2660 ON K GOTO 2680, 2680, 2970, 2970
- 2670 GOSUB 9510: COLOR 28: GOTO 2620
- 2680 COLOR 12: LOCATE 12, 17: PRINT "ENTER NEW DATA or "; CHR$(17) + CHR$(196) + CHR$(217); " for unchanged DATA ": COLOR 14
- 2690 OPEN "SATBODN.DAT" FOR RANDOM AS #1 LEN = 42
- 2700 FIELD #1, 10 AS GR$, 20 AS GL$, 4 AS GH$, 4 AS LO$, 4 AS LA$
- 2710 LOCATE 16, 17: INPUT "CALLSIGN (max. 10 Characters) : ", U$: IF U$ <> "" THEN GS$ = U$ ELSE GS$ = GR1$
- 2720 LOCATE 17, 17: INPUT "LOCATION (max. 20 Characters) : ", U$: IF U$ <> "" THEN GC$ = U$ ELSE GC$ = GL1$
- 2730 LOCATE 18, 17: INPUT "HEIGHT above sealevel in mtrs. : ", U$: IF U$ <> "" THEN SH = VAL(U$) ELSE SH = CVS(GH1$)
- 2740 LOCATE 13, 19: COLOR 10, 4: PRINT "western +360.00 max. east -180.00 max. ": COLOR 14, 1
- 2750 LOCATE 19, 17: INPUT "LONGITUDE west with decimals : ", U$: IF U$ <> "" THEN LO = VAL(U$) ELSE LO = CVS(LO1$)
- 2760 IF LO < 0 THEN LO = 360 + LO
- 2770 LOCATE 13, 19: COLOR 10, 4: PRINT " NORTH of EQUATOR +XX.XX SOUTH -XX.XX ": COLOR 14, 1
- 2780 LOCATE 20, 17: INPUT "LATITUDE +/- (max.) 90 degrs : ", U$: IF U$ <> "" THEN LA = VAL(U$) ELSE LA = CVS(LA1$)
- 2790 LSET GR$ = GS$
- 2800 LSET GL$ = GC$
- 2810 RSET GH$ = MKS$(SH)
- 2820 RSET LO$ = MKS$(LO)
- 2830 RSET LA$ = MKS$(LA)
- 2840 PUT #1, 1
- 2850 CLOSE
- 2860 GOTO 2610
- 2870 OPEN "SATBODN.DAT" FOR RANDOM AS #1 LEN = 42
- 2880 FIELD #1, 10 AS GR$, 20 AS GL$, 4 AS GH$, 4 AS LO$, 4 AS LA$
- 2890 GET #1, 1
- 2900 LOCATE 5, 22: PRINT "CALLSIGN : "; GR$
- 2910 LOCATE 6, 22: PRINT "LOCATION : "; GL$
- 2920 LOCATE 7, 22: PRINT USING "HEIGHT above sealevel : #####"; CVS(GH$)
- 2930 LOCATE 8, 22: PRINT USING "WESTERN LONGITUDE (dgrs) : ###.##"; CVS(LO$)
- 2940 LOCATE 9, 22: PRINT USING "LATITUDE (dgrs) : +##.##"; CVS(LA$): PRINT
- 2950 GR1$ = GR$: GL1$ = GL$: GH1$ = GH$: LO1$ = LO$: LA1$ = LA$
- 2960 CLOSE : RETURN
- 2970 COLOR 10, 4: LOCATE 15, 22: PRINT " DATA is saved in file SATBODN.DAT ": SLEEP 2: GOTO 2990
- 2980 COLOR 10, 4: LOCATE 15, 30: PRINT " DATA UNCHANGED ": SLEEP 2
- 2990 SLEEP 4: COLOR 14: GOTO 180'MAIN MENU
- 3000 '**** ENDE PROGRAMM BODENSTATION DATEN ÄNDERN/SPEICHERN OE1HSI APR. 1990 **
- 3010 '**************************************************************************
- 3500 ' ****** ORBITS2 - *************
- 3510 CLS : KEY OFF: SCREEN 2, 0: WIDTH 80: NDUR = 25: TTT$ = " ON": NOTON = 1
- 3520 OUT 985, 10 ' Set foreground color for high resolution screen
- 3530 LOCATE 2
- 3540 LOCATE 2, 21: PRINT "This program was originally written by"
- 3550 LOCATE 4, 27: PRINT "R. D. Welch, W0SL"
- 3560 LOCATE 7, 12: PRINT "The present version 7.4E was written by OE1HSI - April 90"
- 3570 LOCATE 9, 27: PRINT "Ing. Herbert F. Strasser "
- 3580 LOCATE 10, 27: PRINT "SLATINGASSE 6/B/5"
- 3590 LOCATE 11, 27: PRINT "A 1130 VIENNA/AUSTRIA"
- 3600 GOSUB 6130
- 3610 '
- 3620 ' ****** HOUSE KEEPING ITEMS ******
- 3630 DEF FNMTH = VAL(LEFT$(D$, 2)): DEF FNDAY = VAL(MID$(D$, 4, 2))
- 3640 DEF FNYR = VAL(RIGHT$(D$, 2)): DEF FNHR = VAL(LEFT$(T$, 2))
- 3650 DEF FNMIN = VAL(MID$(T$, 4, 2)): DEF FNSEC = VAL(RIGHT$(T$, 2))
- 3660 ' ****** SETUP UTC DATE AND TIME ******
- 3670 GOSUB 3750
- 3680 LOCATE 15, 30, 0: PRINT "UTC DATE = "; EDAT$
- 3690 LOCATE 16, 30: PRINT "UTC TIME = "; TIME$
- 3700 LOCATE 20, 3: PRINT "ENTER NEW UTC-DATE (DD-MM-YY)?.. or "; CHR$(17) + CHR$(196) + CHR$(217)
- 3710 LOCATE 20, 54: INPUT " ", ED$
- 3720 IF ED$ = "" THEN D$ = DATE$: GOTO 3740
- 3730 D$ = MID$(ED$, 4, 3) + LEFT$(ED$, 3) + RIGHT$(ED$, 2)
- 3740 DATE$ = D$: D$ = DATE$: GOSUB 3750: GOTO 3760'Quick format check
- 3750 MM$ = LEFT$(DATE$, 2): DD$ = MID$(DATE$, 4, 2): JJ$ = RIGHT$(DATE$, 4): EDAT$ = DD$ + "." + MM$ + "." + JJ$: RETURN
- 3760 LOCATE 20, 50: PRINT SPACE$(13)
- 3770 LOCATE 20, 3: PRINT "ENTER NEW UTC-TIME (HH:MM:SS)?.. or "; CHR$(17) + CHR$(196) + CHR$(217)
- 3780 LOCATE 20, 54: INPUT " ", T$
- 3790 IF T$ = "" THEN T$ = TIME$
- 3800 TIME$ = T$: T$ = TIME$ ' Quick format check
- 3810 CLS
- 3820 '
- 3830 ' ****** DRAW AND STORE SATELLITE INDICATOR ******
- 3840 CLS
- 3850 LINE (4, 0)-(4, 4): LINE (0, 2)-(8, 2)
- 3860 GET (0, 0)-(8, 4), SAT: PUT (0, 0), SAT
- 3870 CLS
- 3880 LINE (4, 1)-(4, 3): LINE (3, 2)-(5, 2)
- 3890 GET (0, 0)-(8, 4), PKT: PUT (0, 0), PKT
- 3900 '
- 3910 ' ****** NUMERIC CONSTANTS ******
- 3920 GOSUB 6270
- 3930 '
- 3940 ' ****** GROUND STATION CONSTANTS ******
- 3950 GOSUB 6340
- 3960 '
- 3970 ' ****** DERIVED CONSTANTS ******
- 3980 GOSUB 6480
- 3990 '
- 4000 ' ****** ESTABLISH SIDEREAL TIME TABLE MATRIX ******
- 4010 RESTORE 7100: FLG1 = 0: FLG2 = 0: D$ = DATE$: CLS
- 4020 FOR I1 = 1 TO 14
- 4030 READ Y1(I1), G3(I1) ' Read sidereal time table
- 4040 IF Y1(I1) = FNYR THEN FLG1 = 1
- 4050 IF Y1(I1) = FNYR - 1 THEN FLG2 = 1
- 4060 IF Y1(I1) = 0 THEN 4080
- 4070 NEXT
- 4080 IF FLG1 = 1 AND FLG2 = 1 THEN 4110
- 4090 PRINT "Requested and/or preceeding YEAR NOT in the SIDERAL TIMETABLES. ": SLEEP 3: GOTO 180
- 4100 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ******
- 4110 Y = FNYR: GOSUB 7250: IF RSFLAG = 1 THEN GOTO 180 ELSE GOTO 4140
- 4120 '
- 4130 ' ****** SET UP KEY TRAPPING ******
- 4140 ON KEY(9) GOSUB 5810: KEY(9) STOP
- 4150 ON KEY(8) GOSUB 5600: KEY(8) STOP
- 4160 ON KEY(7) GOSUB 5580: KEY(7) STOP
- 4170 ON KEY(10) GOSUB 5840: KEY(10) OFF
- 4180 FLG9 = 0: FLG10 = 0: GOSUB 5310
- 4190 '
- 4200 ' ****** ORBIT DETERMINATION LOOP STARTS HERE ******
- 4210 FOR J = 1 TO I - 1
- 4220 Q$ = INKEY$: IF Q$ = CHR$(27) THEN CLOSE : GOTO 180
- 4230 IF FLG10 <> 2 THEN 4250
- 4240 IF I$(J) <> I1$ THEN 4310
- 4250 GOSUB 4360
- 4260 IF FLG9 = 0 THEN 4310
- 4270 DISPFL = 0
- 4280 GOSUB 5130:
- 4290 GOSUB 4810: GOSUB 4870' satdis
- 4300 DISPFL = 1
- 4310 GOSUB 5050
- 4320 NEXT
- 4330 GOTO 4210
- 4340 '
- 4350 ' ****** ORBIT CALCULATION SUBROUTINE ******
- 4360 A0(J) = ((G0 / (N0(J) * N0(J))) ^ (1 / 3))
- 4370 E2 = 1 - E0(J) * E0(J): E1 = SQR(E2): Q0 = M0(J) / 360 + K0(J)
- 4380 K2 = 9.95 * ((R0 / A0(J)) ^ 3.5) / (E2 * E2)
- 4390 S1 = SIN(I0(J) * P0): C1 = COS(I0(J) * P0): D$ = DATE$
- 4400 T = INT(30.55 * (FNMTH + 2)) - 2 * ((FNMTH + 7) \ 10) - 91
- 4410 IF FNMTH > 2 THEN IF FNYR / 4 = INT(FNYR / 4) THEN T = T + 1
- 4420 IF Y3(J) = FNYR - 1 THEN T = T + 365 ELSE 4440
- 4430 IF Y3(J) / 4 = INT(Y3(J) / 4) THEN T = T + 1
- 4440 T$ = TIME$: T = T + FNDAY + FNHR / 24 + FNMIN / 1440 + FNSEC / 86400!
- 4450 O = O0(J) - (T - T0(J)) * K2 * C1: S0 = SIN(O * P0): C0 = COS(O * P0)
- 4460 W = W0(J) + (T - T0(J)) * K2 * (2.5 * (C1 * C1) - .5)
- 4470 S2 = SIN(W * P0): C2 = COS(W * P0)
- 4480 C(1, 1) = (C2 * C0) - (S2 * S0 * C1): C(1, 2) = -(S2 * C0) - (C2 * S0 * C1)
- 4490 C(2, 1) = (C2 * S0) + (S2 * C0 * C1): C(2, 2) = -(S2 * S0) + (C2 * C0 * C1)
- 4500 C(3, 1) = (S2 * S1): C(3, 2) = (C2 * S1)
- 4510 Q = N0(J) * (T - T0(J)) + Q0: K = INT(Q): M9 = INT((Q - K) * 256): M = (Q - K) * P2
- 4520 E = M + E0(J) * SIN(M) + .5 * (E0(J) * E0(J)) * SIN(2 * M)
- 4530 S3 = SIN(E): C3 = COS(E): R3 = 1 - E0(J) * C3: M1 = E - E0(J) * S3
- 4540 M5 = M1 - M: IF ABS(M5) < .000001 THEN 4560 ELSE E = E - M5 / R3
- 4550 GOTO 4530
- 4560 X0 = A0(J) * (C3 - E0(J)): Y0 = A0(J) * E1 * S3: R = A0(J) * R3
- 4570 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)
- 4580 FOR I2 = 1 TO I1: IF Y3(J) = Y1(I2) THEN G2 = G3(I2)
- 4590 NEXT
- 4600 G7 = T * G1 + G2: G7 = (G7 - INT(G7)) * P2: S7 = -SIN(G7): C7 = COS(G7)
- 4610 X = (X1 * C7) - (Y1 * S7): Y = (X1 * S7) + (Y1 * C7): Z = Z1
- 4620 X5 = (X - X9): Y5 = (Y - Y9): Z5 = (Z - Z9): R5 = SQR(X5 * X5 + Y5 * Y5 + Z5 * Z5)
- 4630 Z8 = (X5 * C8 * C9) + (Y5 * S8 * C9) + (Z5 * S9)
- 4640 X8 = -(X5 * C8 * S9) - (Y5 * S8 * S9) + (Z5 * C9): Y8 = (Y5 * C8) - (X5 * S8)
- 4650 S5 = Z8 / R5: C5 = SQR(1 - S5 * S5): E9 = ATN(S5 / C5) / P0
- 4660 IF X8 < 0 THEN A9 = P1 + ATN(Y8 / X8) ELSE 4680
- 4670 GOTO 4710
- 4680 IF X8 > 0 AND Y8 >= 0 THEN A9 = ATN(Y8 / X8) ELSE IF X8 > 0 THEN A9 = P2 + ATN(Y8 / X8) ELSE 4700
- 4690 GOTO 4710
- 4700 IF Y8 < 0 THEN A9 = 3 * P1 / 2 ELSE A9 = P1 / 2
- 4710 A9 = A9 / P0
- 4720 IF X < 0 THEN W5 = P1 + ATN(Y / X) ELSE 4740
- 4730 GOTO 4770
- 4740 IF X > 0 AND Y >= 0 THEN W5 = ATN(Y / X) ELSE IF X > 0 THEN W5 = P2 + ATN(Y / X) ELSE 4760
- 4750 GOTO 4770
- 4760 IF Y < 0 THEN W5 = 3 * P1 / 2 ELSE W5 = P1 / 2
- 4770 W5 = 360 - W5 / P0: B5 = Z / R: L5 = ATN(B5 / (SQR(1 - B5 ^ 2))) / P0
- 4780 RETURN
- 4790 '
- 4800 ' ****** LAT./LONG. PLOT ROUTINE ******
- 4810 Y6 = CINT(.7111 * (90 - L5) + 3)
- 4820 IF W5 <= 270 AND W5 >= 0 THEN X6 = CINT(477 - W5 * 1.7444)
- 4830 IF W5 > 270 AND W5 <= 360 THEN X6 = CINT(1105 - W5 * 1.7444)
- 4840 RETURN
- 4850 '
- 4860 ' ****** PUT SATELLITE ON SCREEN ROUTINE ******
- 4870 GET (X6 - 4, Y6 - 2)-(X6 + 4, Y6 + 2), KEP
- 4880 FOR ID = 1 TO (NDUR * 10): NEXT ID 'ZEILENDELAY
- 4890 PUT (X6 - 4, Y6 - 2), SAT, PRESET
- 4900 FOR ID = 1 TO (NDUR * 12): NEXT ID 'AUFBLINKDELAY
- 4910 PUT (X6 - 4, Y6 - 2), SAT
- 4920 PUT (X6 - 4, Y6 - 2), KEP, PSET
- 4930 PUT (X6 - 4, Y6 - 2), SAT
- 4940 IF FLG0 = 0 THEN 4970
- 4950 PUT (SATL(J, 1), SATL(J, 2)), SAT
- 4960 PUT (SATL(J, 1), SATL(J, 2)), PKT, OR
- 4970 SATL(J, 1) = X6 - 4: SATL(J, 2) = Y6 - 2
- 4980 IF J = I - 1 THEN FLG0 = 1
- 4990 LOCATE 1, 1: PRINT "[E"; : FOR ID = 1 TO (NDUR * 10): NEXT ID 'NACHBLINKDELAY
- 5000 IF NOTON = 1 THEN GOTO 5020
- 5010 PLAY "MB N38 L42"
- 5020 RETURN
- 5030 '
- 5040 ' ****** PRINT SATELLITE DETAILS SUBROUTINE ******
- 5050 KEY(9) ON: KEY(10) ON: KEY(8) ON: KEY(7) ON
- 5060 KEY(10) STOP: KEY(9) STOP: KEY(8) STOP: KEY(7) STOP
- 5070 IF FLGK = 1 THEN GOSUB 5290
- 5080 IF FLG9 = 0 GOTO 5180
- 5090 IF FLG10 = 1 THEN GOSUB 5650
- 5100 IF FLG10 = 0 THEN 5130 ELSE V$ = SPACE$(10): LSET V$ = I$(J)
- 5110 IF V$ <> U$ THEN 5260
- 5120 LOCATE 25, 73: PRINT "SELECTED";
- 5130 IF DISPFL = 1 THEN GOTO 5260
- 5140 LOCATE 25, 1: PRINT SPACE$(68);
- 5150 LOCATE 25, (12 - LEN(I$(J))) / 2 + 1: PRINT I$(J);
- 5160 LOCATE 25, 15
- 5170 GOTO 5240
- 5180 COLOR 3: LOCATE 3, 44: PRINT EDAT$: LOCATE 4, 37: PRINT T$
- 5190 IF E9 >= 0 THEN COLOR 12 ELSE 5210
- 5200 IF E9 > 0 AND E9 < 1 THEN COLOR 28: BEEP
- 5210 LOCATE 1 * J + 8, 15: PRINT SPACE$(50)
- 5220 LOCATE 1 * J + 8, (12 - LEN(I$(J))) / 2 + 1: PRINT I$(J)
- 5230 LOCATE 1 * J + 8, 15
- 5240 PRINT USING "### ### ##### ##### ###.# ###.# ###### ###"; A9; E9; R5; (R - R0); L5; W5; K; M9;
- 5250 IF FLG9 = 0 GOTO 5260 ELSE LOCATE 20, 65: PRINT TIME$;
- 5260 RETURN
- 5270 '
- 5280 ' ****** SET UP SCREEN DISPLAY ROUTINE ******
- 5290 CLS : FLG0 = 0: FLGK = 0: FLG10 = 0
- 5300 IF FLG9 = 1 THEN 5390
- 5310 SCREEN 0, 1: COLOR 2, 0, 0
- 5320 LOCATE 1, 40 - LEN(C$) / 2, 0: PRINT C$
- 5330 LOCATE 2, 24: PRINT " REALTIME SATELLITE TRACKING "
- 5340 LOCATE 3, 29: PRINT "COORDINATES ON"
- 5350 LOCATE 4, 34: PRINT "AT": LOCATE 4, 46: PRINT "UTC"
- 5360 LOCATE 25, 4: PRINT "ESC = END F9 = GRAPH <-> TABLE ";
- 5370 L1 = 6: L2 = 7: L3 = 8
- 5380 GOTO 5510
- 5390 GOSUB 5780: SCREEN 2, 0: OUT 985, 10: IF FLAGM <> 0 THEN GOTO 5430
- 5400 DEF SEG = &HB800: BLOAD "SATMAP.DAT", 0: DEF SEG = 0
- 5410 W5 = W9: L5 = L9: GOSUB 4810
- 5420 CIRCLE (X6, Y6), 2: FLAGM = 1: GOTO 5440
- 5430 PUT (0, 0), WLT, PSET: FLG0 = 1
- 5440 GOSUB 5750: L1 = 22: L2 = 23: L3 = 24
- 5450 LOCATE 20, 2: PRINT "Calculated for on "; EDAT$; " at h-UTC";
- 5460 LOCATE 20, 16 + (30 - LEN(C$)) / 2: PRINT C$
- 5470 LOCATE 1, 1: PRINT "[ESC]=END"
- 5480 LOCATE 1, 15: PRINT "[F7]=SPEED ": LOCATE 1, 32: PRINT "[F8]=BEEP"
- 5490 LOCATE 1, 50: PRINT "[F9]=LISTING": LOCATE 1, 66: PRINT "[F10]=SINGLESAT";
- 5500 GOSUB 5610: GOSUB 5590
- 5510 LOCATE L1, 3
- 5520 PRINT "NAME or AZ EL range height latid. longit. orbit PHASE"
- 5530 LOCATE L2, 3
- 5540 PRINT "DESIGNATOR deg deg km km deg deg No. <256>"
- 5550 LOCATE L3, 3
- 5560 PRINT "---------- --- --- ----- ------ ----- ----- ------ ---";
- 5570 RETURN
- 5580 NDUR = NDUR - 8: IF NDUR < 1 THEN NDUR = 73
- 5590 LOCATE 1, 26: PRINT USING "#"; (NDUR \ 8); : RETURN
- 5600 IF NOTON = 0 THEN NOTON = 1: TTT$ = " ON": ELSE NOTON = 0: TTT$ = "OFF"
- 5610 LOCATE 1, 41: PRINT TTT$: RETURN 'NOTON TOGGELN
- 5620 ' ****** SELECT SINGLE SATELLITE ROUTINE ******
- 5630 LOCATE 25, 1: PRINT SPACE$(79); : FSOK = 0
- 5640 LOCATE 25, 1: INPUT ; "Not found, try again or <CR> for ALL "; I1$: GOTO 5670
- 5650 LOCATE 25, 1: PRINT SPACE$(79); : FSOK = 0
- 5660 LOCATE 25, 1: INPUT ; "SELECT stellite or hit <CR> for ALL "; I1$
- 5670 IF I1$ = "" THEN FLG10 = 0: GOTO 5730
- 5680 FOR JA = 1 TO ITOT
- 5690 IF I1$ = I$(JA) THEN FSOK = 1:
- 5700 NEXT JA
- 5710 IF FSOK = 1 THEN GOTO 5720: ELSE GOSUB 9510: GOTO 5630
- 5720 U$ = SPACE$(10): LSET U$ = I1$: FLG10 = 2
- 5730 LOCATE 25, 1: PRINT SPACE$(78);
- 5740 RETURN
- 5750 WIDTH 80
- 5760 LOCATE , , 1, 12, 13
- 5770 RETURN
- 5780 ' SWITCH TO COLOR
- 5790 OUT 980, 2: OUT 981, 85
- 5800 RETURN
- 5810 IF FLG9 = 0 THEN FLG9 = 1: SOUND 1800, 1: GOTO 5830'FLAG9 TOGGELN
- 5820 FLG9 = 0: GET (0, 0)-(639, 144), WLT
- 5830 FLGK = 1: RETURN
- 5840 IF FLG9 = 1 THEN FLG10 = 1 ELSE FLG10 = 0: GOTO 5060
- 5850 SOUND 1800, 1: RETURN
- 5860 GOTO 180 'ENDE PROGRAMMTEIL ECHTZEITDISPLAY
- 6000 '****** ORBIT2 *************
- 6010 KEY OFF: SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS
- 6020 PRINT " This program originates from publications of the AMSAT JOURNAL"
- 6030 PRINT " AMSAT ORBITAL PREDICTION PROGRAM de W3IWI - May,1980"
- 6040 PRINT " by Dr. Thomas A. Clark, W3IWI"
- 6050 PRINT
- 6060 PRINT " it was first adopted to the IBM-PC by Mr. R. D. Welch, W0SL - Mai, 1983"
- 6070 PRINT
- 6080 PRINT " The present version 7.4E was written and compiled with QUICKBASIC 4.5"
- 6090 PRINT " by Ing. H.F.STRASSER OE1HSI in April 1990"
- 6100 PRINT " A 1130 VIENNA/AUSTRIA": PRINT :
- 6110 GOSUB 6120: GOTO 6190
- 6120 COLOR 1, 2
- 6130 LOCATE 23, 5: PRINT " NON COMMERCIAL USE GRANTED, PROVIDED THAT CREDIT IS GIVEN ";
- 6140 LOCATE 24, 5: PRINT " TO THE AUTHORS, AMSAT AND THE ORBIT MAGAZINE ";
- 6150 LOCATE 25, 5: PRINT " PROGRAM by OE1HSI, CALCULATION W3IWI, GRAPHS W0SL COPYRIGHT 1980-1990 ";
- 6160 RETURN
- 6170 '
- 6180 ' ****** HOUSEKEEPING ITEMS ******
- 6190 COLOR 14, 1, 0: LOCATE 13, 1'CLEAR
- 6200 OPEN "SCRN:" FOR OUTPUT AS #3
- 6210 C8$ = CHR$(10) + CHR$(10) + CHR$(10) + CHR$(10)
- 6220 C9$ = CHR$(12) + CHR$(7)
- 6230 DEF FNT$ (D) = CHR$(48 + INT(D / 10)) + CHR$(48 + D - 10 * INT(D / 10))
- 6240 YY = 0
- 6250 '****** NUMERIC CONSTANTS ******
- 6260 GOSUB 6270: GOSUB 6340: GOTO 6470
- 6270 P1 = 3.1415926535# ' Value of PI
- 6280 R0 = 6378.16: F = 298.16 ' Earth's radius, 1/Earth flattening coef.
- 6290 G0 = 75369793000000# ' GM of Earth in (orbits/day)^2/km^3
- 6300 G1 = 1.0027379093#: C = 299792.5' Sidereal/Solar time rate ratio
- 6310 RETURN
- 6320 '
- 6330 ' ****** GROUND STATION CONSTANTS ******
- 6340 OPEN "SATBODN.DAT" FOR RANDOM AS #1 LEN = 42
- 6350 FIELD #1, 10 AS TR$, 20 AS TL$, 4 AS GH$, 4 AS LO$, 4 AS LA$
- 6360 GET #1, 1
- 6370 L9 = CVS(LA$): W9 = CVS(LO$): H9 = CVS(GH$): GL$ = TL$: GR$ = TR$
- 6380 CLOSE #1
- 6390 'L9=BREITE IN GRD.
- 6400 'W9=LÄNGE westl. in Grd.
- 6410 'H9=SEEHÖHE IN Mtr.
- 6420 'C$=BODENSTAT. RUFZ. & ORT
- 6430 C$ = RTRIM$(GR$) + " " + RTRIM$(GL$)
- 6440 RETURN '***
- 6450 '
- 6460 ' ****** DERIVED CONSTANTS ******
- 6470 GOSUB 6480: GOTO 6570
- 6480 P2 = 2 * P1: P0 = P1 / 180: F = 1 / F: L8 = L9 * P0: S9 = SIN(L8): C9 = COS(L8)
- 6490 S8 = SIN(-W9 * P0): C8 = COS(W9 * P0)
- 6500 R9 = R0 * (1 - (F / 2) + (F / 2) * COS(2 * L8)) + H9 / 1000
- 6510 L8 = ATN((1 - F) ^ 2 * S9 / C9): Z9 = R9 * SIN(L8)
- 6520 X9 = R9 * COS(L8) * C8: Y9 = R9 * COS(L8) * S8
- 6530 RETURN
- 6540 CSRHLT = CSRLIN: LOCATE (CSRHLT - 1), 1
- 6550 GOSUB 9510: COLOR 12: PRINT " enter YEAR 1990 or later !": COLOR 14, 1, 0
- 6560 ' ****** INPUT DATA ******
- 6570 INPUT ; "Start Year (19YY) = ", Y: IF Y < 1990 GOTO 6540 ELSE YY = Y: Y = Y / 100: Y = INT(100 * (Y - INT(Y)) + .1)
- 6580 INPUT ; " Month (1-12) = ", M
- 6590 IF M > 12 THEN
- 6600 CSRHLT = CSRLIN: POSHLT = POS(0): LOCATE (CSRHLT - 1), 1
- 6610 COLOR 12: PRINT " MONTHS INVALID, ENTER 1-12 !": COLOR 14, 1, 0: GOSUB 9510
- 6620 LOCATE CSRHLT, (POSHLT - 20)
- 6630 GOTO 6580
- 6640 END IF
- 6650 INPUT ; " Day = ", D
- 6660 IF D > 31 THEN
- 6670 POSHLT = POS(0): CSRHLT = CSRLIN: LOCATE (CSRHLT - 1), 1
- 6680 COLOR 12: PRINT " DAY INVALID, ENTER 1-31 ! ": COLOR 14, 1, 0: GOSUB 9510
- 6690 LOCATE CSRHLT, (POSHLT - 11): GOTO 6630
- 6700 END IF
- 6710 CSRHLT = CSRLIN: POSHLT = POS(0)
- 6720 LOCATE (CSRHLT - 1), 1: PRINT STRING$(45, 32); : LOCATE CSRHLT, POSHLT
- 6730 T$ = FNT$(Y) + "/" + FNT$(M) + "/" + FNT$(D) + " at "
- 6740 TE$ = FNT$(D) + "." + FNT$(M) + "." + FNT$(Y) + " um "
- 6750 D8 = D + INT(30.55 * (M + 2)) - 2 * ((M + 7) \ 10) - 91
- 6760 IF M > 2 THEN IF Y / 4 = INT(Y / 4) THEN D8 = D8 + 1
- 6770 PRINT " Day No.= "; D8: PRINT
- 6780 INPUT ; "Start UTC Time (HH) = ", H
- 6790 INPUT " Min. = ", M: T7 = D8 + H / 24 + M / 1440
- 6800 T$ = T$ + FNT$(H) + FNT$(M) + ":00 H"
- 6810 INPUT ; "Timespan in Hours = ", H1
- 6820 INPUT " + Min. = ", M1: T8 = T7 + H1 / 24 + M1 / 1440
- 6830 INPUT ; "Timestep in Min. = ", M2: T9 = M2 / 1440
- 6840 PRINT USING " from ###.####### to ###.#######"; T7; T8
- 6850 PRINT : INPUT "MINIMUM ELEVATION ? (Default 0) dgr. = ", E8
- 6860 GOTO 6880
- 6870 COLOR 28, 1, 0: GOSUB 9510: CSRHLT = CSRLIN: LOCATE (CSRHLT - 2), 1
- 6880 PRINT "OUTPUT to Printer (P), to the SCREEN (S) or to FILE (F) ?-->";
- 6890 P$ = INKEY$: IF P$ = "" THEN 6890
- 6900 IF (P$ = "p" OR P$ = "P" OR P$ = "S" OR P$ = "s" OR P$ = "F" OR P$ = "f") THEN 6910 ELSE 6870
- 6910 COLOR 14, 1, 0: IF P$ = "P" OR P$ = "p" THEN P% = 2: GOTO 6930
- 6920 IF P$ = "S" OR P$ = "s" THEN P% = 3 ELSE P% = 1
- 6930 IF P% = 3 OR P% = 1 THEN C9$ = C8$: GOTO 6990
- 6940 GOSUB 9200: IF DRKFLG = 0 GOTO 6980
- 6950 CLS : COLOR 12: LOCATE 12, 20: PRINT DRK$: LOCATE 14, 20: PRINT NEUEIN$;
- 6960 PRINT : GOTO 6880
- 6970 '**** ESTABLISH SIDERAL TIME TABLE MATRIX *******
- 6980 OPEN "LPT1:" FOR OUTPUT AS #2
- 6990 RESTORE 7100: FLG1 = 0: FLG2 = 0: CLS
- 7000 FOR I1 = 1 TO 13
- 7010 READ Y1(I1), GG3(I1)
- 7020 IF Y1(I1) = Y THEN FLG1 = 1
- 7030 IF Y1(I1) = Y - 1 THEN FLG2 = 1
- 7040 IF Y1(I1) = 0 THEN 7060
- 7050 NEXT
- 7060 IF FLG1 = 1 AND FLG2 = 1 THEN 7240
- 7070 PRINT "CURRENT AND/OR PRECEEDING YEAR NOT IN SIEDERAL TIMETABLES ": SLEEP 3: GOTO 180
- 7080 '
- 7090 ' ****** SIDEREAL TIME TABLE ******
- 7100 DATA 89, 0.2767676850
- 7110 DATA 90, 0.2761045795
- 7120 DATA 91, 0.2754414740
- 7130 DATA 92, 0.2747783685
- 7140 DATA 93, 0.2768531723
- 7150 DATA 94, 0.2761900668
- 7160 DATA 95, 0.2755269613
- 7170 DATA 96, 0.2748638558
- 7180 DATA 97, 0.2769386596
- 7190 DATA 98, 0.2762755541
- 7200 DATA 99, 0.2756124486
- 7210 DATA 0,0
- 7220 '
- 7230 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ******
- 7240 GOSUB 7250: IF RSFLAG = 1 THEN GOTO 180 ELSE GOTO 7430
- 7250 OPEN "SATKEPN.DAT" FOR RANDOM AS #1 LEN = 56
- 7260 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$
- 7270 I = 0: RSFLAG = 0
- 7280 I = I + 1: ITOT = I: IF I > 20 THEN RETURN
- 7290 GET #1, I
- 7300 FOR J = 1 TO 10
- 7310 IF MID$(I$, J, 1) = SPACE$(1) THEN 7340 ELSE IF J = 10 THEN J = 11
- 7320 NEXT
- 7330 CLOSE #1
- 7340 I$(I) = LEFT$(I$, J - 1): IF I$(I) = "END" THEN RETURN
- 7350 IF LEFT$(I$, 1) = SPACE$(1) THEN RETURN
- 7360 Y3(I) = CVI(Y3$): T0(I) = CVD(T0$): I0(I) = CVS(I0$): O0(I) = CVS(O0$)
- 7370 E0(I) = CVS(E0$): W0(I) = CVS(W0$): M0(I) = CVS(M0$): N0(I) = CVD(N0$)
- 7380 K0(I) = CVS(K0$): F1(I) = CVS(F1$)
- 7390 IF Y3(I) = Y THEN 7280 ELSE IF Y3(I) = Y - 1 THEN 7280 ELSE PRINT "ELEMENTS of SATELLITE "; I$(I);
- 7400 PRINT " NOT FROM CURRENT or PRECEEDING YEAR": SLEEP 3: RSFLAG = 1: RETURN
- 7410 '
- 7420 ' ****** SELECT SATELLITE FROM MENU ******
- 7430 CLS : PRINT " SELECT ONE OF THE FOLLOWING: ": PRINT
- 7440 FOR J = 1 TO I - 1
- 7450 PRINT "ENTER No.:"; J; " for "; I$(J)
- 7460 NEXT
- 7470 PRINT : INPUT "SATELLITE No.", J
- 7480 IF J < 1 OR J > I - 1 THEN 7430
- 7490 LOCATE 12, 33: PRINT "Doppler Frequency calculated for"; F1(J); "MHz";
- 7500 LOCATE 14, 33: INPUT "Enter changed Frequ. or <CR> for Default ", D
- 7510 IF D <> 0 THEN F1(J) = D
- 7520 IF P% <> 1 THEN 7660 ELSE CLOSE #1
- 7530 LOCATE 16, 33: PRINT "WHICH DRIVE SHOULD BE USED FOR DATA-OUTPUT ?";
- 7540 LOCATE 18, 36: INPUT "==> enter drive identifier (A.....J): "; DR$: LOCATE 16, 33: PRINT SPC(45);
- 7550 DRM$ = "ABCDEFGHIJabcdefghij"
- 7560 FOR I = 1 TO 20
- 7570 IF DR$ = MID$(DRM$, I, 1) THEN 7610 'drive ok?
- 7580 NEXT
- 7590 LOCATE 17, 36: COLOR 10, 4: PRINT "*** INVALID DRIVE identifier *** "; : PLAY "AFCEG": SLEEP 1
- 7600 COLOR 14, 1: LOCATE 18, 74: PRINT SPACE$(5); : LOCATE 17, 36: PRINT SPACE$(35): : GOTO 7530
- 7610 LOCATE 19, 33: PRINT SPACE$(46): LOCATE 20, 33: PRINT SPACE$(46);
- 7620 ON ERROR GOTO 7640: OUTP$ = DR$ + ":SATDATA.TXT": OPEN OUTP$ FOR OUTPUT AS #1: LOCATE 20, 12: ON ERROR GOTO 10000
- 7630 LOCATE 20, 33: COLOR 10, 4: PRINT "SAVING DATA ON DRIVE "; DR$; ": AS FILE: SATDATA.TXT": COLOR 14, 1: ON ERROR GOTO 10000: GOTO 7660
- 7640 LOCATE 18, 33: COLOR 10, 4: PRINT " *** CAN'T OPEN FILE - CHECK DRIVE "; DR$; ": *** ": PLAY "CGCGCG"
- 7650 LOCATE 18, 33: COLOR 14, 1: PRINT SPACE$(46): RESUME 7530
- 7660 IF P% = 3 THEN CLS
- 7670 PRINT #P%, : PRINT #P%, "ORBIT DATA for "; I$(J)
- 7680 PRINT #P%,
- 7690 PRINT #P%, "Referenz Epoche = "; Y3(J); " +"; T0(J)
- 7700 PRINT #P%, "START PERIOD"; Y; " +"; T7; " = "; T$
- 7710 PRINT #P%,
- 7720 PRINT #P%, "Parameter"; TAB(20); "Reference"; TAB(40); "Start"
- 7730 T = T7
- 7740 IF Y3(J) = Y - 1 THEN T = T + 365: T8 = T8 + 365 ELSE 7760
- 7750 IF Y3(J) / 4 = INT(Y3(J) / 4) THEN T = T + 1: T8 = T8 + 1
- 7760 FOR I2 = 1 TO I1: IF Y3(J) = Y1(I2) THEN G2 = GG3(I2)
- 7770 NEXT
- 7780 GOSUB 8350
- 7790 PRINT #P%, "Orbit Number "; TAB(20); K0(J); TAB(40); K
- 7800 PRINT #P%, "Mean Anomaly "; TAB(20); M0(J); TAB(40); M / P0
- 7810 PRINT #P%, "Inclination "; TAB(20); I0(J)
- 7820 PRINT #P%, "Eccentricity "; TAB(20); E0(J)
- 7830 PRINT #P%, "Mean Motion "; TAB(20); N0(J)
- 7840 PRINT #P%, "S.M.A.,km "; TAB(20); A0(J)
- 7850 PRINT #P%, "Arg. Perigee "; TAB(20); W0(J); TAB(40); W
- 7860 PRINT #P%, "R. A. A. N. "; TAB(20); O0(J); TAB(40); O
- 7870 PRINT #P%, "Freq.,MHz "; TAB(20); F1(J): K9 = 9E+07: K8 = 9E+07
- 7880 '
- 7890 '****** COMPUTATION LOOP ******
- 7900 T = T + T9: K7 = INT(T): GOSUB 8350
- 7910 IF K7 = K8 THEN 7930
- 7920 K8 = 9E+07: K9 = 9E+07
- 7930 GOSUB 8520: IF E9 < E8 THEN 8080
- 7940 IF K7 = K8 AND K = K9 THEN 8000
- 7950 IF K7 = K8 THEN 7990 ELSE GOSUB 8260
- 7960 K8 = K7
- 7970 PRINT #P%, " U.T.C. AZ EL DOPPLER RANGE HEIGHT LAT. LONG. PHASE"
- 7980 PRINT #P%, "HHMM:SS dgr: dgr: Hz km km dgr. dgr. <256>"
- 7990 PRINT #P%, TAB(20); "- - - ORBIT No."; K; "- - -"
- 8000 K9 = K: T4 = T - K7: S4 = INT(T4 * 86400!): H4 = INT(S4 / 3600 + .000001)
- 8010 M4 = INT((S4 - H4 * 3600) / 60 + .000001)
- 8020 S4 = S4 - 3600 * H4 - 60 * M4
- 8030 T$ = FNT$(H4) + FNT$(M4) + ":" + FNT$(S4)
- 8040 F9 = -F1(J) * 1000000! * R8 / C
- 8050 PRINT #P%, T$;
- 8060 PRINT #P%, USING " ### ### #####"; A9; E9; F9;
- 8070 PRINT #P%, USING " ##### ##### ###.# ###.# ###"; R5; (R - R0); L5; W5; M9
- 8080 IF T < T8 THEN GOTO 7900
- 8090 PRINT #P%, C9$
- 8100 IF P% = 1 OR P% = 2 THEN LOCATE 19, 60: PLAY "CEGC": COLOR 10: PRINT "END OF CALCULATION!"
- 8110 LOCATE 20, 33: IF P% = 1 THEN PRINT "*** DATA SAVED in SATDATA.TXT ON DRIVE "; DR$; ": ***"
- 8120 CLOSE : ON ERROR GOTO 10000
- 8130 LOCATE 21, 33: PRINT SPACE$(46);
- 8140 LOCATE 22, 33: PRINT SPACE$(46);
- 8150 LOCATE 23, 33: PRINT SPACE$(46);
- 8160 LOCATE 23, 33: PRINT SPACE$(46);
- 8170 LOCATE 22, 33: COLOR 14: PRINT "Another REQUEST ? (Y/N) ";
- 8180 LOCATE 23, 33: PRINT "enter <N> to return to the MAIN MENU !";
- 8190 Z$ = "YyNn"
- 8200 K$ = INKEY$: IF K$ = "" THEN 8200
- 8210 K = INSTR(Z$, K$)
- 8220 ON K GOTO 6010, 6010, 8240, 8240
- 8230 GOSUB 9510: GOTO 8200
- 8240 CLOSE : GOTO 180
- 8250 '****** PAGE HEADER SUBROUTINE ******
- 8260 PRINT #P%, C9$; C$; " W.LONG.="; W9; " LATITUDE="; L9; "Height="; H9;
- 8270 P = P + 1: PRINT #P%, TAB(71); "Page "; P
- 8280 PRINT #P%, TAB(14); " - - Minnimal Ant.Elevation = "; E8; "Degrees-"
- 8290 PRINT #P%,
- 8300 DN = K7: GOSUB 8800
- 8310 PRINT #P%, TAB(14); "- - DAY No."; K7; "- - - "; DD; ". "; M$; YY; "- - -"
- 8320 PRINT #P%, : RETURN
- 8330 '
- 8340 '****** ORBIT DETERMINATION AND UTILITY ROUTINES ******
- 8350 A0(J) = ((G0 / (N0(J) * N0(J))) ^ (1 / 3))
- 8360 E2 = 1 - E0(J) * E0(J): E1 = SQR(E2): Q0 = M0(J) / 360 + K0(J)
- 8370 K2 = 9.95 * ((R0 / A0(J)) ^ 3.5) / (E2 * E2)
- 8380 S1 = SIN(I0(J) * P0): C1 = COS(I0(J) * P0)
- 8390 O = O0(J) - (T - T0(J)) * K2 * C1
- 8400 S0 = SIN(O * P0): C0 = COS(O * P0)
- 8410 W = W0(J) + (T - T0(J)) * K2 * (2.5 * (C1 * C1) - .5)
- 8420 S2 = SIN(W * P0): C2 = COS(W * P0)
- 8430 CC(1, 1) = (C2 * C0) - (S2 * S0 * C1): CC(1, 2) = -(S2 * C0) - (C2 * S0 * C1)
- 8440 CC(2, 1) = (C2 * S0) + (S2 * C0 * C1): CC(2, 2) = -(S2 * S0) + (C2 * C0 * C1)
- 8450 CC(3, 1) = (S2 * S1): CC(3, 2) = (C2 * S1)
- 8460 Q = N0(J) * (T - T0(J)) + Q0: K = INT(Q): M9 = INT((Q - K) * 256): M = (Q - K) * P2
- 8470 IF P% = 3 THEN 8510
- 8480 LOCATE 21, 33: PRINT USING "START CALCULATION AT DAY ###.#######"; T7
- 8490 LOCATE 22, 33: PRINT USING " END CALCULATION AT DAY ###.#######"; T8
- 8500 LOCATE 23, 33: PRINT USING " NOW CALCULATING AT DAY ###.#######"; T;
- 8510 RETURN
- 8520 E = M + E0(J) * SIN(M) + .5 * (E0(J) * E0(J)) * SIN(2 * M)
- 8530 S3 = SIN(E): C3 = COS(E): R3 = 1 - E0(J) * C3: M1 = E - E0(J) * S3
- 8540 M5 = M1 - M: IF ABS(M5) < .000001 THEN 8560 ELSE E = E - M5 / R3
- 8550 GOTO 8530
- 8560 X0 = A0(J) * (C3 - E0(J)): Y0 = A0(J) * E1 * S3: R = A0(J) * R3
- 8570 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)
- 8580 G7 = T * G1 + G2: G7 = (G7 - INT(G7)) * P2: S7 = -SIN(G7): C7 = COS(G7)
- 8590 X = (X1 * C7) - (Y1 * S7): Y = (X1 * S7) + (Y1 * C7): Z = Z1
- 8600 X5 = (X - X9): Y5 = (Y - Y9): Z5 = (Z - Z9): R5 = SQR(X5 * X5 + Y5 * Y5 + Z5 * Z5)
- 8610 IF T6 <> T THEN R8 = ((R6 - R5) / (T6 - T)) / 86400! ELSE R8 = -9000000000#
- 8620 R6 = R5: T6 = T
- 8630 Z8 = (X5 * C8 * C9) + (Y5 * S8 * C9) + (Z5 * S9)
- 8640 X8 = -(X5 * C8 * S9) - (Y5 * S8 * S9) + (Z5 * C9): Y8 = (Y5 * C8) - (X5 * S8)
- 8650 S5 = Z8 / R5: C5 = SQR(1 - S5 * S5): E9 = ATN(S5 / C5) / P0
- 8660 IF X8 < 0 THEN A9 = P1 + ATN(Y8 / X8) ELSE 8680
- 8670 GOTO 8710
- 8680 IF X8 > 0 AND Y8 >= 0 THEN A9 = ATN(Y8 / X8) ELSE IF X8 > 0 THEN A9 = P2 + ATN(Y8 / X8) ELSE 8700
- 8690 GOTO 8710
- 8700 IF Y8 < 0 THEN A9 = 3 * P1 / 2 ELSE A9 = P1 / 2
- 8710 A9 = A9 / P0
- 8720 IF X < 0 THEN W5 = P1 + ATN(Y / X) ELSE 8740
- 8730 GOTO 8770
- 8740 IF X > 0 AND Y >= 0 THEN W5 = ATN(Y / X) ELSE IF X > 0 THEN W5 = P2 + ATN(Y / X) ELSE 8760
- 8750 GOTO 8770
- 8760 IF Y < 0 THEN W5 = 3 * P1 / 2 ELSE W5 = P1 / 2
- 8770 W5 = 360 - W5 / P0
- 8780 B5 = Z / R: L5 = ATN(B5 / (SQR(1 - B5 ^ 2))) / P0
- 8790 RETURN
- 8800 ' ****** DATE FROM DAY OF YEAR NUMBER ******
- 8810 '
- 8820 DD = 0
- 8830 YS = Y3(J)
- 8840 DN = DN - 31: IF DN <= 0 GOTO 9010
- 8850 IF YS = 88 GOTO 9140
- 8860 IF YS = 92 GOTO 9140
- 8870 IF YS = 96 GOTO 9140
- 8880 DN = DN - 28: IF DN <= 0 GOTO 9030
- 8890 DN = DN - 31: IF DN <= 0 GOTO 9040
- 8900 DN = DN - 30: IF DN <= 0 GOTO 9050
- 8910 DN = DN - 31: IF DN <= 0 GOTO 9060
- 8920 DN = DN - 30: IF DN <= 0 GOTO 9070
- 8930 DN = DN - 31: IF DN <= 0 GOTO 9080
- 8940 DN = DN - 31: IF DN <= 0 GOTO 9090
- 8950 DN = DN - 30: IF DN <= 0 GOTO 9100
- 8960 DN = DN - 31: IF DN <= 0 GOTO 9110
- 8970 DN = DN - 30: IF DN <= 0 GOTO 9120
- 8980 DN = DN - 31: IF DN <= 0 GOTO 9130
- 8990 YS = YS + 1
- 9000 GOTO 8840
- 9010 M$ = "JANUARY": DD = DN + 31: RETURN
- 9020 M$ = "FEBRUARY": DD = DN + 29: RETURN
- 9030 M$ = "FEBRUARY": DD = DN + 28: RETURN
- 9040 M$ = "MARCH": DD = DN + 31: RETURN
- 9050 M$ = "APRIL": DD = DN + 30: RETURN
- 9060 M$ = "MAY": DD = DN + 31: RETURN
- 9070 M$ = "JUNE": DD = DN + 30: RETURN
- 9080 M$ = "JULY": DD = DN + 31: RETURN
- 9090 M$ = "AUGUST": DD = DN + 31: RETURN
- 9100 M$ = "SEPTEMBER": DD = DN + 30: RETURN
- 9110 M$ = "OCTOBER": DD = DN + 31: RETURN
- 9120 M$ = "NOVEMBER": DD = DN + 30: RETURN
- 9130 M$ = "DECEMBER": DD = DN + 31: RETURN
- 9140 DN = DN - 29: IF DN <= 0 THEN 9020 ELSE 8890
- 9200 '***** STANDARDSUBROUTINE FÜR PRINTERTEST**********
- 9210 OKDRK$ = "O.K. PRINTER READY"
- 9220 NODRK$ = "PRINTER NOT READY ! "
- 9230 NOPAP$ = "NO PAPER ! "
- 9240 NOEIN$ = "PRINTER IS NOT SWITCHED ON ! "
- 9250 NODRA$ = "THERE IS NO PRINTER ADAPTER INSTALLED."
- 9260 NEUEIN$ = "CORRECT SITUATION AND REENTER"
- 9270 PRNTR = 1: DEF SEG = &H40
- 9280 DBAS = (PRNTR * 2) + 6
- 9290 IF PEEK(DBAS) = 0 THEN DRK$ = NODRA$: GOTO 9360
- 9300 STAT = INP(PEEK(DBAS) + PEEK(DBAS + 1) * 256 + 1) AND 224
- 9310 IF STAT = 192 THEN DRK$ = OKDRK$: DRKFLG = 0: RETURN'OK-AUSSTIEG
- 9320 IF STAT = 64 THEN DRK$ = NODRK$
- 9330 IF STAT = 96 THEN DRK$ = NOPAP$
- 9340 IF STAT = 128 THEN DRK$ = NOEIN$
- 9350 IF STAT = 224 THEN DRK$ = NOEIN$
- 9360 PLAY "MB O2 A8D8G8A8": DRKFLG = 1: RETURN'FEHLERCONDITION
- 9370 '***** ENDE SUBROUTINE DRUCKERTEST *******
- 9500 SOUND 990, 3: SOUND 32000, 1: SOUND 990, 1: SOUND 32000, 1: SOUND 990, 4: RETURN
- 9510 FOR ISI = 1 TO 8
- 9520 SOUND 990, 1: SOUND 32000, 1
- 9530 NEXT ISI: RETURN
- 10000 PRINT ERL, ERR
- 10010 STOP
- 10020 IF ERR = 53 THEN CLS : GOTO 10030 ELSE GOTO 10000
- 10030 IF ERL = 80 THEN PRINT "SATKEPN.DAT NOT FOUND": GOTO 10060
- 10040 IF ERL = 90 THEN PRINT "SATBODN.DAT NOT FOUND": GOTO 10060
- 10050 IF ERL = 100 THEN PRINT "SATMAP.DAT NOT FOUND"
- 10060 PRINT "Files SATKEPN, SATBODN and SATMAP must be in default drive !"
- 10070 PLAY "L3 O2 G L5 A L4 GFED L2 C" 'FEHLERCONDITION WO SIND...
- 10080 STOP