Added support for new variable dbd keyword, integers only so far.

This commit is contained in:
Andrew Johnson
2003-07-16 18:35:26 +00:00
parent 067c0a3db1
commit da56d5e2b8
7 changed files with 67 additions and 2 deletions

View File

@@ -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*/

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);