home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / science / norad / noradsc / norad.lst next >
File List  |  1990-06-06  |  35KB  |  1,078 lines

  1. REM      N.O.R.A.D. V2.0 The graphic realtime satellite tracking program.
  2. REM                    ATARI ST -- GFA BASIC 3.07
  3. REM               Please customize the six lines below.
  4. REM
  5. tlocal=-5             ! Your time difference from GMT (UTC). i.e. -5 = CDT
  6. l9=45.0709            ! Your latitude, degrees.fraction-of-degrees.
  7. w9=93.1567            ! Your longitude, degrees.fraction. i.e +values for USA
  8. h9=980                ! Your altitude above sea-level. (Feet)
  9. el$="C:\orbitals.dat" ! Path to orbital elements file. (NASA Predictions)
  10. ms=2000               ! Maximum number of satellites. (To reserve space)
  11. REM
  12. MODE 1                ! GFA Basic 3.07 compiler default override.
  13. REM
  14. REM Orbital calculation subroutines from the AMSAT Orbital Prediction Program
  15. REM (C) 1980 by Dr. T. A. Clark W3IWI, 6388 Guilford Road, Clarksville MD
  16. REM 21209 USA.  "Permission granted for non-commercial use provided credit is
  17. REM given to author, AMSAT and ORBIT magazine.  See ORBIT issue 6, March/
  18. REM April 1981.  Ported to ATARI ST BASIC by Scott Tilley (1/24/87.)
  19. REM
  20. REM Graphic interface and world map by John Logajan, 4248 Hamline, Arden Hills
  21. REM MN 55112 USA. 6/3/90  Graphic interface and map code are released into
  22. REM the public domain.    logajan@ns.network.com   john@logajan.mn.org
  23. REM
  24. CLS
  25. h9=h9*12/39.37  ! convert feet height to meters
  26. REPEAT
  27.   REPEAT
  28.     DEFTEXT 3,0,0,32
  29.     TEXT 100,25,0,"Welcome to N.O.R.A.D.   V2"
  30.     DEFTEXT 1,0,0,13
  31.     TEXT 105,45,0,"Your clock said the time was:  "+DATE$+"  "+TIME$
  32.     DEFTEXT 2,0,0,13
  33.     TEXT 100,61,0,"Please be sure it is set to the EXACT time and date!"
  34.     TEXT 175,152,0,"Press the HELP-key for instructions."
  35.     TEXT 220,170,0,"Press the ESC-key to exit."
  36.     TEXT 80,186,0,"- Point at satellite of interest and click to get its info -"
  37.     a$="Want to set/reset the clock?"
  38.     ALERT 2,a$,1,"No need|SetClock|Quit!",but
  39.     IF but=3
  40.       EDIT
  41.     ENDIF
  42.     IF but=2
  43.       CLS
  44.       PRINT "Enter date (or RETURN to skip)"
  45.       PRINT
  46.       PRINT "Use the format  month/day/year."
  47.       PRINT "Be sure to use two digits (leading zeroes) for each."
  48.       PRINT "Otherwise the system will ignore the new date."
  49.       PRINT
  50.       PRINT DATE$;
  51.       INPUT "  Date ";d$
  52.       CLS
  53.       PRINT "Enter local time (or RETURN to skip)"
  54.       PRINT
  55.       PRINT "Use the format  hour:minute:second."
  56.       PRINT "Be sure to use two digits (leading zeroes) for each."
  57.       PRINT "Otherwise the system will ignore the new time."
  58.       PRINT
  59.       PRINT TIME$;
  60.       INPUT "  Time ";t$
  61.       SETTIME t$,d$
  62.     ENDIF
  63.     CLS
  64.   UNTIL but=1
  65.   y=VAL(RIGHT$(DATE$,4))-1900
  66.   IF y<89
  67.     PRINT "          Is it really the year ";1900+y;" ?"
  68.     PRINT "I haven't made the program so it can work in years before 1989,"
  69.     PRINT "so I am going to force you to set your clock/calender."
  70.     ALERT 1," ",1,"continue",but
  71.     CLS
  72.   ENDIF
  73. UNTIL y>=89
  74. IF y/4=INT(y/4)
  75.   f9=1
  76. ELSE
  77.   f9=0                   ! leap-year flag
  78. ENDIF
  79. d=VAL(MID$(DATE$,4,2))
  80. m=VAL(LEFT$(DATE$,2))
  81. REM Calculate day of year
  82. DATA 0,31,59,90,120,151,181,212,243,273,304,334
  83. FOR i=1 TO 12
  84.   READ d9x
  85.   IF i=m
  86.     d9=d9x
  87.   ENDIF
  88. NEXT i
  89. d8=d+d9
  90. IF m>2
  91.   d8=d8+f9
  92. ENDIF
  93. t$=TIME$
  94. tstart=TIMER
  95. h=VAL(LEFT$(t$,2))
  96. s=VAL(RIGHT$(t$,2))
  97. m=VAL(MID$(t$,4,2))
  98. t7=d8+h/24+m/1440+s/86400-tlocal/24
  99. leapy=30/60/60/24
  100. r0=6378.135                          ! earth mean diameter km
  101. f=298.25                             ! delta diameter km
  102. f=1/f
  103. g0=75369793000000                    ! gravitational constant
  104. g1=1.0027379093                      ! sidereal/solar ratio
  105. p2=2*PI
  106. p0=PI/180
  107. pd2=PI/2
  108. pday=p2/365.2422           ! 2*pi/days per year
  109. seg=279.04247*p0           ! sun's ecliptic longitude at 1975
  110. swg=282.510396*p0          ! sun's ecliptic longitude at perigee
  111. see=0.01672*2              ! eccentricy of earth orbit
  112. sepoch=5114                ! days between 1975 and 1989 (my base year)
  113. obliq=23.4333333*p0        ! obliquity of the ecliptic
  114. cobliq=COS(obliq)
  115. sobliq=SIN(obliq)
  116. cl9p0=COS(l9*p0)
  117. sl9p0=SIN(l9*p0)
  118. dseg=seg-swg
  119. ltsun=0
  120. w9x=w9/15
  121. REM  Greenwich Sidereal Time at New Year's
  122. yt%=0
  123. FOR y1=90 TO y
  124.   yd%=365
  125.   IF y1/4=INT(y1/4)
  126.     yd%=366
  127.   ENDIF
  128.   yt%=yt%+yd%
  129. NEXT y1
  130. g2=FRAC(yt%*g1+0.27676779)           ! Figure forward from 0.0.1989 GMT
  131. sepoch=sepoch+yt%
  132. REM  Routine to evaluate OBSERVER's GEOCENTRIC Coordinates, where
  133. REM   X-axis=GREENWICH, Y-axis goes thru India, Z-axis=North Pole
  134. l8=l9*p0
  135. s9=SIN(l8)
  136. c9=COS(l8)                                   ! Initial GEOCENTRIC coordinates
  137. s8=SIN(-w9*p0)
  138. c8=COS(w9*p0)                                ! W9= West longitude
  139. REM Now to account for flattened Earth
  140. r9=r0*(1-(f/2)+(f/2)*COS(2*l8))+h9/1000      ! H9=height in meters
  141. REM Now to make L8 the GEOCENTRIC latitude
  142. l8=ATN((1-f)^2*s9/c9)
  143. z9=r9*SIN(l8)
  144. x9=r9*COS(l8)*c8
  145. y9=r9*COS(l8)*s8
  146. REM   *********** get Parameters for Satellites *********
  147. PRINT "Reading orbital elements from file: ";el$
  148. PRINT
  149. ON ERROR GOSUB missing
  150. OPEN "I",#1,el$
  151. msx%=LOF(#1)/141
  152. IF msx%<ms
  153.   ms=msx%
  154. ENDIF
  155. DIM c(3,2),lvt%(200),s$(ms),y3(ms),t0(ms),mmr(ms),i0(ms),o0(ms),e0(ms)
  156. DIM w0(ms),m0(ms),n0(ms),k0(ms),a0(ms),xx%(ms),yy%(ms),e(ms),prob|(ms)
  157. sp%=0
  158. ON ERROR GOSUB baddy
  159. DO
  160.   EXIT IF EOF(#1)
  161.   LINE INPUT #1,ln$
  162.   EXIT IF EOF(#1)
  163.   LINE INPUT #1,l1$
  164.   EXIT IF EOF(#1)
  165.   LINE INPUT #1,l2$
  166.   WHILE LEFT$(l1$,1)<>"1" OR LEFT$(l2$,1)<>"2"
  167.     ln$=l1$
  168.     l1$=l2$
  169.     EXIT IF EOF(#1)
  170.     LINE INPUT #1,l2$
  171.   WEND
  172.   INC sp%
  173.   s$(sp%)="[                    ]"
  174.   MID$(s$(sp%),2,14)=LEFT$(ln$,14)
  175.   MID$(s$(sp%),17,5)=MID$(l1$,3,5)
  176.   y3(sp%)=VAL(MID$(l1$,19,2))
  177.   t0(sp%)=VAL(MID$(l1$,21,12))
  178.   IF y3(sp%)<y                     ! Correct for "old" orbital elements
  179.     yt%=0
  180.     FOR y1=y3(sp%) TO y-1
  181.       yd%=365
  182.       IF y1/4=INT(y1/4)
  183.         yd%=366
  184.       ENDIF
  185.       yt%=yt%+yd%
  186.     NEXT y1
  187.     t0(sp%)=t0(sp%)-yt%
  188.     y3(sp%)=y
  189.   ENDIF
  190.   mmr(sp%)=VAL(MID$(l1$,34,10))
  191.   i0(sp%)=VAL(MID$(l2$,9,8))
  192.   o0(sp%)=VAL(MID$(l2$,18,8))
  193.   e0(sp%)=VAL("."+MID$(l2$,27,7))
  194.   w0(sp%)=VAL(MID$(l2$,35,8))
  195.   m0(sp%)=VAL(MID$(l2$,44,8))
  196.   n0(sp%)=VAL(MID$(l2$,53,11))
  197.   k0(sp%)=VAL(MID$(l2$,64,5))
  198.   a0(sp%)=((g0/(n0(sp%)^2))^(1/3))
  199.   e(sp%)=0
  200.   PRINT sp%;TAB(5);s$(sp%)
  201.   IF sp%=ms
  202.     PRINT "Oops! Not enough room reserved for all satellite elements."
  203.     PRINT "Increase the variable -Ms- to a higher number and try again."
  204.     EDIT
  205.   ENDIF
  206.   IF INP?(2)
  207.     IF INP(2)=27
  208.       EDIT
  209.     ENDIF
  210.   ENDIF
  211. LOOP
  212. ON ERROR
  213. IF sp%=0
  214.   GOSUB missing
  215. ENDIF
  216. CLOSE #1
  217. mxsp%=sp%-1
  218. mxsps%=sp%
  219. FOR i%=1 TO mxsp%
  220.   prob|(i%)=0
  221. NEXT i%
  222. nowreck!=FALSE
  223. IF FRE(0)>50000
  224.   nowreck!=TRUE
  225.   DIM helparray%(33000/4)
  226.   helpstuff%=INT(VARPTR(helparray%(0))/256)*256+256
  227.   keepalive%=XBIOS(2)
  228. ENDIF
  229. REM   ******** Here follows the actual computation loop *********
  230. CLS
  231. SETCOLOR 0,0,0,0  ! For color 0 (black -- background)
  232. SETCOLOR 1,0,0,7  ! For color 2 (blue -- trails)
  233. SETCOLOR 3,7,0,0  ! For color 1 (red -- satellites/text/arrow)
  234. SETCOLOR 2,3,2,0  ! For color 3 (brown -- world map)
  235. DEFMOUSE 0
  236. DEFFILL 3,1
  237. white!=FALSE
  238. hilite!=FALSE
  239. facts!=FALSE
  240. clkon!=FALSE
  241. clkfast!=FALSE
  242. mapon!=TRUE
  243. equat!=FALSE
  244. helpme!=FALSE
  245. lookup!=FALSE
  246. found!=FALSE
  247. sunfacts!=FALSE
  248. sunchk!=FALSE
  249. radaron!=FALSE
  250. leaptime!=FALSE
  251. vpage%=0
  252. d$=CHR$(248)
  253. GOSUB map
  254. DO
  255.   GOSUB sun
  256.   IF sunfacts!
  257.     GOSUB factsun
  258.   ENDIF
  259.   FOR sp%=1 TO mxsp%
  260.     IF (NOT radaron!) OR (radaron! AND prob|(sp%)<1)
  261.       t=t7+(TIMER-tstart)/17280000
  262.       GOSUB fnc
  263.       COLOR 2
  264.       IF hilite!
  265.         IF sp%=sr%
  266.           COLOR 1
  267.         ENDIF
  268.       ENDIF
  269.       PLOT xx%(sp%),yy%(sp%)
  270.       COLOR 1
  271.       IF sunchk! AND ((NOT radaron!) OR (radaron! AND e9>0))
  272.         gcca=COS((sunlng-wx5-180)*p0)
  273.         gcsatc=(90-l5)*p0
  274.         gcangle=(ACOS(gcbcos*COS(gcsatc)+gcbsin*SIN(gcsatc)*gcca))/p0
  275.         IF gcangle>90
  276.           shad=r*COS((gcangle-90)*p0)
  277.           IF shad<r0
  278.             COLOR 2
  279.           ENDIF
  280.         ENDIF
  281.       ENDIF
  282.       IF radaron!
  283.         IF e9=>0
  284.           rrr=90-e9
  285.           yy%(sp%)=100-rrr*COSQ(a9)
  286.           xx%(sp%)=2.4*rrr*SINQ(a9)+320
  287.           PLOT xx%(sp%),yy%(sp%)
  288.         ENDIF
  289.       ELSE
  290.         yy%(sp%)=1.11111111*(90-l5)
  291.         xx%(sp%)=1.77777777*(360-wx5)
  292.         PLOT xx%(sp%),yy%(sp%)
  293.       ENDIF
  294.     ELSE
  295.       DEC prob|(sp%)
  296.     ENDIF
  297.     IF facts!
  298.       SWAP sp%,sr%
  299.       t=t7+(TIMER-tstart)/17280000
  300.       IF leaptime!
  301.         t=t+leapy
  302.       ENDIF
  303.       GOSUB fnc
  304.       LOCATE 1,1
  305.       PRINT USING "&###!"," AZ=",a9,d$;
  306.       LOCATE 9,1
  307.       PRINT USING "&-##!"," EL=",e9,d$;
  308.       IF NOT equat!
  309.         LOCATE 17,1
  310.         PRINT USING "&######!"," ALT=",(r-r0)*0.6215,"m";
  311.         LOCATE 29,1
  312.         PRINT USING "&-##!"," LT=",l5,d$;
  313.         LOCATE 37,1
  314.         PRINT USING "&-###!"," LN=",wx5-180,d$;
  315.       ELSE
  316.         REM Local horizon to Equatorial
  317.         sdec=ASIN(SIN(e9*p0)*sl9p0+COS(e9*p0)*cl9p0*COS(a9*p0))
  318.         sha=ACOS((SIN(e9*p0)-sl9p0*SIN(sdec))/cl9p0/COS(sdec))
  319.         IF SIN(a9*p0)>0
  320.           sha=p2-sha
  321.         ENDIF
  322.         sha=sha/15/p0/24
  323.         sra=FRAC(t*g1+g2-w9/360-sha)*24
  324.         ram=FRAC(sra)*60
  325.         ras=FRAC(ram)*60
  326.         sdec=sdec/p0
  327.         decm=FRAC(ABS(sdec))*60
  328.         decs=FRAC(decm)*60
  329.         LOCATE 17,1
  330.         PRINT USING "&##!##!##!"," RA=",INT(sra),"h",INT(ram),"m",ras,"s";
  331.         LOCATE 30,1
  332.         PRINT USING "&-##!##!##!"," DEC=",INT(sdec),d$,INT(decm),"'",decs,"""";
  333.       ENDIF
  334.       LOCATE 46,1
  335.       PRINT USING "&#####"," ORB#=",k;
  336.       LOCATE 58,1
  337.       IF leaptime!
  338.         PRINT ">< 30 Seconds Fast! ><";
  339.       ELSE
  340.         PRINT s$(sp%);
  341.       ENDIF
  342.       SWAP sp%,sr%
  343.     ENDIF
  344.     IF MOUSEK<>0 AND NOT lookup!
  345.       xm%=MOUSEX
  346.       ym%=MOUSEY
  347.       hilite!=FALSE
  348.       facts!=FALSE
  349.       sunfacts!=FALSE
  350.       PAUSE 1
  351.       mk%=MOUSEK
  352.       LOCATE 1,1
  353.       PRINT SPC(79);
  354.       found!=FALSE
  355.       FOR sr%=0 TO mxsps%
  356.         IF ((xx%(sr%)-xm%) AND &HFFE)=0 AND ((yy%(sr%)-ym%) AND &HFFE)=0
  357.           found!=TRUE
  358.           PRINT CHR$(7);    ! Sound bell!
  359.           PAUSE 50
  360.         ENDIF
  361.         EXIT IF found!
  362.       NEXT sr%
  363.       IF sr%=0
  364.         found!=FALSE
  365.         LOCATE 1,1
  366.         PRINT "[ YOUR Location ]   ";l9;d$'"Lat."'''w9;d$'"Long.";
  367.       ENDIF
  368.       IF sr%=mxsps%
  369.         found!=FALSE
  370.         sunfacts!=TRUE
  371.         GOSUB factsun
  372.       ENDIF
  373.       IF mk%=1 OR mk%=3
  374.         facts!=found!
  375.       ENDIF
  376.       IF mk%=2 OR mk%=3
  377.         hilite!=found!
  378.       ENDIF
  379.       found!=FALSE
  380.     ENDIF
  381.     IF INP?(2) OR found!=TRUE
  382.       IF found!=FALSE
  383.         ex$=INKEY$
  384.       ELSE
  385.         ex$="bleck"
  386.       ENDIF
  387.       IF helpme!=TRUE OR lookup!=TRUE AND ex$<>CHR$(0)+"H" AND ex$<>CHR$(0)+"P"
  388.         IF nowreck!
  389.           ~XBIOS(5,L:keepalive%,L:keepalive%,-1)
  390.           VSYNC
  391.           VSYNC
  392.         ELSE
  393.           GOSUB map
  394.         ENDIF
  395.         helpme!=FALSE
  396.         lookup!=FALSE
  397.         IF found!
  398.           LOCATE 1,1
  399.           PRINT SPC(79);
  400.           found!=FALSE
  401.         ENDIF
  402.         vpage%=0
  403.         ex$="bleck"
  404.       ENDIF
  405.       IF ex$=CHR$(27)      ! Esc key quits.
  406.         alt$="Really Quit?"
  407.         ALERT 3,alt$,1,"Quit!|Stay",but
  408.         IF but=1
  409.           GOSUB done
  410.         ENDIF
  411.       ENDIF
  412.       IF ex$=CHR$(0)+"b"   ! Help key
  413.         GOSUB help
  414.       ENDIF
  415.       IF ex$=CHR$(0)+"G"   ! Clr/Home key clears screen
  416.         GOSUB map
  417.       ENDIF
  418.       IF ex$=CHR$(0)+";"   ! F1 - toggel background
  419.         white!=NOT white!
  420.         IF white!
  421.           SETCOLOR 0,7,7,7
  422.           SETCOLOR 1,0,0,0
  423.           SETCOLOR 2,5,6,3
  424.         ELSE
  425.           SETCOLOR 0,0,0,0
  426.           SETCOLOR 1,0,0,7
  427.           SETCOLOR 3,7,0,0
  428.           SETCOLOR 2,3,2,0
  429.         ENDIF
  430.       ENDIF
  431.       IF ex$=CHR$(0)+"<"   ! F2 - toggel world map drawing
  432.         mapon!=NOT mapon!
  433.         IF mapon!
  434.           LOCATE 1,1
  435.           PRINT "Map/Grid   OFF  at next CLR/HOME    ";
  436.         ELSE
  437.           LOCATE 1,1
  438.           PRINT "Map/Grid   ON   at next CLR/HOME    ";
  439.         ENDIF
  440.         PAUSE 50
  441.         LOCATE 1,1
  442.         PRINT SPC(35);
  443.       ENDIF
  444.       IF ex$=CHR$(0)+"="   ! F3 - toggel clock
  445.         clkon!=NOT clkon!
  446.         clkfast!=FALSE
  447.         IF NOT clkon!
  448.           sf=8
  449.           LOCATE sf,25
  450.           PRINT SPC(64);
  451.           IF mapon! AND NOT radaron!
  452.             FILL 200,198
  453.           ENDIF
  454.         ELSE
  455.           sf=8
  456.           LOCATE sf,25
  457.           GOSUB disclk
  458.         ENDIF
  459.       ENDIF
  460.       IF ex$=CHR$(0)+">"   ! F4 - toggel fast clock
  461.         clkfast!=NOT clkfast!
  462.         clkon!=FALSE
  463.         IF NOT clkfast!
  464.           sf=8
  465.           LOCATE sf,25
  466.           PRINT SPC(64);
  467.           IF mapon! AND NOT radaron!
  468.             FILL 200,198
  469.           ENDIF
  470.         ELSE
  471.           sf=8
  472.           LOCATE sf,25
  473.           GOSUB disclk
  474.         ENDIF
  475.       ENDIF
  476.       IF ex$=CHR$(0)+"?" AND facts!   ! F5 - toggel equatorial/horizon
  477.         equat!=NOT equat!
  478.         LOCATE 17,1
  479.         PRINT SPC(30);
  480.       ENDIF
  481.       IF ex$=CHR$(0)+"@"   ! F6 - Toggel sunshine check
  482.         sunchk!=NOT sunchk!
  483.       ENDIF
  484.       IF ex$=CHR$(0)+"A"   ! F7 - Toggel RADAR screen / world view.
  485.         radaron!=NOT radaron!
  486.         GOSUB map
  487.       ENDIF
  488.       IF ex$=CHR$(0)+"B" AND facts!   ! F8 - Toggel Leap-Ahead 30 seconds.
  489.         leaptime!=NOT leaptime!
  490.       ENDIF
  491.       IF ex$=CHR$(0)+"P" AND lookup!     ! Directory page up.
  492.         vpage%=vpage%+110
  493.         IF vpage%>mxsp%
  494.           vpage%=vpage%-110
  495.           IF vpage%<0
  496.             vpage%=0
  497.           ENDIF
  498.         ENDIF
  499.         ex$=CHR$(0)+"R"
  500.       ENDIF
  501.       IF ex$=CHR$(0)+"H" AND lookup!     ! Directory page down.
  502.         vpage%=vpage%-110
  503.         IF vpage%<0
  504.           vpage%=0
  505.         ENDIF
  506.         ex$=CHR$(0)+"R"
  507.       ENDIF
  508.       IF ex$=CHR$(0)+"R"   ! INSERT - List and select from catalog
  509.         IF nowreck!
  510.           ~XBIOS(5,L:helpstuff%,L:helpstuff%,-1)
  511.           VSYNC
  512.           VSYNC
  513.           CLS
  514.         ENDIF
  515.         LOCATE 1,2
  516.         vv%=vpage%
  517.         vvv%=0
  518.         REPEAT
  519.           INC vvv%
  520.           INC vv%
  521.           PRINT MID$(s$(vv%),2,14)';
  522.           IF (vv% MOD 5)=0
  523.             PRINT
  524.           ENDIF
  525.         UNTIL vv%=mxsp% OR vvv%=110
  526.         LOCATE 31,24
  527.         PRINT "*** Use arrow keys to page up/down ***"
  528.         IF nowreck!
  529.           ~XBIOS(5,L:keepalive%,L:helpstuff%,-1)
  530.         ENDIF
  531.         lookup!=TRUE
  532.         found!=FALSE
  533.       ENDIF
  534.     ENDIF
  535.     IF clkfast!
  536.       sf=8
  537.       LOCATE sf,25
  538.       GOSUB disclk
  539.     ENDIF
  540.     IF lookup!
  541.       IF nowreck!
  542.         ~XBIOS(5,L:helpstuff%,L:helpstuff%,-1)
  543.         VSYNC
  544.         VSYNC
  545.       ENDIF
  546.       xm%=MOUSEX
  547.       ym%=MOUSEY
  548.       IF ym%>7 AND ym%<184
  549.         srx%=vpage%+INT((ym%-8)/8)*5+INT(xm%/120)+1
  550.         IF srx%>mxsp%
  551.           srx%=mxsp%
  552.         ENDIF
  553.         IF srx%<0
  554.           srx%=1
  555.         ENDIF
  556.       ENDIF
  557.       IF MOUSEK<>0
  558.         PAUSE 1
  559.         mk%=MOUSEK
  560.         PRINT CHR$(7);
  561.         PAUSE 50
  562.         facts!=FALSE
  563.         hilite!=FALSE
  564.         sr%=srx%
  565.         IF mk%=1 OR mk%=3
  566.           facts!=TRUE
  567.         ENDIF
  568.         IF mk%=2 OR mk%=3
  569.           hilite!=TRUE
  570.         ENDIF
  571.         found!=TRUE
  572.       ENDIF
  573.       LOCATE 3,24
  574.       PRINT s$(srx%);
  575.       IF nowreck!
  576.         ~XBIOS(5,L:keepalive%,L:helpstuff%,-1)
  577.       ENDIF
  578.     ENDIF
  579.   NEXT sp%
  580.   IF clkon!
  581.     sf=8
  582.     LOCATE sf,25
  583.     GOSUB disclk
  584.   ENDIF
  585. LOOP
  586. END
  587. PROCEDURE missing
  588.   PRINT "The data file is missing or empty!  You need the orbital elements"
  589.   PRINT "data for each satellite -- available on-line from the Celestial BBS,"
  590.   PRINT " @ 513-427-0674, Fairborn Ohio, TS Kelso -- sysop."
  591.   PRINT
  592.   PRINT "Or, if you have the file, make sure you change the path in the first"
  593.   PRINT "few lines of this program to point to it!  Right now the path is set"
  594.   PRINT "to point at ";el$
  595.   STOP
  596. RETURN
  597. PROCEDURE baddy
  598.   PRINT "The data file ";el$;" has problems."
  599.   PRINT "The most likely problem is that the line at the end of the file is"
  600.   PRINT "not terminated by a carriage return (CR) and/or line feed (LF)."
  601.   PRINT "Please correct the file and try it again!"
  602.   STOP
  603. RETURN
  604. PROCEDURE done
  605.   COLOR 1
  606.   SETCOLOR 0,7,7,7
  607.   SETCOLOR 3,0,0,0
  608.   SETCOLOR 1,7,0,0
  609.   SETCOLOR 2,0,7,0
  610.   EDIT
  611. RETURN
  612. PROCEDURE factsun
  613.   LOCATE 1,1
  614.   PRINT "[ Sun, Sol, Helios ]    ";
  615.   LOCATE 24,1
  616.   PRINT USING "-##.#####!&",decsun/p0,d$," Lat.   ";
  617.   LOCATE 42,1
  618.   PRINT USING "-###.#####!&",sunlng,d$," Long.    ";
  619. RETURN
  620. PROCEDURE help
  621.   IF nowreck!
  622.     ~XBIOS(5,L:helpstuff%,L:helpstuff%,-1)
  623.     VSYNC
  624.     VSYNC
  625.     CLS
  626.   ENDIF
  627.   LOCATE 1,1
  628.   PRINT "Aim mouse-arrow (carefully) at satellite of interest and:"
  629.   PRINT " DATA   - click LEFT mouse button to show data on that satellite."
  630.   PRINT " HILITE - click RIGHT mouse button to highlight (red) satellite trail."
  631.   PRINT " BOTH   - click BOTH mouse buttons to show data and highlight trail."
  632.   PRINT
  633.   PRINT "ESC        - Quit the program."
  634.   PRINT "Clr/Home   - Erase screen."
  635.   PRINT "HELP (key) - Toggel help information on/off."
  636.   PRINT "ALT+HELP   - Print screen (Hint: Toggel screen colors first (F1.))"
  637.   PRINT "INSERT     - Select specific satellite from list."
  638.   PRINT "F1 - Toggel screen colors (useful for screen dumps.)"
  639.   PRINT "F2 - Toggel world map on/off (takes effect at next Clr/Home press.)"
  640.   PRINT "F3 - Slow update clocks (once per loop of all satellites.)"
  641.   PRINT "F4 - Fast update clocks (once per each satellite update.)"
  642.   PRINT "F5 - Toggel between LT/LN/ALT and RA/DEC in satellite data line."
  643.   PRINT "F6 - Show only satellites in sunshine (not in earth's shadow.)"
  644.   PRINT "F7 - Toggel between WORLD VIEW and LOCAL RADAR."
  645.   PRINT "F8 - Toggel Jump-Ahead 30 seconds (for Sat. data only.)"
  646.   PRINT
  647.   PRINT " AZ(imuth) 0=N 90=E 180=S 270=W / EL(evation) 0=Horizon, 90=Overhead."
  648.   PRINT " ALT(itude) Miles above average sea-level."
  649.   PRINT " LT/LN: Latitude(90=N, -90=S) / Longitude(180=W, 0=Greenwich, -180=E.)"
  650.   PRINT " ORB#: Current revolution #.  / [ xx ] - Description and Satellite #."
  651.   PRINT " RA/DEC: Right Ascension (h m s) / Declination (d m s)."
  652.   PRINT " LT/LST/GMT/GST Local Solar/Sidereal  -  Greenwich Solar/Sidereal time.";
  653.   IF nowreck!
  654.     ~XBIOS(5,L:keepalive%,L:helpstuff%,-1)
  655.   ENDIF
  656.   helpme!=TRUE
  657. RETURN
  658. REM ********** ORBIT DETERMINATION ROUTINES ******************
  659. PROCEDURE fnc
  660.   REM Routine to initialize the C(J,K) coordinate rotation matrix
  661.   REM   and other parameters associated with the orbital elements.
  662.   REM       a0(sp%)=((g0/(n0(sp%)^2))^(1/3))
  663.   e2=1-e0(sp%)^2
  664.   e1=SQR(e2)
  665.   q0=m0(sp%)/360+k0(sp%)                       ! Q0=initial orbit phase
  666.   REM -----Account for nodal effects due to lumpy gravity field due to
  667.   REM        the flattened, oblate spheroid shape of Earth
  668.   k2=9.95*((r0/a0(sp%))^3.5)/(e2^2)
  669.   REM Update elements to current epoch and evaluate their SIN/COSs
  670.   s1=SIN(i0(sp%)*p0)
  671.   c1=COS(i0(sp%)*p0)                 ! I0=inclination
  672.   k2=(t-t0(sp%))*k2
  673.   o=o0(sp%)-k2*c1
  674.   s0=SIN(o*p0)
  675.   c0=COS(o*p0)                       ! O = R.A.A.N. (deg)
  676.   w=w0(sp%)+k2*(2.5*(c1^2)-0.5)
  677.   s2=SIN(w*p0)
  678.   c2=COS(w*p0)                       ! W = arg of perigee
  679.   REM Set up coordinate rotation matrix for the current orbit
  680.   c(1,1)=+(c2*c0)-(s2*s0*c1)
  681.   c(1,2)=-(s2*c0)-(c2*s0*c1)
  682.   c(2,1)=+(c2*s0)+(s2*c0*c1)
  683.   c(2,2)=-(s2*s0)+(c2*c0*c1)
  684.   c(3,1)=+(s2*s1)
  685.   c(3,2)=+(c2*s1)
  686.   REM ---- Function to evaluate M = MEAN ANOMALY in 0-2pi range----
  687.   REM          K = perigee passage counter
  688.   q=n0(sp%)*(t-t0(sp%))+q0
  689.   k=INT(q)
  690.   m=(q-k)*p2
  691.   REM Routine to solve KEPLER's equation, given M
  692.   REM  returns satellite's GEOCENTRIC coordinates
  693.   IF e(sp%)=0
  694.     e(sp%)=m+e0(sp%)*SIN(m)+0.5*(e0(sp%)^2)*SIN(2*m)    ! initial trial value
  695.   ENDIF
  696.   REM  interation loop to solve Kepler's transcental equation-------
  697.   e=e(sp%)
  698.   DO
  699.     s3=SIN(e)
  700.     c3=COS(e)
  701.     r3=1-e0(sp%)*c3
  702.     m1=e-e0(sp%)*s3
  703.     m5=m1-m
  704.     EXIT IF ABS(m5)<1.0E-06
  705.     e=e-m5/r3
  706.   LOOP
  707.   e(sp%)=e
  708.   REM  Now get satellite's XYZ coordinates------------
  709.   x0=a0(sp%)*(c3-e0(sp%))
  710.   y0=a0(sp%)*e1*s3
  711.   r=a0(sp%)*r3                        ! in the plane of the orbit
  712.   REM Now rotate from orbital plane to INERTIAL CELESTIAL Coordinates
  713.   x1=x0*c(1,1)+y0*c(1,2)
  714.   y1=x0*c(2,1)+y0*c(2,2)
  715.   z1=x0*c(3,1)+y0*c(3,2)
  716.   REM Rotate through current GHA of Aries, convert to GEOCENTRIC coordinates
  717.   g7=FRAC(t*g1+g2)*p2
  718.   s7=-SIN(g7)
  719.   c7=COS(g7)
  720.   x=+(x1*c7)-(y1*s7)
  721.   y=+(x1*s7)+(y1*c7)
  722.   z=z1
  723.   REM Routine to extract all the parameters you might ever need
  724.   REM    First get Vector from observer to satellite--
  725.   x5=(x-x9)
  726.   y5=(y-y9)
  727.   z5=(z-z9)
  728.   r5=SQR(x5^2+y5^2+z5^2)
  729.   REM Now rotate into observer' s LOCAL Coordinates----
  730.   REM where X8=North, Y8=East, Z8=Up (Left-handed system)
  731.   z8=+(x5*c8*c9)+(y5*s8*c9)+(z5*s9)
  732.   x8=-(x5*c8*s9)-(y5*s8*s9)+(z5*c9)
  733.   y8=+(y5*c8)-(x5*s8)
  734.   s5=z8/r5
  735.   c5=SQR(1-s5*s5)
  736.   e9=(ATN(s5/c5))/p0                   ! E9=elevation
  737.   dx=x8
  738.   dy=y8
  739.   GOSUB fna
  740.   a9=d/p0                              ! FNA resolves quadrant A9=Azimuth
  741.   dx=x
  742.   dy=y
  743.   GOSUB fna
  744.   w5=360-d/p0                          ! W5=SubSatellitePoint W.long.
  745.   wx5=(w5+180) MOD 360
  746.   b5=z/r
  747.   l5=ATN(b5/(SQR(1-b5^2)))/p0          ! L5=SSP Lat.
  748.   prob|(sp%)=0
  749.   IF e9<0
  750.     prob|(sp%)=ABS(e9)
  751.   ENDIF
  752. RETURN                            !---note R-R0=sat. alt. above mean spheroid
  753. REM --------------------------------------------------------------------
  754. PROCEDURE fna
  755.   REM Calculates INVERSE TANGENT in proper quadrant ala FORTRAN ATAN2
  756.   IF dx<0
  757.     d=PI+ATN(dy/dx)         ! Q2 or Q3
  758.   ENDIF
  759.   IF dx>0                   ! Q1 or Q4
  760.     IF dy>=0
  761.       d=ATN(dy/dx)
  762.     ELSE
  763.       d=p2+ATN(dy/dx)
  764.     ENDIF
  765.   ENDIF
  766.   REM The two cases for DX=0
  767.   IF dx=0
  768.     IF dy>=0
  769.       d=PI/2
  770.     ELSE
  771.       d=3*PI/2
  772.     ENDIF
  773.   ENDIF
  774. RETURN
  775. REM -------------------------------------------------------------------
  776. PROCEDURE disclk
  777.   t=t7+(TIMER-tstart)/17280000
  778.   PRINT DATE$';
  779.   LOCATE sf+11,25
  780.   ft=FRAC(t+tlocal/24)*24
  781.   @prtime
  782.   PRINT " LT";
  783.   LOCATE sf+24,25
  784.   ft=FRAC(t)*24
  785.   @prtime
  786.   PRINT " GMT";
  787.   LOCATE sf+38,25
  788.   ft=FRAC(t*g1+g2-w9/360)*24
  789.   @prtime
  790.   PRINT " LST";
  791.   LOCATE sf+52,25
  792.   ft=FRAC(t*g1+g2)*24
  793.   @prtime
  794.   PRINT " GST";
  795. RETURN
  796. PROCEDURE prtime
  797.   PRINT USING "##!",INT(ft)+100,":";
  798.   ft=FRAC(ft)*60
  799.   PRINT USING "##!",INT(ft)+100,":";
  800.   PRINT USING "##",INT(FRAC(ft)*60)+100;
  801. RETURN
  802. PROCEDURE sun
  803.   REM Where is the sun?
  804.   t=t7+(TIMER-tstart)/17280000
  805.   gst=t*g1+g2
  806.   lst=FRAC(gst-w9x/24)*24
  807.   nsun=pday*(sepoch+t)
  808.   lnsun=(nsun+see*SIN(nsun+dseg)+seg) MOD p2
  809.   REM Ecliptic to equatorial conversion
  810.   REM enter with lnsun=ecliptic longitude, ltsun=ecliptic latitude
  811.   decsun=ASIN(SIN(ltsun)*cobliq+COS(ltsun)*sobliq*SIN(lnsun))
  812.   rasun=(ATN(TAN(lnsun)*cobliq-(TAN(ltsun)*sobliq/COS(lnsun)))+p2) MOD p2
  813.   IF ABS(rasun-lnsun)>pd2
  814.     rasun=(rasun+3*PI) MOD p2
  815.   ENDIF
  816.   REM Equatorial to local horizon conversion
  817.   hangle=(p2/24*lst-rasun+p2) MOD p2
  818.   sdecsun=SIN(decsun)
  819.   cdecsun=COS(decsun)
  820.   altsun=ASIN(sdecsun*sl9p0+cdecsun*cl9p0*COS(hangle))
  821.   azsun=ACOS((sdecsun-sl9p0*SIN(altsun))/cl9p0/COS(altsun))
  822.   IF SIN(hangle)>0
  823.     azsun=p2-azsun
  824.   ENDIF
  825.   xxtt%=xx%(mxsps%)
  826.   yytt%=yy%(mxsps%)
  827.   gcdecsun=90-decsun/p0
  828.   gcbsin=SIN(gcdecsun*p0)
  829.   gcbcos=COS(gcdecsun*p0)
  830.   yy%(mxsps%)=1.11111111*gcdecsun
  831.   sunlong=(rasun/p0-FRAC(gst)*360+540) MOD 360
  832.   sunlng=180-((360+sunlong) MOD 360)
  833.   xx%(mxsps%)=1.77777777*sunlong
  834.   IF (xxtt%<>xx%(mxsps%) OR yytt%<>yy%(mxsps%)) AND NOT radaron!
  835.     COLOR 2
  836.     CIRCLE xxtt%,yytt%,4
  837.     COLOR 1
  838.     CIRCLE xx%(mxsps%),yy%(mxsps%),4
  839.   ENDIF
  840. RETURN
  841. PROCEDURE map
  842.   CLS
  843.   ARRAYFILL xx%(),-1
  844.   ARRAYFILL yy%(),-1
  845.   xx%(mxsps%)=-10
  846.   yy%(mxsps%)=-10
  847.   IF mapon!
  848.     IF NOT radaron!
  849.       RESTORE map
  850.       FOR mj%=0 TO 199
  851.         READ lvt%(mj%)
  852.       NEXT mj%
  853.       green!=FALSE
  854.       FOR my%=0 TO 199
  855.         ox%=0
  856.         nx%=640
  857.         lvs%=lvt%(my%)
  858.         REPEAT
  859.           IF lvs%<>0
  860.             READ nx%
  861.           ENDIF
  862.           IF green!
  863.             COLOR 3
  864.           ELSE
  865.             COLOR 0
  866.           ENDIF
  867.           DRAW ox%,my% TO nx%,my%
  868.           ox%=nx%
  869.           IF lvs%<>0
  870.             green!=NOT green!
  871.           ENDIF
  872.           DEC lvs%
  873.         UNTIL lvs%<=0
  874.         IF green!
  875.           COLOR 3
  876.           DRAW nx%,my% TO 640,my%
  877.         ENDIF
  878.       NEXT my%
  879.     ELSE
  880.       COLOR 3
  881.       FOR lvs%=10 TO 80 STEP 10
  882.         FOR my%=0 TO 360 STEP 10
  883.           ox%=SINQ(my%)*lvs%+100
  884.           nx%=320-COSQ(my%)*lvs%*2.4
  885.           PLOT nx%,ox%
  886.         NEXT my%
  887.       NEXT lvs%
  888.     ENDIF
  889.   ENDIF
  890.   IF NOT radaron!
  891.     yy%(0)=1.11111111*(90-l9)
  892.     wx5=w9+180
  893.     IF wx5>=360
  894.       wx5=wx5-360
  895.     ENDIF
  896.     xx%(0)=1.77777777*(360-wx5)
  897.     COLOR 2
  898.     CIRCLE xx%(0),yy%(0),3
  899.     COLOR 1
  900.     PLOT xx%(0),yy%(0)
  901.   ELSE
  902.     COLOR 3
  903.     PLOT 320,100
  904.     FOR my%=0 TO 360
  905.       ox%=SINQ(my%)*90+100
  906.       nx%=320-COSQ(my%)*90*2.4
  907.       PLOT nx%,ox%
  908.     NEXT my%
  909.   ENDIF
  910. RETURN
  911. REM World map data (by John Logajan) in scanned form (for data compression),
  912. REM left to right, top to bottom (0-639, 0-199.)
  913. REM The first 200 datums represent the number of color transitions per each
  914. REM line.  The remaining datums represent each X coordinate at which the
  915. REM transitions occur -- it is up to the software to keep track of the Y
  916. REM coordinate based on the transitions-count-per-line data.
  917. map:
  918. DATA 0,0,0,0,0,0,0,2,4,4,8,12,12,18,18,22,16,10,24,20,21,20,19,18,13,10,12,14
  919. DATA 16,17,14,12,12,16,18,18,18,16,18,20,18,20,18,10,12,8,10,12,12,16,20,18,20
  920. DATA 18,14,20,22,16,16,16,16,14,8,10,10,10,6,12,14,12,14,12,20,14,14,20,18,18
  921. DATA 18,18,14,12,14,12,12,12,18,18,16,20,16,12,14,16,12,10,10,10,14,16,18,18,12
  922. DATA 16,20,14,18,14,10,10,14,10,10,10,12,14,12,12,13,11,10,8,12,12,10,8,8,8,8,6
  923. DATA 6,6,6,6,6,6,8,8,10,6,6,6,6,6,4,6,6,6,8,6,4,4,4,2,4,4,2,4,4,2,4,4,0,0,0,0,0
  924. DATA 2,2,2,2,2,4,8,6,6,8,8,4,6,6,6,6,6,4,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,236,283
  925. DATA 163,201,207,285,159,196,203,300,157,182,198,297,352,369,485,495,146,156
  926. DATA 164,177,189,194,200,290,339,369,483,498,145,159,162,185,191,288,340,360
  927. DATA 490,496,501,507,114,117,121,126,135,139,146,159,161,186,190,287,342,354
  928. DATA 356,365,497,509,100,106,112,117,148,158,160,182,193,288,346,351,358,362
  929. DATA 436,443,496,520,99,106,113,116,125,131,136,139,141,144,149,156,159,180,196
  930. DATA 286,423,443,479,523,567,575,135,138,148,154,175,179,216,287,418,432,473
  931. DATA 523,565,578,581,589,98,111,161,171,218,286,416,427,470,522,99,110,114,121
  932. DATA 126,132,137,142,146,153,159,178,180,185,220,284,414,423,443,448,462,549
  933. DATA 569,576,97,110,111,135,137,141,145,154,160,189,220,282,411,419,442,450,452
  934. DATA 551,567,587,0,5,41,45,98,109,110,136,145,155,160,195,220,282,411,421,439
  935. DATA 551,554,591,637,3,31,61,88,93,114,139,146,154,170,199,222,282,357,376,414
  936. DATA 422,438,605,638,0,30,75,79,107,146,158,165,169,182,201,222,281,350,382,425
  937. DATA 434,438,632,0,4,24,121,128,138,142,171,184,202,226,276,345,388,396,402,406
  938. DATA 636,0,9,24,122,126,174,182,206,224,267,342,393,397,15,29,175,183,211,224
  939. DATA 261,343,394,397,19,22,166,186,210,224,259,277,282,284,294,342,16,21,164
  940. DATA 169,174,180,208,225,250,276,296,340,360,363,0,8,13,24,162,166,175,180,205
  941. DATA 227,249,277,295,337,359,360,0,14,19,27,159,165,175,191,206,228,248,279,291
  942. DATA 333,357,358,639,25,159,181,191,194,206,229,245,306,309,329,352,357,636,24
  943. DATA 155,181,193,199,203,231,246,328,351,357,631,24,153,181,197,233,245,328,352
  944. DATA 357,597,604,627,28,56,61,152,182,197,203,207,239,244,329,354,360,596,605
  945. DATA 617,32,52,73,155,180,199,201,209,311,315,329,353,359,585,588,596,603,613
  946. DATA 37,50,75,156,181,211,307,317,330,336,340,350,352,355,358,571,599,611,36,43
  947. DATA 47,50,78,161,183,212,307,317,341,350,352,354,357,569,597,610,32,40,45,47
  948. DATA 79,165,183,212,309,316,341,349,357,566,596,611,27,37,82,174,179,215,305
  949. DATA 307,310,318,334,340,343,346,356,566,596,608,26,29,83,86,87,174,178,219,302
  950. DATA 308,310,320,335,342,347,569,572,574,596,609,20,25,83,86,87,176,179,221,302
  951. DATA 308,312,321,329,570,571,575,596,605,84,87,90,143,147,177,179,221,303,308
  952. DATA 311,324,328,570,571,575,597,602,626,629,5,7,86,88,92,177,179,222,301,308
  953. DATA 310,323,326,570,571,575,598,602,91,216,312,321,323,570,572,576,597,600,92
  954. DATA 214,217,222,310,314,321,570,572,576,595,597,95,211,216,221,318,570,572,577
  955. DATA 98,161,166,206,214,224,315,570,572,574,99,159,163,165,168,207,216,223,314
  956. DATA 568,572,575,99,158,161,214,316,410,414,566,572,575,586,588,99,167,173,213
  957. DATA 318,374,378,406,412,426,428,565,571,573,582,587,99,164,168,172,175,210,317
  958. DATA 373,379,383,386,404,409,424,428,563,571,576,581,583,99,163,166,173,178,197
  959. DATA 202,205,305,345,347,372,389,405,411,561,571,580,98,163,166,174,177,195,303
  960. DATA 327,329,332,338,345,350,370,391,405,411,559,568,579,98,196,304,326,335,337
  961. DATA 339,349,352,370,377,385,393,407,412,553,568,575,99,193,304,324,334,338,342
  962. DATA 352,354,409,413,551,568,572,99,189,304,321,325,327,334,338,346,353,354,363
  963. DATA 366,410,413,535,536,549,568,573,100,188,303,320,324,326,334,338,348,351
  964. DATA 355,362,366,408,414,533,535,539,542,548,568,573,100,187,303,321,341,350
  965. DATA 356,364,366,407,415,531,541,549,567,572,102,186,304,319,342,348,357,363
  966. DATA 368,410,415,538,542,550,563,571,103,186,308,317,320,339,345,348,358,362
  967. DATA 369,538,544,551,561,571,104,186,310,313,318,340,361,367,378,382,383,534
  968. DATA 544,551,556,571,105,185,308,340,363,367,377,381,383,534,544,549,552,569
  969. DATA 108,182,305,340,382,535,551,563,111,180,303,346,356,362,381,535,550,559
  970. DATA 112,177,303,348,355,366,381,537,551,555,113,117,118,176,302,353,355,537
  971. DATA 551,554,113,117,119,176,302,538,114,118,120,162,168,177,295,297,301,406
  972. DATA 410,537,116,120,121,151,172,177,290,293,294,296,300,407,410,537,115,121
  973. DATA 123,148,172,178,298,382,383,408,411,535,117,122,124,148,173,178,180,183
  974. DATA 294,381,384,410,414,534,120,123,125,148,174,178,294,382,385,412,419,533
  975. DATA 120,124,127,147,175,177,180,182,293,383,386,412,416,421,428,436,438,532
  976. DATA 534,537,122,125,128,147,181,183,292,384,386,425,439,531,533,537,124,126
  977. DATA 130,147,171,179,291,384,388,426,442,529,533,536,35,37,39,40,132,147,169
  978. DATA 173,176,183,290,386,389,427,442,482,483,524,534,535,38,40,41,43,132,148
  979. DATA 159,166,289,387,389,426,443,478,483,513,514,519,41,45,132,149,159,165,184
  980. DATA 189,290,387,390,425,449,475,484,510,514,518,42,45,132,149,158,165,185,194
  981. DATA 290,387,392,423,449,473,486,509,513,518,135,165,187,191,197,201,291,388
  982. DATA 393,423,449,471,486,509,513,517,534,538,138,164,198,201,291,389,394,421
  983. DATA 450,469,488,510,533,538,141,164,290,390,395,418,450,467,487,512,533,538
  984. DATA 145,171,290,391,395,414,450,465,487,491,493,513,532,537,155,173,289,394
  985. DATA 396,412,451,463,493,514,533,537,156,173,290,395,396,407,452,463,494,515
  986. DATA 534,541,160,172,290,404,452,463,495,515,534,537,538,541,164,172,191,198
  987. DATA 290,398,414,418,453,463,495,498,501,515,534,537,540,544,166,172,187,199
  988. DATA 292,398,404,412,454,462,495,498,502,515,532,533,536,544,167,173,185,212
  989. DATA 293,411,455,462,495,497,504,512,531,533,536,543,167,174,177,181,184,212
  990. DATA 295,411,455,461,462,464,495,498,506,510,529,532,537,545,171,214,296,410
  991. DATA 456,460,461,465,494,499,506,508,528,530,538,545,174,178,180,216,297,409
  992. DATA 461,466,494,499,537,546,181,218,298,409,461,466,495,501,527,530,536,538
  993. DATA 540,546,182,225,301,324,328,408,462,465,489,491,496,503,526,531,540,545
  994. DATA 182,228,303,319,329,407,489,495,498,504,523,533,182,230,330,405,490,497
  995. DATA 499,504,521,531,182,230,335,404,492,498,500,504,518,529,180,230,337,403
  996. DATA 493,500,517,530,546,548,178,232,336,400,492,504,515,532,534,538,541,543
  997. DATA 546,549,157,158,177,231,336,398,496,505,515,532,533,535,537,542,546,549
  998. DATA 157,159,176,237,335,376,381,397,497,505,515,529,532,534,546,548,551,562
  999. DATA 157,158,176,241,336,375,380,395,498,509,515,529,532,536,546,549,552,567
  1000. DATA 176,244,336,394,499,510,515,528,531,535,554,571,177,251,337,392,500,510
  1001. DATA 516,527,531,541,544,553,554,576,589,591,175,253,339,391,502,509,523,526
  1002. DATA 532,535,536,539,544,547,551,553,556,578,589,593,175,258,340,390,503,509
  1003. DATA 532,535,537,540,562,580,588,592,175,258,341,390,505,510,532,535,538,540
  1004. DATA 558,560,565,582,585,591,595,597,176,259,342,391,512,523,558,560,566,582
  1005. DATA 586,588,595,598,178,259,342,390,509,525,543,546,566,584,179,259,343,391
  1006. DATA 517,547,569,576,580,584,180,258,343,391,531,535,539,544,570,575,581,587
  1007. DATA 603,606,180,257,343,393,539,542,582,589,605,609,181,255,344,393,551,557
  1008. DATA 572,574,608,609,182,254,344,393,406,409,551,564,572,575,12,13,184,253,342
  1009. DATA 392,406,409,551,564,572,576,12,16,184,251,342,393,404,410,544,547,550,562
  1010. DATA 571,576,185,251,341,393,404,410,542,562,571,579,616,618,186,251,340,392
  1011. DATA 400,410,541,565,571,579,616,618,189,251,340,391,398,409,537,568,570,580
  1012. DATA 617,619,637,0,192,251,340,390,398,408,537,580,635,638,195,250,341,386,398
  1013. DATA 408,536,581,635,638,195,250,342,384,398,408,535,583,195,249,342,382,398
  1014. DATA 407,421,423,530,585,612,613,195,248,343,383,397,407,418,420,525,586,612
  1015. DATA 616,195,248,344,383,396,406,522,588,614,618,194,246,345,384,396,405,522
  1016. DATA 589,194,240,345,384,397,405,521,590,194,237,345,383,397,405,521,592,194
  1017. DATA 235,346,381,399,404,521,592,194,234,346,379,521,593,193,234,347,379,522
  1018. DATA 593,193,234,348,378,523,594,192,233,349,377,524,593,192,231,350,375,524
  1019. DATA 593,192,230,350,375,525,593,192,230,352,373,525,592,192,227,351,372,525
  1020. DATA 543,558,591,192,226,352,369,524,541,559,590,191,225,354,365,524,533,560
  1021. DATA 589,627,629,191,219,562,588,627,631,190,220,563,588,628,633,189,219,568
  1022. DATA 587,630,638,188,218,570,586,630,637,189,215,574,581,628,637,188,210,629
  1023. DATA 635,188,210,577,584,626,634,188,207,577,584,624,633,188,207,578,584,623
  1024. DATA 630,5,7,187,205,579,582,620,628,6,7,187,205,617,626,187,204,616,625,185
  1025. DATA 201,616,624,185,204,617,620,185,204,185,201,442,446,185,200,442,445,186
  1026. DATA 198,186,198,213,218,186,199,214,216,188,200,189,205,252,257,193,205,255
  1027. DATA 257,237,241,215,218,212,218,212,220,207,219,205,216,545,551,203,215,497
  1028. DATA 511,516,528,544,566,196,214,409,425,466,577,196,211,394,444,460,582,192
  1029. DATA 210,379,446,456,587,593,601,185,189,192,210,332,344,369,607,184,211,306
  1030. DATA 618,173,178,184,212,298,625,137,158,171,212,295,624,100,113,127,213,287
  1031. DATA 620,97,114,125,213,279,617,70,88,95,211,275,613,54,209,271,610,0,219,262
  1032. DATA 610,627,226,256
  1033. REM -- SYMBOL TABLE -- (ala Clark and Tilley)
  1034. REM A0 = SEMI-MAJOR axis
  1035. REM A9 = Azimuth
  1036. REM Cn = COSines, C(J,K) also
  1037. REM E0 = eccentricity of orbit
  1038. REM E8 = observer horizion
  1039. REM E9 = satellite elevation
  1040. REM G0 = GM of Earth
  1041. REM G1 = Sidereal/Solar
  1042. REM G2 = New Year's sidereal time
  1043. REM G7 = GHA Aries
  1044. REM H1 = Hours duration
  1045. REM H3 = Hour epoch
  1046. REM H4 = Hour
  1047. REM H9 = observer height
  1048. REM K0 = initial orbit #
  1049. REM K  = orbit counter
  1050. REM K7 = INT(T)
  1051. REM L5 = SSP LATITUDE
  1052. REM L8 = GEOCENTRIC latitude
  1053. REM L9 = observer longitude
  1054. REM M  = mean anomaly
  1055. REM M0 = mean anomaly of ref epoch
  1056. REM M3 = ref epoch minutes
  1057. REM M4 = integer minutes
  1058. REM M5 = difference in Transcendental Eq.
  1059. REM N0 = mean motion
  1060. REM O, O0 = R.A.A.N.
  1061. REM P0,P1,P2 variations on a theme of PI
  1062. REM Q,Q0 = total orbits
  1063. REM R = ? in plane of orbit
  1064. REM R5 = range
  1065. REM R6 = previous range
  1066. REM R9 intermediate for GEOCENTRICs
  1067. REM Ss used for SIN
  1068. REM T0 = ref time in orbit days
  1069. REM W, W0 arg of perigee
  1070. REM W5 = SSP W. long.
  1071. REM W9 = observers W. long
  1072. REM X0,Y0,R coord in plane of orbit
  1073. REM X1,Y1,Z1 "    " INERTIAL CELESTIAL
  1074. REM X,Y,Z in GEOCENTRIC coordinates
  1075. REM X9,Y9,Z9 are observer's GEOCENTRIC coordinates
  1076. REM X5,Y5,Z5 ==> R5  vector from observer to satellite
  1077. REM X8,Y8,Z8 are observer's LOCAL Coordinates
  1078.