diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index bf045b0f3..cddc2bfd5 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -15,6 +15,13 @@ EPICS Base 3.15.0.x releases are not intended for use in production systems.

Changes between 3.15.0.1 and 3.15.0.2

+

Post DBE_PROPERTY events automatically

+ +

A new record field attribute "prop(YES)" has been added to identify fields +holding meta-data. External changes to these fields will cause a CA monitor +event to be sent to all record subscribers who have asked for DBE_PROPERTY +updates. Meta-data fields have been marked for all Base record types.

+

errlogRemoveListener() routine changed

Code that calls errlogRemoveListener(myfunc) must be modified to use diff --git a/src/ioc/db/dbAccess.c b/src/ioc/db/dbAccess.c index 40039b0c9..904423a71 100644 --- a/src/ioc/db/dbAccess.c +++ b/src/ioc/db/dbAccess.c @@ -1208,13 +1208,19 @@ long dbPut(DBADDR *paddr, short dbrType, } /* Propagate monitor events for this field, */ - /* unless the field field is VAL and PP is true. */ + /* unless the field is VAL and PP is true. */ pfldDes = paddr->pfldDes; isValueField = dbIsValueField(pfldDes); if (isValueField) precord->udf = FALSE; if (precord->mlis.count && !(isValueField && pfldDes->process_passive)) db_post_events(precord, paddr->pfield, DBE_VALUE | DBE_LOG); + /* If this field is a property (metadata) field, + * then post a property change event (even if the field + * didn't change). + */ + if (precord->mlis.count && pfldDes->prop) + db_post_events(precord, NULL, DBE_PROPERTY); return status; } diff --git a/src/ioc/dbStatic/dbBase.h b/src/ioc/dbStatic/dbBase.h index 6be2465d5..6ef2d2b3c 100644 --- a/src/ioc/dbStatic/dbBase.h +++ b/src/ioc/dbStatic/dbBase.h @@ -69,25 +69,26 @@ typedef struct brkTable { /* breakpoint table */ }brkTable; typedef struct dbFldDes{ /* field description */ - char *prompt; /*Prompt string for DCT*/ - char *name; /*Field name*/ - char *extra; /*C def for DBF_NOACCESS*/ - struct dbRecordType *pdbRecordType; - short indRecordType; /*within dbRecordType.papFldDes */ - short special; /*Special processing requirements */ - dbfType field_type; /*Field type as defined in dbFldTypes.h */ - short process_passive;/*should dbPutField process passive */ - ctType base; /*base for integer to string conversions*/ - short promptgroup; /*prompt, i.e. gui group */ - short interest; /*interest level */ - asLevel as_level; /*access security level */ - char *initial; /*initial value */ - /*If (DBF_MENU,DBF_DEVICE) ftPvt is (pdbMenu,pdbDeviceMenu) */ - void *ftPvt; - /*On no runtime following only set for STRING */ - short size; /*length in bytes of a field element */ - /*The following are only available on run time system*/ - short offset; /*Offset in bytes from beginning of record*/ + char *prompt; /*Prompt string for DCT*/ + char *name; /*Field name*/ + char *extra; /*C def for DBF_NOACCESS*/ + struct dbRecordType *pdbRecordType; + short indRecordType; /*within dbRecordType.papFldDes */ + short special; /*Special processing requirements */ + dbfType field_type; /*Field type as defined in dbFldTypes.h */ + unsigned int process_passive:1;/*should dbPutField process passive */ + unsigned int prop:1;/*field is a metadata, post DBE_PROPERTY on change*/ + ctType base; /*base for integer to string conversions*/ + short promptgroup; /*prompt, i.e. gui group */ + short interest; /*interest level */ + asLevel as_level; /*access security level */ + char *initial; /*initial value */ + /*If (DBF_MENU,DBF_DEVICE) ftPvt is (pdbMenu,pdbDeviceMenu) */ + void *ftPvt; + /*On no runtime following only set for STRING */ + short size; /*length in bytes of a field element */ + /*The following are only available on run time system*/ + short offset; /*Offset in bytes from beginning of record*/ }dbFldDes; typedef struct dbInfoNode { /*non-field per-record information*/ diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c index fb6fd4b48..801a27845 100644 --- a/src/ioc/dbStatic/dbLexRoutines.c +++ b/src/ioc/dbStatic/dbLexRoutines.c @@ -498,87 +498,94 @@ static void dbRecordtypeFieldItem(char *name,char *value) if(duplicate) return; pdbFldDes = (dbFldDes *)getLastTemp(); if(strcmp(name,"asl")==0) { - if(strcmp(value,"ASL0")==0) { - pdbFldDes->as_level = ASL0; - } else if(strcmp(value,"ASL1")==0) { - pdbFldDes->as_level = ASL1; - } else { - yyerror("Illegal Access Security value: Must be ASL0 or ASL1"); - } - return; + if(strcmp(value,"ASL0")==0) { + pdbFldDes->as_level = ASL0; + } else if(strcmp(value,"ASL1")==0) { + pdbFldDes->as_level = ASL1; + } else { + yyerror("Illegal Access Security value: Must be ASL0 or ASL1"); + } + return; } if(strcmp(name,"initial")==0) { - pdbFldDes->initial = epicsStrDup(value); - return; + pdbFldDes->initial = epicsStrDup(value); + return; } if(strcmp(name,"promptgroup")==0) { - int i; - for(i=0; ipromptgroup = pamapguiGroup[i].value; - return; - } - } - yyerror("Illegal promptgroup. See guigroup.h for legal values"); - return; + int i; + for(i=0; ipromptgroup = pamapguiGroup[i].value; + return; + } + } + yyerror("Illegal promptgroup. See guigroup.h for legal values"); + return; } if(strcmp(name,"prompt")==0) { - pdbFldDes->prompt = epicsStrDup(value); - return; + pdbFldDes->prompt = epicsStrDup(value); + return; } if(strcmp(name,"special")==0) { - int i; - for(i=0; ispecial = pamapspcType[i].value; - return; - } - } - if(sscanf(value,"%hd",&pdbFldDes->special)==1) { - return; - } - yyerror("Illegal special value."); - return; + int i; + for(i=0; ispecial = pamapspcType[i].value; + return; + } + } + if(sscanf(value,"%hd",&pdbFldDes->special)==1) { + return; + } + yyerror("Illegal special value."); + return; } if(strcmp(name,"pp")==0) { - if((strcmp(value,"YES")==0) || (strcmp(value,"TRUE")==0)) { - pdbFldDes->process_passive = TRUE; - } else if((strcmp(value,"NO")==0) || (strcmp(value,"FALSE")==0)) { - pdbFldDes->process_passive = FALSE; - } else { - yyerror("Illegal value. Must be NO or YES"); - } - return; + if((strcmp(value,"YES")==0) || (strcmp(value,"TRUE")==0)) { + pdbFldDes->process_passive = TRUE; + } else if((strcmp(value,"NO")==0) || (strcmp(value,"FALSE")==0)) { + pdbFldDes->process_passive = FALSE; + } else { + yyerror("Illegal value. Must be NO or YES"); + } + return; } if(strcmp(name,"interest")==0) { - if(sscanf(value,"%hd",&pdbFldDes->interest)!=1) - yyerror("Illegal value. Must be integer"); - return; + if(sscanf(value,"%hd",&pdbFldDes->interest)!=1) + yyerror("Illegal value. Must be integer"); + return; } if(strcmp(name,"base")==0) { - if(strcmp(value,"DECIMAL")==0) { - pdbFldDes->base = CT_DECIMAL; - } else if(strcmp(value,"HEX")==0) { - pdbFldDes->base = CT_HEX; - } else { - yyerror("Illegal value. Must be CT_DECIMAL or CT_HEX"); - } - return; + if(strcmp(value,"DECIMAL")==0) { + pdbFldDes->base = CT_DECIMAL; + } else if(strcmp(value,"HEX")==0) { + pdbFldDes->base = CT_HEX; + } else { + yyerror("Illegal value. Must be CT_DECIMAL or CT_HEX"); + } + return; } if(strcmp(name,"size")==0) { - if(sscanf(value,"%hd",&pdbFldDes->size)!=1) - yyerror("Illegal value. Must be integer"); - return; + if(sscanf(value,"%hd",&pdbFldDes->size)!=1) + yyerror("Illegal value. Must be integer"); + return; } if(strcmp(name,"extra")==0) { - pdbFldDes->extra = epicsStrDup(value); - return; + pdbFldDes->extra = epicsStrDup(value); + return; } if(strcmp(name,"menu")==0) { - pdbFldDes->ftPvt = (dbMenu *)dbFindMenu(pdbbase,value); - if(!pdbbase->ignoreMissingMenus && !pdbFldDes->ftPvt) - yyerrorAbort("menu not found"); - return; + pdbFldDes->ftPvt = (dbMenu *)dbFindMenu(pdbbase,value); + if(!pdbbase->ignoreMissingMenus && !pdbFldDes->ftPvt) + yyerrorAbort("menu not found"); + return; + } + if(strcmp(name,"prop")==0) { + if(strcmp(value, "YES")==0) + pdbFldDes->prop = 1; + else + pdbFldDes->prop = 0; + return; } } diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c index d23917d27..ff1361d7e 100644 --- a/src/ioc/dbStatic/dbStaticLib.c +++ b/src/ioc/dbStatic/dbStaticLib.c @@ -971,6 +971,7 @@ long dbWriteRecordTypeFP( pdbFldDes->size); } if(pdbFldDes->process_passive) fprintf(fp,"\t\tpp(TRUE)\n"); + if(pdbFldDes->prop) fprintf(fp,"\t\tprop(YES)\n"); if(pdbFldDes->base) fprintf(fp,"\t\tbase(HEX)\n"); if(pdbFldDes->interest) fprintf(fp,"\t\tinterest(%d)\n",pdbFldDes->interest); @@ -3140,6 +3141,7 @@ void dbDumpField( else printf("\t field_type: %s\n", pamapdbfType[j].strvalue); printf("\tprocess_passive: %hd\n",pdbFldDes->process_passive); + printf("\t property: %hd\n",pdbFldDes->prop); printf("\t base: %d\n",pdbFldDes->base); if(!pdbFldDes->promptgroup) { printf("\t promptgroup: %d\n",pdbFldDes->promptgroup); diff --git a/src/std/rec/aSubRecord.dbd b/src/std/rec/aSubRecord.dbd index 6b1efb0df..3297db59b 100644 --- a/src/std/rec/aSubRecord.dbd +++ b/src/std/rec/aSubRecord.dbd @@ -77,6 +77,7 @@ recordtype(aSub) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(EFLG,DBF_MENU) { prompt("Output Event Flag") diff --git a/src/std/rec/aaiRecord.dbd b/src/std/rec/aaiRecord.dbd index e94fecbac..fb921cfc4 100644 --- a/src/std/rec/aaiRecord.dbd +++ b/src/std/rec/aaiRecord.dbd @@ -24,6 +24,7 @@ recordtype(aai) { prompt("Display Precision") promptgroup(GUI_ALARMS) interest(1) + prop(YES) } field(INP,DBF_INLINK) { prompt("Input Specification") @@ -35,16 +36,19 @@ recordtype(aai) { promptgroup(GUI_BITS2) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_CALC) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_CLOCK) interest(1) + prop(YES) } field(NELM,DBF_ULONG) { prompt("Number of Elements") diff --git a/src/std/rec/aaoRecord.dbd b/src/std/rec/aaoRecord.dbd index 60b9b773e..025920a48 100644 --- a/src/std/rec/aaoRecord.dbd +++ b/src/std/rec/aaoRecord.dbd @@ -24,6 +24,7 @@ recordtype(aao) { prompt("Display Precision") promptgroup(GUI_ALARMS) interest(1) + prop(YES) } field(OUT,DBF_OUTLINK) { prompt("Output Specification") @@ -35,16 +36,19 @@ recordtype(aao) { promptgroup(GUI_BITS2) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_CALC) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_CLOCK) interest(1) + prop(YES) } field(NELM,DBF_ULONG) { prompt("Number of Elements") diff --git a/src/std/rec/aiRecord.dbd b/src/std/rec/aiRecord.dbd index 52fd4b05b..0573768fd 100644 --- a/src/std/rec/aiRecord.dbd +++ b/src/std/rec/aiRecord.dbd @@ -24,6 +24,7 @@ recordtype(ai) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LINR,DBF_MENU) { prompt("Linearization") @@ -52,16 +53,19 @@ recordtype(ai) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(AOFF,DBF_DOUBLE) { prompt("Adjustment Offset") @@ -86,30 +90,35 @@ recordtype(ai) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -117,6 +126,7 @@ recordtype(ai) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -124,6 +134,7 @@ recordtype(ai) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -131,6 +142,7 @@ recordtype(ai) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HYST,DBF_DOUBLE) { diff --git a/src/std/rec/aoRecord.dbd b/src/std/rec/aoRecord.dbd index a1caa6b56..2d0f36450 100644 --- a/src/std/rec/aoRecord.dbd +++ b/src/std/rec/aoRecord.dbd @@ -53,6 +53,7 @@ recordtype(ao) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LINR,DBF_MENU) { prompt("Linearization") @@ -81,6 +82,7 @@ recordtype(ao) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(ROFF,DBF_LONG) { prompt("Raw Offset, obsolete") @@ -105,22 +107,26 @@ recordtype(ao) { promptgroup(GUI_OUTPUT) pp(TRUE) interest(1) + prop(YES) } field(DRVL,DBF_DOUBLE) { prompt("Drive Low Limit") promptgroup(GUI_OUTPUT) pp(TRUE) interest(1) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(AOFF,DBF_DOUBLE) { prompt("Adjustment Offset") @@ -139,30 +145,35 @@ recordtype(ao) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -170,6 +181,7 @@ recordtype(ao) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -177,6 +189,7 @@ recordtype(ao) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -184,6 +197,7 @@ recordtype(ao) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HYST,DBF_DOUBLE) { diff --git a/src/std/rec/biRecord.dbd b/src/std/rec/biRecord.dbd index f2c94e7ee..c0498c300 100644 --- a/src/std/rec/biRecord.dbd +++ b/src/std/rec/biRecord.dbd @@ -47,6 +47,7 @@ recordtype(bi) { pp(TRUE) interest(1) size(26) + prop(YES) } field(ONAM,DBF_STRING) { prompt("One Name") @@ -54,6 +55,7 @@ recordtype(bi) { pp(TRUE) interest(1) size(26) + prop(YES) } field(RVAL,DBF_ULONG) { prompt("Raw Value") diff --git a/src/std/rec/boRecord.dbd b/src/std/rec/boRecord.dbd index 4bc44c2fd..9a861f157 100644 --- a/src/std/rec/boRecord.dbd +++ b/src/std/rec/boRecord.dbd @@ -42,6 +42,7 @@ recordtype(bo) { pp(TRUE) interest(1) size(26) + prop(YES) } field(ONAM,DBF_STRING) { prompt("One Name") @@ -49,6 +50,7 @@ recordtype(bo) { pp(TRUE) interest(1) size(26) + prop(YES) } field(RVAL,DBF_ULONG) { prompt("Raw Value") diff --git a/src/std/rec/calcRecord.dbd b/src/std/rec/calcRecord.dbd index b4d4cc99b..27c21da95 100644 --- a/src/std/rec/calcRecord.dbd +++ b/src/std/rec/calcRecord.dbd @@ -85,51 +85,60 @@ recordtype(calc) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(PREC,DBF_SHORT) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Rng") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_DOUBLE) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -137,6 +146,7 @@ recordtype(calc) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -144,6 +154,7 @@ recordtype(calc) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -151,6 +162,7 @@ recordtype(calc) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(AFTC, DBF_DOUBLE) { diff --git a/src/std/rec/calcoutRecord.dbd b/src/std/rec/calcoutRecord.dbd index f58ac242f..4b6e2a5e2 100644 --- a/src/std/rec/calcoutRecord.dbd +++ b/src/std/rec/calcoutRecord.dbd @@ -285,51 +285,60 @@ recordtype(calcout) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(PREC,DBF_SHORT) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Rng") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_DOUBLE) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -337,6 +346,7 @@ recordtype(calcout) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -344,6 +354,7 @@ recordtype(calcout) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -351,6 +362,7 @@ recordtype(calcout) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HYST,DBF_DOUBLE) { diff --git a/src/std/rec/compressRecord.dbd b/src/std/rec/compressRecord.dbd index 45f5a2957..347b807e2 100644 --- a/src/std/rec/compressRecord.dbd +++ b/src/std/rec/compressRecord.dbd @@ -70,22 +70,26 @@ recordtype(compress) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(PREC,DBF_SHORT) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(EGU,DBF_STRING) { prompt("EngineeringUnits") promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(OFF,DBF_ULONG) { prompt("Offset") diff --git a/src/std/rec/dfanoutRecord.dbd b/src/std/rec/dfanoutRecord.dbd index c68e56c74..4e61907c7 100644 --- a/src/std/rec/dfanoutRecord.dbd +++ b/src/std/rec/dfanoutRecord.dbd @@ -91,51 +91,60 @@ recordtype(dfanout) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(PREC,DBF_SHORT) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_DOUBLE) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -143,6 +152,7 @@ recordtype(dfanout) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -150,6 +160,7 @@ recordtype(dfanout) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -157,6 +168,7 @@ recordtype(dfanout) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HYST,DBF_DOUBLE) { diff --git a/src/std/rec/histogramRecord.dbd b/src/std/rec/histogramRecord.dbd index dc0d2df31..06a84b52a 100644 --- a/src/std/rec/histogramRecord.dbd +++ b/src/std/rec/histogramRecord.dbd @@ -46,12 +46,14 @@ recordtype(histogram) { promptgroup(GUI_HIST) special(SPC_RESET) interest(1) + prop(YES) } field(LLIM,DBF_DOUBLE) { prompt("Lower Signal Limit ") promptgroup(GUI_HIST) special(SPC_RESET) interest(1) + prop(YES) } field(WDTH,DBF_DOUBLE) { prompt("Element Width") @@ -66,6 +68,7 @@ recordtype(histogram) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(SVL,DBF_INLINK) { prompt("Signal Value Location") @@ -128,11 +131,13 @@ recordtype(histogram) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_ULONG) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } } diff --git a/src/std/rec/longinRecord.dbd b/src/std/rec/longinRecord.dbd index ef9506e3d..5c038f9db 100644 --- a/src/std/rec/longinRecord.dbd +++ b/src/std/rec/longinRecord.dbd @@ -25,40 +25,47 @@ recordtype(longin) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(HOPR,DBF_LONG) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_LONG) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_LONG) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_LONG) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_LONG) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_LONG) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") diff --git a/src/std/rec/longoutRecord.dbd b/src/std/rec/longoutRecord.dbd index e29251b9b..5124aafe8 100644 --- a/src/std/rec/longoutRecord.dbd +++ b/src/std/rec/longoutRecord.dbd @@ -36,52 +36,61 @@ recordtype(longout) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(DRVH,DBF_LONG) { prompt("Drive High Limit") promptgroup(GUI_OUTPUT) pp(TRUE) interest(1) + prop(YES) } field(DRVL,DBF_LONG) { prompt("Drive Low Limit") promptgroup(GUI_OUTPUT) pp(TRUE) interest(1) + prop(YES) } field(HOPR,DBF_LONG) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_LONG) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_LONG) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_LONG) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_LONG) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_LONG) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") diff --git a/src/std/rec/selRecord.dbd b/src/std/rec/selRecord.dbd index 172f16e36..0d01586a0 100644 --- a/src/std/rec/selRecord.dbd +++ b/src/std/rec/selRecord.dbd @@ -103,46 +103,54 @@ recordtype(sel) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Rng") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_DOUBLE) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HHSV,DBF_MENU) { prompt("Hihi Severity") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -150,6 +158,7 @@ recordtype(sel) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -157,6 +166,7 @@ recordtype(sel) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -164,6 +174,7 @@ recordtype(sel) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HYST,DBF_DOUBLE) { diff --git a/src/std/rec/subArrayRecord.dbd b/src/std/rec/subArrayRecord.dbd index 8eeb6c0d9..6442ede16 100644 --- a/src/std/rec/subArrayRecord.dbd +++ b/src/std/rec/subArrayRecord.dbd @@ -20,6 +20,7 @@ recordtype(subArray) { prompt("Display Precision") promptgroup(GUI_COMMON) interest(1) + prop(YES) } field(FTVL,DBF_MENU) { prompt("Field Type of Value") @@ -38,16 +39,19 @@ recordtype(subArray) { promptgroup(GUI_BITS2) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_CALC) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_CLOCK) interest(1) + prop(YES) } field(MALM,DBF_ULONG) { prompt("Maximum Elements ") diff --git a/src/std/rec/subRecord.dbd b/src/std/rec/subRecord.dbd index 6b21c2348..973cab7f1 100644 --- a/src/std/rec/subRecord.dbd +++ b/src/std/rec/subRecord.dbd @@ -100,45 +100,53 @@ recordtype(sub) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Rng") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(HIHI,DBF_DOUBLE) { prompt("Hihi Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOLO,DBF_DOUBLE) { prompt("Lolo Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(HIGH,DBF_DOUBLE) { prompt("High Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(LOW,DBF_DOUBLE) { prompt("Low Alarm Limit") promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) } field(PREC,DBF_SHORT) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(BRSV,DBF_MENU) { prompt("Bad Return Severity") @@ -152,6 +160,7 @@ recordtype(sub) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LLSV,DBF_MENU) { @@ -159,6 +168,7 @@ recordtype(sub) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HSV,DBF_MENU) { @@ -166,6 +176,7 @@ recordtype(sub) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(LSV,DBF_MENU) { @@ -173,6 +184,7 @@ recordtype(sub) { promptgroup(GUI_ALARMS) pp(TRUE) interest(1) + prop(YES) menu(menuAlarmSevr) } field(HYST,DBF_DOUBLE) { diff --git a/src/std/rec/waveformRecord.dbd b/src/std/rec/waveformRecord.dbd index 443f716da..92d0fc156 100644 --- a/src/std/rec/waveformRecord.dbd +++ b/src/std/rec/waveformRecord.dbd @@ -29,6 +29,7 @@ recordtype(waveform) { prompt("Display Precision") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(INP,DBF_INLINK) { prompt("Input Specification") @@ -40,16 +41,19 @@ recordtype(waveform) { promptgroup(GUI_DISPLAY) interest(1) size(16) + prop(YES) } field(HOPR,DBF_DOUBLE) { prompt("High Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(LOPR,DBF_DOUBLE) { prompt("Low Operating Range") promptgroup(GUI_DISPLAY) interest(1) + prop(YES) } field(NELM,DBF_ULONG) { prompt("Number of Elements") diff --git a/src/tools/DBD/Recfield.pm b/src/tools/DBD/Recfield.pm index cdf8e2747..b0bc7af56 100644 --- a/src/tools/DBD/Recfield.pm +++ b/src/tools/DBD/Recfield.pm @@ -35,7 +35,8 @@ our %field_attrs = ( base => qr/^(?:DECIMAL|HEX)$/, size => qr/^\d+$/, extra => qr/^.*$/, - menu => qr/^$RXident$/o + menu => qr/^$RXident$/o, + prop => qr/^(?:YES|NO)$/ ); sub new {