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