25 #include "subArrayRecord.h" 30 static long read_sa(subArrayRecord *
prec);
38 static void subset(subArrayRecord *
prec,
long nRequest)
40 long ecount = nRequest -
prec->indx;
43 int esize = dbValueSize(
prec->ftvl);
45 if (ecount >
prec->nelm)
48 memmove(
prec->bptr, (
char *)
prec->bptr +
prec->indx * esize,
59 subArrayRecord *
prec = (subArrayRecord *)pcommon;
60 long nRequest = prec->indx + prec->nelm;
63 if (nRequest > prec->malm)
64 nRequest = prec->malm;
66 status = dbLoadLinkArray(&prec->inp, prec->ftvl, prec->bptr, &nRequest);
68 if (!status && nRequest > 0)
69 subset(prec, nRequest);
79 static long readLocked(
struct link *pinp,
void *vrt)
81 subArrayRecord *
prec = (subArrayRecord *) pinp->
precord;
82 struct sart *prt = (
struct sart *) vrt;
83 long status = dbGetLink(pinp, prec->ftvl, prec->bptr, 0, &prt->nRequest);
85 if (!status && prt->ptime)
86 dbGetTimeStamp(pinp, prt->ptime);
91 static long read_sa(subArrayRecord *
prec)
97 rt.
nRequest = prec->indx + prec->nelm;
101 rt.
ptime = (dbLinkIsConstant(&prec->tsel) &&
104 if (dbLinkIsConstant(&prec->inp)) {
105 status = dbLoadLinkArray(&prec->inp, prec->ftvl, prec->bptr, &rt.
nRequest);
106 if (status == S_db_badField) {
112 status = dbLinkDoLocked(&prec->inp, readLocked, &rt);
114 if (status == S_db_noLSET)
115 status = readLocked(&prec->inp, &rt);
121 if (nord != prec->nord)
struct dbCommon * precord
Miscellaneous macro definitions.
#define epicsTimeEventDeviceTime
epicsExportAddress(dset, devSASoft)
EPICS time stamp, for use from C code.