Merge 3.16 branch into 7.0

This commit is contained in:
Andrew Johnson
2018-08-04 14:53:43 -05:00
10 changed files with 81 additions and 11 deletions
@@ -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);
+2 -2
View File
@@ -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);
}
}
+2
View File
@@ -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);
+23
View File
@@ -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;
+2
View File
@@ -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;
}