Read one trace of data.
c----------------------------------------------------------------------
subroutine sff_RTrace(lu, tanf, dt,
& wid2line, nsamp, fdata, idata, code, last, ierr)
c
c Read one data block starting with DAST line.
c The File will be closed after reading the last trace.
c
c input
c nsamp array dimension of idata and fdata
c ouput:
c ierr error status (ok: ierr=0)
c code code indicating optional blocks
c wid2line valid WID2 line
c tanf time of first sample from midnight
c dt sampling interval in seconds
c nsamp number of samples
c fdata data array
c last is true if read trace is the last one in this file
c
c workspace:
c idata data will be first read to idata and then converted
c to fdata using sff_i2f (both array may be in same memory
c space - see comments on sff_f2i)
c
real fdata(nsamp), dt, tanf
character wid2line*132, code*(*)
c----------------------------------------------------------------------
94 datrw::Tfseries iseries;
97 "sff_rtracei__: too many samples");
98 int nsamples=iseries.size();
99 aff::LinearShape shape(0, nsamples-1, 0);
100 datrw::Tfseries series(shape, aff::SharedHeap<real>(fdata, *nsamp));
101 series.copyin(iseries);
102 *last = is.last() ? 1 : 0;
104 std::string ocode(
"");
105 if (is.hasfree()) { ocode.append(
"F"); }
106 if (is.hasinfo()) { ocode.append(
"I"); }
107 if (!is.last()) { ocode.append(
"D"); }
110 *dt=
static_cast<real>(wid2.dt);
112 *nsamp=series.size();
void fillfstring(const std::string &s, char *fstring, ftnlen slen)
fill a Fortran string with a C++ string
#define FAPIDXX_fuassert(C, U, M)
Check an assertion and report by throwing an exception.
float real
Fortran real type (single precision)
float maketanf(const libtime::TAbsoluteTime &time)
create the tanf value
::fapidxx::IFileUnits istreammanager
the global istream manager