From 1fd91f52e2882c94eaadc9b20c165b54ee72f693 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 18 Mar 2015 16:34:07 -0500 Subject: [PATCH] dbStatic: Add field type lookup routines --- src/ioc/dbStatic/dbLexRoutines.c | 11 +++----- src/ioc/dbStatic/dbStaticLib.c | 44 ++++++++++++++++++++------------ src/ioc/dbStatic/dbStaticLib.h | 3 +++ 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c index 6c3d94561..39124289e 100644 --- a/src/ioc/dbStatic/dbLexRoutines.c +++ b/src/ioc/dbStatic/dbLexRoutines.c @@ -486,13 +486,10 @@ static void dbRecordtypeFieldHead(char *name,char *type) allocTemp(pdbFldDes); pdbFldDes->name = epicsStrDup(name); pdbFldDes->as_level = ASL1; - for(i=0; ifield_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) diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c index 18221af0b..dfbf3ab14 100644 --- a/src/ioc/dbStatic/dbStaticLib.c +++ b/src/ioc/dbStatic/dbStaticLib.c @@ -928,15 +928,8 @@ long dbWriteRecordTypeFP( int j; pdbFldDes = pdbRecordType->papFldDes[i]; - fprintf(fp,"\tfield(%s,",pdbFldDes->name); - for(j=0; jfield_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; jfield_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); diff --git a/src/ioc/dbStatic/dbStaticLib.h b/src/ioc/dbStatic/dbStaticLib.h index a1752319f..93f7f27d2 100644 --- a/src/ioc/dbStatic/dbStaticLib.h +++ b/src/ioc/dbStatic/dbStaticLib.h @@ -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);