pro get_tle_subset, spacecraft_id, tle_path=path, n_all, $ n_sets, clsLvl, intlNo, eltSet, ephTyp, orbit, epochJd, $ dndt, d2ndt2, bstar, incl, node, e, omega, m, n, status ; ; Given a Norad (US SpaceCom) spacecraft id, returns the current ; constistent subset of the NORAD two-line orbit elements. ; ; B. Knapp, 2003-12-11 ; ; The output argument STATUS is returned non-zero if an error occurred. ; ; Print usage? if n_params() lt 2 then begin print,' ' print,' get_tle_subset, spacecraft_id, tle_path=path, n_all, $' print,' n_sets, clsLvl, intlNo, eltSet, ephTyp, orbit, epochJd, $' print,' dndt, d2ndt2, bstar, incl, node, e, omega, m, n, status' print,' ' return endif ; ; Keyword arguments? if n_elements(path) eq 0 then path = './' ; ; Cast inputs to types required by Fortran native routine id = long( spacecraft_id ) pathlen = strlen(path) bpath = bytarr(1024) bpath[0] = byte(path) max_sets = 4096L ; ; Define outputs n_all = 0L n_sets = 0L eltSet = lonarr(max_sets) orbit = lonarr(max_sets) epochJd = dblarr(max_sets) dndt = dblarr(max_sets) d2ndt2 = dblarr(max_sets) bstar = dblarr(max_sets) incl = dblarr(max_sets) node = dblarr(max_sets) e = dblarr(max_sets) omega = dblarr(max_sets) m = dblarr(max_sets) n = dblarr(max_sets) intlNoB = bytarr(8,max_sets) clsLvlB = bytarr(1,max_sets) ephTypB = bytarr(1,max_sets) status = 0L ; ; Use 32-bit or 64-bit shareable object library? mbits = ((!version.release ge 5.4) ? !version.memory_bits : 32) dll = getenv('bgkroot')+string(mbits,"('/lib/astron',i2,'.so')") ; ; Call the Fortran service result = call_external( dll, 'get_tle_subset_arg_', $ id, pathlen, bpath, max_sets, n_all, $ n_sets, clsLvlB, intlNoB, eltSet, ephTypB, orbit, epochJd, $ dndt, d2ndt2, bstar, incl, node, e, omega, m, n, status ) ; clsLvl = string(clsLvlB[*,0:n_sets-1]) intlNo = string(intlNoB[*,0:n_sets-1]) eltSet = eltSet[0:n_sets-1] ephTyp = string(ephTypB[*,0:n_sets-1]) orbit = orbit[0:n_sets-1] epochJd = epochJd[0:n_sets-1] dndt = dndt[0:n_sets-1] d2ndt2 = d2ndt2[0:n_sets-1] bstar = bstar[0:n_sets-1] incl = incl[0:n_sets-1] node = node[0:n_sets-1] e = e[n_sets-1] omega = omega[0:n_sets-1] m = m[0:n_sets-1] n = n[0:n_sets-1] ; return end