home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / satel / usat88 / usat88.bas < prev    next >
BASIC Source File  |  1988-01-09  |  31KB  |  746 lines

  1. 10 ' REMOVE LINES 3790 AND 3810 FOR INTERPRETERRUN , THE DELAYS ARE IN THERE
  2. 20 ' FOR TIMING IN THE COMPILED RUN ONLY
  3. 30 ' YOU WILL NEED THE FILES "MAP.DAT","ELEMENTS.DAT" AND "GROUND.DAT" TO RUN THIS PROGRAM
  4. 40 '**** SATAUS Menuprogramm de OE1HSI VERSION 1.5  26.JAN. 1985
  5. 50 KEY OFF:SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS:CLEAR:PRINT:PRINT
  6. 60 ON ERROR GOTO 50
  7. 70 KEY(9) OFF:KEY(10) OFF
  8. 80 CLS:PRINT"USAT88.BAS/EXE Modified By Bob Arnold - KB2ECI for 1988/89 data."
  9. 90 PRINT:PRINT"ELEMENTS.DAT file changed to KEPELER.DAT. Expanded orbit # field to"
  10. 100 PRINT"allow for orbits over 32767, added siderial data for 1988 and 1989."
  11. 110 PRINT:PRINT"======================================================================"
  12. 120 PRINT:PRINT"            SELECT ONE OF THE FOLLOWING OPTIONS:"
  13. 130 PRINT:PRINT" (P) ORBITAL PREDICTION PROGRAM"
  14. 140 PRINT:PRINT" (R) REALTIME TRACKING AND HIGH RESOLUTION SCREEN"
  15. 150 PRINT:PRINT" (C) CHANGE, ADD, DELETE ELEMENTS OF SATELLITES"
  16. 160 PRINT:PRINT" (G) CHANGE OR ENTER GROUNDSTATION DATA"
  17. 170 COLOR 12,1,0:PRINT:PRINT" (D) RETURN TO DOS":COLOR 14,1,0
  18. 180 BEEP
  19. 190 PRINT:PRINT"ENTER SELECTION (P,R,C,G,D)--> "
  20. 200 Z$="PpRrCcDdGg"
  21. 210 K$=INKEY$:IF K$="" THEN 210
  22. 220 COLOR 14,1,0:K=INSTR(Z$,K$)
  23. 230 ON K GOTO 4710,4710,1980,1980,260,260,250,250,1510,1510
  24. 240 BEEP:COLOR 28,1,0:GOTO 80
  25. 250 CLS:PRINT" Thanks for using USAT!":SYSTEM
  26. 260 ' ****** SATFILE.BAS - VERSION 1.0, ISSUE 1.0 - HSIMODIF.1/25/85 ******
  27. 270 KEY OFF:SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS
  28. 280 DEFDBL T,N
  29. 290 OPEN "KEPELER.DAT" AS #1 LEN =56
  30. 300 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$
  31. 310 V1$="":PRINT
  32. 320 PRINT "Elements of the following SATELLITES are in the file:":PRINT
  33. 330 FOR J%=1 TO 20:GET #1,J%
  34. 340 IF ASC(I$)<33 THEN 360 ELSE IF ASC(I$)>126 THEN 360
  35. 350 PRINT I$:NEXT
  36. 360 PRINT:PRINT "Do you wish to Add (A) , Change (C) , or Delete (D) a  satellite ?"
  37. 370 PRINT "record or Exit (E) from this program ?"
  38. 380 Z$="EeAaCcDd"
  39. 390 K$=INKEY$:IF K$="" THEN 390
  40. 400 K=INSTR(Z$,K$)
  41. 410 ON K GOTO 1490,1490,450,450,480,480,600,600
  42. 420 BEEP:GOTO 390
  43. 430 '
  44. 440 ' ****** ADD A NEW RECORD ******
  45. 450 GOSUB 730:GOSUB 1330:GOSUB 980:GOSUB 1020:GOTO 690
  46. 460 '
  47. 470 ' ****** CHANGE AN EXISTING RECORD ******
  48. 480 GOSUB 720:IF I$<>U$ THEN CLS:PRINT "Record not found":GOTO 310
  49. 490 GOSUB 810
  50. 500 PRINT "Do you wish to update elemts of this satellite ?  (Y/N) "
  51. 510 Z$="YyNn"
  52. 520 K$=INKEY$:IF K$="" THEN 520
  53. 530 K=INSTR(Z$,K$)
  54. 540 ON K GOTO 560,560,570,570
  55. 550 BEEP:GOTO 520
  56. 560 CLS:GOSUB 1030:GOTO 690
  57. 570 CLS:GOTO 310
  58. 580 '
  59. 590 ' ****** DELETE AN EXISTING RECORD ******
  60. 600 GOSUB 720:IF I$<>U$ THEN CLS:PRINT "Record not found":GOTO 310
  61. 610 COLOR 28:PRINT :PRINT "DO YOU REALLY MEAN IT ?? (Y/N) ":COLOR 14
  62. 620 Z$="YyNn"
  63. 630 K$=INKEY$:IF K$="" THEN 630
  64. 640 K=INSTR(Z$,K$)
  65. 650 ON K GOTO 680,680,670,670
  66. 660 BEEP:GOTO 630
  67. 670 CLS:GOTO 310
  68. 680 GOSUB 980:GOSUB 1210:GOSUB 1270
  69. 690 CLS:PRINT "Update complete.":GOTO 310
  70. 700 '
  71. 710 ' ****** FIND SATELLITE RECORD ******
  72. 720 PRINT:INPUT "Which satellite? ";V1$:IF V1$="" THEN 360
  73. 730 U$=SPACE$(10):LSET U$=V1$
  74. 740 FOR J%=1 TO 20:GET #1,J%
  75. 750 IF I$=U$ THEN 780 ELSE IF ASC(I$)<33 THEN 780 ELSE IF ASC(I$)>90 THEN 780
  76. 760 IF LEFT$(I$,1)="" THEN 780
  77. 770 NEXT
  78. 780 RETURN
  79. 790 '
  80. 800 ' ****** DISPLAY SATELLITE RECORD ******
  81. 810 CLS:Y3=CVI(Y3$)
  82. 820 T0=CVD(T0$):I0=CVS(I0$):O0=CVS(O0$):E0=CVS(E0$):W0=CVS(W0$)
  83. 830 M0=CVS(M0$):N0=CVD(N0$):K0=CVS(K0$):F1=CVS(F1$)
  84. 840 PRINT "Satellite       = ";I$
  85. 850 PRINT "Epoch year      = ";Y3
  86. 860 PRINT "Epoch day       = ";T0
  87. 870 PRINT "Inclination     = ";I0
  88. 880 PRINT "R.A.A.N.        = ";O0
  89. 890 PRINT "Eccentricity    = ";E0
  90. 900 PRINT "Arg. of perigee = ";W0
  91. 910 PRINT "Mean anomaly    = ";M0
  92. 920 PRINT "Mean motion     = ";N0
  93. 930 PRINT "Epoch orbit no. = ";K0
  94. 940 PRINT "Beacon freq.    = ";F1
  95. 950 PRINT:RETURN
  96. 960 '
  97. 970 ' ****** SETUP SATELLITE ELEMENTS FOR DELETE ACTION ******
  98. 980 Q$=SPACE$(10):Y3=0:T0=0:I0=0:O0=0:E0=0:W0=0:M0=0:N0=0:K0=0:F1=0
  99. 990 CLS:RETURN
  100. 1000 '
  101. 1010 ' ****** UPDATE/DELETE SATELLITE ELEMENTS ******
  102. 1020 PRINT: PRINT "New satellite, input following items:":PRINT
  103. 1030 INPUT "SATELLITE DESIGNATION  = ",U$:IF U$<>"" THEN Q$=U$ ELSE Q$="UNKNOWN"
  104. 1040 INPUT "EPOCH YEAR (YY)        = ",U$:IF U$<>"" THEN Y3=VAL(U$)
  105. 1050 INPUT "EPOCH DAY (DD.DDDD-)   = ",U$:IF U$<>"" THEN T0=VAL(U$)
  106. 1060 INPUT "INCLINATION (DEG.)     = ",U$:IF U$<>"" THEN I0=VAL(U$)
  107. 1070 INPUT "R.A.A.N. (DEG.)        = ",U$:IF U$<>"" THEN O0=VAL(U$)
  108. 1080 INPUT "ECCENTRICITY           = ",U$:IF U$<>"" THEN E0=VAL(U$)
  109. 1090 INPUT "ARG. OF PERIGEE (DEG.) = ",U$:IF U$<>"" THEN W0=VAL(U$)
  110. 1100 INPUT "MEAN ANOMALY (DEG.)    = ",U$:IF U$<>"" THEN M0=VAL(U$)
  111. 1110 INPUT "MEAN MOTION (ORB/DAY)  = ",U$:IF U$<>"" THEN N0=VAL(U$)
  112. 1120 INPUT "EPOCH ORBIT NO.        = ",U$:IF U$<>"" THEN K0=VAL(U$)
  113. 1130 INPUT "BEACON FREQUENCY (Mhz) = ",U$:IF U$<>"" THEN F1=VAL (U$)
  114. 1140 PRINT:PRINT "Is this CORRECT? (Y/N) "
  115. 1150 Z$="YyNn"
  116. 1160 K$=INKEY$:IF K$="" THEN 1160
  117. 1170 K=INSTR(Z$,K$)
  118. 1180 ON K GOTO 1210,1210,1200,1200
  119. 1190 BEEP:GOTO 1160
  120. 1200 CLS:GOTO 1030
  121. 1210 LSET I$=Q$:RSET Y3$=MKI$(Y3):RSET T0$=MKD$(T0):RSET I0$=MKS$(I0)
  122. 1220 RSET O0$=MKS$(O0):RSET E0$=MKS$(E0):RSET W0$=MKS$(W0):RSET M0$=MKS$(M0)
  123. 1230 RSET N0$=MKD$(N0):RSET K0$=MKS$(K0):RSET F1$=MKS$(F1)
  124. 1240 PUT #1,J%:CLS:RETURN
  125. 1250 '
  126. 1260 ' ****** ADJUST RECORDS TO FILL DELETED RECORD SPACE ******
  127. 1270 FOR K%=J% TO 19
  128. 1280 GET #1,K%+1:PUT #1,K%:NEXT
  129. 1290 GOSUB 980:J%=20:GOSUB 1210
  130. 1300 RETURN
  131. 1310 '
  132. 1320 ' ****** ADJUST RECORDS TO INSERT NEW RECORD ******
  133. 1330 PRINT
  134. 1340 PRINT "Do you wish to insert the record in a specific postion ? (Y/N) "
  135. 1350 Z$="YyNn"
  136. 1360 K$=INKEY$:IF K$="" THEN 1360
  137. 1370 K=INSTR(Z$,K$)
  138. 1380 ON K GOTO 1400,1400,1460,1460
  139. 1390 BEEP:GOTO 1360
  140. 1400 PRINT "Which position ? ( 1 to";J%-1;")";
  141. 1410 INPUT R%:IF R%=0 THEN 1340
  142. 1420 IF R%>J%-1 THEN 1400
  143. 1430 J%=R%
  144. 1440 FOR K%=19 TO R% STEP-1
  145. 1450 GET #1,K%:PUT #1,K%+1:NEXT
  146. 1460 RETURN
  147. 1470 '
  148. 1480 ' ****** END OF JOB ROUTINE ******
  149. 1490 CLOSE #1:GOTO 40
  150. 1500 'END PART CHANGE/ADD/DELETE ELEMENTS
  151. 1510 REM ******* Groundsation data change v.1.0 OE1HSI    jan.-1985**********
  152. 1520 SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS
  153. 1530 PRINT"CURRENT GROUND STATION DATA":PRINT:GOSUB 1840
  154. 1540 PRINT"Do you want to CHANGE this DATA ? (Y/N)"
  155. 1550 Z$="YyNn"
  156. 1560 K$=INKEY$:IF K$=""THEN 1560
  157. 1570 K=INSTR(Z$,K$)
  158. 1580 ON K GOTO 1670,1670,1950,1950
  159. 1590 BEEP:COLOR 28:GOTO 1540
  160. 1600 PRINT:PRINT:GOSUB 1870
  161. 1610 PRINT"Do you want a further CHANGE ? (Y/N) "
  162. 1620 Z$="YyNn"
  163. 1630 K$=INKEY$:IF K$=""THEN 1630
  164. 1640 K=INSTR(Z$,K$)
  165. 1650 ON K GOTO 1670,1670,1940,1940
  166. 1660 BEEP:COLOR 28:GOTO 1610
  167. 1670 COLOR 14:PRINT:PRINT "ENTER NEW DATA OR <RETURN> FOR UNCHANGED DATA":
  168. 1680 OPEN "GROUND.DAT" AS #1 LEN=42
  169. 1690 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$
  170. 1700 PRINT:INPUT "CALL max. 10 chrs.)                          : ",U$: IF U$ <>"" THEN GS$=U$ ELSE GS$=GR1$
  171. 1710 INPUT "Location of station (max. 20 chrs.)          : ",U$: IF U$ <>"" THEN GC$=U$ ELSE GC$=GL1$
  172. 1720 INPUT "Groundstation height above sealevel in mtrs. : ",U$: IF U$ <>"" THEN SH=VAL(U$) ELSE  SH=CVS(GH1$)
  173. 1730 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$)
  174. 1740 IF LO < 0 THEN LO=360+LO
  175. 1750 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$)
  176. 1760 LSET GR$=GS$
  177. 1770 LSET GL$=GC$
  178. 1780 RSET GH$=MKS$(SH)
  179. 1790 RSET LO$=MKS$(LO)
  180. 1800 RSET LA$=MKS$(LA)
  181. 1810 PUT #1,1
  182. 1820 CLOSE
  183. 1830 GOTO 1600
  184. 1840 OPEN "GROUND.DAT" AS #1 LEN=42
  185. 1850 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$
  186. 1860 GET #1,1
  187. 1870 PRINT "CALL IS                    : ";GR$
  188. 1880 PRINT "LOCATION IS                : ";GL$
  189. 1890 PRINT USING "HEIGHT AB. SEAL. (mtrs.)=  :  #####";CVS(GH$)
  190. 1900 PRINT USING "WESTERN LONGITUDE (deg.)=  : ###.##";CVS(LO$)
  191. 1910 PRINT USING "LATITUDE (deg.)=           : +##.##";CVS(LA$):PRINT
  192. 1920 GR1$=GR$:GL1$=GL$:GH1$=GH$:LO1$=LO$:LA1$=LA$
  193. 1930 CLOSE:RETURN
  194. 1940 COLOR 14:PRINT:PRINT "DATA SAVED AS GROUND.DAT":GOTO 1960
  195. 1950 COLOR 14:PRINT:PRINT "DATA NOT CHANGED"
  196. 1960 GOTO 50 'MAIN MENU
  197. 1970 '**** END PROGRAM GROUNDSTATION DATA CHANGE/STORAGE OE1HSI  JAN. 1985 ****
  198. 1980 ' ****** ORBITS2 - VERSION 1.0, ISSUE 1.2 -11/1/83 ******
  199. 1990 CLS:KEY OFF:SCREEN 2,0:WIDTH 80
  200. 2000 OUT 985,10      ' Set foreground color for high resolution screen
  201. 2010 LOCATE 2
  202. 2020 PRINT"   SATELLITE TRACKING PROGRAM de W0SL - May,1983"
  203. 2030 PRINT"        COPYRIGHT 1983 by R. D. Welch, W0SL"
  204. 2040 PRINT"                          908 Dutch Mill Drive"
  205. 2050 PRINT"                          Manchester, Mo. 63011":PRINT
  206. 2060 PRINT"   Enhanced by OE1HSI JAN 26 1985"
  207. 2070 PRINT"               Ing. Herbert F. Strasser"
  208. 2080 PRINT"               176 Rud. Waisenhorngasse"
  209. 2090 PRINT"               A 1238 VIENNA / AUSTRIA"
  210. 2100 LOCATE 25,3:PRINT"F9 TOGGLES THE GRAPH/TABLE     F10 TO SELECT SINGLE SAT IN GRAPH   ESC TO END";
  211. 2110 '
  212. 2120 ' ****** HOUSE KEEPING ITEMS ******
  213. 2130 '
  214. 2140 ' ****** GROUND STATION CONSTANTS ******
  215. 2150 OPEN "GROUND.DAT" AS #1 LEN=42
  216. 2160 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$
  217. 2170 GET #1,1
  218. 2180 L9=CVS(LA$):W9=CVS(LO$):H9=CVS(GH$)
  219. 2190 CLOSE #1
  220. 2200 'L9=Latitude in degrees
  221. 2210 'W9=Longitude in degrees
  222. 2220 'H9=Height above sea level in meters
  223. 2230 'C$=GRUND STATION CALL+LOCATION STRING
  224. 2240 FOR I=1 TO 10 '**** I = STRINGLENGHT TO BE STRIPED OF TRAILING SPACES****
  225. 2250 GRT$=MID$(GR$,11-I,1)
  226. 2260 IF GRT$ <> " " THEN GRR$=LEFT$(GR$,11-I):I=10 ' GRR$ IS GR$ STRIPPED OFTRAILING PADDED SPACES
  227. 2270 NEXT
  228. 2280 I=0
  229. 2290 FOR I=1 TO 20 '**** I = STRINGLENGHT TO BE STRIPED OF TRAILING SPACES****
  230. 2300 GLT$=MID$(GL$,21-I,1)
  231. 2310 IF GLT$ <> " " THEN GLR$=LEFT$(GL$,21-I):I=20 ' GLR$ IS GL$ STRIPPED OFTRAILING PADDED SPACES
  232. 2320 NEXT
  233. 2330 C$=GRR$+" "+GLR$ '**** END PROGRAM STRIP TRAILING SPACES, HSI JAN.1985
  234. 2340 '
  235. 2350 ' ***** OPEN KEPELER DATA FILE FOR USE
  236. 2360 OPEN "KEPELER.DAT" AS #1 LEN=56
  237. 2370 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$
  238. 2380 DEFDBL T:DEFINT J:OPTION BASE 1
  239. 2390 DEF FNMTH=VAL(LEFT$(D$,2)):DEF FNDAY=VAL(MID$(D$,4,2))
  240. 2400 DEF FNYR=VAL(RIGHT$(D$,2)):DEF FNHR=VAL(LEFT$(T$,2))
  241. 2410 DEF FNMIN=VAL(MID$(T$,4,2)):DEF FNSEC=VAL(RIGHT$(T$,2))
  242. 2420 DIM C(3,2),Y1(5),G3(5),SAT(6),SATL(10,2)
  243. 2430 DIM PKT(6),KEP (6)
  244. 2440 '
  245. 2450 ' ****** SETUP UTC DATE AND TIME ******
  246. 2460 LOCATE 15,30,0:PRINT "UTC DATE = ";DATE$
  247. 2470 LOCATE 16,30:PRINT "UTC TIME = ";TIME$
  248. 2480 LOCATE 20,3:INPUT "ENTER NEW UTC DATE (MM-DD-YY)?.. IF NOT HIT RETURN ",D$
  249. 2490 IF D$="" THEN D$=DATE$
  250. 2500 DATE$=D$:D$=DATE$     'Quick format check
  251. 2510 LOCATE 20,50:PRINT SPACE$(14)
  252. 2520 LOCATE 20,3:INPUT "ENTER NEW UTC TIME (HH:MM:SS)?..  IF NOT HIT RETURN ",T$
  253. 2530 IF T$="" THEN T$=TIME$
  254. 2540 TIME$=T$:T$=TIME$          ' Quick format check
  255. 2550 CLS
  256. 2560 '
  257. 2570 ' ****** DRAW AND STORE SATELLITE INDICATOR ******
  258. 2580 CLS
  259. 2590 LINE (4,0)-(4,4):LINE (0,2)-(8,2)
  260. 2600 GET (0,0)-(8,4),SAT:PUT (0,0),SAT
  261. 2610 CLS
  262. 2620 LINE (4,1)-(4,3):LINE (3,2)-(5,2)
  263. 2630 GET (0,0)-(8,4),PKT:PUT (0,0),PKT
  264. 2640 '
  265. 2650 ' ****** NUMERIC CONSTANTS ******
  266. 2660 P1=3.1415926535#            ' Value of PI
  267. 2670 R0=6378.16:F=298.16        ' Earth's radius, 1/Earth flattening coef.
  268. 2680 G0=75369793000000#         ' GM of Earth in (Orbits/day)^2/km^3
  269. 2690 G1=1.0027379093#            ' Sidereal/Solar time rate ratio
  270. 2700 '
  271. 2710 ' ****** DERIVED CONSTANTS ******
  272. 2720 P2=2*P1:P0=P1/180:F=1/F:L8=L9*P0:S9=SIN(L8):C9=COS(L8)
  273. 2730 S8=SIN(-W9*P0):C8=COS(W9*P0)
  274. 2740 R9=R0*(1-(F/2)+(F/2)*COS(2*L8))+H9/1000
  275. 2750 L8=ATN((1-F)^2*S9/C9):Z9=R9*SIN(L8)
  276. 2760 X9=R9*COS(L8)*C8:Y9=R9*COS(L8)*S8
  277. 2770 '
  278. 2780 ' ****** ESTABLISH SIDEREAL TIME TABLE MATRIX ******
  279. 2790 RESTORE 2900:FLG1=0:FLG2=0:D$=DATE$:CLS
  280. 2800 FOR I1=1 TO 5
  281. 2810 READ Y1(I1), G3(I1)      ' Read sidereal time table
  282. 2820 IF Y1(I1)=FNYR THEN FLG1=1
  283. 2830 IF Y1(I1)=FNYR-1 THEN FLG2=1
  284. 2840 IF Y1(I1)=0 THEN 2860
  285. 2850 NEXT
  286. 2860 IF FLG1=1 AND FLG2=1 THEN 2970
  287. 2870 PRINT "UNABLE TO FIND CURRENT AND/OR PRECEEDING YEAR IN SIDERAL TIME TABLE":STOP
  288. 2880 '
  289. 2890 ' ****** SIDEREAL TIME TABLE ******
  290. 2900 DATA 86, 0.276007
  291. 2910 DATA 87, 0.275347
  292. 2920 DATA 88, 0.27469296
  293. 2930 DATA 89, 0.27676777
  294. 2940 DATA 0,0
  295. 2950 '
  296. 2960 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ******
  297. 2970 I=0
  298. 2980 I=I+1:IF I>8 THEN 3120
  299. 2990 GET #1,I
  300. 3000 FOR J=1 TO 10
  301. 3010 IF MID$(I$,J,1)=SPACE$(1) THEN 3040
  302. 3020 NEXT
  303. 3030 PRINT "END OF FILE ERROR, CORRECT & RESTART":STOP
  304. 3040 I$(I)=LEFT$(I$,J-1):IF I$(I)="END" THEN 3120
  305. 3050 IF LEFT$(I$,1)=SPACE$(1) THEN 3120
  306. 3060 Y3(I)=CVI(Y3$):T0(I)=CVD(T0$):I0(I)=CVS(I0$):O0(I)=CVS(O0$)
  307. 3070 E0(I)=CVS(E0$):W0(I)=CVS(W0$):M0(I)=CVS(M0$):N0(I)=CVD(N0$)
  308. 3080 K0(I)=CVS(K0$):F1(I)=CVS(F1$)
  309. 3090 IF Y3(I)=FNYR THEN 2980 ELSE IF Y3(I)=FNYR-1 THEN 2980 ELSE PRINT "ELEMENTS FOR SATELLITE ";I$(I);" NOT FROM CURRENT OR PRECEEDING YEAR.":STOP
  310. 3100 '
  311. 3110 ' ****** SET UP KEY TRAPPING ******
  312. 3120 ON KEY(9) GOSUB 4650:KEY(9) STOP
  313. 3130 ON KEY(10) GOSUB 4680:KEY(10) OFF
  314. 3140 FLG9=0:FLG10=0::GOSUB 4180
  315. 3150 '
  316. 3160 ' ****** ORBIT DETERMINATION LOOP STARTS HERE ******
  317. 3170 FOR J=1 TO I-1
  318. 3180 Q$=INKEY$:IF Q$=CHR$(27) GOTO 4520
  319. 3190 GOSUB 3270
  320. 3200 IF FLG9=0 THEN 3220
  321. 3210 GOSUB 3720:GOSUB 3780
  322. 3220 GOSUB 3930
  323. 3230 NEXT
  324. 3240 GOTO 3170
  325. 3250 '
  326. 3260 ' ****** ORBIT CALCULATION ROUTINE ******
  327. 3270 A0(J)=((G0/(N0(J)*N0(J)))^(1/3))
  328. 3280 E2=1-E0(J)*E0(J):E1=SQR(E2):Q0=M0(J)/360+K0(J)
  329. 3290 K2=9.95*((R0/A0(J))^3.5)/(E2*E2)
  330. 3300 S1=SIN(I0(J)*P0):C1=COS(I0(J)*P0):D$=DATE$
  331. 3310 T=INT(30.55*(FNMTH+2))-2*(INT(.1*(FNMTH+7)))-91
  332. 3320 IF FNMTH>2 THEN IF FNYR/4=INT(FNYR/4) THEN T=T+1
  333. 3330 IF Y3(J)=FNYR-1 THEN T=T+365 ELSE 3350
  334. 3340 IF Y3(J)/4=INT(Y3(J)/4) THEN T=T+1
  335. 3350 T$=TIME$:T=T+FNDAY+FNHR/24+FNMIN/1440+FNSEC/86400!
  336. 3360 O=O0(J)-(T-T0(J))*K2*C1:S0=SIN(O*P0):C0=COS(O*P0)
  337. 3370 W=W0(J)+(T-T0(J))*K2*(2.5*(C1*C1)-.5)
  338. 3380 S2=SIN(W*P0):C2=COS(W*P0)
  339. 3390 C(1,1)=+(C2*C0)-(S2*S0*C1):C(1,2)=-(S2*C0)-(C2*S0*C1)
  340. 3400 C(2,1)=+(C2*S0)+(S2*C0*C1):C(2,2)=-(S2*S0)+(C2*C0*C1)
  341. 3410 C(3,1)=+(S2*S1):C(3,2)=+(C2*S1)
  342. 3420 Q=N0(J)*(T-T0(J))+Q0:K=INT(Q):M=(Q-K)*P2
  343. 3430 E=M+E0(J)*SIN(M)+.5*(E0(J)*E0(J))*SIN(2*M)
  344. 3440 S3=SIN(E):C3=COS(E):R3=1-E0(J)*C3:M1=E-E0(J)*S3
  345. 3450 M5=M1-M:IF ABS(M5)<.000001 THEN 3470 ELSE E=E-M5/R3
  346. 3460 GOTO 3440
  347. 3470 X0=A0(J)*(C3-E0(J)):Y0=A0(J)*E1*S3:R=A0(J)*R3
  348. 3480 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)
  349. 3490 FOR I2=1 TO I1:IF Y3(J)=Y1(I2) THEN G2=G3(I2)
  350. 3500 NEXT
  351. 3510 G7=T*G1+G2:G7=(G7-INT(G7))*P2:S7=-SIN(G7):C7=COS(G7)
  352. 3520 X=+(X1*C7)-(Y1*S7):Y=+(X1*S7)+(Y1*C7):Z=Z1
  353. 3530 X5=(X-X9):Y5=(Y-Y9):Z5=(Z-Z9):R5=SQR(X5*X5+Y5*Y5+Z5*Z5)
  354. 3540 Z8=+(X5*C8*C9)+(Y5*S8*C9)+(Z5*S9)
  355. 3550 X8=-(X5*C8*S9)-(Y5*S8*S9)+(Z5*C9):Y8=+(Y5*C8)-(X5*S8)
  356. 3560 S5=Z8/R5:C5=SQR(1-S5*S5):E9=ATN(S5/C5)/P0
  357. 3570 IF X8<0 THEN A9=P1+ATN(Y8/X8) ELSE 3590
  358. 3580 GOTO 3620
  359. 3590 IF X8>0 AND Y8>=0 THEN A9=ATN(Y8/X8) ELSE IF X8>0 THEN A9=P2+ATN(Y8/X8) ELSE 3610
  360. 3600 GOTO 3620
  361. 3610 IF Y8<0 THEN A9=3*P1/2 ELSE A9=P1/2
  362. 3620 A9=A9/P0
  363. 3630 IF X<0 THEN W5=P1+ATN(Y/X) ELSE 3650
  364. 3640 GOTO 3680
  365. 3650 IF X>0 AND Y>=0 THEN W5=ATN(Y/X) ELSE IF X>0 THEN W5=P2+ATN(Y/X) ELSE 3670
  366. 3660 GOTO 3680
  367. 3670 IF Y<0 THEN W5=3*P1/2 ELSE W5=P1/2
  368. 3680 W5=360-W5/P0:B5=Z/R:L5=ATN(B5/(SQR(1-B5^2)))/P0
  369. 3690 RETURN
  370. 3700 '
  371. 3710 ' ****** LAT./LONG. PLOT ROUTINE ******
  372. 3720 Y6=CINT(.7111*(90-L5)+3)
  373. 3730 IF W5<=270 AND W5>=0 THEN X6=CINT(477-W5*1.7444)
  374. 3740 IF W5>270 AND W5<=360 THEN X6=CINT(1105-W5*1.7444)
  375. 3750 RETURN
  376. 3760 '
  377. 3770 ' ****** PUT SATELLITE ON SCREEN ROUTINE ******
  378. 3780 GET(X6-4,Y6-2)-(X6+4,Y6+2),KEP
  379. 3790 FOR ZD=1 TO 2000:NEXT ZD 'LINEDELAY  REMOVE FOR INTERPRETER RUN *****
  380. 3800 PUT(X6-4,Y6-2),SAT,PRESET
  381. 3810 FOR ZL=1 TO 800:NEXT ZL  'BLINKDELAY REMOVE OR REDUCE FOR INTERPR. RUN *****
  382. 3820 PUT(X6-4,Y6-2),SAT
  383. 3830 PUT(X6-4,Y6-2),KEP,PSET
  384. 3840 PUT(X6-4,Y6-2),SAT
  385. 3850 IF FLG0=0 THEN 3880
  386. 3860 PUT (SATL(J,1),SATL(J,2)),SAT
  387. 3870 PUT (SATL(J,1),SATL(J,2)),PKT,OR
  388. 3880 SATL(J,1)=X6-4:SATL(J,2)=Y6-2
  389. 3890 IF J=I-1 THEN FLG0=1
  390. 3900 RETURN
  391. 3910 '
  392. 3920 ' ****** PRINT SATELLITE DETAILS ROUTINE ******
  393. 3930 KEY(9) ON:KEY(10) ON
  394. 3940 KEY(10) STOP:KEY(9) STOP
  395. 3950 IF FLGK=1 THEN GOSUB 4160
  396. 3960 IF FLG9=0 GOTO 4050
  397. 3970 IF FLG10=1 THEN GOSUB 4430
  398. 3980 IF FLG10=0 THEN 4010 ELSE V$=SPACE$(10):LSET V$=I$(J)
  399. 3990 IF V$<>U$ THEN 4130
  400. 4000 LOCATE 25,69:PRINT "SELECTED";
  401. 4010 LOCATE 25,1:PRINT SPACE$(68);
  402. 4020 LOCATE 25,(12-LEN(I$(J)))/2+1:PRINT I$(J);
  403. 4030 LOCATE 25,15
  404. 4040 GOTO 4110
  405. 4050 COLOR 3:LOCATE 3,44:PRINT DATE$:LOCATE 4,37:PRINT T$
  406. 4060 IF E9>=0 THEN COLOR 12 ELSE 4080
  407. 4070 IF E9>0 AND E9<1 THEN COLOR 28:BEEP
  408. 4080 LOCATE 2*J+7,15:PRINT SPACE$(50)
  409. 4090 LOCATE 2*J+7,(12-LEN(I$(J)))/2+1:PRINT I$(J)
  410. 4100 LOCATE 2*J+7,15
  411. 4110 PRINT USING "###   ###  #####    #####  ###.#   ###.#    ######";A9,E9,R5,(R-R0),L5,W5,K;
  412. 4120 IF FLG9=0 GOTO 4130 ELSE LOCATE 20,48:PRINT TIME$;
  413. 4130 RETURN
  414. 4140 '
  415. 4150 ' ****** SET UP SCREEN DISPLAY ROUTINE ******
  416. 4160 CLS:FLG0=0:FLGK=0
  417. 4170 IF FLG9=1 THEN 4270 'IF FLG9=0 THEN FLG9=1:GOTO 8280
  418. 4180 ' FLG9=0
  419. 4190 SCREEN 0,1:COLOR 2,0,0
  420. 4200 LOCATE 1,40-LEN(C$)/2,0:PRINT C$
  421. 4210 LOCATE 2,28:PRINT "REALTIME SATELLITE TRACKING"
  422. 4220 LOCATE 3,29:PRINT "COORDINATES ON"
  423. 4230 LOCATE 4,34:PRINT "AT":LOCATE 4,46:PRINT "UTC"
  424. 4240 LOCATE 25,3:PRINT"F9 TOGGLES THE GRAPH/TABLE     F10 TO SELECT SINGLE SAT IN GRAPH   ESC TO END";
  425. 4250 L1=6:L2=7:L3=8
  426. 4260 GOTO 4340
  427. 4270 GOSUB 4600:SCREEN 2,0:OUT 985,3
  428. 4280 DEF SEG=&HB800:BLOAD "MAP.DAT",0:DEF SEG=0
  429. 4290 W5=W9:L5=L9:GOSUB 3720
  430. 4300 CIRCLE (X6,Y6),2
  431. 4310 GOSUB 4530:L1=22:L2=23:L3=24
  432. 4320 LOCATE 20,3:PRINT "Data for Groundstation             At Time=           UTC  On: ";DATE$
  433. 4330 LOCATE 20,26:PRINT GRR$
  434. 4340 LOCATE L1,3
  435. 4350 PRINT "  NAME OR   AZ    EL   RANGE   HEIGHT   LAT.   LONG.    ORBIT"
  436. 4360 LOCATE L2,3
  437. 4370 PRINT "DESIGNATOR  DEG   DEG    KM      KM     DEG     DEG       NO."
  438. 4380 LOCATE L3,3
  439. 4390 PRINT "----------  ---   ---  -----   ------  -----   -----    ------";
  440. 4400 RETURN
  441. 4410 '
  442. 4420 ' ****** SELECT SINGLE SATELLITE ROUTINE ******
  443. 4430 LOCATE 25,1:PRINT SPACE$(79);
  444. 4440 LOCATE 25,1:INPUT; "WHICH SATELLITE? (CR FOR ALL)";I1$
  445. 4450 FOR QQQ = 1 TO LEN(I1$)
  446. 4460 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)
  447. 4470 NEXT QQQ
  448. 4480 IF I1$="" THEN FLG10=0:GOTO 4500
  449. 4490 U$=SPACE$(10):LSET U$=I1$:FLG10=2
  450. 4500 LOCATE 25,1:PRINT SPACE$(79);
  451. 4510 RETURN
  452. 4520 CLOSE #1:GOTO 50
  453. 4530  GOTO 4570
  454. 4540 DEF SEG =0
  455. 4550 POKE &H410,(PEEK(&H410) OR &H30)
  456. 4560 SCREEN 0
  457. 4570 WIDTH 80
  458. 4580 LOCATE ,,1,12,13
  459. 4590 RETURN
  460. 4600 ' SWITCH TO COLOR
  461. 4610 DEF SEG=0
  462. 4620 POKE &H410,(PEEK(&H410) AND &HCF) OR &H10
  463. 4630 OUT 980,2:OUT 981,85
  464. 4640 RETURN
  465. 4650 IF FLG9=0 THEN FLG9=1:GOTO 4670 'FLAG9 TOGGELN
  466. 4660 FLG9=0
  467. 4670 FLGK=1:RETURN 3940
  468. 4680 IF FLG9=1 THEN FLG10=1 ELSE FLG10=0:RETURN 3940
  469. 4690 RETURN 3940
  470. 4700 GOTO 50 'ENDE PROGRAMMTEIL ECHTZEITDISPLAY
  471. 4710 '****** ORBIT2 - VERSION 2.0, ISSUE 1.0/HSI - 17/01/85 *****
  472. 4720 KEY OFF:SCREEN 0,1:WIDTH 80:COLOR 14,1,0:CLS           'dls
  473. 4730 PRINT" AMSAT ORBITAL PREDICTION PROGRAM de W3IWI - May,1980"
  474. 4740 PRINT" COPYRIGHT 1980 by Dr. Thomas A. Clark, W3IWI"
  475. 4750 PRINT"                   6388 Guilford Road"
  476. 4760 PRINT"                   Clarksville, MD. 21029"
  477. 4770 PRINT
  478. 4780 PRINT"REVISED & MODIFIED FOR IBM-PC by R. D. Welch, W0SL - May, 1983"
  479. 4790 PRINT"                                 908 Dutch Mill Dr."
  480. 4800 PRINT"                                 Manchester, Mo. 63011
  481. 4810 PRINT
  482. 4820 PRINT"ENHANCED AND DEBUGED BY Ing. H.F.STRASSER OE1HSI- JAN. 1985"
  483. 4830 PRINT"                                 A 1238 VIENNA/AUSTRIA":PRINT:
  484. 4840 PRINT" Permission granted for non-commercial use providing"
  485. 4850 PRINT" credit is given to the author, AMSAT and ORBIT Magazine.":PRINT
  486. 4860 '
  487. 4870 ' ****** HOUSEKEEPING ITEMS ******
  488. 4880 CLEAR
  489. 4890 OPEN "LPT1:" FOR OUTPUT AS # 2
  490. 4900 OPEN "SCRN:" FOR OUTPUT AS # 3
  491. 4910 DEFDBL H,T
  492. 4920 DIM T$(20),S$(40),II$(40),CC(3,2)
  493. 4930 C8$=CHR$(10)+CHR$(10)+CHR$(10)+CHR$(10)
  494. 4940 C9$=CHR$(12)+CHR$(7)
  495. 4950 DEF FNT$(D)=CHR$(48+INT(D/10))+CHR$(48+D-10*INT(D/10))
  496. 4960 YY=0
  497. 4970 '****** NUMERIC CONSTANTS ******
  498. 4980 P1=3.1415926535#           ' Value of PI
  499. 4990 R0=6378.16:F=298.16       ' Earth's radius, 1/Earth flattening coef.
  500. 5000 G0=75369793000000#        ' GM of Earth in (orbits/day)^2/km^3
  501. 5010 G1=1.0027379093#:C=299792.5   ' Sidereal/Solar time rate ratio
  502. 5020 '
  503. 5030 ' ****** GROUND STATION CONSTANTS ******
  504. 5040 OPEN "GROUND.DAT" AS #1 LEN=42
  505. 5050 FIELD #1, 10 AS GR$,20 AS GL$,4 AS GH$,4 AS LO$, 4 AS LA$
  506. 5060 GET #1,1
  507. 5070 L9=CVS(LA$):W9=CVS(LO$):H9=CVS(GH$)
  508. 5080 CLOSE #1
  509. 5090 'L9=Latitude in degrees
  510. 5100 'W9=Longitude in degrees
  511. 5110 'H9=Height above sea level in meters
  512. 5120 'C$=GROUND STATION CALL+LOCATION STRING
  513. 5130 FOR I=1 TO 10 '**** I = STRINGLENGHT TO BE STRIPPED OF TRAILING SPACES****
  514. 5140 GRT$=MID$(GR$,11-I,1)
  515. 5150 IF GRT$ <> " " THEN GRR$=LEFT$(GR$,11-I):I=10 ' GRR$ IS GR$ STRIPPED OFTRAILING PADDED SPACES
  516. 5160 NEXT
  517. 5170 I=0
  518. 5180 FOR I=1 TO 20 '**** I = STRINGLENGHT TO BE STRIPPED OF TRAILING SPACES****
  519. 5190 GLT$=MID$(GL$,21-I,1)
  520. 5200 IF GLT$ <> " " THEN GLR$=LEFT$(GL$,21-I):I=20 ' GLR$ IS GL$ STRIPPED OFTRAILING PADDED SPACES
  521. 5210 NEXT
  522. 5220 C$=GRR$+" "+GLR$ '**** END PROGRAM STRIP TRAILING SPACES, HSI JAN.1985
  523. 5230 '
  524. 5240 ' ****** DERIVED CONSTANTS ******
  525. 5250 P2=2*P1:P0=P1/180:F=1/F:L8=L9*P0:S9=SIN(L8):C9=COS(L8)
  526. 5260 S8=SIN(-W9*P0):C8=COS(W9*P0)
  527. 5270 R9=R0*(1-(F/2)+(F/2)*COS(2*L8))+H9/1000
  528. 5280 L8=ATN((1-F)^2*S9/C9):Z9=R9*SIN(L8)
  529. 5290 X9=R9*COS(L8)*C8:Y9=R9*COS(L8)*S8
  530. 5300 GOTO 5330
  531. 5310 BEEP:COLOR 12:PRINT"  enter YEAR 1982 or higher !":COLOR 14,1,0
  532. 5320 ' ****** INPUT DATA ******
  533. 5330 INPUT; "Start: Year (19YY) = ",Y:IF Y<1982 GOTO 5310 ELSE YY=Y:Y=Y/100:Y=INT(100*(Y-INT(Y))+.1)
  534. 5340 INPUT; "   Month (1-12) = ",M:INPUT; "   Day = ",D
  535. 5350 T$=FNT$(Y)+"/"+FNT$(M)+"/"+FNT$(D)+" at "
  536. 5360 TE$=FNT$(D)+"."+FNT$(M)+"."+FNT$(Y)+" at "
  537. 5370 D8=D+INT(30.55*(M+2))-2*(INT(.1*(M+7)))-91
  538. 5380 IF M>2 THEN IF Y/4=INT(Y/4) THEN D8=D8+1
  539. 5390 PRINT "     Day #  ";D8:PRINT
  540. 5400 INPUT; "Start: UTC Hours(HH) = ",H
  541. 5410 INPUT "    Min. = ",M:T7=D8+H/24+M/1440
  542. 5420 T$=T$+FNT$(H)+FNT$(M)+ ":00 H"
  543. 5430 INPUT; "Duration:      Hours = ",H1
  544. 5440 INPUT "    Min. = ",M1:T8=T7+H1/24+M1/1440
  545. 5450 INPUT; "Timestep :      Min. = ",M2:T9=M2/1440
  546. 5460 PRINT USING "    From ###.####### to ###.#######";T7,T8
  547. 5470 PRINT:INPUT "MINIMUM ELEVATION ? (DEFAULT 0) Deg. = ",E8
  548. 5480 GOTO 5500
  549. 5490 COLOR 28,1,0:BEEP
  550. 5500 PRINT:INPUT "Output to Printer (P) or Screen (S) ?-->",P$
  551. 5510 IF ( P$="P" OR P$="p" OR P$="S" OR P$="s" ) THEN 5520: ELSE 5490
  552. 5520 COLOR 14,1,0:IF P$="P" OR P$="p" THEN P%=2 ELSE P%=3
  553. 5530 IF P%=3 THEN C9$=C8$:GOTO 5630
  554. 5540 CLS:COLOR 12:LOCATE 12,20:PRINT"IS THE PRINTER READY ??":LOCATE 14,9
  555. 5550 PRINT "SWITCH PRINTER ON AND ALIGN PAGE !! (Y/N) ":COLOR 14
  556. 5560 Z$="YyNn"
  557. 5570 K$=INKEY$:IF K$="" THEN 5570
  558. 5580 K=INSTR(Z$,K$)
  559. 5590 ON K GOTO 5630,5630,5610,5610
  560. 5600 BEEP:GOTO 5570
  561. 5610 BEEP:BEEP:BEEP:GOTO 5540
  562. 5620 ' ****** ESTABLISH SIDEREAL TIME TABLE MATRIX ******
  563. 5630 RESTORE 5740:FLG1=0:FLG2=0:CLS
  564. 5640 FOR I1=1 TO 5
  565. 5650 READ Y1(I1), G3(I1)
  566. 5660 IF Y1(I1)=Y THEN FLG1=1
  567. 5670 IF Y1(I1)=Y-1 THEN FLG2=1
  568. 5680 IF Y1(I1)=0 THEN 5700
  569. 5690 NEXT
  570. 5700 IF FLG1=1 AND FLG2=1 THEN 5800
  571. 5710 PRINT "UNABLE TO FIND INQUIRY YEAR AND/OR PREVIOUS YEAR IN SIDERAL TIMETABLE.":STOP
  572. 5720 '
  573. 5730 DATA 86, 0.276007
  574. 5740 DATA 87, 0.275347
  575. 5750 DATA 88, 0.27469296
  576. 5760 DATA 89, 0.27676777
  577. 5770 DATA 0,0
  578. 5780 '
  579. 5790 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ******
  580. 5800 I=0
  581. 5810 OPEN "KEPELER.DAT" AS #1 LEN=56
  582. 5820 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$
  583. 5830 I=I+1:IF I>20 THEN 5970
  584. 5840 GET #1,I
  585. 5850 FOR J=1 TO 10
  586. 5860 IF MID$(II$,J,1)=SPACE$(1) THEN 5890 ELSE IF J=10 THEN J=11
  587. 5870 NEXT
  588. 5880 CLOSE #1
  589. 5890 II$(I)=LEFT$(II$,J-1):IF II$(I)="END" THEN 5970
  590. 5900 IF LEFT$(II$,1)=SPACE$(1) THEN 5970
  591. 5910 Y3(I)=CVI(Y3$):T0(I)=CVD(T0$):I0(I)=CVS(I0$):O0(I)=CVS(O0$)
  592. 5920 E0(I)=CVS(E0$):W0(I)=CVS(W0$):M0(I)=CVS(M0$):N0(I)=CVD(N0$)
  593. 5930 K0(I)=CVS(K0$):F1(I)=CVS(F1$)
  594. 5940 IF Y3(I)=Y THEN 5830 ELSE IF Y3(I)=Y-1 THEN 5830 ELSE PRINT "ELEMENTS for satellite";II$(I);" NOT from CURRENT or PRECEEDING YEAR.":STOP
  595. 5950 '
  596. 5960 ' ****** SELECT SATELLITE FROM MENU ******
  597. 5970 PRINT "SATELLITE SELECTION MENU":PRINT
  598. 5980 FOR J=1 TO I-1
  599. 5990 PRINT "Entry #  ";J;" for ";II$(J)
  600. 6000 NEXT
  601. 6010 PRINT:INPUT "SELECT Entry # : ",J
  602. 6020 IF J<1 OR J>20 THEN 5990
  603. 6030 PRINT :PRINT "Doppler calculated for frequ. = ";F1(J);" MHz"
  604. 6040 INPUT " Change frequency to: (0 for default) ",D
  605. 6050 IF D<>0 THEN F1(J)=D
  606. 6060 PRINT#P%, :PRINT#P%, "Orbital ELEMENTS for ";II$(J)
  607. 6070 PRINT#P%,
  608. 6080 PRINT#P%, "Reference epoch = ";Y3(J);" +";T0(J)
  609. 6090 PRINT#P%, "Starting  epoch = ";Y;" +";T7;" = ";T$
  610. 6100 PRINT#P%,
  611. 6110 PRINT#P%, "Parameter";TAB(20);"Reference";TAB(40);"Starting"
  612. 6120 T=T7
  613. 6130 IF Y3(J)=Y-1 THEN T=T+365:T8=T8+365 ELSE 6150
  614. 6140 IF Y3(J)/4=INT(Y3(J)/4) THEN T=T+1:T8=T8+1
  615. 6150 FOR I2=1 TO I1:IF Y3(J)=Y1(I2) THEN G2=G3(I2)
  616. 6160 NEXT
  617. 6170 GOSUB 6670
  618. 6180 PRINT#P%, "Orbit Number ";TAB(20);K0(J);TAB(40);K
  619. 6190 PRINT#P%, "Mean Anomaly ";TAB(20);M0(J);TAB(40);M/P0
  620. 6200 PRINT#P%, "Inclination  ";TAB(20);I0(J)
  621. 6210 PRINT#P%, "Eccentricity ";TAB(20);E0(J)
  622. 6220 PRINT#P%, "Mean Motion  ";TAB(20);N0(J)
  623. 6230 PRINT#P%, "S.M.A.,km    ";TAB(20);A0(J)
  624. 6240 PRINT#P%, "Arg. Perigee ";TAB(20);W0(J);TAB(40);W
  625. 6250 PRINT#P%, "R. A. A. N.  ";TAB(20);O0(J);TAB(40);O
  626. 6260 PRINT#P%, "Freq.,MHz    ";TAB(20);F1(J):K9=9E+07:K8=9E+07
  627. 6270 '
  628. 6280 '****** COMPUTATION LOOP ******
  629. 6290  T=T+T9:K7=INT(T):GOSUB 6670
  630. 6300 IF K7=K8 THEN 6320
  631. 6310 K8=9E+07:K9=9E+07
  632. 6320 GOSUB 6800:IF E9<E8 THEN 6470
  633. 6330 IF K7=K8 AND K=K9 THEN 6390
  634. 6340 IF K7=K8 THEN 6380 ELSE GOSUB 6580
  635. 6350 K8=K7
  636. 6360 PRINT#P%, " U.T.C.    AZ    EL  DOPPLER   RANGE   HEIGHT  LAT.  LONG.  PHASE"
  637. 6370 PRINT#P%, "HHMM:SS   deg   deg    Hz       km       km    deg    deg   <256>
  638. 6380 PRINT#P%, TAB(21) "- - - ORBIT #";K;"- - -"
  639. 6390 K9=K:T4=T-K7:S4=INT(T4*86400!):H4=INT(S4/3600+.000001)
  640. 6400 M4=INT((S4-H4*3600)/60+.000001)
  641. 6410 S4=S4-3600*H4-60*M4
  642. 6420 T$=FNT$(H4)+FNT$(M4)+":"+FNT$(S4)
  643. 6430 F9=-F1(J)*1000000!*R8/C
  644. 6440 PRINT#P%, T$;
  645. 6450 PRINT#P%, USING "   ###   ###  #####";A9;E9;F9;
  646. 6460 PRINT#P%, USING "    #####    #####  ###.#  ###.#  ###";R5;(R-R0);L5;W5;M9
  647. 6470 IF T<T8 THEN GOTO 6290
  648. 6480 PRINT#P%, C9$
  649. 6490 PRINT "Do YOU have another INQUIRY  ?  (Y/N) "
  650. 6500 PRINT:PRINT"Else you return to the MAIN MENU !":PRINT
  651. 6510 Z$="YyNn"
  652. 6520 K$=INKEY$:IF K$="" THEN 6520
  653. 6530 K=INSTR(Z$,K$)
  654. 6540 ON K GOTO 4720,4720,6560,6560
  655. 6550 BEEP:GOTO 6520
  656. 6560 CLOSE :GOTO 50
  657. 6570 '****** PAGE HEADER SUBROUTINE ******
  658. 6580 PRINT#P%, C9$;C$;"   Lat.=";L9;"  W.Long.=";W9;"  Ht.=";H9;
  659. 6590 P=P+1:PRINT#P%, TAB(70) "Page # ";P
  660. 6600 PRINT#P%, TAB(15)" - - - Minimum Elevation = ";E8;"Deg. - - -"
  661. 6610 PRINT#P%,
  662. 6620 DN=K7:GOSUB 7120
  663. 6630 PRINT#P%, TAB(14) "- - - DAY #";K7;"- - -  ";M$;" ";DD;",";YY;"- - -"
  664. 6640 PRINT#P%, :RETURN
  665. 6650 '
  666. 6660 '****** ORBIT DETERMINATION AND UTILITY ROUTINES ******
  667. 6670 A0(J)=((G0/(N0(J)*N0(J)))^(1/3))
  668. 6680 E2=1-E0(J)*E0(J):E1=SQR(E2):Q0=M0(J)/360+K0(J)
  669. 6690 K2=9.95*((R0/A0(J))^3.5)/(E2*E2)
  670. 6700 S1=SIN(I0(J)*P0):C1=COS(I0(J)*P0)
  671. 6710 O=O0(J)-(T-T0(J))*K2*C1
  672. 6720 S0=SIN(O*P0):C0=COS(O*P0)
  673. 6730 W=W0(J)+(T-T0(J))*K2*(2.5*(C1*C1)-.5)
  674. 6740 S2=SIN(W*P0):C2=COS(W*P0)
  675. 6750 CC(1,1)=+(C2*C0)-(S2*S0*C1):CC(1,2)=-(S2*C0)-(C2*S0*C1)
  676. 6760 CC(2,1)=+(C2*S0)+(S2*C0*C1):CC(2,2)=-(S2*S0)+(C2*C0*C1)
  677. 6770 CC(3,1)=+(S2*S1):CC(3,2)=+(C2*S1)
  678. 6780 Q=N0(J)*(T-T0(J))+Q0:K=INT(Q):M9=INT((Q-K)*256):M=(Q-K)*P2
  679. 6790 RETURN
  680. 6800 E=M+E0(J)*SIN(M)+.5*(E0(J)*E0(J))*SIN(2*M)
  681. 6810 S3=SIN(E):C3=COS(E):R3=1-E0(J)*C3:M1=E-E0(J)*S3
  682. 6820 M5=M1-M:IF ABS(M5)<.000001 THEN 6840 ELSE E=E-M5/R3
  683. 6830 GOTO 6810
  684. 6840 X0=A0(J)*(C3-E0(J)):Y0=A0(J)*E1*S3:R=A0(J)*R3
  685. 6850 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)
  686. 6860 G7=T*G1+G2:G7=(G7-INT(G7))*P2:S7=-SIN(G7):C7=COS(G7)
  687. 6870 X=+(X1*C7)-(Y1*S7):Y=+(X1*S7)+(Y1*C7):Z=Z1
  688. 6880 X5=(X-X9):Y5=(Y-Y9):Z5=(Z-Z9):R5=SQR(X5*X5+Y5*Y5+Z5*Z5)
  689. 6890 IF T6<>T THEN R8=((R6-R5)/(T6-T))/86400! ELSE R8=-9000000000#
  690. 6900 R6=R5:T6=T
  691. 6910 Z8=+(X5*C8*C9)+(Y5*S8*C9)+(Z5*S9)
  692. 6920 X8=-(X5*C8*S9)-(Y5*S8*S9)+(Z5*C9):Y8=+(Y5*C8)-(X5*S8)
  693. 6930 S5=Z8/R5:C5=SQR(1-S5*S5):E9=ATN(S5/C5)/P0
  694. 6940 IF X8<0 THEN A9=P1+ATN(Y8/X8) ELSE 6960
  695. 6950 GOTO 6990
  696. 6960 IF X8>0 AND Y8>=0 THEN A9=ATN(Y8/X8) ELSE IF X8>0 THEN A9=P2+ATN(Y8/X8) ELSE 6980
  697. 6970 GOTO 6990
  698. 6980 IF Y8<0 THEN A9=3*P1/2 ELSE A9=P1/2
  699. 6990 A9=A9/P0
  700. 7000 IF X<0 THEN W5=P1+ATN(Y/X) ELSE 7020
  701. 7010 GOTO 7050
  702. 7020 IF X>0 AND Y>=0 THEN W5=ATN(Y/X) ELSE IF X>0 THEN W5=P2+ATN(Y/X) ELSE 7040
  703. 7030 GOTO 7050
  704. 7040 IF Y<0 THEN W5=3*P1/2 ELSE W5=P1/2
  705. 7050 W5=360-W5/P0
  706. 7060 B5=Z/R:L5=ATN(B5/(SQR(1-B5^2)))/P0
  707. 7070 RETURN
  708. 7080 INPUT"DAY OF YEAR NUMBER:";DN
  709. 7090 GOSUB 7120
  710. 7100 PRINT DD,M$
  711. 7110 GOTO 7080
  712. 7120 ' ****** DATE FROM DAY OF YEAR NUMBER ******
  713. 7130 '
  714. 7140 DD=0
  715. 7150 YS=Y3(J)
  716. 7160 DN=DN-31:IF DN<=0 GOTO 7310
  717. 7170 IF YS=84 GOTO 7440
  718. 7180 IF YS<>84 THEN DN=DN-28: IF DN<=0 GOTO 7330
  719. 7190 DN=DN-31: IF DN<=0 GOTO 7340
  720. 7200 DN=DN-30: IF DN<=0 GOTO 7350
  721. 7210 DN=DN-31: IF DN<=0 GOTO 7360
  722. 7220 DN=DN-30: IF DN<=0 GOTO 7370
  723. 7230 DN=DN-31: IF DN<=0 GOTO 7380
  724. 7240 DN=DN-31: IF DN<=0 GOTO 7390
  725. 7250 DN=DN-30: IF DN<=0 GOTO 7400
  726. 7260 DN=DN-31: IF DN<=0 GOTO 7410
  727. 7270 DN=DN-30: IF DN<=0 GOTO 7420
  728. 7280 DN=DN-31: IF DN<=0 GOTO 7430
  729. 7290 YS=YS+1
  730. 7300 GOTO 7160
  731. 7310 M$="JAN": DD=DN+31: RETURN
  732. 7320 M$="FEB": DD=DN+29: RETURN
  733. 7330 M$="FEB": DD=DN+28: RETURN
  734. 7340 M$="MAR": DD=DN+31: RETURN
  735. 7350 M$="APR": DD=DN+30: RETURN
  736. 7360 M$="MAY": DD=DN+31: RETURN
  737. 7370 M$="JUN": DD=DN+30: RETURN
  738. 7380 M$="JLY": DD=DN+31: RETURN
  739. 7390 M$="AUG": DD=DN+31: RETURN
  740. 7400 M$="SEP": DD=DN+30: RETURN
  741. 7410 M$="OCT": DD=DN+31: RETURN
  742. 7420 M$="NOV": DD=DN+30: RETURN
  743. 7430 M$="DEC": DD=DN+31: RETURN
  744. 7440 DN=DN-29: IF DN<=0 THEN 7320 ELSE 7190
  745. 7450 GOTO 260 'END
  746.