This is Unofficial EPICS BASE Doxygen Site
dbStaticLib.h File Reference
#include <stddef.h>
#include <stdio.h>
#include "shareLib.h"
#include "dbFldTypes.h"
#include "dbBase.h"
#include "link.h"
#include "errMdef.h"
#include "cantProceed.h"
+ Include dependency graph for dbStaticLib.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  dbEntry
 

Macros

#define dbCalloc(nobj, size)   callocMustSucceed(nobj,size,"dbCalloc")
 
#define dbMalloc(size)   mallocMustSucceed(size,"dbMalloc")
 
#define S_dbLib_recordTypeNotFound   (M_dbLib|1) /* Record Type does not exist */
 
#define S_dbLib_recExists   (M_dbLib|3) /* Record Already exists */
 
#define S_dbLib_recNotFound   (M_dbLib|5) /* Record Not Found */
 
#define S_dbLib_flddesNotFound   (M_dbLib|7) /* Field Description Not Found */
 
#define S_dbLib_fieldNotFound   (M_dbLib|9) /* Field Not Found */
 
#define S_dbLib_badField   (M_dbLib|11) /* Bad Field value */
 
#define S_dbLib_menuNotFound   (M_dbLib|13) /* Menu not found */
 
#define S_dbLib_badLink   (M_dbLib|15) /* Bad Link Field */
 
#define S_dbLib_nameLength   (M_dbLib|17) /* Record Name is too long */
 
#define S_dbLib_noRecSup   (M_dbLib|19) /* Record support not found */
 
#define S_dbLib_strLen   (M_dbLib|21) /* String is too long */
 
#define S_dbLib_noSizeOffset   (M_dbLib|23) /* Missing SizeOffset Routine - No record support? */
 
#define S_dbLib_outMem   (M_dbLib|27) /* Out of memory */
 
#define S_dbLib_infoNotFound   (M_dbLib|29) /* Info item Not Found */
 

Typedefs

typedef dbBase DBBASE
 
typedef struct dbEntry DBENTRY
 

Functions

epicsShareFunc DBBASEdbAllocBase (void)
 
epicsShareFunc void dbFreeBase (DBBASE *pdbbase)
 
epicsShareFunc DBENTRYdbAllocEntry (DBBASE *pdbbase)
 
epicsShareFunc void dbFreeEntry (DBENTRY *pdbentry)
 
epicsShareFunc void dbInitEntry (DBBASE *pdbbase, DBENTRY *pdbentry)
 
epicsShareFunc void dbFinishEntry (DBENTRY *pdbentry)
 
epicsShareFunc DBENTRYdbCopyEntry (DBENTRY *pdbentry)
 
epicsShareFunc void dbCopyEntryContents (DBENTRY *pfrom, DBENTRY *pto)
 
epicsShareFunc long dbReadDatabase (DBBASE **ppdbbase, const char *filename, const char *path, const char *substitutions)
 
epicsShareFunc long dbReadDatabaseFP (DBBASE **ppdbbase, FILE *fp, const char *path, const char *substitutions)
 
epicsShareFunc long dbPath (DBBASE *pdbbase, const char *path)
 
epicsShareFunc long dbAddPath (DBBASE *pdbbase, const char *path)
 
epicsShareFunc char * dbGetPromptGroupNameFromKey (DBBASE *pdbbase, const short key)
 
epicsShareFunc short dbGetPromptGroupKeyFromName (DBBASE *pdbbase, const char *name)
 
epicsShareFunc long dbWriteRecord (DBBASE *ppdbbase, const char *filename, const char *precordTypename, int level)
 
epicsShareFunc long dbWriteRecordFP (DBBASE *ppdbbase, FILE *fp, const char *precordTypename, int level)
 
epicsShareFunc long dbWriteMenu (DBBASE *pdbbase, const char *filename, const char *menuName)
 
epicsShareFunc long dbWriteMenuFP (DBBASE *pdbbase, FILE *fp, const char *menuName)
 
epicsShareFunc long dbWriteRecordType (DBBASE *pdbbase, const char *filename, const char *recordTypeName)
 
epicsShareFunc long dbWriteRecordTypeFP (DBBASE *pdbbase, FILE *fp, const char *recordTypeName)
 
epicsShareFunc long dbWriteDevice (DBBASE *pdbbase, const char *filename)
 
epicsShareFunc long dbWriteDeviceFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbWriteDriver (DBBASE *pdbbase, const char *filename)
 
epicsShareFunc long dbWriteDriverFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbWriteLinkFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbWriteRegistrarFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbWriteFunctionFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbWriteVariableFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbWriteBreaktable (DBBASE *pdbbase, const char *filename)
 
epicsShareFunc long dbWriteBreaktableFP (DBBASE *pdbbase, FILE *fp)
 
epicsShareFunc long dbFindRecordType (DBENTRY *pdbentry, const char *recordTypename)
 
epicsShareFunc long dbFirstRecordType (DBENTRY *pdbentry)
 
epicsShareFunc long dbNextRecordType (DBENTRY *pdbentry)
 
epicsShareFunc char * dbGetRecordTypeName (DBENTRY *pdbentry)
 
epicsShareFunc int dbGetNRecordTypes (DBENTRY *pdbentry)
 
epicsShareFunc long dbPutRecordAttribute (DBENTRY *pdbentry, const char *name, const char *value)
 
epicsShareFunc long dbGetRecordAttribute (DBENTRY *pdbentry, const char *name)
 
epicsShareFunc long dbGetAttributePart (DBENTRY *pdbentry, const char **ppname)
 
epicsShareFunc long dbFirstField (DBENTRY *pdbentry, int dctonly)
 
epicsShareFunc long dbNextField (DBENTRY *pdbentry, int dctonly)
 
epicsShareFunc int dbGetNFields (DBENTRY *pdbentry, int dctonly)
 
epicsShareFunc char * dbGetFieldName (DBENTRY *pdbentry)
 
epicsShareFunc int dbGetFieldDbfType (DBENTRY *pdbentry)
 
epicsShareFunc char * dbGetDefault (DBENTRY *pdbentry)
 
epicsShareFunc char * dbGetPrompt (DBENTRY *pdbentry)
 
epicsShareFunc int dbGetPromptGroup (DBENTRY *pdbentry)
 
epicsShareFunc long dbCreateRecord (DBENTRY *pdbentry, const char *pname)
 
epicsShareFunc long dbDeleteRecord (DBENTRY *pdbentry)
 
epicsShareFunc long dbFreeRecords (DBBASE *pdbbase)
 
epicsShareFunc long dbFindRecordPart (DBENTRY *pdbentry, const char **ppname)
 
epicsShareFunc long dbFindRecord (DBENTRY *pdbentry, const char *pname)
 
epicsShareFunc long dbFirstRecord (DBENTRY *pdbentry)
 
epicsShareFunc long dbNextRecord (DBENTRY *pdbentry)
 
epicsShareFunc int dbGetNRecords (DBENTRY *pdbentry)
 
epicsShareFunc int dbGetNAliases (DBENTRY *pdbentry)
 
epicsShareFunc char * dbGetRecordName (DBENTRY *pdbentry)
 
epicsShareFunc long dbCopyRecord (DBENTRY *pdbentry, const char *newRecordName, int overWriteOK)
 
epicsShareFunc long dbVisibleRecord (DBENTRY *pdbentry)
 
epicsShareFunc long dbInvisibleRecord (DBENTRY *pdbentry)
 
epicsShareFunc int dbIsVisibleRecord (DBENTRY *pdbentry)
 
epicsShareFunc long dbCreateAlias (DBENTRY *pdbentry, const char *paliasName)
 
epicsShareFunc int dbIsAlias (DBENTRY *pdbentry)
 
epicsShareFunc int dbFollowAlias (DBENTRY *pdbentry)
 
epicsShareFunc long dbDeleteAliases (DBENTRY *pdbentry)
 
epicsShareFunc long dbFindFieldPart (DBENTRY *pdbentry, const char **ppname)
 
epicsShareFunc long dbFindField (DBENTRY *pdbentry, const char *pfieldName)
 
epicsShareFunc int dbFoundField (DBENTRY *pdbentry)
 
epicsShareFunc char * dbGetString (DBENTRY *pdbentry)
 
epicsShareFunc long dbPutString (DBENTRY *pdbentry, const char *pstring)
 
epicsShareFunc char * dbVerify (DBENTRY *pdbentry, const char *pstring)
 
epicsShareFunc int dbIsDefaultValue (DBENTRY *pdbentry)
 
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)
 
epicsShareFunc long dbPutInfoString (DBENTRY *pdbentry, const char *string)
 
epicsShareFunc long dbPutInfoPointer (DBENTRY *pdbentry, void *pointer)
 
epicsShareFunc void * dbGetInfoPointer (DBENTRY *pdbentry)
 
epicsShareFunc const char * dbGetInfo (DBENTRY *pdbentry, const char *name)
 
epicsShareFunc long dbPutInfo (DBENTRY *pdbentry, const char *name, const char *string)
 
epicsShareFunc brkTabledbFindBrkTable (DBBASE *pdbbase, const char *name)
 
epicsShareFunc const char * dbGetFieldTypeString (int dbfType)
 
epicsShareFunc int dbFindFieldType (const char *type)
 
epicsShareFunc dbMenudbFindMenu (DBBASE *pdbbase, const char *name)
 
epicsShareFunc char ** dbGetMenuChoices (DBENTRY *pdbentry)
 
epicsShareFunc int dbGetMenuIndex (DBENTRY *pdbentry)
 
epicsShareFunc long dbPutMenuIndex (DBENTRY *pdbentry, int index)
 
epicsShareFunc int dbGetNMenuChoices (DBENTRY *pdbentry)
 
epicsShareFunc char * dbGetMenuStringFromIndex (DBENTRY *pdbentry, int index)
 
epicsShareFunc int dbGetMenuIndexFromString (DBENTRY *pdbentry, const char *choice)
 
epicsShareFunc drvSupdbFindDriver (dbBase *pdbbase, const char *name)
 
epicsShareFunc char * dbGetRelatedField (DBENTRY *pdbentry)
 
epicsShareFunc linkSupdbFindLinkSup (dbBase *pdbbase, const char *name)
 
epicsShareFunc int dbGetNLinks (DBENTRY *pdbentry)
 
epicsShareFunc long dbGetLinkField (DBENTRY *pdbentry, int index)
 
epicsShareFunc void dbDumpPath (DBBASE *pdbbase)
 
epicsShareFunc void dbDumpRecord (DBBASE *pdbbase, const char *precordTypename, int level)
 
epicsShareFunc void dbDumpMenu (DBBASE *pdbbase, const char *menuName)
 
epicsShareFunc void dbDumpRecordType (DBBASE *pdbbase, const char *recordTypeName)
 
epicsShareFunc void dbDumpField (DBBASE *pdbbase, const char *recordTypeName, const char *fname)
 
epicsShareFunc void dbDumpDevice (DBBASE *pdbbase, const char *recordTypeName)
 
epicsShareFunc void dbDumpDriver (DBBASE *pdbbase)
 
epicsShareFunc void dbDumpLink (DBBASE *pdbbase)
 
epicsShareFunc void dbDumpRegistrar (DBBASE *pdbbase)
 
epicsShareFunc void dbDumpFunction (DBBASE *pdbbase)
 
epicsShareFunc void dbDumpVariable (DBBASE *pdbbase)
 
epicsShareFunc void dbDumpBreaktable (DBBASE *pdbbase, const char *name)
 
epicsShareFunc void dbPvdDump (DBBASE *pdbbase, int verbose)
 
epicsShareFunc void dbReportDeviceConfig (DBBASE *pdbbase, FILE *report)
 
epicsShareFunc void dbCatString (char **string, int *stringLength, char *pnew, char *separator)
 

Variables

epicsShareExtern int dbBptNotMonotonic
 
int dbStaticDebug
 
int dbConvertStrict
 

Macro Definition Documentation

#define dbCalloc (   nobj,
  size 
)    callocMustSucceed(nobj,size,"dbCalloc")

Definition at line 228 of file dbStaticLib.h.

#define dbMalloc (   size)    mallocMustSucceed(size,"dbMalloc")

Definition at line 229 of file dbStaticLib.h.

#define S_dbLib_badField   (M_dbLib|11) /* Bad Field value */

Definition at line 241 of file dbStaticLib.h.

#define S_dbLib_badLink   (M_dbLib|15) /* Bad Link Field */

Definition at line 243 of file dbStaticLib.h.

#define S_dbLib_fieldNotFound   (M_dbLib|9) /* Field Not Found */

Definition at line 240 of file dbStaticLib.h.

#define S_dbLib_flddesNotFound   (M_dbLib|7) /* Field Description Not Found */

Definition at line 239 of file dbStaticLib.h.

#define S_dbLib_infoNotFound   (M_dbLib|29) /* Info item Not Found */

Definition at line 249 of file dbStaticLib.h.

#define S_dbLib_menuNotFound   (M_dbLib|13) /* Menu not found */

Definition at line 242 of file dbStaticLib.h.

#define S_dbLib_nameLength   (M_dbLib|17) /* Record Name is too long */

Definition at line 244 of file dbStaticLib.h.

#define S_dbLib_noRecSup   (M_dbLib|19) /* Record support not found */

Definition at line 245 of file dbStaticLib.h.

#define S_dbLib_noSizeOffset   (M_dbLib|23) /* Missing SizeOffset Routine - No record support? */

Definition at line 247 of file dbStaticLib.h.

#define S_dbLib_outMem   (M_dbLib|27) /* Out of memory */

Definition at line 248 of file dbStaticLib.h.

#define S_dbLib_recExists   (M_dbLib|3) /* Record Already exists */

Definition at line 237 of file dbStaticLib.h.

#define S_dbLib_recNotFound   (M_dbLib|5) /* Record Not Found */

Definition at line 238 of file dbStaticLib.h.

#define S_dbLib_recordTypeNotFound   (M_dbLib|1) /* Record Type does not exist */

Definition at line 236 of file dbStaticLib.h.

#define S_dbLib_strLen   (M_dbLib|21) /* String is too long */

Definition at line 246 of file dbStaticLib.h.

Typedef Documentation

typedef dbBase DBBASE

Definition at line 31 of file dbStaticLib.h.

typedef struct dbEntry DBENTRY

Function Documentation

epicsShareFunc long dbAddPath ( DBBASE pdbbase,
const char *  path 
)

Definition at line 665 of file dbStaticLib.c.

666 {
667  ELLLIST *ppathList;
668  const char *pcolon;
669  const char *plast;
670  unsigned expectingPath;
671  unsigned sawMissingPath;
672 
673  if(!pdbbase) return(-1);
674  ppathList = (ELLLIST *)pdbbase->pathPvt;
675  if(!ppathList) {
676  ppathList = dbCalloc(1,sizeof(ELLLIST));
677  ellInit(ppathList);
678  pdbbase->pathPvt = (void *)ppathList;
679  }
680  if (!path) return(0); /* Empty path strings are ignored */
681  /* care is taken to properly deal with white space
682  * 1) preceding and trailing white space is removed from paths
683  * 2) white space inbetween path separator counts as an empty name
684  * (see below)
685  */
686  expectingPath = FALSE;
687  sawMissingPath = FALSE;
688  while (*path) {
689  size_t len;
690 
691  /* preceding white space is removed */
692  if (isspace((int)*path)) {
693  path++;
694  continue;
695  }
696  pcolon = strstr (path, OSI_PATH_LIST_SEPARATOR);
697  if (pcolon==path) {
698  sawMissingPath = TRUE;
699  path += strlen (OSI_PATH_LIST_SEPARATOR);
700  continue;
701  }
702  if (pcolon) {
703  plast = pcolon - 1;
704  expectingPath = TRUE;
705  } else {
706  plast = strlen (path) + path - 1;
707  expectingPath = FALSE;
708  }
709  /* trailing white space is removed */
710  while (isspace((int)*plast)) {
711  plast--;
712  }
713 
714  /*
715  * len is always nonzero because we found something that
716  * 1) isnt white space
717  * 2) isnt a path separator
718  */
719  len = (plast - path) + 1;
720  if (dbAddOnePath (pdbbase, path, (unsigned) len)) return (-1);
721  path += len;
722  if (pcolon) {
723  path += strlen(OSI_PATH_LIST_SEPARATOR);
724  }
725  }
726 
727  /*
728  * an empty name at beginning, middle, or end of a path string that isnt
729  * empty means current directory
730  */
731  if (expectingPath||sawMissingPath) {
732  return dbAddOnePath (pdbbase, ".", 1);
733  }
734  return(0);
735 }
void * pathPvt
Definition: dbBase.h:181
#define FALSE
Definition: dbDefs.h:32
#define OSI_PATH_LIST_SEPARATOR
Definition: unixFileName.h:23
#define TRUE
Definition: dbDefs.h:27
#define dbCalloc(nobj, size)
Definition: dbStaticLib.h:228
#define ellInit(PLIST)
Initialize a list type.
Definition: ellLib.h:76
List header type.
Definition: ellLib.h:56
epicsShareFunc DBBASE* dbAllocBase ( void  )

Definition at line 401 of file dbStaticLib.c.

402 {
403  dbBase *pdbbase;
404 
405  pdbbase = dbCalloc(1,sizeof(dbBase));
406  ellInit(&pdbbase->menuList);
407  ellInit(&pdbbase->recordTypeList);
408  ellInit(&pdbbase->drvList);
409  ellInit(&pdbbase->registrarList);
410  ellInit(&pdbbase->functionList);
411  ellInit(&pdbbase->variableList);
412  ellInit(&pdbbase->bptList);
413  ellInit(&pdbbase->filterList);
414  ellInit(&pdbbase->guiGroupList);
415  gphInitPvt(&pdbbase->pgpHash,256);
416  dbPvdInitPvt(pdbbase);
417  return (pdbbase);
418 }
ELLLIST drvList
Definition: dbBase.h:173
ELLLIST recordTypeList
Definition: dbBase.h:172
ELLLIST functionList
Definition: dbBase.h:176
ELLLIST bptList
Definition: dbBase.h:178
LIBCOM_API void epicsStdCall gphInitPvt(struct gphPvt **ppvt, int tableSize)
Definition: gpHashLib.c:37
ELLLIST guiGroupList
Definition: dbBase.h:180
ELLLIST menuList
Definition: dbBase.h:171
#define dbCalloc(nobj, size)
Definition: dbStaticLib.h:228
#define ellInit(PLIST)
Initialize a list type.
Definition: ellLib.h:76
Definition: dbBase.h:170
ELLLIST filterList
Definition: dbBase.h:179
void dbPvdInitPvt(dbBase *pdbbase)
Definition: dbPvdLib.c:63
ELLLIST registrarList
Definition: dbBase.h:175
struct gphPvt * pgpHash
Definition: dbBase.h:183
ELLLIST variableList
Definition: dbBase.h:177
epicsShareFunc DBENTRY* dbAllocEntry ( DBBASE pdbbase)

Definition at line 607 of file dbStaticLib.c.

608 {
609  DBENTRY *pdbentry;
610 
611  pdbentry = dbmfMalloc(sizeof(DBENTRY));
612  memset(pdbentry,'\0',sizeof(DBENTRY));
613  pdbentry->pdbbase = pdbbase;
614  return(pdbentry);
615 }
DBBASE * pdbbase
Definition: dbStaticLib.h:34
void * dbmfMalloc(size_t size)
Allocate memory.
Definition: dbmf.c:97
epicsShareFunc void dbCatString ( char **  string,
int *  stringLength,
char *  pnew,
char *  separator 
)

Definition at line 375 of file dbStaticLib.c.

376 {
377  if((*string==NULL)
378  || ((strlen(*string)+strlen(src)+2) > (size_t)*stringLength)) {
379  char *newString;
380  size_t size;
381 
382  size = strlen(src);
383  if(*string) size += strlen(*string);
384  /*Make size multiple of INC_SIZE*/
385  size = ((size + 2 + INC_SIZE)/INC_SIZE) * INC_SIZE;
386  newString = dbCalloc(size,sizeof(char));
387  if(*string) {
388  strcpy(newString,*string);
389  free((void *)(*string));
390  }
391  *string = newString;
392  }
393  if(*stringLength>0) {
394  strcat(*string,separator);
395  *stringLength += (int) strlen(separator);
396  }
397  strcat(*string,src);
398  *stringLength += (int) strlen(src);
399 }
#define NULL
Definition: catime.c:38
#define INC_SIZE
Definition: dbStaticLib.c:374
#define dbCalloc(nobj, size)
Definition: dbStaticLib.h:228
epicsShareFunc DBENTRY* dbCopyEntry ( DBENTRY pdbentry)

Definition at line 640 of file dbStaticLib.c.

641 {
642  DBENTRY *pnew;
643 
644  pnew = dbAllocEntry(pdbentry->pdbbase);
645  *pnew = *pdbentry;
646  pnew->message = NULL;
647  return(pnew);
648 }
DBENTRY * dbAllocEntry(dbBase *pdbbase)
Definition: dbStaticLib.c:607
DBBASE * pdbbase
Definition: dbStaticLib.h:34
#define NULL
Definition: catime.c:38
char * message
Definition: dbStaticLib.h:40
epicsShareFunc void dbCopyEntryContents ( DBENTRY pfrom,
DBENTRY pto 
)

Definition at line 650 of file dbStaticLib.c.

651 {
652  *pto = *pfrom;
653  pto->message = NULL;
654 }
#define NULL
Definition: catime.c:38
char * message
Definition: dbStaticLib.h:40
epicsShareFunc long dbCopyRecord ( DBENTRY pdbentry,
const char *  newRecordName,
int  overWriteOK 
)

Definition at line 1708 of file dbStaticLib.c.

1709 {
1710  dbRecordType *precordType = pdbentry->precordType;
1711  dbFldDes *pdbFldDes;
1712  dbRecordNode *precnode = pdbentry->precnode;
1713  long status;
1714  DBENTRY dbentry;
1715  char *pvalue;
1716 
1717  if(!precordType) return(S_dbLib_recordTypeNotFound);
1718  /*Get size of NAME field*/
1719  pdbFldDes = precordType->papFldDes[0];
1720  if(!pdbFldDes || (strcmp(pdbFldDes->name,"NAME")!=0))
1721  return(S_dbLib_nameLength);
1722  if((int)strlen(newRecordName)>=pdbFldDes->size) return(S_dbLib_nameLength);
1723  if (!precnode || dbIsAlias(pdbentry)) return S_dbLib_recNotFound;
1724  dbInitEntry(pdbentry->pdbbase,&dbentry);
1725  status = dbFindRecord(&dbentry,newRecordName);
1726  if(!status) {
1727  if(!overWriteOK) {
1728  dbFinishEntry(&dbentry);
1729  return(S_dbLib_recExists);
1730  }
1731  status = dbDeleteRecord(&dbentry);
1732  if(status) return(status);
1733  }
1734  dbFinishEntry(&dbentry);
1735  if((status = dbFindRecordType(&dbentry,precordType->name))) return(status);
1736  if((status = dbCreateRecord(&dbentry,newRecordName))) return(status);
1737  if((status = dbFirstField(pdbentry,TRUE))) return(status);
1738  if((status = dbFirstField(&dbentry,TRUE))) return(status);
1739  while(!status) {
1740  if(!dbIsDefaultValue(pdbentry)) {
1741  pvalue = dbGetString(pdbentry);
1742  if((status = dbPutString(&dbentry,pvalue))) return(status);
1743  }
1744  status = dbNextField(pdbentry,TRUE);
1745  if(!status) status = dbNextField(&dbentry,TRUE);
1746  if(!status && (pdbentry->pflddes!=dbentry.pflddes)) {
1747  epicsPrintf("dbCopyRecord: Logic Error\n");
1748  return(-1);
1749  }
1750  }
1751  /*Copy the info strings too*/
1752  status = dbFirstInfo(pdbentry);
1753  while (!status) {
1754  status = dbPutInfo(&dbentry, dbGetInfoName(pdbentry), dbGetInfoString(pdbentry));
1755  if (status) return (status);
1756  status = dbNextInfo(pdbentry);
1757  }
1758  /*Leave pdbentry pointing to newRecordName*/
1759  return(dbFindRecord(pdbentry,newRecordName));
1760 }
long dbFirstField(DBENTRY *pdbentry, int dctonly)
Definition: dbStaticLib.c:1316
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
const char * dbGetInfoName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2901
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
long dbNextInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2827
pvd::Status status
dbRecordType * precordType
Definition: dbStaticLib.h:35
dbFldDes * pflddes
Definition: dbStaticLib.h:36
long dbFindRecordType(DBENTRY *pdbentry, const char *recordType)
Definition: dbStaticLib.c:1186
DBBASE * pdbbase
Definition: dbStaticLib.h:34
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
#define S_dbLib_recExists
Definition: dbStaticLib.h:237
long dbFindRecord(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1559
short size
Definition: dbBase.h:98
dbRecordNode * precnode
Definition: dbStaticLib.h:37
const char * dbGetInfoString(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2908
long dbNextField(DBENTRY *pdbentry, int dctonly)
Definition: dbStaticLib.c:1323
int dbIsAlias(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1700
#define epicsPrintf
Definition: errlog.h:51
long dbDeleteRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1480
long dbCreateRecord(DBENTRY *pdbentry, const char *precordName)
Definition: dbStaticLib.c:1416
char * name
Definition: dbBase.h:151
long dbFirstInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2816
char * dbGetString(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1845
#define TRUE
Definition: dbDefs.h:27
dbFldDes ** papFldDes
Definition: dbBase.h:161
char * name
Definition: dbBase.h:81
long dbPutString(DBENTRY *pdbentry, const char *pstring)
Definition: dbStaticLib.c:2545
#define S_dbLib_nameLength
Definition: dbStaticLib.h:244
long dbPutInfo(DBENTRY *pdbentry, const char *name, const char *string)
Definition: dbStaticLib.c:2948
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc int dbIsDefaultValue(DBENTRY *pdbentry)
Definition: dbStaticRun.c:219
epicsShareFunc long dbCreateAlias ( DBENTRY pdbentry,
const char *  paliasName 
)

Definition at line 1648 of file dbStaticLib.c.

1649 {
1650  dbRecordType *precordType = pdbentry->precordType;
1651  dbRecordNode *precnode = pdbentry->precnode;
1652  dbRecordNode *pnewnode;
1653  DBENTRY tempEntry;
1654  PVDENTRY *ppvd;
1655 
1656  if (!precordType)
1658 
1659  /* alias of alias still references actual record */
1660  while (precnode && (precnode->flags & DBRN_FLAGS_ISALIAS))
1661  precnode = precnode->aliasedRecnode;
1662 
1663  if (!precnode)
1664  return S_dbLib_recNotFound;
1665 
1666  dbInitEntry(pdbentry->pdbbase, &tempEntry);
1667  if (!dbFindRecord(&tempEntry, alias))
1668  return S_dbLib_recExists;
1669  dbFinishEntry(&tempEntry);
1670 
1671  pnewnode = dbCalloc(1, sizeof(dbRecordNode));
1672  pnewnode->recordname = epicsStrDup(alias);
1673  pnewnode->precord = precnode->precord;
1674  pnewnode->aliasedRecnode = precnode;
1675  pnewnode->flags = DBRN_FLAGS_ISALIAS;
1676  precnode->flags |= DBRN_FLAGS_HASALIAS;
1677  ellInit(&pnewnode->infoList);
1678 
1679  ellAdd(&precordType->recList, &pnewnode->node);
1680  precordType->no_aliases++;
1681 
1682  ppvd = dbPvdAdd(pdbentry->pdbbase, precordType, pnewnode);
1683  if (!ppvd) {
1684  errMessage(-1, "dbCreateAlias: Add to PVD failed");
1685  return -1;
1686  }
1687 
1688  return 0;
1689 }
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
PVDENTRY * dbPvdAdd(dbBase *pdbbase, dbRecordType *precordType, dbRecordNode *precnode)
Definition: dbPvdLib.c:105
dbRecordType * precordType
Definition: dbStaticLib.h:35
void * precord
Definition: dbBase.h:116
ELLLIST infoList
Definition: dbBase.h:118
DBBASE * pdbbase
Definition: dbStaticLib.h:34
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
#define S_dbLib_recExists
Definition: dbStaticLib.h:237
#define errMessage(S, PM)
Definition: errlog.h:48
long dbFindRecord(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1559
short no_aliases
Definition: dbBase.h:155
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
Definition: ellLib.c:24
struct dbRecordNode * aliasedRecnode
Definition: dbBase.h:120
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
ELLNODE node
Definition: dbBase.h:115
char * epicsStrDup(const char *s)
Definition: epicsString.c:233
ELLLIST recList
Definition: dbBase.h:148
#define dbCalloc(nobj, size)
Definition: dbStaticLib.h:228
#define ellInit(PLIST)
Initialize a list type.
Definition: ellLib.h:76
#define DBRN_FLAGS_HASALIAS
Definition: dbBase.h:112
char * recordname
Definition: dbBase.h:117
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
#define DBRN_FLAGS_ISALIAS
Definition: dbBase.h:111
epicsShareFunc long dbCreateRecord ( DBENTRY pdbentry,
const char *  pname 
)

Definition at line 1416 of file dbStaticLib.c.

1417 {
1418  dbRecordType *precordType = pdbentry->precordType;
1419  dbFldDes *pdbFldDes;
1420  PVDENTRY *ppvd;
1421  ELLLIST *preclist = NULL;
1422  dbRecordNode *pNewRecNode = NULL;
1423  long status = 0;
1424 
1425  if(!precordType) return(S_dbLib_recordTypeNotFound);
1426  /*Get size of NAME field*/
1427  pdbFldDes = precordType->papFldDes[0];
1428  if(!pdbFldDes || (strcmp(pdbFldDes->name,"NAME")!=0))
1429  return(S_dbLib_nameLength);
1430  if((int)strlen(precordName)>=pdbFldDes->size) return(S_dbLib_nameLength);
1431  /* clear callers entry */
1432  zeroDbentry(pdbentry);
1433  if(!dbFindRecord(pdbentry,precordName)) return (S_dbLib_recExists);
1434  zeroDbentry(pdbentry);
1435  pdbentry->precordType = precordType;
1436  preclist = &precordType->recList;
1437  /* create a recNode */
1438  pNewRecNode = dbCalloc(1,sizeof(dbRecordNode));
1439  /* create a new record of this record type */
1440  pdbentry->precnode = pNewRecNode;
1441  if((status = dbAllocRecord(pdbentry,precordName))) return(status);
1442  pNewRecNode->recordname = dbRecordName(pdbentry);
1443  ellInit(&pNewRecNode->infoList);
1444  ellAdd(preclist, &pNewRecNode->node);
1445  pdbentry->precnode = pNewRecNode;
1446  ppvd = dbPvdAdd(pdbentry->pdbbase,precordType,pNewRecNode);
1447  if(!ppvd) {errMessage(-1,"Logic Err: Could not add to PVD");return(-1);}
1448  return(0);
1449 }
PVDENTRY * dbPvdAdd(dbBase *pdbbase, dbRecordType *precordType, dbRecordNode *precnode)
Definition: dbPvdLib.c:105
pvd::Status status
dbRecordType * precordType
Definition: dbStaticLib.h:35
ELLLIST infoList
Definition: dbBase.h:118
DBBASE * pdbbase
Definition: dbStaticLib.h:34
#define S_dbLib_recExists
Definition: dbStaticLib.h:237
#define NULL
Definition: catime.c:38
#define errMessage(S, PM)
Definition: errlog.h:48
long dbFindRecord(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1559
char * dbRecordName(DBENTRY *pdbentry)
Definition: dbStaticRun.c:201
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
Definition: ellLib.c:24
short size
Definition: dbBase.h:98
dbRecordNode * precnode
Definition: dbStaticLib.h:37
ELLNODE node
Definition: dbBase.h:115
long dbAllocRecord(DBENTRY *pdbentry, const char *precordName)
Definition: dbStaticRun.c:69
ELLLIST recList
Definition: dbBase.h:148
#define dbCalloc(nobj, size)
Definition: dbStaticLib.h:228
#define ellInit(PLIST)
Initialize a list type.
Definition: ellLib.h:76
dbFldDes ** papFldDes
Definition: dbBase.h:161
char * recordname
Definition: dbBase.h:117
char * name
Definition: dbBase.h:81
List header type.
Definition: ellLib.h:56
#define S_dbLib_nameLength
Definition: dbStaticLib.h:244
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc long dbDeleteAliases ( DBENTRY pdbentry)

Definition at line 1451 of file dbStaticLib.c.

1452 {
1453  dbBase *pdbbase = pdbentry->pdbbase;
1454  dbRecordType *precordType = pdbentry->precordType;
1455  dbRecordNode *precnode = pdbentry->precnode;
1456  ELLLIST *preclist = &precordType->recList;
1457  dbRecordNode *pAliasNode, *pAliasNodeNext;
1458  DBENTRY dbentry;
1459  void *precord;
1460 
1461  if (!precnode) return S_dbLib_recNotFound;
1462  if (precnode->flags & DBRN_FLAGS_ISALIAS) return S_dbLib_recExists;
1463  precord = precnode->precord;
1464 
1465  dbInitEntry(pdbbase, &dbentry);
1466  pAliasNode = (dbRecordNode *)ellFirst(preclist);
1467  while (pAliasNode) {
1468  pAliasNodeNext = (dbRecordNode *)ellNext(&pAliasNode->node);
1469  if (pAliasNode->flags & DBRN_FLAGS_ISALIAS &&
1470  pAliasNode->precord == precord &&
1471  !dbFindRecord(&dbentry, pAliasNode->recordname)) {
1472  dbDeleteRecord(&dbentry);
1473  }
1474  pAliasNode = pAliasNodeNext;
1475  }
1476  precnode->flags &= ~DBRN_FLAGS_HASALIAS;
1477  return 0;
1478 }
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
dbRecordType * precordType
Definition: dbStaticLib.h:35
void * precord
Definition: dbBase.h:116
DBBASE * pdbbase
Definition: dbStaticLib.h:34
#define S_dbLib_recExists
Definition: dbStaticLib.h:237
long dbFindRecord(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1559
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
long dbDeleteRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1480
ELLNODE node
Definition: dbBase.h:115
ELLLIST recList
Definition: dbBase.h:148
Definition: dbBase.h:170
#define DBRN_FLAGS_HASALIAS
Definition: dbBase.h:112
char * recordname
Definition: dbBase.h:117
List header type.
Definition: ellLib.h:56
#define DBRN_FLAGS_ISALIAS
Definition: dbBase.h:111
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbDeleteInfo ( DBENTRY pdbentry)

Definition at line 2886 of file dbStaticLib.c.

2887 {
2888  dbRecordNode *precnode = pdbentry->precnode;
2889  dbInfoNode *pinfo = pdbentry->pinfonode;
2890 
2891  if (!precnode) return (S_dbLib_recNotFound);
2892  if (!pinfo) return (S_dbLib_infoNotFound);
2893  ellDelete(&precnode->infoList,&pinfo->node);
2894  free(pinfo->name);
2895  free(pinfo->string);
2896  free(pinfo);
2897  pdbentry->pinfonode = NULL;
2898  return (0);
2899 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
ELLLIST infoList
Definition: dbBase.h:118
ELLNODE node
Definition: dbBase.h:104
#define NULL
Definition: catime.c:38
dbRecordNode * precnode
Definition: dbStaticLib.h:37
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_infoNotFound
Definition: dbStaticLib.h:249
char * string
Definition: dbBase.h:106
char * name
Definition: dbBase.h:105
void ellDelete(ELLLIST *pList, ELLNODE *pNode)
Deletes a node from a list.
Definition: ellLib.c:75
epicsShareFunc long dbDeleteRecord ( DBENTRY pdbentry)

Definition at line 1480 of file dbStaticLib.c.

1481 {
1482  dbBase *pdbbase = pdbentry->pdbbase;
1483  dbRecordType *precordType = pdbentry->precordType;
1484  dbRecordNode *precnode = pdbentry->precnode;
1485  ELLLIST *preclist;
1486  long status;
1487 
1488  if (!precnode) return S_dbLib_recNotFound;
1489  if (precnode->flags & DBRN_FLAGS_HASALIAS)
1490  dbDeleteAliases(pdbentry);
1491 
1492  preclist = &precordType->recList;
1493  ellDelete(preclist, &precnode->node);
1494  dbPvdDelete(pdbbase, precnode);
1495  while (!dbFirstInfo(pdbentry)) {
1496  dbDeleteInfo(pdbentry);
1497  }
1498  if (precnode->flags & DBRN_FLAGS_ISALIAS) {
1499  free(precnode->recordname);
1500  precordType->no_aliases--;
1501  } else {
1502  status = dbFreeRecord(pdbentry);
1503  if (status) return status;
1504  }
1505  free(precnode);
1506  pdbentry->precnode = NULL;
1507  return 0;
1508 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
pvd::Status status
dbRecordType * precordType
Definition: dbStaticLib.h:35
DBBASE * pdbbase
Definition: dbStaticLib.h:34
#define NULL
Definition: catime.c:38
void dbPvdDelete(dbBase *pdbbase, dbRecordNode *precnode)
Definition: dbPvdLib.c:140
short no_aliases
Definition: dbBase.h:155
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
ELLNODE node
Definition: dbBase.h:115
long dbFirstInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2816
long dbFreeRecord(DBENTRY *pdbentry)
Definition: dbStaticRun.c:174
long dbDeleteAliases(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1451
ELLLIST recList
Definition: dbBase.h:148
Definition: dbBase.h:170
#define DBRN_FLAGS_HASALIAS
Definition: dbBase.h:112
char * recordname
Definition: dbBase.h:117
List header type.
Definition: ellLib.h:56
long dbDeleteInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2886
void ellDelete(ELLLIST *pList, ELLNODE *pNode)
Deletes a node from a list.
Definition: ellLib.c:75
#define DBRN_FLAGS_ISALIAS
Definition: dbBase.h:111
epicsShareFunc void dbDumpBreaktable ( DBBASE pdbbase,
const char *  name 
)

Definition at line 3460 of file dbStaticLib.c.

3461 {
3462  brkTable *pbrkTable;
3463  brkInt *pbrkInt;
3464  int ind;
3465 
3466  if(!pdbbase) {
3467  fprintf(stderr,"pdbbase not specified\n");
3468  return;
3469  }
3470  for(pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList);
3471  pbrkTable; pbrkTable = (brkTable *)ellNext(&pbrkTable->node)) {
3472  if (name && strcmp(name,pbrkTable->name)!=0) continue;
3473  printf("breaktable(%s) {\n",pbrkTable->name);
3474  pbrkInt = pbrkTable->paBrkInt;
3475  for(ind=0; ind < pbrkTable->number; ind++) {
3476  printf("\traw=%f slope=%e eng=%f\n",
3477  pbrkInt->raw, pbrkInt->slope, pbrkInt->eng);
3478  pbrkInt++;
3479  }
3480  printf("}\n");
3481  }
3482  return;
3483 }
#define printf
Definition: epicsStdio.h:41
long number
Definition: dbBase.h:75
ELLLIST bptList
Definition: dbBase.h:178
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
ELLNODE node
Definition: dbBase.h:73
double eng
Definition: makeBpt.c:46
Definition: makeBpt.c:43
struct brkInt * paBrkInt
Definition: dbBase.h:76
#define stderr
Definition: epicsStdio.h:32
double raw
Definition: makeBpt.c:44
char * name
Definition: dbBase.h:74
double slope
Definition: makeBpt.c:45
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc void dbDumpDevice ( DBBASE pdbbase,
const char *  recordTypeName 
)

Definition at line 3356 of file dbStaticLib.c.

3357 {
3358  dbRecordType *pdbRecordType;
3359  devSup *pdevSup;
3360  int gotMatch;
3361 
3362  if (recordTypeName) {
3363  if (*recordTypeName == 0 || *recordTypeName == '*')
3364  recordTypeName = 0;
3365  }
3366  if(!pdbbase) {
3367  fprintf(stderr,"pdbbase not specified\n");
3368  return;
3369  }
3370  for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
3371  pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
3372  if(recordTypeName) {
3373  gotMatch = (strcmp(recordTypeName,pdbRecordType->name)==0)
3374  ? TRUE : FALSE;
3375  }else {
3376  gotMatch=TRUE;
3377  }
3378  if(!gotMatch) continue;
3379  printf("recordtype(%s)\n",pdbRecordType->name);
3380  for(pdevSup = (devSup *)ellFirst(&pdbRecordType->devList);
3381  pdevSup; pdevSup = (devSup *)ellNext(&pdevSup->node)) {
3382  printf(" device name: %s\n",pdevSup->name);
3383  printf("\tchoice: %s\n",pdevSup->choice);
3384  printf("\tlink_type: %d\n",pdevSup->link_type);
3385  printf("\tpdset: %p\n",(void *)pdevSup->pdset);
3386  if (pdevSup->pdset) {
3387  static const char *names[] = {
3388  " - report()",
3389  " - init()",
3390  " - init_record()",
3391  " - get_ioint_info()"
3392  };
3393  int i, n = pdevSup->pdset->number;
3394  DEVSUPFUN *pfunc = &pdevSup->pdset->report;
3395 
3396  printf("\t number: %d\n", n);
3397  for (i = 0; i < n; ++i, ++pfunc) {
3398  const char *name = (i < NELEMENTS(names)) ? names[i] : "";
3399 
3400  printf("\t func %d: %p%s\n", i, (void *)*pfunc, name);
3401  }
3402  }
3403  printf("\tpdsxt: %p\n",(void *)pdevSup->pdsxt);
3404  if (pdevSup->pdsxt) {
3405  printf("\t add_record: %p\n",
3406  (void *)pdevSup->pdsxt->add_record);
3407  printf("\t del_record: %p\n",
3408  (void *)pdevSup->pdsxt->del_record);
3409  }
3410  }
3411  if(recordTypeName) break;
3412  }
3413 }
char * choice
Definition: dbBase.h:41
#define FALSE
Definition: dbDefs.h:32
int i
Definition: scan.c:967
ELLLIST recordTypeList
Definition: dbBase.h:172
#define printf
Definition: epicsStdio.h:41
long number
Definition: devSup.h:141
char * name
Definition: dbBase.h:40
ELLNODE node
Definition: dbBase.h:146
ELLNODE node
Definition: dbBase.h:39
struct dsxt * pdsxt
Definition: dbBase.h:45
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
long(* add_record)(struct dbCommon *precord)
Definition: devSup.h:122
ELLLIST devList
Definition: dbBase.h:149
Definition: dbBase.h:38
#define NELEMENTS(A)
Definition: aToIPAddr.c:21
char * name
Definition: dbBase.h:151
DEVSUPFUN report
Definition: devSup.h:142
long(* del_record)(struct dbCommon *precord)
Definition: devSup.h:127
#define TRUE
Definition: dbDefs.h:27
long(* DEVSUPFUN)()
Definition: devSup.h:135
#define stderr
Definition: epicsStdio.h:32
int link_type
Definition: dbBase.h:42
dset * pdset
Definition: dbBase.h:44
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc void dbDumpDriver ( DBBASE pdbbase)

Definition at line 3415 of file dbStaticLib.c.

3416 {
3417  if(!pdbbase) {
3418  fprintf(stderr,"pdbbase not specified\n");
3419  return;
3420  }
3421  dbWriteDriverFP(pdbbase,stdout);
3422 }
long dbWriteDriverFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1076
#define stdout
Definition: epicsStdio.h:30
#define stderr
Definition: epicsStdio.h:32
epicsShareFunc void dbDumpField ( DBBASE pdbbase,
const char *  recordTypeName,
const char *  fname 
)

Definition at line 3273 of file dbStaticLib.c.

3275 {
3276  dbRecordType *pdbRecordType;
3277  dbFldDes *pdbFldDes;
3278  int gotMatch;
3279  int i;
3280  dbRecordAttribute *pAttribute;
3281 
3282  if(!pdbbase) {
3283  fprintf(stderr,"pdbbase not specified\n");
3284  return;
3285  }
3286  for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
3287  pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
3288  if(recordTypeName) {
3289  gotMatch = (strcmp(recordTypeName,pdbRecordType->name)==0)
3290  ? TRUE : FALSE;
3291  }else {
3292  gotMatch=TRUE;
3293  }
3294  if(!gotMatch) continue;
3295  printf("recordtype(%s) \n",pdbRecordType->name);
3296  for(i=0; i<pdbRecordType->no_fields; i++) {
3297  int j;
3298 
3299  pdbFldDes = pdbRecordType->papFldDes[i];
3300  if(fname && strcmp(fname,pdbFldDes->name)!=0) continue;
3301  printf(" %s\n", pdbFldDes->name);
3302  printf("\t prompt: %s\n",
3303  (pdbFldDes->prompt ? pdbFldDes->prompt : ""));
3304  printf("\t extra: %s\n",
3305  (pdbFldDes->extra ? pdbFldDes->extra: ""));
3306  printf("\t indRecordType: %hd\n",pdbFldDes->indRecordType);
3307  printf("\t special: %hd ",pdbFldDes->special);
3308  if(pdbFldDes->special) {
3309  for(j=0; j<SPC_NTYPES; j++) {
3310  if(pamapspcType[j].value == pdbFldDes->special) {
3311  printf("%s",pamapspcType[j].strvalue);
3312  break;
3313  }
3314  }
3315  }
3316  printf("\n");
3317  printf("\t field_type: %s\n",
3318  dbGetFieldTypeString(pdbFldDes->field_type));
3319  printf("\tprocess_passive: %u\n",pdbFldDes->process_passive);
3320  printf("\t property: %u\n",pdbFldDes->prop);
3321  printf("\t base: %d\n",pdbFldDes->base);
3322  if(!pdbFldDes->promptgroup) {
3323  printf("\t promptgroup: %d\n",pdbFldDes->promptgroup);
3324  } else {
3325  printf("\t promptgroup: %s\n",
3326  dbGetPromptGroupNameFromKey(pdbbase, pdbFldDes->promptgroup));
3327  }
3328  printf("\t interest: %hd\n", pdbFldDes->interest);
3329  printf("\t as_level: %d\n",pdbFldDes->as_level);
3330  printf("\t initial: %s\n",
3331  (pdbFldDes->initial ? pdbFldDes->initial : ""));
3332  if(pdbFldDes->field_type==DBF_MENU) {
3333  if(pdbFldDes->ftPvt)
3334  printf("\t\t menu: %s\n",
3335  ((dbMenu *)pdbFldDes->ftPvt)->name);
3336  else
3337  printf("\t\t menu: NOT FOUND\n");
3338  }
3339  if(pdbFldDes->field_type==DBF_DEVICE) {
3340  printf("\t ftPvt: %p\n",pdbFldDes->ftPvt);
3341  }
3342  printf("\t size: %hd\n",pdbFldDes->size);
3343  printf("\t offset: %hd\n",pdbFldDes->offset);
3344  }
3345  pAttribute =
3346  (dbRecordAttribute *)ellFirst(&pdbRecordType->attributeList);
3347  while(pAttribute) {
3348  printf("Attribute: name %s value %s\n",
3349  pAttribute->name,pAttribute->value);
3350  pAttribute = (dbRecordAttribute *)ellNext(&pAttribute->node);
3351  }
3352  if(recordTypeName) break;
3353  }
3354 }
#define SPC_NTYPES
Definition: special.h:42
Definition: link.h:174
short promptgroup
Definition: dbBase.h:91
#define FALSE
Definition: dbDefs.h:32
short special
Definition: dbBase.h:85
int i
Definition: scan.c:967
ELLLIST recordTypeList
Definition: dbBase.h:172
char value[MAX_STRING_SIZE]
Definition: dbBase.h:130
#define printf
Definition: epicsStdio.h:41
ELLNODE node
Definition: dbBase.h:127
ELLNODE node
Definition: dbBase.h:146
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
short interest
Definition: dbBase.h:92
short size
Definition: dbBase.h:98
unsigned int process_passive
Definition: dbBase.h:87
ctType base
Definition: dbBase.h:90
short no_fields
Definition: dbBase.h:152
char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase, const short key)
Definition: dbStaticLib.c:753
char * name
Definition: dbBase.h:151
mapspcType pamapspcType[]
Definition: dbBase.h:24
asLevel as_level
Definition: dbBase.h:93
unsigned int prop
Definition: dbBase.h:88
#define TRUE
Definition: dbDefs.h:27
void * ftPvt
Definition: dbBase.h:96
dbFldDes ** papFldDes
Definition: dbBase.h:161
const char * dbGetFieldTypeString(int dbfType)
Definition: dbStaticLib.c:2988
char * extra
Definition: dbBase.h:82
char * initial
Definition: dbBase.h:94
#define stderr
Definition: epicsStdio.h:32
char * prompt
Definition: dbBase.h:80
char * name
Definition: dbBase.h:81
ELLLIST attributeList
Definition: dbBase.h:147
unsigned short offset
Definition: dbBase.h:100
dbfType field_type
Definition: dbBase.h:86
short indRecordType
Definition: dbBase.h:84
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc void dbDumpFunction ( DBBASE pdbbase)

Definition at line 3442 of file dbStaticLib.c.

3443 {
3444  if(!pdbbase) {
3445  fprintf(stderr,"pdbbase not specified\n");
3446  return;
3447  }
3448  dbWriteFunctionFP(pdbbase,stdout);
3449 }
long dbWriteFunctionFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1121
#define stdout
Definition: epicsStdio.h:30
#define stderr
Definition: epicsStdio.h:32
epicsShareFunc void dbDumpLink ( DBBASE pdbbase)

Definition at line 3424 of file dbStaticLib.c.

3425 {
3426  if(!pdbbase) {
3427  fprintf(stderr,"pdbbase not specified\n");
3428  return;
3429  }
3430  dbWriteLinkFP(pdbbase,stdout);
3431 }
long dbWriteLinkFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1091
#define stdout
Definition: epicsStdio.h:30
#define stderr
Definition: epicsStdio.h:32
epicsShareFunc void dbDumpMenu ( DBBASE pdbbase,
const char *  menuName 
)

Definition at line 3222 of file dbStaticLib.c.

3223 {
3224  if(!pdbbase) {
3225  fprintf(stderr,"pdbbase not specified\n");
3226  return;
3227  }
3228  dbWriteMenuFP(pdbbase,stdout,menuName);
3229 }
#define stdout
Definition: epicsStdio.h:30
#define stderr
Definition: epicsStdio.h:32
long dbWriteMenuFP(DBBASE *pdbbase, FILE *fp, const char *menuName)
Definition: dbStaticLib.c:897
epicsShareFunc void dbDumpPath ( DBBASE pdbbase)

Definition at line 3189 of file dbStaticLib.c.

3190 {
3191  ELLLIST *ppathList;
3192  dbPathNode *pdbPathNode;
3193 
3194  if(!pdbbase) {
3195  fprintf(stderr,"pdbbase not specified\n");
3196  return;
3197  }
3198  ppathList = (ELLLIST *)pdbbase->pathPvt;
3199  if(!ppathList || !(pdbPathNode = (dbPathNode *)ellFirst(ppathList))) {
3200  printf("no path defined\n");
3201  return;
3202  }
3203  while(pdbPathNode) {
3204  printf("%s",pdbPathNode->directory);
3205  pdbPathNode = (dbPathNode *)ellNext(&pdbPathNode->node);
3206  if(pdbPathNode) printf("%s", OSI_PATH_LIST_SEPARATOR);
3207  }
3208  printf("\n");
3209  return;
3210 }
ELLNODE node
Definition: dbStaticPvt.h:82
void * pathPvt
Definition: dbBase.h:181
#define OSI_PATH_LIST_SEPARATOR
Definition: unixFileName.h:23
#define printf
Definition: epicsStdio.h:41
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
char * directory
Definition: dbStaticPvt.h:83
#define stderr
Definition: epicsStdio.h:32
List header type.
Definition: ellLib.h:56
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc void dbDumpRecord ( DBBASE pdbbase,
const char *  precordTypename,
int  level 
)

Definition at line 3212 of file dbStaticLib.c.

3214 {
3215  if(!pdbbase) {
3216  fprintf(stderr,"pdbbase not specified\n");
3217  return;
3218  }
3219  dbWriteRecordFP(pdbbase,stdout,precordTypename,level);
3220 }
#define stdout
Definition: epicsStdio.h:30
long dbWriteRecordFP(DBBASE *pdbbase, FILE *fp, const char *precordTypename, int level)
Definition: dbStaticLib.c:792
#define stderr
Definition: epicsStdio.h:32
epicsShareFunc void dbDumpRecordType ( DBBASE pdbbase,
const char *  recordTypeName 
)

Definition at line 3231 of file dbStaticLib.c.

3232 {
3233  dbRecordType *pdbRecordType;
3234  dbFldDes *pdbFldDes;
3235  int gotMatch;
3236  int i;
3237 
3238  if(!pdbbase) {
3239  fprintf(stderr,"pdbbase not specified\n");
3240  return;
3241  }
3242  for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
3243  pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
3244  if(recordTypeName) {
3245  gotMatch = (strcmp(recordTypeName,pdbRecordType->name)==0)
3246  ? TRUE : FALSE;
3247  }else {
3248  gotMatch=TRUE;
3249  }
3250  if(!gotMatch) continue;
3251  printf("name(%s) no_fields(%hd) no_prompt(%hd) no_links(%hd)\n",
3252  pdbRecordType->name,pdbRecordType->no_fields,
3253  pdbRecordType->no_prompt,pdbRecordType->no_links);
3254  printf("index name\tsortind sortname\n");
3255  for(i=0; i<pdbRecordType->no_fields; i++) {
3256  pdbFldDes = pdbRecordType->papFldDes[i];
3257  printf("%5d %s\t%7d %s\n",
3258  i,pdbFldDes->name,
3259  pdbRecordType->sortFldInd[i],pdbRecordType->papsortFldName[i]);
3260  }
3261  printf("link_ind ");
3262  for(i=0; i<pdbRecordType->no_links; i++)
3263  printf(" %hd",pdbRecordType->link_ind[i]);
3264  printf("\n");
3265  printf("indvalFlddes %d name %s\n",pdbRecordType->indvalFlddes,
3266  pdbRecordType->pvalFldDes->name);
3267  printf("rset * %p rec_size %d\n",
3268  (void *)pdbRecordType->prset,pdbRecordType->rec_size);
3269  if(recordTypeName) break;
3270  }
3271 }
rset * prset
Definition: dbBase.h:163
#define FALSE
Definition: dbDefs.h:32
int i
Definition: scan.c:967
ELLLIST recordTypeList
Definition: dbBase.h:172
#define printf
Definition: epicsStdio.h:41
short * link_ind
Definition: dbBase.h:156
ELLNODE node
Definition: dbBase.h:146
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
short indvalFlddes
Definition: dbBase.h:160
char ** papsortFldName
Definition: dbBase.h:157
short no_fields
Definition: dbBase.h:152
char * name
Definition: dbBase.h:151
short * sortFldInd
Definition: dbBase.h:158
short no_links
Definition: dbBase.h:154
short no_prompt
Definition: dbBase.h:153
#define TRUE
Definition: dbDefs.h:27
dbFldDes * pvalFldDes
Definition: dbBase.h:159
dbFldDes ** papFldDes
Definition: dbBase.h:161
#define stderr
Definition: epicsStdio.h:32
char * name
Definition: dbBase.h:81
int rec_size
Definition: dbBase.h:164
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc void dbDumpRegistrar ( DBBASE pdbbase)

Definition at line 3433 of file dbStaticLib.c.

3434 {
3435  if(!pdbbase) {
3436  fprintf(stderr,"pdbbase not specified\n");
3437  return;
3438  }
3439  dbWriteRegistrarFP(pdbbase,stdout);
3440 }
#define stdout
Definition: epicsStdio.h:30
long dbWriteRegistrarFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1106
#define stderr
Definition: epicsStdio.h:32
epicsShareFunc void dbDumpVariable ( DBBASE pdbbase)

Definition at line 3451 of file dbStaticLib.c.

3452 {
3453  if(!pdbbase) {
3454  fprintf(stderr,"pdbbase not specified\n");
3455  return;
3456  }
3457  dbWriteVariableFP(pdbbase,stdout);
3458 }
#define stdout
Definition: epicsStdio.h:30
long dbWriteVariableFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1136
#define stderr
Definition: epicsStdio.h:32
epicsShareFunc brkTable* dbFindBrkTable ( DBBASE pdbbase,
const char *  name 
)

Definition at line 2979 of file dbStaticLib.c.

2980 {
2981  GPHENTRY *pgph;
2982 
2983  pgph = gphFind(pdbbase->pgpHash,name,(void *)&pdbbase->bptList);
2984  if(!pgph) return(NULL);
2985  return((brkTable *)pgph->userPvt);
2986 }
#define NULL
Definition: catime.c:38
ELLLIST bptList
Definition: dbBase.h:178
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
struct gphPvt * pgpHash
Definition: dbBase.h:183
epicsShareFunc drvSup* dbFindDriver ( dbBase pdbbase,
const char *  name 
)

Definition at line 3133 of file dbStaticLib.c.

3133  {
3134  GPHENTRY *pgph = gphFind(pdbbase->pgpHash,name,&pdbbase->drvList);
3135  if (!pgph) return NULL;
3136  return (drvSup *) pgph->userPvt;
3137 }
ELLLIST drvList
Definition: dbBase.h:173
Definition: dbBase.h:32
#define NULL
Definition: catime.c:38
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
struct gphPvt * pgpHash
Definition: dbBase.h:183
epicsShareFunc long dbFindField ( DBENTRY pdbentry,
const char *  pfieldName 
)

Definition at line 1828 of file dbStaticLib.c.

1829 {
1830  long status = dbFindFieldPart(pdbentry, &pname);
1831  int ch;
1832 
1833  if (status == S_dbLib_fieldNotFound)
1834  return dbGetRecordAttribute(pdbentry, pname);
1835  if (status) return status;
1836 
1837  ch = *pname;
1838  if (ch == 0 || isspace(ch)) return 0;
1839  return S_dbLib_recNotFound;
1840 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
pvd::Status status
long dbFindFieldPart(DBENTRY *pdbentry, const char **ppname)
Definition: dbStaticLib.c:1762
const std::string pname
#define S_dbLib_fieldNotFound
Definition: dbStaticLib.h:240
long dbGetRecordAttribute(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1311
epicsShareFunc long dbFindFieldPart ( DBENTRY pdbentry,
const char **  ppname 
)

Definition at line 1762 of file dbStaticLib.c.

1763 {
1764  dbRecordType *precordType = pdbentry->precordType;
1765  dbRecordNode *precnode = pdbentry->precnode;
1766  const char *pname = *ppname;
1767  short top, bottom, test;
1768  char **papsortFldName;
1769  short *sortFldInd;
1770  int ch;
1771  size_t nameLen;
1772 
1773  if (!precordType) return S_dbLib_recordTypeNotFound;
1774  if (!precnode) return S_dbLib_recNotFound;
1775  papsortFldName = precordType->papsortFldName;
1776  sortFldInd = precordType->sortFldInd;
1777 
1778  /* Measure field name length; name is a valid C identifier */
1779  nameLen = 0;
1780  if ((ch = *pname) &&
1781  (ch == '_' || isalpha(ch))) {
1782  while ((ch = pname[++nameLen]))
1783  if (!(ch == '_' || isalnum(ch))) break;
1784  }
1785 
1786  /* Handle absent field name */
1787  if (nameLen == 0) {
1788  dbFldDes *pflddes = precordType->pvalFldDes;
1789 
1790  if (!pflddes)
1792  pdbentry->pflddes = pflddes;
1793  pdbentry->indfield = precordType->indvalFlddes;
1794  *ppname = &pname[nameLen];
1795  return dbGetFieldAddress(pdbentry);
1796  }
1797 
1798  /* binary search through ordered field names */
1799  top = precordType->no_fields - 1;
1800  bottom = 0;
1801  test = (top + bottom) / 2;
1802  while (1) {
1803  int compare = strncmp(papsortFldName[test], pname, nameLen);
1804  if (compare == 0)
1805  compare = (int) (strlen(papsortFldName[test]) - nameLen);
1806  if (compare == 0) {
1807  dbFldDes *pflddes = precordType->papFldDes[sortFldInd[test]];
1808 
1809  if (!pflddes)
1811  pdbentry->pflddes = pflddes;
1812  pdbentry->indfield = sortFldInd[test];
1813  *ppname = &pname[nameLen];
1814  return dbGetFieldAddress(pdbentry);
1815  } else if (compare > 0) {
1816  top = test - 1;
1817  if (top < bottom) break;
1818  test = (top + bottom) / 2;
1819  } else {
1820  bottom = test + 1;
1821  if (top < bottom) break;
1822  test = (top + bottom) / 2;
1823  }
1824  }
1825  return S_dbLib_fieldNotFound;
1826 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
dbRecordType * precordType
Definition: dbStaticLib.h:35
dbFldDes * pflddes
Definition: dbStaticLib.h:36
short indfield
Definition: dbStaticLib.h:41
short indvalFlddes
Definition: dbBase.h:160
dbRecordNode * precnode
Definition: dbStaticLib.h:37
char ** papsortFldName
Definition: dbBase.h:157
bool compare(const Field &a, const Field &b)
Definition: Compare.cpp:26
short no_fields
Definition: dbBase.h:152
short * sortFldInd
Definition: dbBase.h:158
long dbGetFieldAddress(DBENTRY *pdbentry)
Definition: dbStaticRun.c:187
dbFldDes * pvalFldDes
Definition: dbBase.h:159
dbFldDes ** papFldDes
Definition: dbBase.h:161
const std::string pname
#define S_dbLib_fieldNotFound
Definition: dbStaticLib.h:240
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc int dbFindFieldType ( const char *  type)

Definition at line 3000 of file dbStaticLib.c.

3001 {
3002  int i;
3003 
3004  for (i = 0; i < DBF_NTYPES; i++) {
3005  if (strcmp(type, pamapdbfType[i].strvalue) == 0) {
3006  return pamapdbfType[i].value;
3007  }
3008  }
3009  return -1;
3010 }
int i
Definition: scan.c:967
pvd::StructureConstPtr type
#define DBF_NTYPES
Definition: dbFldTypes.h:44
dbfType value
Definition: dbFldTypes.h:48
epicsShareExtern mapdbfType pamapdbfType[]
Definition: dbFldTypes.h:51
epicsShareFunc long dbFindInfo ( DBENTRY pdbentry,
const char *  name 
)

Definition at line 2867 of file dbStaticLib.c.

2868 {
2869  dbRecordNode *precnode = pdbentry->precnode;
2870  dbInfoNode *pinfo;
2871 
2872  pdbentry->pinfonode = NULL;
2873  if (!precnode) return(S_dbLib_recNotFound);
2874 
2875  pinfo = (dbInfoNode *)ellFirst(&precnode->infoList);
2876  while (pinfo) {
2877  if (!strcmp(pinfo->name, name)) {
2878  pdbentry->pinfonode = pinfo;
2879  return (0);
2880  }
2881  pinfo = (dbInfoNode *)ellNext(&pinfo->node);
2882  }
2883  return (S_dbLib_infoNotFound);
2884 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
ELLLIST infoList
Definition: dbBase.h:118
ELLNODE node
Definition: dbBase.h:104
#define NULL
Definition: catime.c:38
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
dbRecordNode * precnode
Definition: dbStaticLib.h:37
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_infoNotFound
Definition: dbStaticLib.h:249
char * name
Definition: dbBase.h:105
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc linkSup* dbFindLinkSup ( dbBase pdbbase,
const char *  name 
)

Definition at line 3158 of file dbStaticLib.c.

3158  {
3159  GPHENTRY *pgph = gphFind(pdbbase->pgpHash,name,&pdbbase->linkList);
3160  if (!pgph) return NULL;
3161  return (linkSup *) pgph->userPvt;
3162 }
ELLLIST linkList
Definition: dbBase.h:174
#define NULL
Definition: catime.c:38
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
Definition: dbBase.h:48
struct gphPvt * pgpHash
Definition: dbBase.h:183
epicsShareFunc dbMenu* dbFindMenu ( DBBASE pdbbase,
const char *  name 
)

Definition at line 3012 of file dbStaticLib.c.

3013 {
3014  GPHENTRY *pgph;
3015 
3016  pgph = gphFind(pdbbase->pgpHash,name,(void *)&pdbbase->menuList);
3017  if(!pgph) return(NULL);
3018  return((dbMenu *)pgph->userPvt);
3019 }
#define NULL
Definition: catime.c:38
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
ELLLIST menuList
Definition: dbBase.h:171
Definition: dbBase.h:24
struct gphPvt * pgpHash
Definition: dbBase.h:183
epicsShareFunc long dbFindRecord ( DBENTRY pdbentry,
const char *  pname 
)

Definition at line 1559 of file dbStaticLib.c.

1560 {
1561  long status = dbFindRecordPart(pdbentry, &pname);
1562 
1563  if (status) return status;
1564  if (*pname == '.')
1565  return dbFindField(pdbentry, ++pname);
1566  return 0;
1567 }
pvd::Status status
long dbFindRecordPart(DBENTRY *pdbentry, const char **ppname)
Definition: dbStaticLib.c:1533
long dbFindField(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1828
const std::string pname
epicsShareFunc long dbFindRecordPart ( DBENTRY pdbentry,
const char **  ppname 
)

Definition at line 1533 of file dbStaticLib.c.

1534 {
1535  dbBase *pdbbase = pdbentry->pdbbase;
1536  const char *pname = *ppname;
1537  const char *pfn;
1538  size_t lenName;
1539  PVDENTRY *ppvdNode;
1540 
1541  zeroDbentry(pdbentry);
1542  pfn = strchr(pname, '.');
1543  if (pfn) {
1544  lenName = (size_t) (pfn - pname);
1545  } else {
1546  lenName = strlen(pname);
1547  }
1548 
1549  ppvdNode = dbPvdFind(pdbbase, pname, lenName);
1550  if (!ppvdNode)
1551  return S_dbLib_recNotFound;
1552 
1553  pdbentry->precnode = ppvdNode->precnode;
1554  pdbentry->precordType = ppvdNode->precordType;
1555  *ppname = pname + lenName;
1556  return 0;
1557 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
dbRecordType * precordType
Definition: dbStaticLib.h:35
DBBASE * pdbbase
Definition: dbStaticLib.h:34
dbRecordNode * precnode
Definition: dbStaticLib.h:37
PVDENTRY * dbPvdFind(dbBase *pdbbase, const char *name, size_t lenName)
Definition: dbPvdLib.c:82
dbRecordNode * precnode
Definition: dbStaticPvt.h:98
Definition: dbBase.h:170
dbRecordType * precordType
Definition: dbStaticPvt.h:97
const std::string pname
epicsShareFunc long dbFindRecordType ( DBENTRY pdbentry,
const char *  recordTypename 
)

Definition at line 1186 of file dbStaticLib.c.

1187 {
1188  dbBase *pdbbase = pdbentry->pdbbase;
1189  GPHENTRY *phash;
1190 
1191  zeroDbentry(pdbentry);
1192  phash = gphFind(pdbbase->pgpHash,recordType,&pdbbase->recordTypeList);
1193  if(!phash) return(S_dbLib_recordTypeNotFound);
1194  pdbentry->precordType = phash->userPvt;
1195  return(0);
1196 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
ELLLIST recordTypeList
Definition: dbBase.h:172
DBBASE * pdbbase
Definition: dbStaticLib.h:34
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
Definition: dbBase.h:170
struct gphPvt * pgpHash
Definition: dbBase.h:183
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc void dbFinishEntry ( DBENTRY pdbentry)

Definition at line 632 of file dbStaticLib.c.

633 {
634  if(pdbentry->message) {
635  free((void *)pdbentry->message);
636  pdbentry->message = NULL;
637  }
638 }
#define NULL
Definition: catime.c:38
char * message
Definition: dbStaticLib.h:40
epicsShareFunc long dbFirstField ( DBENTRY pdbentry,
int  dctonly 
)

Definition at line 1316 of file dbStaticLib.c.

1317 {
1318 
1319  pdbentry->indfield = -1;
1320  return(dbNextField(pdbentry,dctonly));
1321 }
short indfield
Definition: dbStaticLib.h:41
long dbNextField(DBENTRY *pdbentry, int dctonly)
Definition: dbStaticLib.c:1323
epicsShareFunc long dbFirstInfo ( DBENTRY pdbentry)

Definition at line 2816 of file dbStaticLib.c.

2817 {
2818  dbRecordNode *precnode = pdbentry->precnode;
2819 
2820  pdbentry->pinfonode = NULL;
2821  if (!precnode) return (S_dbLib_recNotFound);
2822 
2823  pdbentry->pinfonode = (dbInfoNode *)ellFirst(&precnode->infoList);
2824  return (pdbentry->pinfonode ? 0 : S_dbLib_infoNotFound);
2825 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
ELLLIST infoList
Definition: dbBase.h:118
#define NULL
Definition: catime.c:38
dbRecordNode * precnode
Definition: dbStaticLib.h:37
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_infoNotFound
Definition: dbStaticLib.h:249
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbFirstRecord ( DBENTRY pdbentry)

Definition at line 1569 of file dbStaticLib.c.

1570 {
1571  dbRecordType *precordType = pdbentry->precordType;
1572  dbRecordNode *precnode;
1573 
1574  zeroDbentry(pdbentry);
1575  if(!precordType) return(S_dbLib_recordTypeNotFound);
1576  pdbentry->precordType = precordType;
1577  precnode = (dbRecordNode *)ellFirst(&precordType->recList);
1578  if(!precnode) return(S_dbLib_recNotFound);
1579  pdbentry->precnode = precnode;
1580  return(0);
1581 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
dbRecordType * precordType
Definition: dbStaticLib.h:35
dbRecordNode * precnode
Definition: dbStaticLib.h:37
ELLLIST recList
Definition: dbBase.h:148
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbFirstRecordType ( DBENTRY pdbentry)

Definition at line 1198 of file dbStaticLib.c.

1199 {
1200  dbRecordType *precordType;
1201 
1202  zeroDbentry(pdbentry);
1203  precordType = (dbRecordType *)ellFirst(&pdbentry->pdbbase->recordTypeList);
1204  if(!precordType) return(S_dbLib_recordTypeNotFound);
1205  pdbentry->precordType = precordType;
1206  return(0);
1207 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
ELLLIST recordTypeList
Definition: dbBase.h:172
DBBASE * pdbbase
Definition: dbStaticLib.h:34
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc int dbFollowAlias ( DBENTRY pdbentry)

Definition at line 1691 of file dbStaticLib.c.

1692 {
1693  if(!pdbentry->precnode)
1694  return S_dbLib_recNotFound;
1695  if(pdbentry->precnode->aliasedRecnode)
1696  pdbentry->precnode = pdbentry->precnode->aliasedRecnode;
1697  return 0;
1698 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
struct dbRecordNode * aliasedRecnode
Definition: dbBase.h:120
dbRecordNode * precnode
Definition: dbStaticLib.h:37
epicsShareFunc int dbFoundField ( DBENTRY pdbentry)

Definition at line 1842 of file dbStaticLib.c.

1843 { return((pdbentry->pfield) ? TRUE : FALSE); }
#define FALSE
Definition: dbDefs.h:32
void * pfield
Definition: dbStaticLib.h:39
#define TRUE
Definition: dbDefs.h:27
epicsShareFunc void dbFreeBase ( DBBASE pdbbase)

Definition at line 419 of file dbStaticLib.c.

420 {
421  dbMenu *pdbMenu;
422  dbMenu *pdbMenuNext;
423  dbRecordType *pdbRecordType;
424  dbRecordType *pdbRecordTypeNext;
425  dbFldDes *pdbFldDes;
426  dbRecordAttribute *pAttribute;
427  dbRecordAttribute *pAttributeNext;
428  devSup *pdevSup;
429  devSup *pdevSupNext;
430  dbText *ptext;
431  dbText *ptextNext;
432  dbVariableDef *pvar;
433  dbVariableDef *pvarNext;
434  drvSup *pdrvSup;
435  drvSup *pdrvSupNext;
436  linkSup *plinkSup;
437  brkTable *pbrkTable;
438  brkTable *pbrkTableNext;
439  chFilterPlugin *pfilt;
440  chFilterPlugin *pfiltNext;
441  dbGuiGroup *pguiGroup;
442  dbGuiGroup *pguiGroupNext;
443  int i;
444  DBENTRY dbentry;
445  long status;
446 
447  dbInitEntry(pdbbase,&dbentry);
448  status = dbFirstRecordType(&dbentry);
449  while(!status) {
450  /* dbDeleteRecord() will remove alias or real record node.
451  * For real record nodes, also removes the nodes of all aliases.
452  * This complicates safe traversal, so we re-start iteration
453  * from the first record after each call.
454  */
455  while((status = dbFirstRecord(&dbentry))==0) {
456  dbDeleteRecord(&dbentry);
457  }
458  assert(status==S_dbLib_recNotFound);
459  status = dbNextRecordType(&dbentry);
460  }
461  dbFinishEntry(&dbentry);
462  pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
463  while(pdbRecordType) {
464  for(i=0; i<pdbRecordType->no_fields; i++) {
465  pdbFldDes = pdbRecordType->papFldDes[i];
466  free((void *)pdbFldDes->prompt);
467  free((void *)pdbFldDes->name);
468  free((void *)pdbFldDes->extra);
469  free((void *)pdbFldDes->initial);
470  if(pdbFldDes->field_type==DBF_DEVICE && pdbFldDes->ftPvt) {
471  dbDeviceMenu *pdbDeviceMenu;
472 
473  pdbDeviceMenu = (dbDeviceMenu *)pdbFldDes->ftPvt;
474  free((void *)pdbDeviceMenu->papChoice);
475  free((void *)pdbDeviceMenu);
476  pdbFldDes->ftPvt=0;
477  }
478  free((void *)pdbFldDes);
479  }
480  pdevSup = (devSup *)ellFirst(&pdbRecordType->devList);
481  while(pdevSup) {
482  pdevSupNext = (devSup *)ellNext(&pdevSup->node);
483  ellDelete(&pdbRecordType->devList,&pdevSup->node);
484  free((void *)pdevSup->name);
485  free((void *)pdevSup->choice);
486  free((void *)pdevSup);
487  pdevSup = pdevSupNext;
488  }
489  ptext = (dbText *)ellFirst(&pdbRecordType->cdefList);
490  while(ptext) {
491  ptextNext = (dbText *)ellNext(&ptext->node);
492  ellDelete(&pdbRecordType->cdefList,&ptext->node);
493  free((void *)ptext->text);
494  free((void *)ptext);
495  ptext = ptextNext;
496  }
497  pAttribute =
498  (dbRecordAttribute *)ellFirst(&pdbRecordType->attributeList);
499  while(pAttribute) {
500  pAttributeNext = (dbRecordAttribute *)ellNext(&pAttribute->node);
501  ellDelete(&pdbRecordType->attributeList,&pAttribute->node);
502  free((void *)pAttribute->name);
503  free((void *)pAttribute->pdbFldDes);
504  free(pAttribute);
505  pAttribute = pAttributeNext;
506  }
507  pdbRecordTypeNext = (dbRecordType *)ellNext(&pdbRecordType->node);
508  gphDelete(pdbbase->pgpHash,pdbRecordType->name,&pdbbase->recordTypeList);
509  ellDelete(&pdbbase->recordTypeList,&pdbRecordType->node);
510  free((void *)pdbRecordType->name);
511  free((void *)pdbRecordType->link_ind);
512  free((void *)pdbRecordType->papsortFldName);
513  free((void *)pdbRecordType->sortFldInd);
514  free((void *)pdbRecordType->papFldDes);
515  free((void *)pdbRecordType);
516  pdbRecordType = pdbRecordTypeNext;
517  }
518  pdbMenu = (dbMenu *)ellFirst(&pdbbase->menuList);
519  while(pdbMenu) {
520  pdbMenuNext = (dbMenu *)ellNext(&pdbMenu->node);
521  gphDelete(pdbbase->pgpHash,pdbMenu->name,&pdbbase->menuList);
522  ellDelete(&pdbbase->menuList,&pdbMenu->node);
523  for(i=0; i< pdbMenu->nChoice; i++) {
524  free((void *)pdbMenu->papChoiceName[i]);
525  free((void *)pdbMenu->papChoiceValue[i]);
526  }
527  free((void *)pdbMenu->papChoiceName);
528  free((void *)pdbMenu->papChoiceValue);
529  free((void *)pdbMenu ->name);
530  free((void *)pdbMenu);
531  pdbMenu = pdbMenuNext;
532  }
533  pdrvSup = (drvSup *)ellFirst(&pdbbase->drvList);
534  while(pdrvSup) {
535  pdrvSupNext = (drvSup *)ellNext(&pdrvSup->node);
536  ellDelete(&pdbbase->drvList,&pdrvSup->node);
537  free((void *)pdrvSup->name);
538  free((void *)pdrvSup);
539  pdrvSup = pdrvSupNext;
540  }
541  while ((plinkSup = (linkSup *) ellGet(&pdbbase->linkList))) {
542  free(plinkSup->jlif_name);
543  free(plinkSup->name);
544  free(plinkSup);
545  }
546  ptext = (dbText *)ellFirst(&pdbbase->registrarList);
547  while(ptext) {
548  ptextNext = (dbText *)ellNext(&ptext->node);
549  ellDelete(&pdbbase->registrarList,&ptext->node);
550  free((void *)ptext->text);
551  free((void *)ptext);
552  ptext = ptextNext;
553  }
554  ptext = (dbText *)ellFirst(&pdbbase->functionList);
555  while(ptext) {
556  ptextNext = (dbText *)ellNext(&ptext->node);
557  ellDelete(&pdbbase->functionList,&ptext->node);
558  free((void *)ptext->text);
559  free((void *)ptext);
560  ptext = ptextNext;
561  }
562  pvar = (dbVariableDef *)ellFirst(&pdbbase->variableList);
563  while(pvar) {
564  pvarNext = (dbVariableDef *)ellNext(&pvar->node);
565  ellDelete(&pdbbase->variableList,&pvar->node);
566  free((void *)pvar->name);
567  free((void *)pvar->type);
568  free((void *)pvar);
569  pvar = pvarNext;
570  }
571  pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList);
572  while(pbrkTable) {
573  pbrkTableNext = (brkTable *)ellNext(&pbrkTable->node);
574  gphDelete(pdbbase->pgpHash,pbrkTable->name,&pdbbase->bptList);
575  ellDelete(&pdbbase->bptList,&pbrkTable->node);
576  free(pbrkTable->name);
577  free((void *)pbrkTable->paBrkInt);
578  free((void *)pbrkTable);
579  pbrkTable = pbrkTableNext;
580  }
581  pfilt = (chFilterPlugin *)ellFirst(&pdbbase->filterList);
582  while(pfilt) {
583  pfiltNext = (chFilterPlugin *)ellNext(&pfilt->node);
584  free((char*)pfilt->name);
585  if(pfilt->fif->priv_free)
586  (*pfilt->fif->priv_free)(pfilt->puser);
587  free(pfilt);
588  pfilt = pfiltNext;
589  }
590  pguiGroup = (dbGuiGroup *)ellFirst(&pdbbase->guiGroupList);
591  while (pguiGroup) {
592  pguiGroupNext = (dbGuiGroup *)ellNext(&pguiGroup->node);
593  gphDelete(pdbbase->pgpHash, pguiGroup->name, &pdbbase->guiGroupList);
594  ellDelete(&pdbbase->guiGroupList, &pguiGroup->node);
595  free(pguiGroup->name);
596  free((void *)pguiGroup);
597  pguiGroup = pguiGroupNext;
598  }
599  gphFreeMem(pdbbase->pgpHash);
600  dbPvdFreeMem(pdbbase);
601  dbFreePath(pdbbase);
602  free((void *)pdbbase);
603  pdbbase = NULL;
604  return;
605 }
ELLLIST cdefList
Definition: dbBase.h:150
char ** papChoiceName
Definition: dbBase.h:28
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
char ** papChoice
Definition: dbBase.h:57
char * name
Definition: dbBase.h:140
ELLNODE node
Definition: dbBase.h:134
long dbFirstRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1198
ELLLIST drvList
Definition: dbBase.h:173
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
char * choice
Definition: dbBase.h:41
char * jlif_name
Definition: dbBase.h:51
Definition: dbBase.h:32
ELLLIST linkList
Definition: dbBase.h:174
pvd::Status status
int i
Definition: scan.c:967
ELLLIST recordTypeList
Definition: dbBase.h:172
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
ELLNODE * ellGet(ELLLIST *pList)
Deletes and returns the first node from a list.
Definition: ellLib.c:147
short * link_ind
Definition: dbBase.h:156
void dbPvdFreeMem(dbBase *pdbbase)
Definition: dbPvdLib.c:166
void dbFreePath(DBBASE *pdbbase)
Definition: dbStaticLib.c:140
ELLNODE node
Definition: dbStaticPvt.h:88
#define NULL
Definition: catime.c:38
dbFldDes * pdbFldDes
Definition: dbBase.h:129
ELLLIST functionList
Definition: dbBase.h:176
long dbNextRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1209
ELLNODE node
Definition: dbBase.h:127
ELLLIST bptList
Definition: dbBase.h:178
char * name
Definition: dbBase.h:26
char * name
Definition: dbBase.h:40
ELLNODE node
Definition: dbBase.h:146
ELLNODE node
Definition: dbBase.h:39
LIBCOM_API void epicsStdCall gphDelete(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:142
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
ELLNODE node
Definition: dbBase.h:73
ELLNODE node
Definition: dbBase.h:139
char ** papsortFldName
Definition: dbBase.h:157
char * text
Definition: dbBase.h:135
Definition: dbBase.h:48
char ** papChoiceValue
Definition: dbBase.h:29
long dbDeleteRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1480
ELLLIST devList
Definition: dbBase.h:149
short no_fields
Definition: dbBase.h:152
Definition: dbBase.h:38
ELLLIST guiGroupList
Definition: dbBase.h:180
LIBCOM_API void epicsStdCall gphFreeMem(struct gphPvt *pvt)
Definition: gpHashLib.c:176
char * name
Definition: dbStaticPvt.h:90
char * name
Definition: dbBase.h:151
short * sortFldInd
Definition: dbBase.h:158
ELLLIST menuList
Definition: dbBase.h:171
Definition: dbBase.h:24
ELLNODE node
Definition: dbBase.h:33
int nChoice
Definition: dbBase.h:27
void * ftPvt
Definition: dbBase.h:96
dbFldDes ** papFldDes
Definition: dbBase.h:161
long dbFirstRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1569
char * extra
Definition: dbBase.h:82
ELLLIST filterList
Definition: dbBase.h:179
struct brkInt * paBrkInt
Definition: dbBase.h:76
char * initial
Definition: dbBase.h:94
char * prompt
Definition: dbBase.h:80
char * name
Definition: dbBase.h:81
char * type
Definition: dbBase.h:141
ELLLIST registrarList
Definition: dbBase.h:175
ELLNODE node
Definition: dbBase.h:25
ELLLIST attributeList
Definition: dbBase.h:147
void ellDelete(ELLLIST *pList, ELLNODE *pNode)
Deletes a node from a list.
Definition: ellLib.c:75
Definition: dbBase.h:133
struct gphPvt * pgpHash
Definition: dbBase.h:183
dbfType field_type
Definition: dbBase.h:86
char * name
Definition: dbBase.h:34
char * name
Definition: dbBase.h:50
ELLLIST variableList
Definition: dbBase.h:177
char * name
Definition: dbBase.h:74
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc void dbFreeEntry ( DBENTRY pdbentry)

Definition at line 617 of file dbStaticLib.c.

618 {
619  if (!pdbentry)
620  return;
621  if (pdbentry->message)
622  free((void *)pdbentry->message);
623  dbmfFree(pdbentry);
624 }
void dbmfFree(void *mem)
Free the memory allocated by dbmfMalloc.
Definition: dbmf.c:175
char * message
Definition: dbStaticLib.h:40
epicsShareFunc long dbFreeRecords ( DBBASE pdbbase)

Definition at line 1510 of file dbStaticLib.c.

1511 {
1512  DBENTRY dbentry;
1513  dbRecordType *pdbRecordType;
1514  dbRecordNode *pdbRecordNode;
1515  dbRecordNode *pdbRecordNodeNext;
1516 
1517  dbInitEntry(pdbbase,&dbentry);
1518  pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
1519  while(pdbRecordType) {
1520  pdbRecordNode = (dbRecordNode *)ellFirst(&pdbRecordType->recList);
1521  while(pdbRecordNode) {
1522  pdbRecordNodeNext = (dbRecordNode *)ellNext(&pdbRecordNode->node);
1523  if(!dbFindRecord(&dbentry,pdbRecordNode->recordname))
1524  dbDeleteRecord(&dbentry);
1525  pdbRecordNode = pdbRecordNodeNext;
1526  }
1527  pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node);
1528  }
1529  dbFinishEntry(&dbentry);
1530  return(0);
1531 }
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
ELLLIST recordTypeList
Definition: dbBase.h:172
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
long dbFindRecord(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1559
ELLNODE node
Definition: dbBase.h:146
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
long dbDeleteRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1480
ELLNODE node
Definition: dbBase.h:115
ELLLIST recList
Definition: dbBase.h:148
char * recordname
Definition: dbBase.h:117
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbGetAttributePart ( DBENTRY pdbentry,
const char **  ppname 
)

Definition at line 1277 of file dbStaticLib.c.

1278 {
1279  dbRecordType *precordType = pdbentry->precordType;
1280  const char *pname = *ppname;
1281  dbRecordAttribute *pattribute;
1282 
1283  if (!precordType)
1285 
1286  pattribute = (dbRecordAttribute *)ellFirst(&precordType->attributeList);
1287  while (pattribute) {
1288  size_t nameLen = strlen(pattribute->name);
1289  int compare = strncmp(pattribute->name, pname, nameLen);
1290 
1291  if (compare == 0) {
1292  int ch = pname[nameLen];
1293 
1294  if (ch != '_' && !isalnum(ch)) {
1295  /* Any other character can't be in the attribute name */
1296  pdbentry->pflddes = pattribute->pdbFldDes;
1297  pdbentry->pfield = pattribute->value;
1298  *ppname = &pname[nameLen];
1299  return 0;
1300  }
1301  if (strlen(pname) > nameLen) {
1302  compare = -1;
1303  }
1304  }
1305  if (compare >= 0) break;
1306  pattribute = (dbRecordAttribute *)ellNext(&pattribute->node);
1307  }
1308  return S_dbLib_fieldNotFound;
1309 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
dbFldDes * pflddes
Definition: dbStaticLib.h:36
char value[MAX_STRING_SIZE]
Definition: dbBase.h:130
dbFldDes * pdbFldDes
Definition: dbBase.h:129
ELLNODE node
Definition: dbBase.h:127
void * pfield
Definition: dbStaticLib.h:39
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
bool compare(const Field &a, const Field &b)
Definition: Compare.cpp:26
const std::string pname
#define S_dbLib_fieldNotFound
Definition: dbStaticLib.h:240
ELLLIST attributeList
Definition: dbBase.h:147
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc char* dbGetDefault ( DBENTRY pdbentry)

Definition at line 1392 of file dbStaticLib.c.

1393 {
1394  dbFldDes *pflddes = pdbentry->pflddes;
1395 
1396  if(!pflddes) return(NULL);
1397  return(pflddes->initial);
1398 }
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
char * initial
Definition: dbBase.h:94
epicsShareFunc int dbGetFieldDbfType ( DBENTRY pdbentry)

Definition at line 1384 of file dbStaticLib.c.

1385 {
1386  dbFldDes *pflddes = pdbentry->pflddes;
1387 
1388  if(!pflddes) return(-1);
1389  return(pflddes->field_type);
1390 }
dbFldDes * pflddes
Definition: dbStaticLib.h:36
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc char* dbGetFieldName ( DBENTRY pdbentry)

Definition at line 1376 of file dbStaticLib.c.

1377 {
1378  dbFldDes *pflddes = pdbentry->pflddes;
1379 
1380  if(!pflddes) return(NULL);
1381  return(pflddes->name);
1382 }
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
char * name
Definition: dbBase.h:81
epicsShareFunc const char* dbGetFieldTypeString ( int  dbfType)

Definition at line 2988 of file dbStaticLib.c.

2989 {
2990  int i;
2991 
2992  for (i=0; i < DBF_NTYPES; i++) {
2993  if (pamapdbfType[i].value == dbfType) {
2994  return pamapdbfType[i].strvalue;
2995  }
2996  }
2997  return "BAD_DBF_TYPE";
2998 }
Definition: link.h:174
int i
Definition: scan.c:967
dbfType
Definition: dbFldTypes.h:24
#define DBF_NTYPES
Definition: dbFldTypes.h:44
epicsShareExtern mapdbfType pamapdbfType[]
Definition: dbFldTypes.h:51
char * strvalue
Definition: dbFldTypes.h:47
epicsShareFunc const char* dbGetInfo ( DBENTRY pdbentry,
const char *  name 
)

Definition at line 2942 of file dbStaticLib.c.

2943 {
2944  if (dbFindInfo(pdbentry, name)) return NULL;
2945  return dbGetInfoString(pdbentry);
2946 }
#define NULL
Definition: catime.c:38
const char * dbGetInfoString(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2908
long dbFindInfo(DBENTRY *pdbentry, const char *name)
Definition: dbStaticLib.c:2867
epicsShareFunc const char* dbGetInfoName ( DBENTRY pdbentry)

Definition at line 2901 of file dbStaticLib.c.

2902 {
2903  dbInfoNode *pinfo = pdbentry->pinfonode;
2904  if (!pinfo) return (NULL);
2905  return (pinfo->name);
2906 }
#define NULL
Definition: catime.c:38
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
char * name
Definition: dbBase.h:105
epicsShareFunc void* dbGetInfoPointer ( DBENTRY pdbentry)

Definition at line 2935 of file dbStaticLib.c.

2936 {
2937  dbInfoNode *pinfo = pdbentry->pinfonode;
2938  if (!pinfo) return (NULL);
2939  return (pinfo->pointer);
2940 }
#define NULL
Definition: catime.c:38
void * pointer
Definition: dbBase.h:107
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
epicsShareFunc const char* dbGetInfoString ( DBENTRY pdbentry)

Definition at line 2908 of file dbStaticLib.c.

2909 {
2910  dbInfoNode *pinfo = pdbentry->pinfonode;
2911  if (!pinfo) return (NULL);
2912  return (pinfo->string);
2913 }
#define NULL
Definition: catime.c:38
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
char * string
Definition: dbBase.h:106
epicsShareFunc long dbGetLinkField ( DBENTRY pdbentry,
int  index 
)

Definition at line 3172 of file dbStaticLib.c.

3173 {
3174  dbRecordType *precordType = pdbentry->precordType;
3175  dbFldDes *pflddes;
3176 
3177  if (!precordType)
3179 
3180  if (index < 0 || index >= precordType->no_links)
3181  return S_dbLib_badLink;
3182 
3183  pdbentry->indfield = precordType->link_ind[index];
3184  pdbentry->pflddes = pflddes = precordType->papFldDes[pdbentry->indfield];
3185  dbGetFieldAddress(pdbentry);
3186  return 0;
3187 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
dbFldDes * pflddes
Definition: dbStaticLib.h:36
short * link_ind
Definition: dbBase.h:156
#define S_dbLib_badLink
Definition: dbStaticLib.h:243
short indfield
Definition: dbStaticLib.h:41
short no_links
Definition: dbBase.h:154
long dbGetFieldAddress(DBENTRY *pdbentry)
Definition: dbStaticRun.c:187
dbFldDes ** papFldDes
Definition: dbBase.h:161
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc char** dbGetMenuChoices ( DBENTRY pdbentry)

Definition at line 3021 of file dbStaticLib.c.

3022 {
3023  dbFldDes *pflddes = pdbentry->pflddes;
3024 
3025  if(!pflddes) return(NULL);
3026  switch (pflddes->field_type) {
3027  case DBF_MENU: {
3028  dbMenu *pdbMenu = (dbMenu *)pflddes->ftPvt;
3029 
3030  if(!pdbMenu) return(NULL);
3031  return(pdbMenu->papChoiceValue);
3032  }
3033  case DBF_DEVICE: {
3034  dbDeviceMenu *pdbDeviceMenu;
3035 
3036  pdbDeviceMenu = dbGetDeviceMenu(pdbentry);
3037  if(!pdbDeviceMenu) return(NULL);
3038  return(pdbDeviceMenu->papChoice);
3039  }
3040  default:
3041  return(NULL);
3042  }
3043 }
dbDeviceMenu * dbGetDeviceMenu(DBENTRY *pdbentry)
Definition: dbStaticLib.c:336
char ** papChoice
Definition: dbBase.h:57
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
char ** papChoiceValue
Definition: dbBase.h:29
Definition: dbBase.h:24
void * ftPvt
Definition: dbBase.h:96
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc int dbGetMenuIndex ( DBENTRY pdbentry)

Definition at line 501 of file dbStaticRun.c.

502 {
503  dbFldDes *pflddes = pdbentry->pflddes;
504  void *pfield = pdbentry->pfield;
505 
506  if (!pflddes || !pfield)
507  return -1;
508 
509  switch (pflddes->field_type) {
510  case DBF_MENU:
511  case DBF_DEVICE:
512  return * (epicsEnum16 *) pfield;
513  default:
514  epicsPrintf("dbGetMenuIndex: Called for field type %d\n",
515  pflddes->field_type);
516  }
517  return -1;
518 }
dbFldDes * pflddes
Definition: dbStaticLib.h:36
void * pfield
Definition: dbStaticLib.h:39
#define epicsPrintf
Definition: errlog.h:51
epicsUInt16 epicsEnum16
Definition: epicsTypes.h:47
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc int dbGetMenuIndexFromString ( DBENTRY pdbentry,
const char *  choice 
)

Definition at line 3097 of file dbStaticLib.c.

3098 {
3099  dbFldDes *pflddes = pdbentry->pflddes;
3100  int ind;
3101  int nChoice = 0;
3102  char **papChoice = NULL;
3103 
3104  if(!pflddes) return(-1);
3105  switch (pflddes->field_type) {
3106  case DBF_MENU: {
3107  dbMenu *pdbMenu = (dbMenu *)pflddes->ftPvt;
3108 
3109  if(!pdbMenu) return(-1);
3110  papChoice = pdbMenu->papChoiceValue;
3111  nChoice = pdbMenu->nChoice;
3112  break;
3113  }
3114  case DBF_DEVICE: {
3115  dbDeviceMenu *pdbDeviceMenu;
3116 
3117  pdbDeviceMenu = dbGetDeviceMenu(pdbentry);
3118  if(!pdbDeviceMenu) return(-1);
3119  papChoice = pdbDeviceMenu->papChoice;
3120  nChoice = pdbDeviceMenu->nChoice;
3121  break;
3122  }
3123  default:
3124  return(-1);
3125  }
3126  if(nChoice<=0 || !papChoice) return(-1);
3127  for(ind=0; ind<nChoice; ind++) {
3128  if(strcmp(choice,papChoice[ind])==0) return(ind);
3129  }
3130  return (-1);
3131 }
dbDeviceMenu * dbGetDeviceMenu(DBENTRY *pdbentry)
Definition: dbStaticLib.c:336
char ** papChoice
Definition: dbBase.h:57
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
char ** papChoiceValue
Definition: dbBase.h:29
Definition: dbBase.h:24
int nChoice
Definition: dbBase.h:27
void * ftPvt
Definition: dbBase.h:96
int nChoice
Definition: dbBase.h:56
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc char* dbGetMenuStringFromIndex ( DBENTRY pdbentry,
int  index 
)

Definition at line 3070 of file dbStaticLib.c.

3071 {
3072  dbFldDes *pflddes = pdbentry->pflddes;
3073 
3074  if(!pflddes) return(NULL);
3075  switch (pflddes->field_type) {
3076  case DBF_MENU: {
3077  dbMenu *pdbMenu = (dbMenu *)pflddes->ftPvt;
3078 
3079  if(!pdbMenu) return(NULL);
3080  if(index<0 || index>=pdbMenu->nChoice) return(NULL);
3081  return(pdbMenu->papChoiceValue[index]);
3082  }
3083  case DBF_DEVICE: {
3084  dbDeviceMenu *pdbDeviceMenu;
3085 
3086  pdbDeviceMenu = dbGetDeviceMenu(pdbentry);
3087  if(!pdbDeviceMenu) return(NULL);
3088  if(index<0 || index>=pdbDeviceMenu->nChoice) return(NULL);
3089  return(pdbDeviceMenu->papChoice[index]);
3090  }
3091  default:
3092  break;
3093  }
3094  return (NULL);
3095 }
dbDeviceMenu * dbGetDeviceMenu(DBENTRY *pdbentry)
Definition: dbStaticLib.c:336
char ** papChoice
Definition: dbBase.h:57
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
char ** papChoiceValue
Definition: dbBase.h:29
Definition: dbBase.h:24
int nChoice
Definition: dbBase.h:27
void * ftPvt
Definition: dbBase.h:96
int nChoice
Definition: dbBase.h:56
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc int dbGetNAliases ( DBENTRY pdbentry)

Definition at line 1604 of file dbStaticLib.c.

1605 {
1606  dbRecordType *precordType = pdbentry->precordType;
1607 
1608  if(!precordType) return(0);
1609  return(precordType->no_aliases);
1610 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
short no_aliases
Definition: dbBase.h:155
epicsShareFunc int dbGetNFields ( DBENTRY pdbentry,
int  dctonly 
)

Definition at line 1359 of file dbStaticLib.c.

1360 {
1361  dbRecordType *precordType = pdbentry->precordType;
1362  dbFldDes *pflddes;
1363  int indfield,n;
1364 
1365  if(!precordType) return(S_dbLib_recordTypeNotFound);
1366  n = 0;
1367  for(indfield=0; indfield<precordType->no_fields; indfield++) {
1368  pflddes = precordType->papFldDes[indfield];
1369  if(dctonly && (pflddes->field_type==DBF_DEVICE)
1370  && (ellCount(&precordType->devList)==0) ) continue;
1371  if(!dctonly || pflddes->promptgroup) n++;
1372  }
1373  return(n);
1374 }
short promptgroup
Definition: dbBase.h:91
#define ellCount(PLIST)
Report the number of nodes in a list.
Definition: ellLib.h:84
dbRecordType * precordType
Definition: dbStaticLib.h:35
ELLLIST devList
Definition: dbBase.h:149
short no_fields
Definition: dbBase.h:152
dbFldDes ** papFldDes
Definition: dbBase.h:161
dbfType field_type
Definition: dbBase.h:86
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc int dbGetNLinks ( DBENTRY pdbentry)

Definition at line 3164 of file dbStaticLib.c.

3165 {
3166  dbRecordType *precordType = pdbentry->precordType;
3167 
3168  if(!precordType) return(S_dbLib_recordTypeNotFound);
3169  return((int)precordType->no_links);
3170 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
short no_links
Definition: dbBase.h:154
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc int dbGetNMenuChoices ( DBENTRY pdbentry)

Definition at line 3045 of file dbStaticLib.c.

3046 {
3047  dbFldDes *pflddes = pdbentry->pflddes;
3048 
3049  if(!pflddes) return(-1);
3050  switch (pflddes->field_type) {
3051  case DBF_MENU: {
3052  dbMenu *pdbMenu = (dbMenu *)pflddes->ftPvt;
3053 
3054  if(!pdbMenu) return(0);
3055  return(pdbMenu->nChoice);
3056  }
3057  case DBF_DEVICE: {
3058  dbDeviceMenu *pdbDeviceMenu;
3059 
3060  pdbDeviceMenu = dbGetDeviceMenu(pdbentry);
3061  if(!pdbDeviceMenu) return(0);
3062  return(pdbDeviceMenu->nChoice);
3063  }
3064  default:
3065  break;
3066  }
3067  return (-1);
3068 }
dbDeviceMenu * dbGetDeviceMenu(DBENTRY *pdbentry)
Definition: dbStaticLib.c:336
dbFldDes * pflddes
Definition: dbStaticLib.h:36
Definition: dbBase.h:24
int nChoice
Definition: dbBase.h:27
void * ftPvt
Definition: dbBase.h:96
int nChoice
Definition: dbBase.h:56
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc int dbGetNRecords ( DBENTRY pdbentry)

Definition at line 1596 of file dbStaticLib.c.

1597 {
1598  dbRecordType *precordType = pdbentry->precordType;
1599 
1600  if(!precordType) return(0);
1601  return(ellCount(&precordType->recList));
1602 }
#define ellCount(PLIST)
Report the number of nodes in a list.
Definition: ellLib.h:84
dbRecordType * precordType
Definition: dbStaticLib.h:35
ELLLIST recList
Definition: dbBase.h:148
epicsShareFunc int dbGetNRecordTypes ( DBENTRY pdbentry)

Definition at line 1225 of file dbStaticLib.c.

1226 {
1227  return(ellCount(&pdbentry->pdbbase->recordTypeList));
1228 }
#define ellCount(PLIST)
Report the number of nodes in a list.
Definition: ellLib.h:84
ELLLIST recordTypeList
Definition: dbBase.h:172
DBBASE * pdbbase
Definition: dbStaticLib.h:34
epicsShareFunc char* dbGetPrompt ( DBENTRY pdbentry)

Definition at line 1400 of file dbStaticLib.c.

1401 {
1402  dbFldDes *pflddes = pdbentry->pflddes;
1403 
1404  if(!pflddes) return(NULL);
1405  return(&pflddes->prompt[0]);
1406 }
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
char * prompt
Definition: dbBase.h:80
epicsShareFunc int dbGetPromptGroup ( DBENTRY pdbentry)

Definition at line 1408 of file dbStaticLib.c.

1409 {
1410  dbFldDes *pflddes = pdbentry->pflddes;
1411 
1412  if(!pflddes) return(0);
1413  return(pflddes->promptgroup);
1414 }
short promptgroup
Definition: dbBase.h:91
dbFldDes * pflddes
Definition: dbStaticLib.h:36
epicsShareFunc short dbGetPromptGroupKeyFromName ( DBBASE pdbbase,
const char *  name 
)

Definition at line 765 of file dbStaticLib.c.

766 {
767  GPHENTRY *pgphentry;
768 
769  if (!pdbbase) return 0;
770  pgphentry = gphFind(pdbbase->pgpHash, name, &pdbbase->guiGroupList);
771  if (!pgphentry) {
772  return 0;
773  } else {
774  return ((dbGuiGroup*)pgphentry->userPvt)->key;
775  }
776 }
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
ELLLIST guiGroupList
Definition: dbBase.h:180
struct gphPvt * pgpHash
Definition: dbBase.h:183
epicsShareFunc char* dbGetPromptGroupNameFromKey ( DBBASE pdbbase,
const short  key 
)

Definition at line 753 of file dbStaticLib.c.

754 {
755  dbGuiGroup *pdbGuiGroup;
756 
757  if (!pdbbase) return NULL;
758  for (pdbGuiGroup = (dbGuiGroup *)ellFirst(&pdbbase->guiGroupList);
759  pdbGuiGroup; pdbGuiGroup = (dbGuiGroup *)ellNext(&pdbGuiGroup->node)) {
760  if (pdbGuiGroup->key == key) return pdbGuiGroup->name;
761  }
762  return NULL;
763 }
short key
Definition: dbStaticPvt.h:89
ELLNODE node
Definition: dbStaticPvt.h:88
#define NULL
Definition: catime.c:38
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
ELLLIST guiGroupList
Definition: dbBase.h:180
char * name
Definition: dbStaticPvt.h:90
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbGetRecordAttribute ( DBENTRY pdbentry,
const char *  name 
)

Definition at line 1311 of file dbStaticLib.c.

1312 {
1313  return dbGetAttributePart(pdbentry, &pname);
1314 }
long dbGetAttributePart(DBENTRY *pdbentry, const char **ppname)
Definition: dbStaticLib.c:1277
const std::string pname
epicsShareFunc char* dbGetRecordName ( DBENTRY pdbentry)

Definition at line 1612 of file dbStaticLib.c.

1613 {
1614  dbRecordType *pdbRecordType = pdbentry->precordType;
1615  dbRecordNode *precnode = pdbentry->precnode;
1616 
1617  if(!pdbRecordType) return NULL;
1618  if(!precnode) return NULL;
1619  return precnode->recordname;
1620 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
#define NULL
Definition: catime.c:38
dbRecordNode * precnode
Definition: dbStaticLib.h:37
char * recordname
Definition: dbBase.h:117
epicsShareFunc char* dbGetRecordTypeName ( DBENTRY pdbentry)

Definition at line 1220 of file dbStaticLib.c.

1221 {
1222  return(pdbentry->precordType->name);
1223 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
char * name
Definition: dbBase.h:151
epicsShareFunc char* dbGetRelatedField ( DBENTRY pdbentry)

Definition at line 3139 of file dbStaticLib.c.

3140 {
3141  DBENTRY dbEntry;
3142  DBENTRY *pdbentry= &dbEntry;
3143  dbFldDes *pflddes;
3144  char *rtnval = NULL;
3145  long status;
3146 
3147  pflddes = psave->pflddes;
3148  if(pflddes->field_type !=DBF_DEVICE) return(NULL);
3149  dbCopyEntryContents(psave,pdbentry);
3150  pflddes = pdbentry->pflddes;
3151  status = dbFindField(pdbentry,"INP");
3152  if(status) status = dbFindField(pdbentry,"OUT");
3153  if(!status) rtnval = pdbentry->pflddes->name;
3154  dbFinishEntry(pdbentry);
3155  return(rtnval);
3156 }
pvd::Status status
dbFldDes * pflddes
Definition: dbStaticLib.h:36
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
#define NULL
Definition: catime.c:38
void dbCopyEntryContents(DBENTRY *pfrom, DBENTRY *pto)
Definition: dbStaticLib.c:650
long dbFindField(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1828
char * name
Definition: dbBase.h:81
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc char* dbGetString ( DBENTRY pdbentry)

Definition at line 1845 of file dbStaticLib.c.

1846 {
1847  dbFldDes *pflddes = pdbentry->pflddes;
1848  void *pfield = pdbentry->pfield;
1849  DBLINK *plink;
1850 
1851  if (!pflddes) {
1852  dbMsgCpy(pdbentry, "fldDes not found");
1853  return pdbentry->message;
1854  }
1855  switch (pflddes->field_type) {
1856  case DBF_STRING:
1857  case DBF_INLINK:
1858  case DBF_OUTLINK:
1859  case DBF_FWDLINK:
1860  if (!pfield) {
1861  dbMsgCpy(pdbentry, "Field not allocated (NULL)");
1862  return pdbentry->message;
1863  }
1864  break;
1865  default:
1866  break;
1867  }
1868 
1869  switch (pflddes->field_type) {
1870  case DBF_STRING:
1871  /* Protect against a missing nil-terminator */
1872  dbMsgNCpy(pdbentry, (char *)pfield, pflddes->size);
1873  break;
1874  case DBF_CHAR:
1875  case DBF_UCHAR:
1876  case DBF_SHORT:
1877  case DBF_USHORT:
1878  case DBF_ENUM:
1879  case DBF_LONG:
1880  case DBF_ULONG:
1881  case DBF_INT64:
1882  case DBF_UINT64:
1883  case DBF_FLOAT:
1884  case DBF_DOUBLE:
1885  case DBF_MENU:
1886  case DBF_DEVICE:
1887  return(dbGetStringNum(pdbentry));
1888  case DBF_INLINK:
1889  case DBF_OUTLINK:
1890  plink = (DBLINK *)pfield;
1891  switch(plink->type) {
1892  case CONSTANT:
1893  if (plink->value.constantStr) {
1894  dbMsgCpy(pdbentry, plink->value.constantStr);
1895  } else if (plink->text) {
1896  dbMsgCpy(pdbentry, plink->text);
1897  } else {
1898  dbMsgCpy(pdbentry, "");
1899  }
1900  break;
1901  case MACRO_LINK:
1902  if (plink->value.macro_link.macroStr) {
1903  dbMsgCpy(pdbentry, plink->value.macro_link.macroStr);
1904  } else {
1905  dbMsgCpy(pdbentry, "");
1906  }
1907  break;
1908  case JSON_LINK:
1909  dbMsgCpy(pdbentry, plink->value.json.string);
1910  break;
1911  case PN_LINK:
1912  dbMsgPrint(pdbentry, "%s%s",
1913  plink->value.pv_link.pvname ? plink->value.pv_link.pvname : "",
1914  msstring[plink->value.pv_link.pvlMask&pvlOptMsMode]);
1915  break;
1916  case PV_LINK:
1917  case CA_LINK:
1918  case DB_LINK: {
1919  int ppind;
1920  short pvlMask;
1921 
1922  pvlMask = plink->value.pv_link.pvlMask;
1923  if (pvlMask&pvlOptPP) ppind=1;
1924  else if(pvlMask&pvlOptCA) ppind=2;
1925  else if(pvlMask&pvlOptCP) ppind=3;
1926  else if(pvlMask&pvlOptCPP) ppind=4;
1927  else ppind=0;
1928  dbMsgPrint(pdbentry, "%s%s%s%s",
1929  plink->value.pv_link.pvname ? plink->value.pv_link.pvname : "",
1930  (plink->flags & DBLINK_FLAG_TSELisTIME) ? ".TIME" : "",
1931  ppstring[ppind],
1932  msstring[plink->value.pv_link.pvlMask&pvlOptMsMode]);
1933  break;
1934  }
1935  case VME_IO:
1936  dbMsgPrint(pdbentry, "#C%d S%d @%s",
1937  plink->value.vmeio.card,plink->value.vmeio.signal,
1938  plink->value.vmeio.parm);
1939  break;
1940  case CAMAC_IO:
1941  dbMsgPrint(pdbentry, "#B%d C%d N%d A%d F%d @%s",
1942  plink->value.camacio.b,plink->value.camacio.c,
1943  plink->value.camacio.n,plink->value.camacio.a,
1944  plink->value.camacio.f,plink->value.camacio.parm);
1945  break;
1946  case RF_IO:
1947  dbMsgPrint(pdbentry, "#R%d M%d D%d E%d",
1948  plink->value.rfio.cryo,
1949  plink->value.rfio.micro,
1950  plink->value.rfio.dataset,
1951  plink->value.rfio.element);
1952  break;
1953  case AB_IO:
1954  dbMsgPrint(pdbentry, "#L%d A%d C%d S%d @%s",
1955  plink->value.abio.link,plink->value.abio.adapter,
1956  plink->value.abio.card,plink->value.abio.signal,
1957  plink->value.abio.parm);
1958  break;
1959  case GPIB_IO:
1960  dbMsgPrint(pdbentry, "#L%d A%d @%s",
1961  plink->value.gpibio.link,plink->value.gpibio.addr,
1962  plink->value.gpibio.parm);
1963  break;
1964  case BITBUS_IO:
1965  dbMsgPrint(pdbentry, "#L%u N%u P%u S%u @%s",
1966  plink->value.bitbusio.link,plink->value.bitbusio.node,
1967  plink->value.bitbusio.port,plink->value.bitbusio.signal,
1968  plink->value.bitbusio.parm);
1969  break;
1970  case BBGPIB_IO:
1971  dbMsgPrint(pdbentry, "#L%u B%u G%u @%s",
1972  plink->value.bbgpibio.link,plink->value.bbgpibio.bbaddr,
1973  plink->value.bbgpibio.gpibaddr,plink->value.bbgpibio.parm);
1974  break;
1975  case INST_IO:
1976  dbMsgPrint(pdbentry, "@%s", plink->value.instio.string);
1977  break;
1978  case VXI_IO :
1979  if (plink->value.vxiio.flag == VXIDYNAMIC)
1980  dbMsgPrint(pdbentry, "#V%d C%d S%d @%s",
1981  plink->value.vxiio.frame,plink->value.vxiio.slot,
1982  plink->value.vxiio.signal,plink->value.vxiio.parm);
1983  else
1984  dbMsgPrint(pdbentry, "#V%d S%d @%s",
1985  plink->value.vxiio.la,plink->value.vxiio.signal,
1986  plink->value.vxiio.parm);
1987  break;
1988  default :
1989  return(NULL);
1990  }
1991  break;
1992  case DBF_FWDLINK: {
1993  DBLINK *plink=(DBLINK *)pfield;
1994 
1995  switch(plink->type) {
1996  case CONSTANT:
1997  if (plink->value.constantStr) {
1998  dbMsgCpy(pdbentry, plink->value.constantStr);
1999  } else if (plink->text) {
2000  dbMsgCpy(pdbentry, plink->text);
2001  } else {
2002  dbMsgCpy(pdbentry, "");
2003  }
2004  break;
2005  case MACRO_LINK:
2006  if (plink->value.macro_link.macroStr) {
2007  dbMsgCpy(pdbentry, plink->value.macro_link.macroStr);
2008  } else {
2009  dbMsgCpy(pdbentry, "");
2010  }
2011  break;
2012  case JSON_LINK:
2013  dbMsgCpy(pdbentry, plink->value.json.string);
2014  break;
2015  case PV_LINK:
2016  case CA_LINK:
2017  case DB_LINK: {
2018  int ppind;
2019  short pvlMask;
2020 
2021  pvlMask = plink->value.pv_link.pvlMask;
2022  if (pvlMask&pvlOptCA) ppind=2;
2023  else ppind=0;
2024  dbMsgPrint(pdbentry, "%s%s",
2025  plink->value.pv_link.pvname ? plink->value.pv_link.pvname : "",
2026  ppind ? ppstring[ppind] : "");
2027  break;
2028  }
2029  default :
2030  return(NULL);
2031  }
2032  }
2033  break;
2034  default:
2035  return(NULL);
2036  }
2037  return pdbentry->message;
2038 }
char * parm
Definition: link.h:101
struct abio abio
Definition: link.h:182
char * dbGetStringNum(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2040
struct gpibio gpibio
Definition: link.h:183
char * parm
Definition: link.h:155
short frame
Definition: link.h:166
struct bitbusio bitbusio
Definition: link.h:184
short adapter
Definition: link.h:127
char * parm
Definition: link.h:111
short c
Definition: link.h:107
dbFldDes * pflddes
Definition: dbStaticLib.h:36
short link
Definition: link.h:126
short la
Definition: link.h:168
short signal
Definition: link.h:169
struct vxiio vxiio
Definition: link.h:187
#define NULL
Definition: catime.c:38
char * parm
Definition: link.h:130
unsigned char port
Definition: link.h:144
unsigned char node
Definition: link.h:143
short f
Definition: link.h:110
void * pfield
Definition: dbStaticLib.h:39
struct bbgpibio bbgpibio
Definition: link.h:186
struct instio instio
Definition: link.h:185
short signal
Definition: link.h:129
short slot
Definition: link.h:167
short card
Definition: link.h:128
struct macro_link macro_link
Definition: link.h:176
short size
Definition: dbBase.h:98
unsigned char gpibaddr
Definition: link.h:153
short signal
Definition: link.h:100
short dataset
Definition: link.h:119
short b
Definition: link.h:106
struct camacio camacio
Definition: link.h:180
short addr
Definition: link.h:136
short micro
Definition: link.h:118
char * message
Definition: dbStaticLib.h:40
unsigned char signal
Definition: link.h:145
unsigned char link
Definition: link.h:151
short cryo
Definition: link.h:117
char * parm
Definition: link.h:146
char * constantStr
Definition: link.h:175
short n
Definition: link.h:108
short link
Definition: link.h:135
unsigned char link
Definition: link.h:142
struct rfio rfio
Definition: link.h:181
short card
Definition: link.h:99
short flag
Definition: link.h:165
unsigned char bbaddr
Definition: link.h:152
struct pv_link pv_link
Definition: link.h:178
char * parm
Definition: link.h:170
struct json_link json
Definition: link.h:177
char * string
Definition: link.h:160
short a
Definition: link.h:109
struct vmeio vmeio
Definition: link.h:179
short element
Definition: link.h:120
dbfType field_type
Definition: dbBase.h:86
char * parm
Definition: link.h:137
epicsShareFunc void dbInitEntry ( DBBASE pdbbase,
DBENTRY pdbentry 
)

Definition at line 626 of file dbStaticLib.c.

627 {
628  memset((char *)pdbentry,'\0',sizeof(DBENTRY));
629  pdbentry->pdbbase = pdbbase;
630 }
DBBASE * pdbbase
Definition: dbStaticLib.h:34
epicsShareFunc long dbInvisibleRecord ( DBENTRY pdbentry)

Definition at line 1631 of file dbStaticLib.c.

1632 {
1633  dbRecordNode *precnode = pdbentry->precnode;
1634 
1635  if(!precnode) return(S_dbLib_recNotFound);
1636  precnode->flags &= ~DBRN_FLAGS_VISIBLE;
1637  return 0;
1638 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
#define DBRN_FLAGS_VISIBLE
Definition: dbBase.h:110
epicsShareFunc int dbIsAlias ( DBENTRY pdbentry)

Definition at line 1700 of file dbStaticLib.c.

1701 {
1702  dbRecordNode *precnode = pdbentry->precnode;
1703 
1704  if(!precnode) return 0;
1705  return precnode->flags & DBRN_FLAGS_ISALIAS ? 1 : 0;
1706 }
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
#define DBRN_FLAGS_ISALIAS
Definition: dbBase.h:111
epicsShareFunc int dbIsDefaultValue ( DBENTRY pdbentry)

Definition at line 219 of file dbStaticRun.c.

220 {
221  dbFldDes *pflddes = pdbentry->pflddes;
222  void *pfield = pdbentry->pfield;
223 
224  if (!pflddes || !pfield)
225  return FALSE;
226 
227  switch (pflddes->field_type) {
228  case DBF_STRING: {
229  char *p = (char *)pfield;
230 
231  return pflddes->initial ? ! strcmp(pflddes->initial, p)
232  : ! strlen(p);
233  }
234  case DBF_CHAR: {
235  epicsInt8 field = *(epicsInt8 *)pfield;
236  epicsInt8 def;
237 
238  if (!pflddes->initial)
239  return field == 0;
240 
241  return ! epicsParseInt8(pflddes->initial, &def, 0, NULL)
242  && field == def;
243  }
244  case DBF_UCHAR: {
245  epicsUInt8 field = *(epicsUInt8 *)pfield;
246  epicsUInt8 def;
247 
248  if (!pflddes->initial)
249  return field == 0;
250 
251  return ! epicsParseUInt8(pflddes->initial, &def, 0, NULL)
252  && field == def;
253  }
254  case DBF_SHORT: {
255  epicsInt16 field = *(epicsInt16 *)pfield;
256  epicsInt16 def;
257 
258  if (!pflddes->initial)
259  return field == 0;
260 
261  return ! epicsParseInt16(pflddes->initial, &def, 0, NULL)
262  && field == def;
263  }
264  case DBF_ENUM:
265  case DBF_USHORT: {
266  epicsUInt16 field = *(epicsUInt16 *)pfield;
268 
269  if (!pflddes->initial)
270  return field == 0;
271 
272  return ! epicsParseUInt16(pflddes->initial, &def, 0, NULL)
273  && field == def;
274  }
275  case DBF_LONG: {
276  epicsInt32 field = *(epicsInt32 *)pfield;
277  epicsInt32 def;
278 
279  if (!pflddes->initial)
280  return field == 0;
281 
282  return ! epicsParseInt32(pflddes->initial, &def, 0, NULL)
283  && field == def;
284  }
285  case DBF_ULONG: {
286  epicsUInt32 field = *(epicsUInt32 *)pfield;
288 
289  if (!pflddes->initial)
290  return field == 0;
291 
292  return ! epicsParseUInt32(pflddes->initial, &def, 0, NULL)
293  && field == def;
294  }
295  case DBF_INT64: {
296  epicsInt64 field = *(epicsInt64 *)pfield;
297  epicsInt64 def;
298 
299  if (!pflddes->initial)
300  return field == 0;
301 
302  return ! epicsParseInt64(pflddes->initial, &def, 0, NULL)
303  && field == def;
304  }
305  case DBF_UINT64: {
306  epicsUInt64 field = *(epicsUInt64 *)pfield;
308 
309  if (!pflddes->initial)
310  return field == 0;
311 
312  return ! epicsParseUInt64(pflddes->initial, &def, 0, NULL)
313  && field == def;
314  }
315  case DBF_FLOAT: {
316  epicsFloat32 field = *(epicsFloat32 *)pfield;
318 
319  if (!pflddes->initial)
320  return field == 0;
321 
322  return ! epicsParseFloat32(pflddes->initial, &def, NULL)
323  && field == def;
324  }
325  case DBF_DOUBLE: {
326  epicsFloat64 field = *(epicsFloat64 *)pfield;
328 
329  if (!pflddes->initial)
330  return field == 0;
331 
332  return ! epicsParseFloat64(pflddes->initial, &def, NULL)
333  && field == def;
334  }
335  case DBF_MENU: {
336  epicsEnum16 field = *(epicsEnum16 *)pfield;
338  int index;
339 
340  if (!pflddes->initial)
341  return field == 0;
342 
343  index = dbGetMenuIndexFromString(pdbentry, pflddes->initial);
344  if (index < 0) {
345  if (epicsParseUInt16(pflddes->initial, &def, 0, NULL))
346  return FALSE;
347  }
348  else
349  def = index;
350  return field == def;
351  }
352  case DBF_DEVICE: {
353  dbRecordType *precordType = pdbentry->precordType;
354 
355  if (!precordType) {
356  epicsPrintf("dbIsDefaultValue: pdbRecordType is NULL??\n");
357  return FALSE;
358  }
359  return ellCount(&precordType->devList) == 0;
360  }
361  case DBF_INLINK:
362  case DBF_OUTLINK:
363  case DBF_FWDLINK: {
364  struct link *plink = (struct link *)pfield;
365 
366  if (!plink || plink->type != CONSTANT)
367  return FALSE;
368 
369  /* These conditions don't make a lot of sense... */
370  if (!plink->value.constantStr)
371  return TRUE;
372 
373  if (!pflddes->initial) /* Default value for a link field? */
374  return FALSE;
375 
376  return !strcmp(plink->value.constantStr, pflddes->initial);
377  }
378  default:
379  return TRUE;
380  }
381 }
#define FALSE
Definition: dbDefs.h:32
#define ellCount(PLIST)
Report the number of nodes in a list.
Definition: ellLib.h:84
double epicsFloat64
Definition: epicsTypes.h:49
dbRecordType * precordType
Definition: dbStaticLib.h:35
LIBCOM_API int epicsParseInt64(const char *str, epicsInt64 *to, int base, char **units)
Definition: epicsStdlib.c:281
dbFldDes * pflddes
Definition: dbStaticLib.h:36
unsigned short epicsUInt16
Definition: epicsTypes.h:41
LIBCOM_API int epicsParseInt8(const char *str, epicsInt8 *to, int base, char **units)
Definition: epicsStdlib.c:181
int dbGetMenuIndexFromString(DBENTRY *pdbentry, const char *choice)
Definition: dbStaticLib.c:3097
unsigned char epicsUInt8
Definition: epicsTypes.h:39
#define NULL
Definition: catime.c:38
unsigned int epicsUInt32
Definition: epicsTypes.h:43
LIBCOM_API int epicsParseUInt8(const char *str, epicsUInt8 *to, int base, char **units)
Definition: epicsStdlib.c:197
unsigned long long epicsUInt64
Definition: epicsTypes.h:45
void * pfield
Definition: dbStaticLib.h:39
float epicsFloat32
Definition: epicsTypes.h:48
#define epicsPrintf
Definition: errlog.h:51
LIBCOM_API int epicsParseUInt64(const char *str, epicsUInt64 *to, int base, char **units)
Definition: epicsStdlib.c:299
char epicsInt8
Definition: epicsTypes.h:38
ELLLIST devList
Definition: dbBase.h:149
#define epicsParseFloat32(str, to, units)
Definition: epicsStdlib.h:67
epicsUInt16 epicsEnum16
Definition: epicsTypes.h:47
LIBCOM_API int epicsParseInt32(const char *str, epicsInt32 *to, int base, char **units)
Definition: epicsStdlib.c:245
#define TRUE
Definition: dbDefs.h:27
LIBCOM_API int epicsParseUInt32(const char *str, epicsUInt32 *to, int base, char **units)
Definition: epicsStdlib.c:263
LIBCOM_API int epicsParseInt16(const char *str, epicsInt16 *to, int base, char **units)
Definition: epicsStdlib.c:213
char * constantStr
Definition: link.h:175
int * def
Definition: flex.c:92
char * initial
Definition: dbBase.h:94
short epicsInt16
Definition: epicsTypes.h:40
LIBCOM_API int epicsParseUInt16(const char *str, epicsUInt16 *to, int base, char **units)
Definition: epicsStdlib.c:229
dbfType field_type
Definition: dbBase.h:86
int epicsInt32
Definition: epicsTypes.h:42
#define epicsParseFloat64(str, to, units)
Definition: epicsStdlib.h:68
long long epicsInt64
Definition: epicsTypes.h:44
epicsShareFunc int dbIsVisibleRecord ( DBENTRY pdbentry)

Definition at line 1640 of file dbStaticLib.c.

1641 {
1642  dbRecordNode *precnode = pdbentry->precnode;
1643 
1644  if(!precnode) return 0;
1645  return precnode->flags & DBRN_FLAGS_VISIBLE ? 1 : 0;
1646 }
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
#define DBRN_FLAGS_VISIBLE
Definition: dbBase.h:110
epicsShareFunc long dbNextField ( DBENTRY pdbentry,
int  dctonly 
)

Definition at line 1323 of file dbStaticLib.c.

1324 {
1325  dbRecordType *precordType = pdbentry->precordType;
1326  dbRecordNode *precnode = pdbentry->precnode;
1327  dbFldDes *pflddes;
1328  short indfield = pdbentry->indfield;
1329 
1330  if(!precordType) return(S_dbLib_recordTypeNotFound);
1331  indfield++;
1332  while(TRUE) {
1333  if(indfield>=precordType->no_fields) {
1334  pdbentry->indfield = 0;
1335  pdbentry->pflddes = NULL;
1336  pdbentry->pfield = NULL;
1337  return(S_dbLib_fieldNotFound);
1338  }
1339  pflddes = precordType->papFldDes[indfield];
1340  if(!dctonly || pflddes->promptgroup) {
1341  /*Skip field if dctonly and no device support*/
1342  if(!dctonly || (pflddes->field_type!=DBF_DEVICE)
1343  || (ellCount(&precordType->devList)>0)) {
1344  pdbentry->indfield = indfield;
1345  pdbentry->pflddes = pflddes;
1346  pdbentry->indfield = indfield;
1347  if(precnode) {
1348  dbGetFieldAddress(pdbentry);
1349  }else {
1350  pdbentry->pfield = NULL;
1351  }
1352  return(0);
1353  }
1354  }
1355  indfield++;
1356  }
1357 }
short promptgroup
Definition: dbBase.h:91
#define ellCount(PLIST)
Report the number of nodes in a list.
Definition: ellLib.h:84
dbRecordType * precordType
Definition: dbStaticLib.h:35
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define NULL
Definition: catime.c:38
void * pfield
Definition: dbStaticLib.h:39
short indfield
Definition: dbStaticLib.h:41
dbRecordNode * precnode
Definition: dbStaticLib.h:37
ELLLIST devList
Definition: dbBase.h:149
short no_fields
Definition: dbBase.h:152
long dbGetFieldAddress(DBENTRY *pdbentry)
Definition: dbStaticRun.c:187
#define TRUE
Definition: dbDefs.h:27
dbFldDes ** papFldDes
Definition: dbBase.h:161
#define S_dbLib_fieldNotFound
Definition: dbStaticLib.h:240
dbfType field_type
Definition: dbBase.h:86
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc long dbNextInfo ( DBENTRY pdbentry)

Definition at line 2827 of file dbStaticLib.c.

2828 {
2829  dbRecordNode *precnode = pdbentry->precnode;
2830  dbInfoNode *pinfo;
2831 
2832  if (!precnode) return (S_dbLib_recNotFound);
2833  pinfo = pdbentry->pinfonode;
2834  if (!pinfo) return (S_dbLib_infoNotFound);
2835 
2836  pinfo = (dbInfoNode *)ellNext(&pinfo->node);
2837  pdbentry->pinfonode = pinfo;
2838  return (pinfo ? 0 : S_dbLib_infoNotFound);
2839 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
ELLNODE node
Definition: dbBase.h:104
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
dbRecordNode * precnode
Definition: dbStaticLib.h:37
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_infoNotFound
Definition: dbStaticLib.h:249
epicsShareFunc long dbNextMatchingInfo ( DBENTRY pdbentry,
const char *  pattern 
)

Definition at line 2841 of file dbStaticLib.c.

2842 {
2843  long status;
2844 
2845  if (!pdbentry->precordType)
2846  {
2847  status = dbFirstRecordType(pdbentry);
2848  goto first;
2849  }
2850  while(1) {
2851  status = dbNextInfo(pdbentry);
2852  while (status) {
2853  status = dbNextRecord(pdbentry);
2854  while (status) {
2855  status = dbNextRecordType(pdbentry);
2856 first:
2857  if (status) return status;
2858  status = dbFirstRecord(pdbentry);
2859  }
2860  status = dbFirstInfo(pdbentry);
2861  }
2862  if (!pattern || !*pattern) return 0;
2863  if (epicsStrGlobMatch(dbGetInfoName(pdbentry), pattern)) return 0;
2864  }
2865 }
const char * dbGetInfoName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2901
long dbFirstRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1198
long dbNextInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2827
pvd::Status status
dbRecordType * precordType
Definition: dbStaticLib.h:35
int epicsStrGlobMatch(const char *str, const char *pattern)
Definition: epicsString.c:279
long dbNextRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1209
long dbNextRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1583
long dbFirstInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2816
long dbFirstRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1569
epicsShareFunc long dbNextRecord ( DBENTRY pdbentry)

Definition at line 1583 of file dbStaticLib.c.

1584 {
1585  dbRecordNode *precnode=pdbentry->precnode;
1586  long status=0;
1587 
1588  if(!precnode) return(S_dbLib_recNotFound);
1589  precnode = (dbRecordNode *)ellNext(&precnode->node);
1590  if(!precnode) status = S_dbLib_recNotFound;
1591  pdbentry->precnode = precnode;
1592  pdbentry->pfield = NULL;
1593  return(status);
1594 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
pvd::Status status
#define NULL
Definition: catime.c:38
void * pfield
Definition: dbStaticLib.h:39
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
dbRecordNode * precnode
Definition: dbStaticLib.h:37
ELLNODE node
Definition: dbBase.h:115
epicsShareFunc long dbNextRecordType ( DBENTRY pdbentry)

Definition at line 1209 of file dbStaticLib.c.

1210 {
1211  dbRecordType *precordType = pdbentry->precordType;
1212 
1213  zeroDbentry(pdbentry);
1214  precordType = (dbRecordType *)ellNext(&precordType->node);
1215  if(!precordType) return(S_dbLib_recordTypeNotFound);
1216  pdbentry->precordType = precordType;
1217  return(0);
1218 }
dbRecordType * precordType
Definition: dbStaticLib.h:35
ELLNODE node
Definition: dbBase.h:146
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
epicsShareFunc long dbPath ( DBBASE pdbbase,
const char *  path 
)

Definition at line 657 of file dbStaticLib.c.

658 {
659  if(!pdbbase) return(-1);
660  dbFreePath(pdbbase);
661  if(!path || strlen(path)==0) return(dbAddPath(pdbbase,"."));
662  return(dbAddPath(pdbbase,path));
663 }
void dbFreePath(DBBASE *pdbbase)
Definition: dbStaticLib.c:140
long dbAddPath(DBBASE *pdbbase, const char *path)
Definition: dbStaticLib.c:665
epicsShareFunc long dbPutInfo ( DBENTRY pdbentry,
const char *  name,
const char *  string 
)

Definition at line 2948 of file dbStaticLib.c.

2949 {
2950  dbInfoNode *pinfo;
2951  dbRecordNode *precnode = pdbentry->precnode;
2952  if (!precnode) return (S_dbLib_recNotFound);
2953 
2954  dbFindInfo(pdbentry, name);
2955  pinfo = pdbentry->pinfonode;
2956  if (pinfo) return (dbPutInfoString(pdbentry, string));
2957 
2958  /*Create new info node*/
2959  pinfo = calloc(1,sizeof(dbInfoNode));
2960  if (!pinfo) return (S_dbLib_outMem);
2961  pinfo->name = calloc(1,1+strlen(name));
2962  if (!pinfo->name) {
2963  free(pinfo);
2964  return (S_dbLib_outMem);
2965  }
2966  strcpy(pinfo->name, name);
2967  pinfo->string = calloc(1,1+strlen(string));
2968  if (!pinfo->string) {
2969  free(pinfo->name);
2970  free(pinfo);
2971  return (S_dbLib_outMem);
2972  }
2973  strcpy(pinfo->string, string);
2974  ellAdd(&precnode->infoList,&pinfo->node);
2975  pdbentry->pinfonode = pinfo;
2976  return (0);
2977 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
long dbPutInfoString(DBENTRY *pdbentry, const char *string)
Definition: dbStaticLib.c:2915
ELLLIST infoList
Definition: dbBase.h:118
ELLNODE node
Definition: dbBase.h:104
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
Definition: ellLib.c:24
dbRecordNode * precnode
Definition: dbStaticLib.h:37
long dbFindInfo(DBENTRY *pdbentry, const char *name)
Definition: dbStaticLib.c:2867
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_outMem
Definition: dbStaticLib.h:248
char * string
Definition: dbBase.h:106
char * name
Definition: dbBase.h:105
epicsShareFunc long dbPutInfoPointer ( DBENTRY pdbentry,
void *  pointer 
)

Definition at line 2927 of file dbStaticLib.c.

2928 {
2929  dbInfoNode *pinfo = pdbentry->pinfonode;
2930  if (!pinfo) return (S_dbLib_infoNotFound);
2931  pinfo->pointer = pointer;
2932  return (0);
2933 }
void * pointer
Definition: dbBase.h:107
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_infoNotFound
Definition: dbStaticLib.h:249
epicsShareFunc long dbPutInfoString ( DBENTRY pdbentry,
const char *  string 
)

Definition at line 2915 of file dbStaticLib.c.

2916 {
2917  dbInfoNode *pinfo = pdbentry->pinfonode;
2918  char *newstring;
2919  if (!pinfo) return (S_dbLib_infoNotFound);
2920  newstring = realloc(pinfo->string,1+strlen(string));
2921  if (!newstring) return (S_dbLib_outMem);
2922  strcpy(newstring, string);
2923  pinfo->string = newstring;
2924  return (0);
2925 }
dbInfoNode * pinfonode
Definition: dbStaticLib.h:38
#define S_dbLib_outMem
Definition: dbStaticLib.h:248
#define S_dbLib_infoNotFound
Definition: dbStaticLib.h:249
char * string
Definition: dbBase.h:106
epicsShareFunc long dbPutMenuIndex ( DBENTRY pdbentry,
int  index 
)

Definition at line 520 of file dbStaticRun.c.

521 {
522  dbFldDes *pflddes = pdbentry->pflddes;
523  epicsEnum16 *pfield = pdbentry->pfield;
524 
525  if (!pflddes)
526  return S_dbLib_flddesNotFound;
527  if (!pfield)
528  return S_dbLib_fieldNotFound;
529 
530  switch (pflddes->field_type) {
531  case DBF_MENU: {
532  dbMenu *pdbMenu = (dbMenu *) pflddes->ftPvt;
533 
534  if (!pdbMenu)
535  return S_dbLib_menuNotFound;
536  if (index < 0 || index >= pdbMenu->nChoice)
537  return S_dbLib_badField;
538 
539  *pfield = index;
540  return 0;
541  }
542 
543  case DBF_DEVICE: {
544  dbDeviceMenu *pdbDeviceMenu = dbGetDeviceMenu(pdbentry);
545 
546  if (!pdbDeviceMenu)
547  return S_dbLib_menuNotFound;
548  if (index < 0 || index >= pdbDeviceMenu->nChoice)
549  return S_dbLib_badField;
550 
551  return dbPutString(pdbentry, pdbDeviceMenu->papChoice[index]);
552  }
553 
554  default:
555  break;
556  }
557  return S_dbLib_badField;
558 }
dbDeviceMenu * dbGetDeviceMenu(DBENTRY *pdbentry)
Definition: dbStaticLib.c:336
char ** papChoice
Definition: dbBase.h:57
#define S_dbLib_badField
Definition: dbStaticLib.h:241
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define S_dbLib_flddesNotFound
Definition: dbStaticLib.h:239
void * pfield
Definition: dbStaticLib.h:39
epicsUInt16 epicsEnum16
Definition: epicsTypes.h:47
Definition: dbBase.h:24
int nChoice
Definition: dbBase.h:27
void * ftPvt
Definition: dbBase.h:96
#define S_dbLib_menuNotFound
Definition: dbStaticLib.h:242
if(yy_init)
Definition: scan.c:972
long dbPutString(DBENTRY *pdbentry, const char *pstring)
Definition: dbStaticLib.c:2545
#define S_dbLib_fieldNotFound
Definition: dbStaticLib.h:240
int nChoice
Definition: dbBase.h:56
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc long dbPutRecordAttribute ( DBENTRY pdbentry,
const char *  name,
const char *  value 
)

Definition at line 1230 of file dbStaticLib.c.

1232 {
1233  dbRecordType *precordType = pdbentry->precordType;
1234  int createNew = TRUE;
1235  int compare;
1236  dbRecordAttribute *pattribute;
1237 
1238  if(!precordType) return(S_dbLib_recordTypeNotFound);
1239  pattribute = (dbRecordAttribute *)ellFirst(&precordType->attributeList);
1240  /*put new attribute name in sort order*/
1241  while(pattribute) {
1242  compare = strcmp(pattribute->name,name);
1243  if(compare==0) {
1244  createNew = FALSE;
1245  }
1246  if(compare>=0) break;
1247  pattribute = (dbRecordAttribute *)ellNext(&pattribute->node);
1248  }
1249  if(createNew) {
1250  dbRecordAttribute *pnew;
1251  dbFldDes *pdbFldDes;
1252 
1253  pnew = dbCalloc(1,sizeof(dbRecordAttribute));
1254  if(pattribute) {
1255  ellInsert(&precordType->attributeList,pattribute->node.previous,
1256  &pnew->node);
1257  } else {
1258  ellAdd(&precordType->attributeList,&pnew->node);
1259  }
1260  pattribute = pnew;
1261  pattribute->name = dbCalloc(strlen(name)+1,sizeof(char));
1262  strcpy(pattribute->name,name);
1263  pdbFldDes = dbCalloc(1,sizeof(dbFldDes));
1264  pdbFldDes->name = pattribute->name;
1265  pdbFldDes->pdbRecordType = precordType;
1266  pdbFldDes->special = SPC_ATTRIBUTE;
1267  pdbFldDes->field_type = DBF_STRING;
1268  pdbFldDes->as_level = ASL1;
1269  pdbFldDes->size = MAX_STRING_SIZE;
1270  pattribute->pdbFldDes = pdbFldDes;
1271  }
1272  strncpy(pattribute->value,value,MAX_STRING_SIZE);
1273  pattribute->value[MAX_STRING_SIZE-1] = 0;
1274  return(0);
1275 }
Definition: link.h:174
#define FALSE
Definition: dbDefs.h:32
short special
Definition: dbBase.h:85
dbRecordType * precordType
Definition: dbStaticLib.h:35
char value[MAX_STRING_SIZE]
Definition: dbBase.h:130
dbFldDes * pdbFldDes
Definition: dbBase.h:129
ELLNODE node
Definition: dbBase.h:127
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
Definition: ellLib.c:24
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
struct dbRecordType * pdbRecordType
Definition: dbBase.h:83
short size
Definition: dbBase.h:98
bool compare(const Field &a, const Field &b)
Definition: Compare.cpp:26
asLevel as_level
Definition: dbBase.h:93
struct ELLNODE * previous
Pointer to previous node in list.
Definition: ellLib.h:47
Definition: dbBase.h:63
#define MAX_STRING_SIZE
Definition: epicsTypes.h:65
#define TRUE
Definition: dbDefs.h:27
#define dbCalloc(nobj, size)
Definition: dbStaticLib.h:228
void ellInsert(ELLLIST *plist, ELLNODE *pPrev, ELLNODE *pNode)
Inserts a node into a list immediately after a specific node.
Definition: ellLib.c:178
#define SPC_ATTRIBUTE
Definition: special.h:31
char * name
Definition: dbBase.h:81
ELLLIST attributeList
Definition: dbBase.h:147
dbfType field_type
Definition: dbBase.h:86
#define S_dbLib_recordTypeNotFound
Definition: dbStaticLib.h:236
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbPutString ( DBENTRY pdbentry,
const char *  pstring 
)

Definition at line 2545 of file dbStaticLib.c.

2546 {
2547  dbFldDes *pflddes = pdbentry->pflddes;
2548  void *pfield = pdbentry->pfield;
2549  long status=0;
2550  int macroIsOk;
2551  int stringHasMacro=FALSE;
2552 
2553  if(!pflddes) return(S_dbLib_flddesNotFound);
2554  macroIsOk = dbIsMacroOk(pdbentry);
2555  stringHasMacro = strstr(pstring,"$(") || strstr(pstring,"${");
2556  if(!macroIsOk && stringHasMacro) {
2557  epicsPrintf("%s.%s Has unexpanded macro\n",
2558  dbGetRecordName(pdbentry),dbGetFieldName(pdbentry));
2559  return(S_dbLib_badField);
2560  }
2561  switch (pflddes->field_type) {
2562  case DBF_STRING:
2563  if(!pfield) return(S_dbLib_fieldNotFound);
2564  if(strlen(pstring) >= (size_t)pflddes->size) return S_dbLib_strLen;
2565  strncpy((char *)pfield, pstring, pflddes->size-1);
2566  ((char *)pfield)[pflddes->size-1] = 0;
2567 
2568  if((pflddes->special == SPC_CALC) && !stringHasMacro) {
2569  char rpcl[RPCL_LEN];
2570  short err;
2571 
2572  if (postfix(pstring,rpcl,&err)) {
2573  status = S_dbLib_badField;
2574  errlogPrintf("%s in CALC expression '%s'\n",
2575  calcErrorStr(err), pstring);
2576  }
2577  }
2578  break;
2579 
2580  case DBF_CHAR:
2581  case DBF_SHORT:
2582  case DBF_LONG:
2583  case DBF_INT64:
2584  case DBF_UCHAR:
2585  case DBF_USHORT:
2586  case DBF_ULONG:
2587  case DBF_UINT64:
2588  case DBF_ENUM:
2589  case DBF_FLOAT:
2590  case DBF_DOUBLE:
2591  case DBF_MENU:
2592  case DBF_DEVICE:
2593  status = dbPutStringNum(pdbentry,pstring);
2594  break;
2595 
2596  case DBF_INLINK:
2597  case DBF_OUTLINK:
2598  case DBF_FWDLINK: {
2599  dbLinkInfo link_info;
2600  DBLINK *plink = (DBLINK *)pfield;
2601 
2602  status = dbParseLink(pstring, pflddes->field_type, &link_info);
2603  if (status) break;
2604 
2605  if (plink->type==CONSTANT && plink->value.constantStr==NULL) {
2606  /* links not yet initialized by dbInitRecordLinks() */
2607  free(plink->text);
2608  plink->text = epicsStrDup(pstring);
2609  dbFreeLinkInfo(&link_info);
2610  } else {
2611  /* assignment after init (eg. autosave restore) */
2612  struct dbCommon *prec = pdbentry->precnode->precord;
2613  devSup *devsup = (devSup *)ellNth(&pdbentry->precordType->devList, prec->dtyp+1);
2614 
2615  status = dbCanSetLink(plink, &link_info, devsup);
2616  if (status == 0)
2617  status = dbSetLink(plink, &link_info, devsup);
2618  }
2619  }
2620  break;
2621 
2622  default:
2623  return S_dbLib_badField;
2624  }
2625 
2626  if (!status && strcmp(pflddes->name, "VAL") == 0) {
2627  DBENTRY dbentry;
2628 
2629  dbCopyEntryContents(pdbentry, &dbentry);
2630  if (!dbFindField(&dbentry, "UDF")) {
2631  dbPutString(&dbentry, "0");
2632  }
2633  dbFinishEntry(&dbentry);
2634  }
2635  return(status);
2636 }
LIBCOM_API const char * calcErrorStr(short error)
Convert an error code to a string.
Definition: postfix.c:493
#define S_dbLib_badField
Definition: dbStaticLib.h:241
#define FALSE
Definition: dbDefs.h:32
short special
Definition: dbBase.h:85
pvd::Status status
dbRecordType * precordType
Definition: dbStaticLib.h:35
void * precord
Definition: dbBase.h:116
ELLNODE * ellNth(ELLLIST *pList, int nodeNum)
Find the Nth node in a list.
Definition: ellLib.c:205
dbFldDes * pflddes
Definition: dbStaticLib.h:36
#define SPC_CALC
Definition: special.h:39
#define S_dbLib_flddesNotFound
Definition: dbStaticLib.h:239
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
#define NULL
Definition: catime.c:38
#define S_dbLib_strLen
Definition: dbStaticLib.h:246
void * pfield
Definition: dbStaticLib.h:39
void dbFreeLinkInfo(dbLinkInfo *pinfo)
Definition: dbStaticLib.c:2216
#define RPCL_LEN
Definition: dbStaticLib.c:52
short size
Definition: dbBase.h:98
dbRecordNode * precnode
Definition: dbStaticLib.h:37
#define epicsPrintf
Definition: errlog.h:51
ELLLIST devList
Definition: dbBase.h:149
char * dbGetFieldName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1376
Definition: dbBase.h:38
char * dbGetRecordName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1612
long dbPutStringNum(DBENTRY *pdbentry, const char *pstring)
Definition: dbStaticRun.c:383
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
char * epicsStrDup(const char *s)
Definition: epicsString.c:233
void dbCopyEntryContents(DBENTRY *pfrom, DBENTRY *pto)
Definition: dbStaticLib.c:650
char * constantStr
Definition: link.h:175
long dbFindField(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1828
char * name
Definition: dbBase.h:81
long dbPutString(DBENTRY *pdbentry, const char *pstring)
Definition: dbStaticLib.c:2545
LIBCOM_API long postfix(const char *psrc, char *pout, short *perror)
Compile an infix expression into postfix byte-code.
Definition: postfix.c:209
int dbIsMacroOk(DBENTRY *pdbentry)
Definition: dbStaticRun.c:217
#define S_dbLib_fieldNotFound
Definition: dbStaticLib.h:240
int prec
Definition: reader.c:29
long dbParseLink(const char *str, short ftype, dbLinkInfo *pinfo)
Definition: dbStaticLib.c:2226
dbfType field_type
Definition: dbBase.h:86
long dbCanSetLink(DBLINK *plink, dbLinkInfo *pinfo, devSup *devsup)
Definition: dbStaticLib.c:2375
long dbSetLink(DBLINK *plink, dbLinkInfo *pinfo, devSup *devsup)
Definition: dbStaticLib.c:2507
epicsShareFunc void dbPvdDump ( DBBASE pdbbase,
int  verbose 
)

Definition at line 193 of file dbPvdLib.c.

194 {
195  unsigned int empty = 0;
196  dbPvd *ppvd;
197  unsigned int h;
198 
199  if (!pdbbase) {
200  fprintf(stderr,"pdbbase not specified\n");
201  return;
202  }
203  ppvd = pdbbase->ppvd;
204  if (ppvd == NULL) return;
205 
206  printf("Process Variable Directory has %u buckets", ppvd->size);
207 
208  for (h = 0; h < ppvd->size; h++) {
209  dbPvdBucket *pbucket = ppvd->buckets[h];
210  PVDENTRY *ppvdNode;
211  int i = 1;
212 
213  if (pbucket == NULL) {
214  empty++;
215  continue;
216  }
217  epicsMutexMustLock(pbucket->lock);
218  ppvdNode = (PVDENTRY *) ellFirst(&pbucket->list);
219  printf("\n [%4u] %4d ", h, ellCount(&pbucket->list));
220  while (ppvdNode && verbose) {
221  if (!(++i % 4))
222  printf("\n ");
223  printf(" %s", ppvdNode->precnode->recordname);
224  ppvdNode = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
225  }
226  epicsMutexUnlock(pbucket->lock);
227  }
228  printf("\n%u buckets empty.\n", empty);
229 }
epics::pvData::BitSetPtr empty
Definition: pvAccess.cpp:135
#define ellCount(PLIST)
Report the number of nodes in a list.
Definition: ellLib.h:84
int i
Definition: scan.c:967
#define printf
Definition: epicsStdio.h:41
#define NULL
Definition: catime.c:38
dbPvdBucket ** buckets
Definition: dbPvdLib.c:36
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
struct dbPvd * ppvd
Definition: dbBase.h:182
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
unsigned int size
Definition: dbPvdLib.c:34
ELLLIST list
Definition: dbPvdLib.c:29
List node type.
Definition: ellLib.h:45
dbRecordNode * precnode
Definition: dbStaticPvt.h:98
Definition: dbPvdLib.c:33
void verbose(void)
Definition: verbose.c:27
char * recordname
Definition: dbBase.h:117
#define stderr
Definition: epicsStdio.h:32
epicsMutexId lock
Definition: dbPvdLib.c:30
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbReadDatabase ( DBBASE **  ppdbbase,
const char *  filename,
const char *  path,
const char *  substitutions 
)

Definition at line 336 of file dbLexRoutines.c.

338 {return (dbReadCOM(ppdbbase,filename,0,path,substitutions));}
epicsShareFunc long dbReadDatabaseFP ( DBBASE **  ppdbbase,
FILE *  fp,
const char *  path,
const char *  substitutions 
)

Definition at line 340 of file dbLexRoutines.c.

342 {return (dbReadCOM(ppdbbase,0,fp,path,substitutions));}
epicsShareFunc void dbReportDeviceConfig ( DBBASE pdbbase,
FILE *  report 
)

Definition at line 3502 of file dbStaticLib.c.

3503 {
3504  DBENTRY dbentry, *pdbentry = &dbentry;
3505  long status;
3506  FILE *stream = report ? report : stdout;
3507 
3508  if (!pdbbase) {
3509  fprintf(stderr, "dbReportDeviceConfig: pdbbase not specified\n");
3510  return;
3511  }
3512 
3513  dbInitEntry(pdbbase,pdbentry);
3514  status = dbFirstRecordType(pdbentry);
3515  while (!status) {
3516  const int nlinks = dbGetNLinks(pdbentry);
3517 
3518  status = dbFirstRecord(pdbentry);
3519  while (!status) {
3520  int ilink;
3521 
3522  for (ilink=0; ilink<nlinks; ilink++) {
3523  char linkValue[messagesize];
3524  char dtypValue[50];
3525  char cvtValue[40];
3526  struct link *plink;
3527  int linkType;
3528 
3529  status = dbGetLinkField(pdbentry, ilink);
3530  if (status)
3531  continue;
3532 
3533  plink = pdbentry->pfield;
3534  linkType = plink->type;
3535  if (plink->text) { /* Not yet parsed */
3536  dbLinkInfo linfo;
3537 
3538  if (dbParseLink(plink->text, pdbentry->pflddes->field_type, &linfo))
3539  continue;
3540 
3541  linkType = linfo.ltype;
3542  if (linkType && bus[linkType])
3543  strncpy(linkValue, plink->text, messagesize-1);
3544 
3545  dbFreeLinkInfo(&linfo);
3546  }
3547  else {
3548  strncpy(linkValue, dbGetString(pdbentry), messagesize-1);
3549  }
3550 
3551  if (!linkType || !bus[linkType])
3552  continue;
3553  linkValue[messagesize-1] = '\0';
3554 
3555  status = dbFindField(pdbentry, "DTYP");
3556  if (status)
3557  break; /* Next record type */
3558 
3559  strcpy(dtypValue, dbGetString(pdbentry));
3560  status = dbFindField(pdbentry, "LINR");
3561  if (status) {
3562  cvtValue[0] = 0;
3563  }
3564  else {
3565  if (strcmp(dbGetString(pdbentry), "LINEAR") != 0) {
3566  cvtValue[0] = 0;
3567  }
3568  else {
3569  strcpy(cvtValue,"cvt(");
3570  status = dbFindField(pdbentry, "EGUL");
3571  if (!status)
3572  strcat(cvtValue, dbGetString(pdbentry));
3573  status = dbFindField(pdbentry, "EGUF");
3574  if (!status) {
3575  strcat(cvtValue, ",");
3576  strcat(cvtValue, dbGetString(pdbentry));
3577  }
3578  strcat(cvtValue, ")");
3579  }
3580  }
3581  fprintf(stream,"%-8s %-20s %-20s %-20s %-s\n",
3582  bus[linkType], linkValue, dtypValue,
3583  dbGetRecordName(pdbentry), cvtValue);
3584  break;
3585  }
3586  status = dbNextRecord(pdbentry);
3587  }
3588  status = dbNextRecordType(pdbentry);
3589  }
3590  dbFinishEntry(pdbentry);
3591  finishOutstream(stream);
3592  return;
3593 }
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
long dbFirstRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1198
pvd::Status status
dbFldDes * pflddes
Definition: dbStaticLib.h:36
long dbGetLinkField(DBENTRY *pdbentry, int index)
Definition: dbStaticLib.c:3172
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
long dbNextRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1209
long dbNextRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1583
void * pfield
Definition: dbStaticLib.h:39
void dbFreeLinkInfo(dbLinkInfo *pinfo)
Definition: dbStaticLib.c:2216
#define report
Definition: aaiRecord.c:53
char * dbGetRecordName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1612
#define stdout
Definition: epicsStdio.h:30
int dbGetNLinks(DBENTRY *pdbentry)
Definition: dbStaticLib.c:3164
short ltype
Definition: dbStaticPvt.h:42
#define messagesize
Definition: dbStaticLib.c:51
char * dbGetString(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1845
long dbFirstRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1569
long dbFindField(DBENTRY *pdbentry, const char *pname)
Definition: dbStaticLib.c:1828
#define stderr
Definition: epicsStdio.h:32
long dbParseLink(const char *str, short ftype, dbLinkInfo *pinfo)
Definition: dbStaticLib.c:2226
dbfType field_type
Definition: dbBase.h:86
epicsShareFunc char* dbVerify ( DBENTRY pdbentry,
const char *  pstring 
)

Definition at line 2638 of file dbStaticLib.c.

2639 {
2640  dbFldDes *pflddes = pdbentry->pflddes;
2641  char *message = getpMessage(pdbentry);
2642  long status;
2643  union {
2644  epicsInt8 i8;
2645  epicsUInt8 u8;
2646  epicsInt16 i16;
2647  epicsUInt16 u16;
2648  epicsInt32 i32;
2649  epicsUInt32 u32;
2650  epicsInt64 i64;
2651  epicsUInt64 u64;
2652  epicsFloat32 f32;
2653  epicsFloat64 f64;
2654  } val;
2655 
2656  if (!pflddes) {
2657  strcpy(message, "fldDes not found");
2658  return message;
2659  }
2660 
2661  if (strstr(pstring,"$(") || strstr(pstring,"${"))
2662  return NULL;
2663 
2664  switch (pflddes->field_type) {
2665  case DBF_STRING:
2666  {
2667  size_t length = strlen(pstring);
2668 
2669  if (length >= pflddes->size) {
2670  sprintf(message, "String too long, max %d characters",
2671  pflddes->size - 1);
2672  return message;
2673  }
2674 
2675  if (pflddes->special == SPC_CALC) {
2676  char rpcl[RPCL_LEN];
2677  short err;
2678 
2679  status = postfix(pstring, rpcl, &err);
2680  if (status) {
2681  sprintf(message,"%s in CALC expression '%s'",
2682  calcErrorStr(err), pstring);
2683  return message;
2684  }
2685  }
2686 
2687  return NULL;
2688  }
2689 
2690  case DBF_CHAR:
2691  status = epicsParseInt8(pstring, &val.i8, 0, NULL);
2692  break;
2693 
2694  case DBF_UCHAR:
2695  status = epicsParseUInt8(pstring, &val.u8, 0, NULL);
2696  break;
2697 
2698  case DBF_SHORT:
2699  status = epicsParseInt16(pstring, &val.i16, 0, NULL);
2700  break;
2701 
2702  case DBF_ENUM:
2703  case DBF_USHORT:
2704  status = epicsParseUInt16(pstring, &val.u16, 0, NULL);
2705  break;
2706 
2707  case DBF_LONG:
2708  status = epicsParseInt32(pstring, &val.i32, 0, NULL);
2709  break;
2710 
2711  case DBF_ULONG:
2712  status = epicsParseUInt32(pstring, &val.u32, 0, NULL);
2713  break;
2714 
2715  case DBF_INT64:
2716  status = epicsParseInt64(pstring, &val.i64, 0, NULL);
2717  break;
2718 
2719  case DBF_UINT64:
2720  status = epicsParseUInt64(pstring, &val.u64, 0, NULL);
2721  break;
2722 
2723  case DBF_FLOAT:
2724  status = epicsParseFloat32(pstring, &val.f32, NULL);
2725  break;
2726 
2727  case DBF_DOUBLE:
2728  status = epicsParseFloat64(pstring, &val.f64, NULL);
2729  break;
2730 
2731  case DBF_MENU:
2732  {
2733  dbMenu *pdbMenu = (dbMenu *)pflddes->ftPvt;
2734  int i;
2735 
2736  if (!pdbMenu)
2737  return NULL;
2738 
2739  for (i = 0; i < pdbMenu->nChoice; i++) {
2740  const char *pchoice = pdbMenu->papChoiceValue[i];
2741 
2742  if (!pchoice)
2743  continue;
2744 
2745  if (strcmp(pchoice, pstring) == 0) {
2746  return NULL;
2747  }
2748  }
2749  }
2750  strcpy(message, "Not a valid menu choice");
2751  return message;
2752 
2753  case DBF_DEVICE:
2754  {
2755  dbDeviceMenu *pdbDeviceMenu = dbGetDeviceMenu(pdbentry);
2756  int i;
2757 
2758  if (!pdbDeviceMenu || pdbDeviceMenu->nChoice == 0)
2759  return NULL;
2760 
2761  for (i = 0; i < pdbDeviceMenu->nChoice; i++) {
2762  const char *pchoice = pdbDeviceMenu->papChoice[i];
2763 
2764  if (!pchoice)
2765  continue;
2766 
2767  if (strcmp(pchoice, pstring) == 0) {
2768  return NULL;
2769  }
2770  }
2771  }
2772  strcpy(message, "Not a valid device type");
2773  return message;
2774 
2775  case DBF_INLINK:
2776  case DBF_OUTLINK:
2777  case DBF_FWDLINK:
2778  return NULL;
2779 
2780  default:
2781  strcpy(message, "Not a valid field type");
2782  return message;
2783  }
2784 
2785  switch (status) {
2786  case 0:
2787  message = NULL;
2788  break;
2789 
2790  case S_stdlib_noConversion:
2791  strcpy(message, "Not a valid integer");
2792  break;
2793 
2794  case S_stdlib_badBase:
2795  strcpy(message, "Internal error (badBase)");
2796  break;
2797 
2798  case S_stdlib_overflow:
2799  strcpy(message, "Number too large for field type");
2800  break;
2801 
2802  case S_stdlib_underflow:
2803  strcpy(message, "Number too small for field type");
2804  break;
2805 
2806  case S_stdlib_extraneous:
2807  strcpy(message, "Extraneous characters after number");
2808  break;
2809 
2810  default:
2811  strcpy(message, "Unknown numeric conversion error");
2812  }
2813  return message;
2814 }
dbDeviceMenu * dbGetDeviceMenu(DBENTRY *pdbentry)
Definition: dbStaticLib.c:336
char ** papChoice
Definition: dbBase.h:57
LIBCOM_API const char * calcErrorStr(short error)
Convert an error code to a string.
Definition: postfix.c:493
short special
Definition: dbBase.h:85
double epicsFloat64
Definition: epicsTypes.h:49
pvd::Status status
int i
Definition: scan.c:967
#define S_stdlib_underflow
Definition: epicsStdlib.h:29
LIBCOM_API int epicsParseInt64(const char *str, epicsInt64 *to, int base, char **units)
Definition: epicsStdlib.c:281
#define S_stdlib_badBase
Definition: epicsStdlib.h:31
dbFldDes * pflddes
Definition: dbStaticLib.h:36
unsigned short epicsUInt16
Definition: epicsTypes.h:41
#define SPC_CALC
Definition: special.h:39
LIBCOM_API int epicsParseInt8(const char *str, epicsInt8 *to, int base, char **units)
Definition: epicsStdlib.c:181
#define S_stdlib_noConversion
Definition: epicsStdlib.h:27
unsigned char epicsUInt8
Definition: epicsTypes.h:39
#define NULL
Definition: catime.c:38
unsigned int epicsUInt32
Definition: epicsTypes.h:43
LIBCOM_API int epicsParseUInt8(const char *str, epicsUInt8 *to, int base, char **units)
Definition: epicsStdlib.c:197
#define S_stdlib_extraneous
Definition: epicsStdlib.h:28
unsigned long long epicsUInt64
Definition: epicsTypes.h:45
#define RPCL_LEN
Definition: dbStaticLib.c:52
float epicsFloat32
Definition: epicsTypes.h:48
short size
Definition: dbBase.h:98
LIBCOM_API int epicsParseUInt64(const char *str, epicsUInt64 *to, int base, char **units)
Definition: epicsStdlib.c:299
char ** papChoiceValue
Definition: dbBase.h:29
char epicsInt8
Definition: epicsTypes.h:38
#define S_stdlib_overflow
Definition: epicsStdlib.h:30
#define epicsParseFloat32(str, to, units)
Definition: epicsStdlib.h:67
Definition: dbBase.h:24
LIBCOM_API int epicsParseInt32(const char *str, epicsInt32 *to, int base, char **units)
Definition: epicsStdlib.c:245
int nChoice
Definition: dbBase.h:27
LIBCOM_API int epicsParseUInt32(const char *str, epicsUInt32 *to, int base, char **units)
Definition: epicsStdlib.c:263
LIBCOM_API int epicsParseInt16(const char *str, epicsInt16 *to, int base, char **units)
Definition: epicsStdlib.c:213
void * ftPvt
Definition: dbBase.h:96
if(yy_init)
Definition: scan.c:972
short epicsInt16
Definition: epicsTypes.h:40
LIBCOM_API int epicsParseUInt16(const char *str, epicsUInt16 *to, int base, char **units)
Definition: epicsStdlib.c:229
LIBCOM_API long postfix(const char *psrc, char *pout, short *perror)
Compile an infix expression into postfix byte-code.
Definition: postfix.c:209
int nChoice
Definition: dbBase.h:56
dbfType field_type
Definition: dbBase.h:86
int epicsInt32
Definition: epicsTypes.h:42
#define epicsParseFloat64(str, to, units)
Definition: epicsStdlib.h:68
long long epicsInt64
Definition: epicsTypes.h:44
epicsShareFunc long dbVisibleRecord ( DBENTRY pdbentry)

Definition at line 1622 of file dbStaticLib.c.

1623 {
1624  dbRecordNode *precnode = pdbentry->precnode;
1625 
1626  if(!precnode) return(S_dbLib_recNotFound);
1627  precnode->flags |= DBRN_FLAGS_VISIBLE;
1628  return 0;
1629 }
#define S_dbLib_recNotFound
Definition: dbStaticLib.h:238
int flags
Definition: dbBase.h:119
dbRecordNode * precnode
Definition: dbStaticLib.h:37
#define DBRN_FLAGS_VISIBLE
Definition: dbBase.h:110
epicsShareFunc long dbWriteBreaktable ( DBBASE pdbbase,
const char *  filename 
)

Definition at line 1151 of file dbStaticLib.c.

1152 {
1153  FILE *stream;
1154  long status;
1155 
1156  stream = openOutstream(filename);
1157  status = dbWriteBreaktableFP(pdbbase,stream);
1158  finishOutstream(stream);
1159  return status;
1160 }
pvd::Status status
long dbWriteBreaktableFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1162
epicsShareFunc long dbWriteBreaktableFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1162 of file dbStaticLib.c.

1163 {
1164  brkTable *pbrkTable;
1165  brkInt *pbrkInt;
1166  int i;
1167 
1168  if (!pdbbase) {
1169  fprintf(stderr,"pdbbase not specified\n");
1170  return(-1);
1171  }
1172  for (pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList);
1173  pbrkTable;
1174  pbrkTable = (brkTable *)ellNext(&pbrkTable->node)) {
1175  fprintf(fp,"breaktable(%s) {\n",pbrkTable->name);
1176  pbrkInt = pbrkTable->paBrkInt;
1177  for(i=0; i < pbrkTable->number; i++) {
1178  fprintf(fp,"\t%e, %e\n",pbrkInt->raw,pbrkInt->eng);
1179  pbrkInt++;
1180  }
1181  fprintf(fp,"}\n");
1182  }
1183  return(0);
1184 }
int i
Definition: scan.c:967
long number
Definition: dbBase.h:75
ELLLIST bptList
Definition: dbBase.h:178
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
ELLNODE node
Definition: dbBase.h:73
double eng
Definition: makeBpt.c:46
Definition: makeBpt.c:43
struct brkInt * paBrkInt
Definition: dbBase.h:76
#define stderr
Definition: epicsStdio.h:32
double raw
Definition: makeBpt.c:44
char * name
Definition: dbBase.h:74
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteDevice ( DBBASE pdbbase,
const char *  filename 
)

Definition at line 1023 of file dbStaticLib.c.

1024 {
1025  FILE *stream;
1026  long status;
1027 
1028  stream = openOutstream(filename);
1029  status = dbWriteDeviceFP(pdbbase,stream);
1030  finishOutstream(stream);
1031  return status;
1032 }
pvd::Status status
long dbWriteDeviceFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1034
epicsShareFunc long dbWriteDeviceFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1034 of file dbStaticLib.c.

1035 {
1036  dbRecordType *pdbRecordType;
1037  devSup *pdevSup;
1038 
1039  if(!pdbbase) {
1040  fprintf(stderr,"dbWriteDeviceFP: pdbbase not specified\n");
1041  return(-1);
1042  }
1043  for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
1044  pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
1045  for(pdevSup = (devSup *)ellFirst(&pdbRecordType->devList);
1046  pdevSup; pdevSup = (devSup *)ellNext(&pdevSup->node)) {
1047  int j;
1048 
1049  for(j=0; j< LINK_NTYPES; j++) {
1050  if(pamaplinkType[j].value==pdevSup->link_type) break;
1051  }
1052  if(j>=LINK_NTYPES) {
1053  fprintf(fp,"link_type not valid\n");
1054  continue;
1055  }
1056  fprintf(fp,"device(%s,%s,%s,\"%s\")\n",
1057  pdbRecordType->name,
1059  pdevSup->name,pdevSup->choice);
1060  }
1061  }
1062  return(0);
1063 }
Definition: link.h:174
char * choice
Definition: dbBase.h:41
ELLLIST recordTypeList
Definition: dbBase.h:172
char * name
Definition: dbBase.h:40
ELLNODE node
Definition: dbBase.h:146
ELLNODE node
Definition: dbBase.h:39
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
maplinkType pamaplinkType[LINK_NTYPES]
Definition: dbStaticLib.c:63
ELLLIST devList
Definition: dbBase.h:149
Definition: dbBase.h:38
char * name
Definition: dbBase.h:151
#define stderr
Definition: epicsStdio.h:32
char * strvalue
Definition: link.h:45
int link_type
Definition: dbBase.h:42
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteDriver ( DBBASE pdbbase,
const char *  filename 
)

Definition at line 1065 of file dbStaticLib.c.

1066 {
1067  FILE *stream;
1068  long status;
1069 
1070  stream = openOutstream(filename);
1071  status = dbWriteDriverFP(pdbbase,stream);
1072  finishOutstream(stream);
1073  return status;
1074 }
pvd::Status status
long dbWriteDriverFP(DBBASE *pdbbase, FILE *fp)
Definition: dbStaticLib.c:1076
epicsShareFunc long dbWriteDriverFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1076 of file dbStaticLib.c.

1077 {
1078  drvSup *pdrvSup;
1079 
1080  if(!pdbbase) {
1081  fprintf(stderr,"pdbbase not specified\n");
1082  return(-1);
1083  }
1084  for(pdrvSup = (drvSup *)ellFirst(&pdbbase->drvList);
1085  pdrvSup; pdrvSup = (drvSup *)ellNext(&pdrvSup->node)) {
1086  fprintf(fp,"driver(%s)\n",pdrvSup->name);
1087  }
1088  return(0);
1089 }
ELLLIST drvList
Definition: dbBase.h:173
Definition: dbBase.h:32
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
ELLNODE node
Definition: dbBase.h:33
#define stderr
Definition: epicsStdio.h:32
char * name
Definition: dbBase.h:34
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteFunctionFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1121 of file dbStaticLib.c.

1122 {
1123  dbText *ptext;
1124 
1125  if(!pdbbase) {
1126  fprintf(stderr,"pdbbase not specified\n");
1127  return(-1);
1128  }
1129  for(ptext = (dbText *)ellFirst(&pdbbase->functionList);
1130  ptext; ptext = (dbText *)ellNext(&ptext->node)) {
1131  fprintf(fp,"function(%s)\n",ptext->text);
1132  }
1133  return(0);
1134 }
ELLNODE node
Definition: dbBase.h:134
ELLLIST functionList
Definition: dbBase.h:176
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
char * text
Definition: dbBase.h:135
#define stderr
Definition: epicsStdio.h:32
Definition: dbBase.h:133
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteLinkFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1091 of file dbStaticLib.c.

1092 {
1093  linkSup *plinkSup;
1094 
1095  if (!pdbbase) {
1096  fprintf(stderr, "pdbbase not specified\n");
1097  return -1;
1098  }
1099  for (plinkSup = (linkSup *) ellFirst(&pdbbase->linkList);
1100  plinkSup; plinkSup = (linkSup *) ellNext(&plinkSup->node)) {
1101  fprintf(fp, "link(%s,%s)\n", plinkSup->name, plinkSup->jlif_name);
1102  }
1103  return 0;
1104 }
char * jlif_name
Definition: dbBase.h:51
ELLLIST linkList
Definition: dbBase.h:174
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
Definition: dbBase.h:48
ELLNODE node
Definition: dbBase.h:49
#define stderr
Definition: epicsStdio.h:32
char * name
Definition: dbBase.h:50
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteMenu ( DBBASE pdbbase,
const char *  filename,
const char *  menuName 
)

Definition at line 885 of file dbStaticLib.c.

887 {
888  FILE *stream;
889  long status;
890 
891  stream = openOutstream(filename);
892  status = dbWriteMenuFP(ppdbbase,stream,menuName);
893  finishOutstream(stream);
894  return status;
895 }
pvd::Status status
long dbWriteMenuFP(DBBASE *pdbbase, FILE *fp, const char *menuName)
Definition: dbStaticLib.c:897
epicsShareFunc long dbWriteMenuFP ( DBBASE pdbbase,
FILE *  fp,
const char *  menuName 
)

Definition at line 897 of file dbStaticLib.c.

898 {
899  dbMenu *pdbMenu;
900  int gotMatch;
901  int i;
902 
903  if(!pdbbase) {
904  fprintf(stderr,"pdbbase not specified\n");
905  return(-1);
906  }
907  if (menuName) {
908  if (*menuName == 0 || *menuName == '*')
909  menuName = 0;
910  }
911  pdbMenu = (dbMenu *)ellFirst(&pdbbase->menuList);
912  while(pdbMenu) {
913  if(menuName) {
914  gotMatch = (strcmp(menuName,pdbMenu->name)==0) ? TRUE : FALSE;
915  }else {
916  gotMatch=TRUE;
917  }
918  if(gotMatch) {
919  fprintf(fp,"menu(%s) {\n",pdbMenu->name);
920  for(i=0; i<pdbMenu->nChoice; i++) {
921  fprintf(fp,"\tchoice(%s,\"%s\")\n",pdbMenu->papChoiceName[i],
922  pdbMenu->papChoiceValue[i]);
923  }
924  fprintf(fp,"}\n");
925  if(menuName) break;
926  }
927  pdbMenu = (dbMenu *)ellNext(&pdbMenu->node);
928  }
929  return(0);
930 }
char ** papChoiceName
Definition: dbBase.h:28
#define FALSE
Definition: dbDefs.h:32
int i
Definition: scan.c:967
char * name
Definition: dbBase.h:26
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
char ** papChoiceValue
Definition: dbBase.h:29
ELLLIST menuList
Definition: dbBase.h:171
Definition: dbBase.h:24
int nChoice
Definition: dbBase.h:27
#define TRUE
Definition: dbDefs.h:27
#define stderr
Definition: epicsStdio.h:32
ELLNODE node
Definition: dbBase.h:25
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteRecord ( DBBASE ppdbbase,
const char *  filename,
const char *  precordTypename,
int  level 
)

Definition at line 779 of file dbStaticLib.c.

781 {
782  FILE *stream;
783  long status;
784 
785  stream = openOutstream(filename);
786  if(!stream) return -1;
787  status = dbWriteRecordFP(ppdbbase,stream,precordTypename,level);
788  finishOutstream(stream);
789  return status;
790 }
pvd::Status status
long dbWriteRecordFP(DBBASE *pdbbase, FILE *fp, const char *precordTypename, int level)
Definition: dbStaticLib.c:792
epicsShareFunc long dbWriteRecordFP ( DBBASE ppdbbase,
FILE *  fp,
const char *  precordTypename,
int  level 
)

Definition at line 792 of file dbStaticLib.c.

794 {
795  DBENTRY dbentry;
796  DBENTRY *pdbentry=&dbentry;
797  long status;
798  int dctonly;
799 
800  dctonly = ((level>1) ? FALSE : TRUE);
801  dbInitEntry(pdbbase,pdbentry);
802  if (precordTypename) {
803  if (*precordTypename == 0 || *precordTypename == '*')
804  precordTypename = 0;
805  }
806 
807  if(!precordTypename) {
808  status = dbFirstRecordType(pdbentry);
809  if(status) {
810  /* No record descriptions, so no record instances */
811  dbFinishEntry(pdbentry);
812  return(0);
813  }
814  } else {
815  status = dbFindRecordType(pdbentry,precordTypename);
816  if(status) {
817  fprintf(stderr,"dbWriteRecordFP: No record description for %s\n",
818  precordTypename);
819  dbFinishEntry(pdbentry);
820  return(status);
821  }
822  }
823  while(!status) {
824  status = dbFirstRecord(pdbentry);
825  while(!status) {
826  if (dbIsAlias(pdbentry)) {
827  status = dbNextRecord(pdbentry);
828  continue;
829  }
830  if(dbIsVisibleRecord(pdbentry))
831  fprintf(fp,"grecord(%s,\"%s\") {\n",
832  dbGetRecordTypeName(pdbentry),dbGetRecordName(pdbentry));
833  else
834  fprintf(fp,"record(%s,\"%s\") {\n",
835  dbGetRecordTypeName(pdbentry),dbGetRecordName(pdbentry));
836  status = dbFirstField(pdbentry,dctonly);
837  while(!status) {
838  if (!dbIsDefaultValue(pdbentry) || level>0) {
839  char *pvalstring = dbGetString(pdbentry);
840 
841  if (!pvalstring) {
842  fprintf(fp,"\tfield(%s,\"\")\n",
843  dbGetFieldName(pdbentry));
844  } else {
845  fprintf(fp,"\tfield(%s,\"",
846  dbGetFieldName(pdbentry));
847  epicsStrPrintEscaped(fp,pvalstring,strlen(pvalstring));
848  fprintf(fp,"\")\n");
849  }
850  } else if(level>0) { /*generate 0 length string*/
851  fprintf(fp,"\tfield(%s,\"\")\n",dbGetFieldName(pdbentry));
852  }
853  status=dbNextField(pdbentry,dctonly);
854  }
855  status = dbFirstInfo(pdbentry);
856  while (!status) {
857  const char *pinfostr = dbGetInfoString(pdbentry);
858 
859  fprintf(fp, "\tinfo(\"%s\",\"",
860  dbGetInfoName(pdbentry));
861  epicsStrPrintEscaped(fp, pinfostr, strlen(pinfostr));
862  fprintf(fp, "\")\n");
863  status = dbNextInfo(pdbentry);
864  }
865  fprintf(fp,"}\n");
866  status = dbNextRecord(pdbentry);
867  }
868  status = dbFirstRecord(pdbentry);
869  while (!status) {
870  if (!dbIsAlias(pdbentry)) {
871  status = dbNextRecord(pdbentry);
872  continue;
873  }
874  fprintf(fp, "alias(\"%s\",\"%s\")\n",
875  dbRecordName(pdbentry), dbGetRecordName(pdbentry));
876  status = dbNextRecord(pdbentry);
877  }
878  if(precordTypename) break;
879  status = dbNextRecordType(pdbentry);
880  }
881  dbFinishEntry(pdbentry);
882  return(0);
883 }
long dbFirstField(DBENTRY *pdbentry, int dctonly)
Definition: dbStaticLib.c:1316
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
const char * dbGetInfoName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2901
long dbFirstRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1198
long dbNextInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2827
#define FALSE
Definition: dbDefs.h:32
pvd::Status status
int dbIsVisibleRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1640
long dbFindRecordType(DBENTRY *pdbentry, const char *recordType)
Definition: dbStaticLib.c:1186
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
long dbNextRecordType(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1209
long dbNextRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1583
char * dbRecordName(DBENTRY *pdbentry)
Definition: dbStaticRun.c:201
const char * dbGetInfoString(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2908
long dbNextField(DBENTRY *pdbentry, int dctonly)
Definition: dbStaticLib.c:1323
int dbIsAlias(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1700
int epicsStrPrintEscaped(FILE *fp, const char *s, size_t len)
Definition: epicsString.c:238
char * dbGetFieldName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1376
char * dbGetRecordName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1612
long dbFirstInfo(DBENTRY *pdbentry)
Definition: dbStaticLib.c:2816
char * dbGetString(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1845
#define TRUE
Definition: dbDefs.h:27
long dbFirstRecord(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1569
#define stderr
Definition: epicsStdio.h:32
char * dbGetRecordTypeName(DBENTRY *pdbentry)
Definition: dbStaticLib.c:1220
epicsShareFunc int dbIsDefaultValue(DBENTRY *pdbentry)
Definition: dbStaticRun.c:219
epicsShareFunc long dbWriteRecordType ( DBBASE pdbbase,
const char *  filename,
const char *  recordTypeName 
)

Definition at line 932 of file dbStaticLib.c.

934 {
935  FILE *stream;
936  long status;
937 
938  stream = openOutstream(filename);
939  status = dbWriteRecordTypeFP(pdbbase,stream,recordTypeName);
940  finishOutstream(stream);
941  return status;
942 }
pvd::Status status
long dbWriteRecordTypeFP(DBBASE *pdbbase, FILE *fp, const char *recordTypeName)
Definition: dbStaticLib.c:944
epicsShareFunc long dbWriteRecordTypeFP ( DBBASE pdbbase,
FILE *  fp,
const char *  recordTypeName 
)

Definition at line 944 of file dbStaticLib.c.

946 {
947  dbRecordType *pdbRecordType;
948  dbFldDes *pdbFldDes;
949  int gotMatch;
950  int i;
951 
952  if(!pdbbase) {
953  fprintf(stderr,"pdbbase not specified\n");
954  return(-1);
955  }
956  if (recordTypeName) {
957  if (*recordTypeName == 0 || *recordTypeName == '*')
958  recordTypeName = 0;
959  }
960 
961  for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList);
962  pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
963  if(recordTypeName) {
964  gotMatch = (strcmp(recordTypeName,pdbRecordType->name)==0)
965  ? TRUE : FALSE;
966  }else {
967  gotMatch=TRUE;
968  }
969  if(!gotMatch) continue;
970  fprintf(fp,"recordtype(%s) {\n",pdbRecordType->name);
971  for(i=0; i<pdbRecordType->no_fields; i++) {
972  int j;
973 
974  pdbFldDes = pdbRecordType->papFldDes[i];
975  fprintf(fp,"\tfield(%s,%s) {\n",pdbFldDes->name,
976  dbGetFieldTypeString(pdbFldDes->field_type));
977  if(pdbFldDes->prompt)
978  fprintf(fp,"\t\tprompt(\"%s\")\n",pdbFldDes->prompt);
979  if(pdbFldDes->initial)
980  fprintf(fp,"\t\tinitial(\"%s\")\n",pdbFldDes->initial);
981  if (pdbFldDes->promptgroup) {
982  fprintf(fp,"\t\tpromptgroup(\"%s\")\n",
983  dbGetPromptGroupNameFromKey(pdbbase, pdbFldDes->promptgroup));
984  }
985  if(pdbFldDes->special) {
986  if(pdbFldDes->special >= SPC_NTYPES) {
987  fprintf(fp,"\t\tspecial(%d)\n",pdbFldDes->special);
988  } else for(j=0; j<SPC_NTYPES; j++) {
989  if(pamapspcType[j].value == pdbFldDes->special) {
990  fprintf(fp,"\t\tspecial(%s)\n",
991  pamapspcType[j].strvalue);
992  break;
993  }
994  }
995  }
996  if(pdbFldDes->extra)
997  fprintf(fp,"\t\textra(\"%s\")\n",pdbFldDes->extra);
998  if(pdbFldDes->field_type==DBF_MENU) {
999  if(pdbFldDes->ftPvt)
1000  fprintf(fp,"\t\tmenu(%s)\n",
1001  ((dbMenu *)pdbFldDes->ftPvt)->name);
1002  else
1003  fprintf(stderr,"\t\t menu: NOT FOUND\n");
1004  }
1005  if(pdbFldDes->field_type==DBF_STRING) {
1006  fprintf(fp,"\t\tsize(%d)\n",
1007  pdbFldDes->size);
1008  }
1009  if(pdbFldDes->process_passive) fprintf(fp,"\t\tpp(TRUE)\n");
1010  if(pdbFldDes->prop) fprintf(fp,"\t\tprop(YES)\n");
1011  if(pdbFldDes->base) fprintf(fp,"\t\tbase(HEX)\n");
1012  if(pdbFldDes->interest)
1013  fprintf(fp,"\t\tinterest(%d)\n",pdbFldDes->interest);
1014  if(!pdbFldDes->as_level) fprintf(fp,"\t\tasl(ASL0)\n");
1015  fprintf(fp,"\t}\n");
1016  }
1017  fprintf(fp,"}\n");
1018  if(recordTypeName) break;
1019  }
1020  return(0);
1021 }
#define SPC_NTYPES
Definition: special.h:42
Definition: link.h:174
short promptgroup
Definition: dbBase.h:91
#define FALSE
Definition: dbDefs.h:32
short special
Definition: dbBase.h:85
int i
Definition: scan.c:967
ELLLIST recordTypeList
Definition: dbBase.h:172
ELLNODE node
Definition: dbBase.h:146
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
short interest
Definition: dbBase.h:92
short size
Definition: dbBase.h:98
unsigned int process_passive
Definition: dbBase.h:87
ctType base
Definition: dbBase.h:90
short no_fields
Definition: dbBase.h:152
char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase, const short key)
Definition: dbStaticLib.c:753
char * name
Definition: dbBase.h:151
mapspcType pamapspcType[]
Definition: dbBase.h:24
asLevel as_level
Definition: dbBase.h:93
unsigned int prop
Definition: dbBase.h:88
#define TRUE
Definition: dbDefs.h:27
void * ftPvt
Definition: dbBase.h:96
dbFldDes ** papFldDes
Definition: dbBase.h:161
const char * dbGetFieldTypeString(int dbfType)
Definition: dbStaticLib.c:2988
char * extra
Definition: dbBase.h:82
char * initial
Definition: dbBase.h:94
#define stderr
Definition: epicsStdio.h:32
char * prompt
Definition: dbBase.h:80
char * name
Definition: dbBase.h:81
dbfType field_type
Definition: dbBase.h:86
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteRegistrarFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1106 of file dbStaticLib.c.

1107 {
1108  dbText *ptext;
1109 
1110  if(!pdbbase) {
1111  fprintf(stderr,"pdbbase not specified\n");
1112  return(-1);
1113  }
1114  for(ptext = (dbText *)ellFirst(&pdbbase->registrarList);
1115  ptext; ptext = (dbText *)ellNext(&ptext->node)) {
1116  fprintf(fp,"registrar(%s)\n",ptext->text);
1117  }
1118  return(0);
1119 }
ELLNODE node
Definition: dbBase.h:134
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
char * text
Definition: dbBase.h:135
#define stderr
Definition: epicsStdio.h:32
ELLLIST registrarList
Definition: dbBase.h:175
Definition: dbBase.h:133
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
epicsShareFunc long dbWriteVariableFP ( DBBASE pdbbase,
FILE *  fp 
)

Definition at line 1136 of file dbStaticLib.c.

1137 {
1138  dbVariableDef *pvar;
1139 
1140  if(!pdbbase) {
1141  fprintf(stderr,"pdbbase not specified\n");
1142  return(-1);
1143  }
1144  for(pvar = (dbVariableDef *)ellFirst(&pdbbase->variableList);
1145  pvar; pvar = (dbVariableDef *)ellNext(&pvar->node)) {
1146  fprintf(fp,"variable(%s,%s)\n",pvar->name,pvar->type);
1147  }
1148  return(0);
1149 }
char * name
Definition: dbBase.h:140
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
ELLNODE node
Definition: dbBase.h:139
#define stderr
Definition: epicsStdio.h:32
char * type
Definition: dbBase.h:141
ELLLIST variableList
Definition: dbBase.h:177
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89

Variable Documentation

epicsShareExtern int dbBptNotMonotonic

Definition at line 57 of file dbStaticLib.h.

int dbConvertStrict

Definition at line 34 of file dbStaticRun.c.

int dbStaticDebug

Definition at line 49 of file dbStaticLib.c.