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 {