home *** CD-ROM | disk | FTP | other *** search
/ World of Ham Radio 1997 / WOHR97_AmSoft_(1997-02-01).iso / basic / usat.bas < prev    next >
BASIC Source File  |  1997-02-01  |  30KB  |  741 lines

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