Merge 3.16 branch into 7.0
This commit is contained in:
@@ -152,6 +152,12 @@ static const iocshArg * const dbnrArgs[1] = {&dbnrArg0};
|
||||
static const iocshFuncDef dbnrFuncDef = {"dbnr",1,dbnrArgs};
|
||||
static void dbnrCallFunc(const iocshArgBuf *args) { dbnr(args[0].ival);}
|
||||
|
||||
/* dbli */
|
||||
static const iocshArg dbliArg0 = { "pattern",iocshArgString};
|
||||
static const iocshArg * const dbliArgs[1] = {&dbliArg0};
|
||||
static const iocshFuncDef dbliFuncDef = {"dbli",1,dbliArgs};
|
||||
static void dbliCallFunc(const iocshArgBuf *args) { dbli(args[0].sval);}
|
||||
|
||||
/* dbla */
|
||||
static const iocshArg dblaArg0 = { "pattern",iocshArgString};
|
||||
static const iocshArg * const dblaArgs[1] = {&dblaArg0};
|
||||
@@ -415,6 +421,7 @@ void dbIocRegister(void)
|
||||
iocshRegister(&dblFuncDef,dblCallFunc);
|
||||
iocshRegister(&dbnrFuncDef,dbnrCallFunc);
|
||||
iocshRegister(&dblaFuncDef,dblaCallFunc);
|
||||
iocshRegister(&dbliFuncDef,dbliCallFunc);
|
||||
iocshRegister(&dbgrepFuncDef,dbgrepCallFunc);
|
||||
iocshRegister(&dbgfFuncDef,dbgfCallFunc);
|
||||
iocshRegister(&dbpfFuncDef,dbpfCallFunc);
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "special.h"
|
||||
|
||||
/* How to identify links in error messages */
|
||||
static const char * link_field_name(const struct link *plink)
|
||||
const char * dbLinkFieldName(const struct link *plink)
|
||||
{
|
||||
const struct dbCommon *precord = plink->precord;
|
||||
const dbRecordType *pdbRecordType = precord->rdes;
|
||||
@@ -136,7 +136,7 @@ void dbInitLink(struct link *plink, short dbfType)
|
||||
errlogPrintf("Forward-link uses Channel Access "
|
||||
"without pointing to PROC field\n"
|
||||
" %s.%s => %s\n",
|
||||
precord->name, link_field_name(plink),
|
||||
precord->name, dbLinkFieldName(plink),
|
||||
plink->value.pv_link.pvname);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,8 @@ typedef struct lset {
|
||||
#define dbGetSevr(link, sevr) \
|
||||
dbGetAlarm(link, NULL, sevr)
|
||||
|
||||
epicsShareFunc const char * dbLinkFieldName(const struct link *plink);
|
||||
|
||||
epicsShareFunc void dbInitLink(struct link *plink, short dbfType);
|
||||
epicsShareFunc void dbAddLink(struct dbLocker *locker, struct link *plink,
|
||||
short dbfType, DBADDR *ptarget);
|
||||
|
||||
@@ -258,7 +258,30 @@ long dbla(const char *pmask)
|
||||
dbFinishEntry(pdbentry);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long dbli(const char *pattern)
|
||||
{
|
||||
DBENTRY dbentry;
|
||||
void* ptr;
|
||||
|
||||
if (!pdbbase) {
|
||||
printf("No database loaded\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
dbInitEntry(pdbbase, &dbentry);
|
||||
while (dbNextMatchingInfo(&dbentry, pattern) == 0)
|
||||
{
|
||||
printf("%s info(%s, \"%s\"", dbGetRecordName(&dbentry),
|
||||
dbGetInfoName(&dbentry), dbGetInfoString(&dbentry));
|
||||
if ((ptr = dbGetInfoPointer(&dbentry)) != NULL)
|
||||
printf(", %p", ptr);
|
||||
printf(")\n");
|
||||
}
|
||||
dbFinishEntry(&dbentry);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long dbgrep(const char *pmask)
|
||||
{
|
||||
DBENTRY dbentry;
|
||||
|
||||
@@ -25,6 +25,8 @@ epicsShareFunc long dbl(
|
||||
epicsShareFunc long dbnr(int verbose);
|
||||
/* list aliases */
|
||||
epicsShareFunc long dbla(const char *pmask);
|
||||
/* list infos */
|
||||
epicsShareFunc long dbli(const char *patern);
|
||||
/*list records with mask*/
|
||||
epicsShareFunc long dbgrep(const char *pmask);
|
||||
/*get field value*/
|
||||
|
||||
@@ -2894,6 +2894,32 @@ long dbNextInfo(DBENTRY *pdbentry)
|
||||
return (pinfo ? 0 : S_dbLib_infoNotFound);
|
||||
}
|
||||
|
||||
long dbNextMatchingInfo(DBENTRY *pdbentry, const char *pattern)
|
||||
{
|
||||
long status;
|
||||
|
||||
if (!pdbentry->precordType)
|
||||
{
|
||||
status = dbFirstRecordType(pdbentry);
|
||||
goto first;
|
||||
}
|
||||
while(1) {
|
||||
status = dbNextInfo(pdbentry);
|
||||
while (status) {
|
||||
status = dbNextRecord(pdbentry);
|
||||
while (status) {
|
||||
status = dbNextRecordType(pdbentry);
|
||||
first:
|
||||
if (status) return status;
|
||||
status = dbFirstRecord(pdbentry);
|
||||
}
|
||||
status = dbFirstInfo(pdbentry);
|
||||
}
|
||||
if (!pattern || !*pattern) return 0;
|
||||
if (epicsStrGlobMatch(dbGetInfoName(pdbentry), pattern)) return 0;
|
||||
}
|
||||
}
|
||||
|
||||
long dbFindInfo(DBENTRY *pdbentry,const char *name)
|
||||
{
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
|
||||
@@ -190,6 +190,8 @@ epicsShareFunc long dbFirstInfo(DBENTRY *pdbentry);
|
||||
epicsShareFunc long dbNextInfo(DBENTRY *pdbentry);
|
||||
epicsShareFunc long dbFindInfo(DBENTRY *pdbentry,
|
||||
const char *name);
|
||||
epicsShareFunc long dbNextMatchingInfo(DBENTRY *pdbentry,
|
||||
const char *pattern);
|
||||
epicsShareFunc long dbDeleteInfo(DBENTRY *pdbentry);
|
||||
epicsShareFunc const char * dbGetInfoName(DBENTRY *pdbentry);
|
||||
epicsShareFunc const char * dbGetInfoString(DBENTRY *pdbentry);
|
||||
|
||||
@@ -120,13 +120,13 @@ static void put_value(compressRecord *prec, double *psource, int n)
|
||||
nuse = nsam;
|
||||
|
||||
while (n--) {
|
||||
/* for LIFO, decrement before */
|
||||
/* for LIFO, pre-decrement modulo nsam */
|
||||
if (!fifo)
|
||||
offset = (offset - 1) % nsam;
|
||||
offset = (offset + nsam - 1) % nsam;
|
||||
|
||||
prec->bptr[offset] = *psource++;
|
||||
|
||||
/* for FIFO, increment after */
|
||||
/* for FIFO, post-increment modulo nsam */
|
||||
if (fifo)
|
||||
offset = (offset + 1) % nsam;
|
||||
}
|
||||
@@ -424,15 +424,15 @@ static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
|
||||
compressRecord *prec = (compressRecord *) paddr->precord;
|
||||
epicsUInt32 off = prec->off;
|
||||
epicsUInt32 nuse = prec->nuse;
|
||||
epicsUInt32 nsam = prec->nsam;
|
||||
|
||||
*no_elements = nuse;
|
||||
if (prec->balg == bufferingALG_FIFO) {
|
||||
*offset = (off - nuse) % nsam;
|
||||
} else {
|
||||
*offset = off;
|
||||
epicsUInt32 nsam = prec->nsam;
|
||||
|
||||
off = (off + nsam - nuse) % nsam;
|
||||
}
|
||||
|
||||
*no_elements = nuse;
|
||||
*offset = off;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user