Added support for new variable dbd keyword, integers only so far.
This commit is contained in:
@@ -145,6 +145,7 @@ typedef struct dbBase {
|
||||
ELLLIST recordTypeList;
|
||||
ELLLIST drvList;
|
||||
ELLLIST registrarList;
|
||||
ELLLIST variableList;
|
||||
ELLLIST bptList; /*Break Point Table Head*/
|
||||
void *pathPvt;
|
||||
void *ppvd; /* pointer to process variable directory*/
|
||||
|
||||
@@ -91,6 +91,7 @@ int main(int argc,char **argv)
|
||||
dbWriteDeviceFP(pdbbase,stdout);
|
||||
dbWriteDriverFP(pdbbase,stdout);
|
||||
dbWriteRegistrarFP(pdbbase,stdout);
|
||||
dbWriteVariableFP(pdbbase,stdout);
|
||||
dbWriteBreaktableFP(pdbbase,stdout);
|
||||
dbWriteRecordFP(pdbbase,stdout,0,0);
|
||||
free((void *)path);
|
||||
|
||||
@@ -31,7 +31,8 @@ static int yyreset(void)
|
||||
"record" return(tokenRECORD);
|
||||
"grecord" return(tokenGRECORD);
|
||||
"info" return(tokenINFO);
|
||||
"registrar" return(tokenREGISTRAR);
|
||||
"registrar" return(tokenREGISTRAR);
|
||||
"variable" return(tokenVARIABLE);
|
||||
|
||||
[0-9]+ { /*integer number*/
|
||||
yylval.Str = (char *)dbmfMalloc(strlen(yytext)+1);
|
||||
|
||||
@@ -64,6 +64,7 @@ static void dbDevice(char *recordtype,char *linktype,
|
||||
char *dsetname,char *choicestring);
|
||||
static void dbDriver(char *name);
|
||||
static void dbRegistrar(char *name);
|
||||
static void dbVariable(char *name);
|
||||
|
||||
static void dbBreakHead(char *name);
|
||||
static void dbBreakItem(char *value);
|
||||
@@ -757,6 +758,25 @@ static void dbRegistrar(char *name)
|
||||
ellAdd(&pdbbase->registrarList,&ptext->node);
|
||||
}
|
||||
|
||||
static void dbVariable(char *name)
|
||||
{
|
||||
dbText *ptext;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->variableList);
|
||||
if(pgphentry) {
|
||||
return;
|
||||
}
|
||||
ptext = dbCalloc(1,sizeof(dbText));
|
||||
ptext->text = epicsStrDup(name);
|
||||
pgphentry = gphAdd(pdbbase->pgpHash,ptext->text,&pdbbase->variableList);
|
||||
if(!pgphentry) {
|
||||
yyerrorAbort("gphAdd failed");
|
||||
}
|
||||
pgphentry->userPvt = ptext;
|
||||
ellAdd(&pdbbase->variableList,&ptext->node);
|
||||
}
|
||||
|
||||
static void dbBreakHead(char *name)
|
||||
{
|
||||
brkTable *pbrkTable;
|
||||
|
||||
@@ -546,6 +546,7 @@ dbBase * epicsShareAPI dbAllocBase(void)
|
||||
ellInit(&pdbbase->recordTypeList);
|
||||
ellInit(&pdbbase->drvList);
|
||||
ellInit(&pdbbase->registrarList);
|
||||
ellInit(&pdbbase->variableList);
|
||||
ellInit(&pdbbase->bptList);
|
||||
gphInitPvt(&pdbbase->pgpHash,256);
|
||||
dbPvdInitPvt(pdbbase);
|
||||
@@ -673,6 +674,14 @@ void epicsShareAPI dbFreeBase(dbBase *pdbbase)
|
||||
free((void *)ptext);
|
||||
ptext = ptextNext;
|
||||
}
|
||||
ptext = (dbText *)ellFirst(&pdbbase->variableList);
|
||||
while(ptext) {
|
||||
ptextNext = (dbText *)ellNext(&ptext->node);
|
||||
ellDelete(&pdbbase->variableList,&ptext->node);
|
||||
free((void *)ptext->text);
|
||||
free((void *)ptext);
|
||||
ptext = ptextNext;
|
||||
}
|
||||
pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList);
|
||||
while(pbrkTable) {
|
||||
pbrkTableNext = (brkTable *)ellNext(&pbrkTable->node);
|
||||
@@ -1163,6 +1172,21 @@ long epicsShareAPI dbWriteRegistrarFP(DBBASE *pdbbase,FILE *fp)
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
long epicsShareAPI dbWriteVariableFP(DBBASE *pdbbase,FILE *fp)
|
||||
{
|
||||
dbText *ptext;
|
||||
|
||||
if(!pdbbase) {
|
||||
fprintf(stderr,"pdbbase not specified\n");
|
||||
return(-1);
|
||||
}
|
||||
for(ptext = (dbText *)ellFirst(&pdbbase->variableList);
|
||||
ptext; ptext = (dbText *)ellNext(&ptext->node)) {
|
||||
fprintf(fp,"variable(%s)\n",ptext->text);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
long epicsShareAPI dbWriteBreaktable(DBBASE *pdbbase,const char *filename)
|
||||
{
|
||||
@@ -3778,6 +3802,15 @@ void epicsShareAPI dbDumpRegistrar(DBBASE *pdbbase)
|
||||
dbWriteRegistrarFP(pdbbase,stdout);
|
||||
}
|
||||
|
||||
void epicsShareAPI dbDumpVariable(DBBASE *pdbbase)
|
||||
{
|
||||
if(!pdbbase) {
|
||||
printf("pdbbase not specified\n");
|
||||
return;
|
||||
}
|
||||
dbWriteVariableFP(pdbbase,stdout);
|
||||
}
|
||||
|
||||
void epicsShareAPI dbDumpBreaktable(DBBASE *pdbbase,const char *name)
|
||||
{
|
||||
brkTable *pbrkTable;
|
||||
|
||||
@@ -100,6 +100,7 @@ epicsShareFunc long epicsShareAPI dbWriteDriver(
|
||||
DBBASE *pdbbase,const char *filename);
|
||||
epicsShareFunc long epicsShareAPI dbWriteDriverFP(DBBASE *pdbbase,FILE *fp);
|
||||
epicsShareFunc long epicsShareAPI dbWriteRegistrarFP(DBBASE *pdbbase,FILE *fp);
|
||||
epicsShareFunc long epicsShareAPI dbWriteVariableFP(DBBASE *pdbbase,FILE *fp);
|
||||
epicsShareFunc long epicsShareAPI dbWriteBreaktable(
|
||||
DBBASE *pdbbase,const char *filename);
|
||||
epicsShareFunc long epicsShareAPI dbWriteBreaktableFP(DBBASE *pdbbase,FILE *fp);
|
||||
@@ -215,6 +216,7 @@ epicsShareFunc void epicsShareAPI dbDumpDevice(
|
||||
DBBASE *pdbbase,const char *recordTypeName);
|
||||
epicsShareFunc void epicsShareAPI dbDumpDriver(DBBASE *pdbbase);
|
||||
epicsShareFunc void epicsShareAPI dbDumpRegistrar(DBBASE *pdbbase);
|
||||
epicsShareFunc void epicsShareAPI dbDumpVariable(DBBASE *pdbbase);
|
||||
epicsShareFunc void epicsShareAPI dbDumpBreaktable(
|
||||
DBBASE *pdbbase,const char *name);
|
||||
epicsShareFunc void epicsShareAPI dbPvdDump(DBBASE *pdbbase,int verbose);
|
||||
|
||||
@@ -13,7 +13,7 @@ static int yyAbort = 0;
|
||||
%token tokenMENU tokenCHOICE tokenRECORDTYPE
|
||||
%token tokenFIELD tokenINFO tokenREGISTRAR
|
||||
%token tokenDEVICE tokenDRIVER tokenBREAKTABLE
|
||||
%token tokenRECORD tokenGRECORD
|
||||
%token tokenRECORD tokenGRECORD tokenVARIABLE
|
||||
%token <Str> tokenSTRING tokenCDEFS
|
||||
|
||||
%union
|
||||
@@ -33,6 +33,7 @@ database_item: include
|
||||
| device
|
||||
| driver
|
||||
| registrar
|
||||
| variable
|
||||
| tokenBREAKTABLE break_head break_body
|
||||
| tokenRECORD record_head record_body
|
||||
| tokenGRECORD grecord_head record_body
|
||||
@@ -146,6 +147,12 @@ registrar: tokenREGISTRAR '(' tokenSTRING ')'
|
||||
dbRegistrar($3); dbmfFree($3);
|
||||
};
|
||||
|
||||
variable: tokenVARIABLE '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbStaticDebug>2) printf("variable %s\n",$3);
|
||||
dbVariable($3); dbmfFree($3);
|
||||
};
|
||||
|
||||
break_head: '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbStaticDebug>2) printf("break_head %s\n",$2);
|
||||
|
||||
Reference in New Issue
Block a user