home *** CD-ROM | disk | FTP | other *** search
/ Phoenix CD 2.0 / Phoenix_CD.cdr / 02a / orbsrc14.zip / ORBUPDAT.BAS < prev   
BASIC Source File  |  1987-11-03  |  8KB  |  270 lines

  1. 'ORBUPDAT.BAS
  2. 'Compile as .TBC file
  3. '871103-1
  4.  
  5. cls
  6. color 0,7
  7. PRINT"  = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  8. PRINT"  =                                                                   =
  9. PRINT"  =                 ORBITAL ELEMENT UPDATE PROGRAM                    =
  10. PRINT"  =                                                                   =
  11. PRINT"  =                           11/03/1987                              =
  12. PRINT"  = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  13. color 7,0
  14. PRINT
  15.  
  16. dim el$(14)    'array of individual element identifiers
  17.  
  18. el$(1) = "Satellite:"   :el$(2) = "number:"         :el$(3) = "Epoch time:"
  19. el$(4) = "set:"     :el$(5) = "Inclination:"    :el$(6) = "RA of node:"
  20. el$(7) = "Eccentricity:":el$(8) = "Arg of perigee:" :el$(9) = "Mean anomaly:"
  21. el$(10)= "Mean motion:" :el$(11)= "Decay rate:"     :el$(12)= "rev:"
  22. el$(13)= "F1:"          :el$(14)= "F2:"
  23.  
  24. dim elval$(14)    'array of individual element values for one Satellite
  25.  
  26. inputfile$ = "ELEMENTS"
  27. outputfile$= "KEPLER.ORB"
  28.  
  29.  
  30. restart:
  31.  
  32. strpos% = 1
  33. endpos% = 1
  34. nrsats% = 0
  35.  
  36. ?
  37. ?"Scanning input file... please wait."
  38. ?
  39.  
  40. OPEN inputfile$ for INPUT as #1  LEN = 80
  41.  
  42. '- - - Scan to see how many satellites in the file
  43.  
  44. while not EOF(1)
  45.     line input# 1, rawline$            'read line from file
  46.     if len(rawline$) = 0 then wend1        'invalid line
  47.     strpos% = instr(rawline$,el$(1))    'search for [Satellite:]
  48.     if strpos% < 1 then wend1        'keyword not found
  49.  
  50. 'We have a valid satellite name
  51.  
  52.     nrsats% = nrsats% + 1
  53. wend1:
  54. wend
  55.  
  56. '- - -
  57.  
  58. close #1
  59.  
  60. ? "Total number of satellites read from the ";inputfile$;" file =";nrsats%
  61.  
  62. '- - - now open the file again and generate the Kepler file.
  63.  
  64. OPEN inputfile$  for INPUT  as #1  LEN = 80
  65. OPEN outputfile$ for OUTPUT as #2
  66.  
  67. outrecords% = 0                'count of output records
  68.  
  69. for snr% = 1 to nrsats%
  70.   retry:
  71.     flag = 0            'good set flag
  72.     for el% = 1 to 14        'extract elements for 1 satellite
  73.         if eof(1) then EXIT for            'get out if done
  74.         line input# 1, rawline$            'read a record
  75.         strpos% = instr(rawline$,el$(el%))    'search for keyword
  76.         if strpos% < 1 then EXIT for        'keywd not found
  77.     'found the keyword sought
  78.                 strpos% = instr(strpos%,rawline$,": ") + 1
  79.         call bracket        'bracket the value following keywd
  80.         elval$(el%) = mid$(rawline$,strpos%,endpos%-strpos%)  'load array
  81.  
  82.                 select CASE el%            'test range of values
  83.                   case 3                        'test Julian date
  84.                     if NOT ((val(elval$(el%)) >= 78000)_
  85.                        and  (val(elval$(el%)) <= 99366)) then EXIT for
  86.                   case 5            'test Inclination
  87.                     if NOT ((val(elval$(el%)) >= 0)_
  88.                        and  (val(elval$(el%)) <= +180))  then EXIT for
  89.                   case 6, 8, 9            'test RAAN, ARGP & MANOM
  90.                     if NOT ((val(elval$(el%)) >= 0)_
  91.                        and  (val(elval$(el%)) <= 360))   then EXIT for
  92.                   case 7            'test Eccentricity
  93.                     if NOT ((val(elval$(el%)) >= 0)_
  94.                        and  (val(elval$(el%)) <  1))     then EXIT for
  95.                   case 10            'test Mean Motion
  96.                     if NOT ((val(elval$(el%)) >= 0)_
  97.                        and  (val(elval$(el%)) <= 20))    then EXIT for
  98.                   case 11            'test Decay rate
  99.                     if NOT ((val(elval$(el%)) >  -1)_
  100.                        and  (val(elval$(el%)) <  +1))    then EXIT for
  101.                 end select
  102.  
  103.         flag = el%
  104.  
  105.  
  106.         if el% = 1 then
  107.     nametest:                    'trim trailing blanks
  108.           if right$(elval$(1),1) = " " then     ' from Satellite name
  109.             elval$(1) = left$(elval$(1),(len(elval$(1))-1))
  110.             goto nametest
  111.           else
  112.             endpos% = (len(elval$(1))+ 1)
  113.           end if
  114.             end if
  115.     next el%
  116. 'test
  117.  
  118.     if flag >= 12 then setok        'no F1 and/or F2 is OK
  119.     if flag  =  0 then retry        'blank line between sets?
  120.  
  121. 'if you fall thru here, this set is in error!
  122.  
  123. ?
  124. color 0,7
  125. ? "Entry [";el$(flag+1);"] for satellite number";snr%;", [";
  126. ? elval$(1);"] is in ERROR."
  127. color 7,0
  128. ? "The elements for this satellite have not been written to the output file."
  129. ? "Correct any Keyword/value errors in the ELEMENTS file and retry the update."
  130. beep
  131. print "                       ";
  132. color 0,7
  133. input "<ENTER> to continue...",junk$
  134. color 7,0
  135. ?
  136.  
  137.   setok:
  138.  
  139.     if flag < 12 then skipwrite    'Do not write this disk record
  140.  
  141. 'write this satellite's record to disk.
  142.  
  143.     write# 2, elval$(1),  val(elval$(2)),  val(elval$(3)), val(elval$(4)),_
  144.              val(elval$(5)),  val(elval$(6)),  val(elval$(7)), val(elval$(8)),_
  145.              val(elval$(9)),  val(elval$(10)), val(elval$(11)),_
  146.              val(elval$(12)), val(elval$(13)), val(elval$(14))
  147.     outrecords% = outrecords% + 1
  148.  
  149. skipwrite:
  150. next snr%
  151.  
  152. CLOSE #1
  153. CLOSE #2
  154.  
  155. ?"Total number of satellites written to the ";outputfile$;" file =";outrecords%
  156. ?
  157.  
  158. '= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  159. 'FINSERT.BAS
  160. '870820-2
  161.  
  162. 'This routine inserts frequency data from the file FREQS.ORB into records
  163. 'contained in KEPLER.ORB.  File KEPLER.INT is created as an intermediate
  164. 'file, then erased.
  165.  
  166. DEFDBL a - z
  167.  
  168. print "The frequency data in FREQS.ORB will be inserted into the records"
  169. print " contained in KEPLER.ORB."
  170. print
  171.  
  172. open "FREQS.ORB" for INPUT as #1
  173. j = 0
  174.  
  175. while not EOF(1)
  176.   input# 1, d$, d, d, d         'inputting just to count records
  177.   j = j + 1
  178. wend
  179.  
  180.   j = j - 1
  181.   close #1
  182.  
  183. dim DYNAMIC set$(j), catnr(j), freq1(j), freq2(j)
  184.  
  185. open "FREQS.ORB" for INPUT as #1    're-read to load dimensioned array
  186.  
  187. for j1 = 0 to j
  188.   input# 1, sat$(j1), catnr(j1), freq1(j1), freq2(j1)
  189. next j1
  190.  
  191. print "FREQS.ORB contains";j + 1;"records for input.
  192. close #1        
  193.  
  194. 'now open the KEPLER.ORB file and insert the FREQS.ORB data
  195.  
  196. open "KEPLER.ORB" for INPUT  as #1
  197. open "KEPLER.INT" for OUTPUT as #2
  198.  
  199. inserts = 0
  200. while not eof(1)
  201.   input# 1, s01$, i01, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, f01, f02
  202.  
  203.   for j2 = 0 to j        'find match in array, if present
  204.     flag3 = 1                   'if we exit with flag3 = 1, we matched
  205.     if i01 = catnr(j2) then EXIT FOR
  206.     flag3 = 0
  207.   next j2
  208.  
  209.   if flag3 <> 1 then writerec:    'if flag3 <> 1, don't insert freq1 & 2
  210.     f01 = freq1(j2)        'flag3 = 1, so insert
  211.     f02 = freq2(j2)
  212.     inserts = inserts + 1
  213.  
  214. writerec:
  215.   write# 2,  s01$, i01, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, f01, f02
  216.  
  217. wend
  218.  
  219. print inserts;"insertions completed."
  220. print
  221. print
  222. close #1        'KEPLER.ORB
  223. close #2                'KEPLER.INT
  224.  
  225. ERASE set$, catnr, freq1, freq2        'deallocate array
  226.  
  227. KILL  "KEPLER.ORB"
  228. NAME  "KEPLER.INT" as "KEPLER.ORB"
  229.  
  230. print "                "
  231. print tab(26);
  232. color 0,7
  233. print "End of update...";
  234. color 7,0
  235. print
  236. delay 1
  237.  
  238. RUN "orbs.exe"
  239. '= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  240.  
  241. sub BRACKET                '870806-1
  242.  
  243. local t$, spos%
  244. shared strpos%, endpos%, rawline$, el%
  245.  
  246.  
  247. for spos% = strpos% to len(rawline$)
  248.     strpos% = spos%            'keep track of ptr1
  249.     s$ = mid$(rawline$,spos%,1)    'test next char of string
  250.     if asc(s$) > 42 then exit FOR    'found non-blank char w/ptr1
  251. next spos%
  252.  
  253.  
  254. for spos% = strpos% to len(rawline$)
  255.     endpos% = spos%            'keep track of ptr2
  256.     s$ = mid$(rawline$,spos%,1)    'test next char of string
  257.     if el% = 1 then endpos% = len(rawline$)      'Satellite name
  258.     if endpos% = len(rawline$) then endpos% = endpos% + 1
  259.     if asc(s$) = 32 or asc(s$) = 9 then exit FOR    'found blank/tab
  260. next spos%
  261.  
  262. 'At exit, STRPOS points to 1st char of bracketed entity,
  263. ' and ENDPOS points to 1st char following entity.
  264.  
  265. end SUB
  266.  
  267. end
  268.  
  269. '= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  270.