diff --git a/src/dbStatic/dbExpandInclude.c b/src/dbStatic/dbExpandInclude.c index d2be874d8..15ae5b657 100644 --- a/src/dbStatic/dbExpandInclude.c +++ b/src/dbStatic/dbExpandInclude.c @@ -63,6 +63,7 @@ int main(int argc,char **argv) dbWriteRecDesFP(pdbbase,stdout,0); dbWriteDeviceFP(pdbbase,stdout); dbWriteDriverFP(pdbbase,stdout); + dbWriteBreaktableFP(pdbbase,stdout); dbWriteRecordFP(pdbbase,stdout,0,0); return(0); } diff --git a/src/dbStatic/dbStaticLib.c b/src/dbStatic/dbStaticLib.c index 2eac7507b..864aa6093 100644 --- a/src/dbStatic/dbStaticLib.c +++ b/src/dbStatic/dbStaticLib.c @@ -737,7 +737,7 @@ long dbWriteDeviceFP(DBBASE *pdbbase,FILE *fp) } return(0); } - + long dbWriteDriver(DBBASE *pdbbase,const char *filename) { FILE *outFile; @@ -769,6 +769,44 @@ long dbWriteDriverFP(DBBASE *pdbbase,FILE *fp) return(0); } +long dbWriteBreaktable(DBBASE *pdbbase,const char *filename) +{ + FILE *outFile; + + outFile = fopen(filename,"w"); + if(!outFile) { + errPrintf(0,__FILE__,__LINE__,"Error opening %s\n",filename); + return(-1); + } + dbWriteBreaktableFP(pdbbase,outFile); + if(fclose(outFile)) { + errPrintf(0,__FILE__,__LINE__,"Error closing %s\n",filename); + } + return(0); +} + +long dbWriteBreaktableFP(DBBASE *pdbbase,FILE *fp) +{ + brkTable *pbrkTable; + brkInt *pbrkInt; + int ind; + + if(!pdbbase) { + fprintf(stderr,"pdbbase not specified\n"); + return(-1); + } + for(pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList); + pbrkTable; pbrkTable = (brkTable *)ellNext(&pbrkTable->node)) { + fprintf(fp,"breaktable(%s) {\n",pbrkTable->name); + for(ind=0; indnumber; ind++) { + pbrkInt = pbrkTable->papBrkInt[ind]; + fprintf(fp,"\t%f %f\n",pbrkInt->raw,pbrkInt->eng); + } + fprintf(fp,"}\n"); + } + return(0); +} + long dbFindRecdes(DBENTRY *pdbentry,char *rectype) { dbBase *pdbbase = pdbentry->pdbbase; @@ -2825,6 +2863,29 @@ void dbDumpDriver(DBBASE *pdbbase) } dbWriteDriverFP(pdbbase,stdout); } + +void dbDumpBreaktable(DBBASE *pdbbase,char *name) +{ + brkTable *pbrkTable; + brkInt *pbrkInt; + int ind; + + if(!pdbbase) { + fprintf(stderr,"pdbbase not specified\n"); + return; + } + for(pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList); + pbrkTable; pbrkTable = (brkTable *)ellNext(&pbrkTable->node)) { + if(name && strcmp(name,pbrkTable->name)!=0) continue; + printf("breaktable(%s) {\n",pbrkTable->name); + for(ind=0; indnumber; ind++) { + pbrkInt = pbrkTable->papBrkInt[ind]; + printf("\t%f %e %f\n",pbrkInt->raw,pbrkInt->slope,pbrkInt->eng); + } + printf("}\n"); + } + return; +} static char *bus[VXI_IO+1] = {"","","VME","CAMAC","AB", "GPIB","BITBUS","","","","","","INST","BBGPIB","VXI"}; diff --git a/src/dbStatic/dbStaticLib.h b/src/dbStatic/dbStaticLib.h index 084e20411..aa1e1c7c1 100644 --- a/src/dbStatic/dbStaticLib.h +++ b/src/dbStatic/dbStaticLib.h @@ -104,6 +104,8 @@ long dbWriteDevice(DBBASE *pdbbase,const char *filename); long dbWriteDeviceFP(DBBASE *pdbbase,FILE *fp); long dbWriteDriver(DBBASE *pdbbase,const char *filename); long dbWriteDriverFP(DBBASE *pdbbase,FILE *fp); +long dbWriteBreaktable(DBBASE *pdbbase,const char *filename); +long dbWriteBreaktableFP(DBBASE *pdbbase,FILE *fp); /*Following two routines are obsolete. For now dbRead calls dbAsciiRead.*/ /* dbWrite does nothing */ @@ -171,6 +173,7 @@ void dbDumpRecDes(DBBASE *pdbbase,char *recdesName); void dbDumpFldDes(DBBASE *pdbbase,char *recdesName,char *fname); void dbDumpDevice(DBBASE *pdbbase,char *recdesName); void dbDumpDriver(DBBASE *pdbbase); +void dbDumpBreaktable(DBBASE *pdbbase,char *name); void dbPvdDump(DBBASE *pdbbase,int verbose); void dbReportDeviceConfig(DBBASE *pdbbase,FILE *report); diff --git a/src/dbStatic/dbYacc.y b/src/dbStatic/dbYacc.y index 1231eff74..b85aaa5d0 100644 --- a/src/dbStatic/dbYacc.y +++ b/src/dbStatic/dbYacc.y @@ -145,7 +145,9 @@ break_body : '{' break_list '}' dbBreakBody(); }; -break_list: break_list ',' break_item | break_item; +break_list: break_list ',' break_item + | break_list break_item + | break_item; break_item: tokenSTRING {