dbStatic: Add field type lookup routines

This commit is contained in:
Andrew Johnson
2015-03-18 16:34:07 -05:00
parent e1b2a0c5a3
commit 1fd91f52e2
3 changed files with 35 additions and 23 deletions

View File

@@ -486,13 +486,10 @@ static void dbRecordtypeFieldHead(char *name,char *type)
allocTemp(pdbFldDes);
pdbFldDes->name = epicsStrDup(name);
pdbFldDes->as_level = ASL1;
for(i=0; i<DBF_NTYPES; i++) {
if(strcmp(type,pamapdbfType[i].strvalue)==0) {
pdbFldDes->field_type = pamapdbfType[i].value;
return;
}
}
yyerrorAbort("Illegal Field Type");
i = dbFindFieldType(type);
if (i < 0)
yyerrorAbort("Illegal Field Type");
pdbFldDes->field_type = i;
}
static void dbRecordtypeFieldItem(char *name,char *value)

View File

@@ -928,15 +928,8 @@ long dbWriteRecordTypeFP(
int j;
pdbFldDes = pdbRecordType->papFldDes[i];
fprintf(fp,"\tfield(%s,",pdbFldDes->name);
for(j=0; j<DBF_NTYPES; j++) {
if(pamapdbfType[j].value == pdbFldDes->field_type) break;
}
if(j>=DBF_NTYPES)
fprintf(stderr,"\t field_type: %d\n",
pdbFldDes->field_type);
else
fprintf(fp,"%s) {\n",pamapdbfType[j].strvalue);
fprintf(fp,"\tfield(%s,%s) {\n",pdbFldDes->name,
dbGetFieldTypeString(pdbFldDes->field_type));
if(pdbFldDes->prompt)
fprintf(fp,"\t\tprompt(\"%s\")\n",pdbFldDes->prompt);
if(pdbFldDes->initial)
@@ -2755,6 +2748,30 @@ brkTable * dbFindBrkTable(dbBase *pdbbase,const char *name)
return((brkTable *)pgph->userPvt);
}
const char * dbGetFieldTypeString(int dbfType)
{
int i;
for (i=0; i < DBF_NTYPES; i++) {
if (pamapdbfType[i].value == dbfType) {
return pamapdbfType[i].strvalue;
}
}
return "BAD_DBF_TYPE";
}
int dbFindFieldType(const char *type)
{
int i;
for (i = 0; i < DBF_NTYPES; i++) {
if (strcmp(type, pamapdbfType[i].strvalue) == 0) {
return pamapdbfType[i].value;
}
}
return -1;
}
dbMenu * dbFindMenu(dbBase *pdbbase,const char *name)
{
GPHENTRY *pgph;
@@ -3143,13 +3160,8 @@ void dbDumpField(
}
}
printf("\n");
for(j=0; j<DBF_NTYPES; j++) {
if(pamapdbfType[j].value == pdbFldDes->field_type) break;
}
if(j>=DBF_NTYPES)
printf("\t field_type: %d\n", pdbFldDes->field_type);
else
printf("\t field_type: %s\n", pamapdbfType[j].strvalue);
printf("\t field_type: %s\n",
dbGetFieldTypeString(pdbFldDes->field_type));
printf("\tprocess_passive: %u\n",pdbFldDes->process_passive);
printf("\t property: %u\n",pdbFldDes->prop);
printf("\t base: %d\n",pdbFldDes->base);

View File

@@ -190,6 +190,9 @@ epicsShareFunc long dbPutInfo(DBENTRY *pdbentry,
epicsShareFunc brkTable * dbFindBrkTable(DBBASE *pdbbase,
const char *name);
epicsShareFunc const char * dbGetFieldTypeString(int dbfType);
epicsShareFunc int dbFindFieldType(const char *type);
epicsShareFunc dbMenu * dbFindMenu(DBBASE *pdbbase,
const char *name);
epicsShareFunc char ** dbGetMenuChoices(DBENTRY *pdbentry);