Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019 
<== Date ==> <== Thread ==>

Subject: [Merge] lp:~epics-core/epics-base/postdbrprop into lp:epics-base
From: mdavidsaver <mdavidsaver@bnl.gov>
To: mp+197290@code.launchpad.net
Date: Sat, 30 Nov 2013 20:15:33 -0000
mdavidsaver has proposed merging lp:~epics-core/epics-base/postdbrprop into lp:epics-base.

Requested reviews:
  EPICS Core Developers (epics-core)

For more details, see:
https://code.launchpad.net/~epics-core/epics-base/postdbrprop/+merge/197290

(This branch should have been named "postdbeprop", but I mis-typed and don't want the trouble of correcting this now)

The branch adds posting of DBE_PROPERTY events when CA metadata/property fields are written with dbPut(). These fields are marked in the recordtype's .dbd file with "prop(YES)".

Changes are made to recognise the prop() field attribute and store it. The attribute is added to all Base recordtypes except mbbi and mbbo where it is not added for the *ST fields as this is already handled by the recordtype's support code.

Also, dbPut() is modified to post a monitor whenever a "prop(YES)" field is written. No attempt to detect field value changes is made. The event is posted for all monitors on the record with DBE_PROPERTY, not just the VAL field. This is done to support recordtypes with more than one VAL type field.

Associated documentation in lp:~mdavidsaver/epics-appdev/postdbeprop
-- 
https://code.launchpad.net/~epics-core/epics-base/postdbrprop/+merge/197290
Your team EPICS Core Developers is requested to review the proposed merge of lp:~epics-core/epics-base/postdbrprop into lp:epics-base.
=== modified file 'documentation/RELEASE_NOTES.html'
--- documentation/RELEASE_NOTES.html	2013-06-28 17:35:43 +0000
+++ documentation/RELEASE_NOTES.html	2013-11-30 20:14:29 +0000
@@ -15,6 +15,13 @@
 <h2 align="center">Changes between 3.15.0.1 and 3.15.0.2</h2>
 <!-- Insert new items immediately below here ... -->
 
+<h3>Post DBE_PROPERTY events automatically</h3>
+
+<p>A new record field attribute "prop(YES)" is added to identify fields
+holding CA meta-data.  Changes to fields so marked will cause a event
+to be sent to all subscriptions to that record for DBE_PROPERTY.
+Meta-data fields are marked for all Base recordtypes.</p>
+
 <h3>errlogRemoveListener() routine changed</h3>
 
 <p>Code that calls <tt>errlogRemoveListener(myfunc)</tt> must be modified to use

=== modified file 'src/ioc/db/dbAccess.c'
--- src/ioc/db/dbAccess.c	2013-10-03 21:04:03 +0000
+++ src/ioc/db/dbAccess.c	2013-11-30 20:14:29 +0000
@@ -1208,13 +1208,19 @@
     }
 
     /* 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;
 }

=== modified file 'src/ioc/dbStatic/dbBase.h'
--- src/ioc/dbStatic/dbBase.h	2012-04-27 17:21:39 +0000
+++ src/ioc/dbStatic/dbBase.h	2013-11-30 20:14:29 +0000
@@ -69,25 +69,26 @@
 }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*/

=== modified file 'src/ioc/dbStatic/dbLexRoutines.c'
--- src/ioc/dbStatic/dbLexRoutines.c	2012-07-31 19:04:38 +0000
+++ src/ioc/dbStatic/dbLexRoutines.c	2013-11-30 20:14:29 +0000
@@ -498,87 +498,94 @@
     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; i<GUI_NTYPES; i++) {
-	    if(strcmp(value,pamapguiGroup[i].strvalue)==0) {
-		pdbFldDes->promptgroup = pamapguiGroup[i].value;
-		return;
-	    }
-	}
-	yyerror("Illegal promptgroup. See guigroup.h for legal values");
-	return;
+        int	i;
+        for(i=0; i<GUI_NTYPES; i++) {
+            if(strcmp(value,pamapguiGroup[i].strvalue)==0) {
+                pdbFldDes->promptgroup = 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; i<SPC_NTYPES; i++) {
-	    if(strcmp(value,pamapspcType[i].strvalue)==0) {
-		pdbFldDes->special = pamapspcType[i].value;
-		return;
-	    }
-	}
-	if(sscanf(value,"%hd",&pdbFldDes->special)==1) {
-	    return;
-	}
-	yyerror("Illegal special value.");
-	return;
+        int	i;
+        for(i=0; i<SPC_NTYPES; i++) {
+            if(strcmp(value,pamapspcType[i].strvalue)==0) {
+                pdbFldDes->special = 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;
     }
 }
 

=== modified file 'src/ioc/dbStatic/dbStaticLib.c'
--- src/ioc/dbStatic/dbStaticLib.c	2013-06-14 18:55:22 +0000
+++ src/ioc/dbStatic/dbStaticLib.c	2013-11-30 20:14:29 +0000
@@ -971,6 +971,7 @@
 		    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 @@
 	    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);

=== modified file 'src/std/rec/aSubRecord.dbd'
--- src/std/rec/aSubRecord.dbd	2012-10-18 05:10:12 +0000
+++ src/std/rec/aSubRecord.dbd	2013-11-30 20:14:29 +0000
@@ -77,6 +77,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_DISPLAY)
 		interest(1)
+		prop(YES)
 	}
 	field(EFLG,DBF_MENU) {
 		prompt("Output Event Flag")

=== modified file 'src/std/rec/aaiRecord.dbd'
--- src/std/rec/aaiRecord.dbd	2010-05-27 14:45:21 +0000
+++ src/std/rec/aaiRecord.dbd	2013-11-30 20:14:29 +0000
@@ -24,6 +24,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_ALARMS)
 		interest(1)
+		prop(YES)
 	}
 	field(INP,DBF_INLINK) {
 		prompt("Input Specification")
@@ -35,16 +36,19 @@
 		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")

=== modified file 'src/std/rec/aaoRecord.dbd'
--- src/std/rec/aaoRecord.dbd	2010-05-27 14:45:21 +0000
+++ src/std/rec/aaoRecord.dbd	2013-11-30 20:14:29 +0000
@@ -24,6 +24,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_ALARMS)
 		interest(1)
+		prop(YES)
 	}
 	field(OUT,DBF_OUTLINK) {
 		prompt("Output Specification")
@@ -35,16 +36,19 @@
 		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")

=== modified file 'src/std/rec/aiRecord.dbd'
--- src/std/rec/aiRecord.dbd	2010-01-06 22:05:49 +0000
+++ src/std/rec/aiRecord.dbd	2013-11-30 20:14:29 +0000
@@ -24,6 +24,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_DISPLAY)
 		interest(1)
+		prop(YES)
 	}
 	field(LINR,DBF_MENU) {
 		prompt("Linearization")
@@ -52,16 +53,19 @@
 		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 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -124,6 +134,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -131,6 +142,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HYST,DBF_DOUBLE) {

=== modified file 'src/std/rec/aoRecord.dbd'
--- src/std/rec/aoRecord.dbd	2002-07-12 21:35:43 +0000
+++ src/std/rec/aoRecord.dbd	2013-11-30 20:14:29 +0000
@@ -53,6 +53,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_DISPLAY)
 		interest(1)
+		prop(YES)
 	}
 	field(LINR,DBF_MENU) {
 		prompt("Linearization")
@@ -81,6 +82,7 @@
 		promptgroup(GUI_DISPLAY)
 		interest(1)
 		size(16)
+		prop(YES)
 	}
 	field(ROFF,DBF_LONG) {
 		prompt("Raw Offset, obsolete")
@@ -105,22 +107,26 @@
 		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 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -177,6 +189,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -184,6 +197,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HYST,DBF_DOUBLE) {

=== modified file 'src/std/rec/biRecord.dbd'
--- src/std/rec/biRecord.dbd	2009-06-08 19:55:49 +0000
+++ src/std/rec/biRecord.dbd	2013-11-30 20:14:29 +0000
@@ -47,6 +47,7 @@
 		pp(TRUE)
 		interest(1)
 		size(26)
+		prop(YES)
 	}
 	field(ONAM,DBF_STRING) {
 		prompt("One Name")
@@ -54,6 +55,7 @@
 		pp(TRUE)
 		interest(1)
 		size(26)
+		prop(YES)
 	}
 	field(RVAL,DBF_ULONG) {
 		prompt("Raw Value")

=== modified file 'src/std/rec/boRecord.dbd'
--- src/std/rec/boRecord.dbd	2012-01-21 22:35:40 +0000
+++ src/std/rec/boRecord.dbd	2013-11-30 20:14:29 +0000
@@ -42,6 +42,7 @@
 		pp(TRUE)
 		interest(1)
 		size(26)
+		prop(YES)
 	}
 	field(ONAM,DBF_STRING) {
 		prompt("One Name")
@@ -49,6 +50,7 @@
 		pp(TRUE)
 		interest(1)
 		size(26)
+		prop(YES)
 	}
 	field(RVAL,DBF_ULONG) {
 		prompt("Raw Value")

=== modified file 'src/std/rec/calcRecord.dbd'
--- src/std/rec/calcRecord.dbd	2010-05-28 09:16:45 +0000
+++ src/std/rec/calcRecord.dbd	2013-11-30 20:14:29 +0000
@@ -85,51 +85,60 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -144,6 +154,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -151,6 +162,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
         field(AFTC, DBF_DOUBLE) {

=== modified file 'src/std/rec/calcoutRecord.dbd'
--- src/std/rec/calcoutRecord.dbd	2012-06-22 22:58:12 +0000
+++ src/std/rec/calcoutRecord.dbd	2013-11-30 20:14:29 +0000
@@ -285,51 +285,60 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -344,6 +354,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -351,6 +362,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HYST,DBF_DOUBLE) {

=== modified file 'src/std/rec/compressRecord.dbd'
--- src/std/rec/compressRecord.dbd	2011-06-08 16:16:26 +0000
+++ src/std/rec/compressRecord.dbd	2013-11-30 20:14:29 +0000
@@ -70,22 +70,26 @@
 		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")

=== modified file 'src/std/rec/dfanoutRecord.dbd'
--- src/std/rec/dfanoutRecord.dbd	2002-07-12 21:35:43 +0000
+++ src/std/rec/dfanoutRecord.dbd	2013-11-30 20:14:29 +0000
@@ -91,51 +91,60 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -150,6 +160,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -157,6 +168,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HYST,DBF_DOUBLE) {

=== modified file 'src/std/rec/histogramRecord.dbd'
--- src/std/rec/histogramRecord.dbd	2012-01-21 22:35:40 +0000
+++ src/std/rec/histogramRecord.dbd	2013-11-30 20:14:29 +0000
@@ -46,12 +46,14 @@
 		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 @@
 		prompt("Display Precision")
 		promptgroup(GUI_DISPLAY)
 		interest(1)
+		prop(YES)
 	}
 	field(SVL,DBF_INLINK) {
 		prompt("Signal Value Location")
@@ -128,11 +131,13 @@
 		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)
 	}
 }
 

=== modified file 'src/std/rec/longinRecord.dbd'
--- src/std/rec/longinRecord.dbd	2010-05-28 09:16:45 +0000
+++ src/std/rec/longinRecord.dbd	2013-11-30 20:14:29 +0000
@@ -25,40 +25,47 @@
 		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")

=== modified file 'src/std/rec/longoutRecord.dbd'
--- src/std/rec/longoutRecord.dbd	2002-07-12 21:35:43 +0000
+++ src/std/rec/longoutRecord.dbd	2013-11-30 20:14:29 +0000
@@ -36,52 +36,61 @@
 		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")

=== modified file 'src/std/rec/selRecord.dbd'
--- src/std/rec/selRecord.dbd	2005-08-29 19:49:39 +0000
+++ src/std/rec/selRecord.dbd	2013-11-30 20:14:29 +0000
@@ -103,46 +103,54 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -157,6 +166,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -164,6 +174,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HYST,DBF_DOUBLE) {

=== modified file 'src/std/rec/subArrayRecord.dbd'
--- src/std/rec/subArrayRecord.dbd	2002-07-12 21:35:43 +0000
+++ src/std/rec/subArrayRecord.dbd	2013-11-30 20:14:29 +0000
@@ -20,6 +20,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_COMMON)
 		interest(1)
+		prop(YES)
 	}
 	field(FTVL,DBF_MENU) {
 		prompt("Field Type of Value")
@@ -38,16 +39,19 @@
 		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  ")

=== modified file 'src/std/rec/subRecord.dbd'
--- src/std/rec/subRecord.dbd	2008-04-24 16:30:37 +0000
+++ src/std/rec/subRecord.dbd	2013-11-30 20:14:29 +0000
@@ -100,45 +100,53 @@
 		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 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LLSV,DBF_MENU) {
@@ -159,6 +168,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HSV,DBF_MENU) {
@@ -166,6 +176,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(LSV,DBF_MENU) {
@@ -173,6 +184,7 @@
 		promptgroup(GUI_ALARMS)
 		pp(TRUE)
 		interest(1)
+		prop(YES)
 		menu(menuAlarmSevr)
 	}
 	field(HYST,DBF_DOUBLE) {

=== modified file 'src/std/rec/waveformRecord.dbd'
--- src/std/rec/waveformRecord.dbd	2009-04-03 21:05:40 +0000
+++ src/std/rec/waveformRecord.dbd	2013-11-30 20:14:29 +0000
@@ -29,6 +29,7 @@
 		prompt("Display Precision")
 		promptgroup(GUI_DISPLAY)
 		interest(1)
+		prop(YES)
 	}
 	field(INP,DBF_INLINK) {
 		prompt("Input Specification")
@@ -40,16 +41,19 @@
 		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")

=== modified file 'src/tools/DBD/Recfield.pm'
--- src/tools/DBD/Recfield.pm	2012-08-22 21:54:54 +0000
+++ src/tools/DBD/Recfield.pm	2013-11-30 20:14:29 +0000
@@ -35,7 +35,8 @@
     base        => qr/^(?:DECIMAL|HEX)$/,
     size        => qr/^\d+$/,
     extra       => qr/^.*$/,
-    menu        => qr/^$RXident$/o
+    menu        => qr/^$RXident$/o,
+    prop        => qr/^(?:YES|NO)$/
 );
 
 sub new {


Replies:
Re: [Merge] lp:~epics-core/epics-base/postdbrprop into lp:epics-base Andrew Johnson
[Merge] lp:~epics-core/epics-base/postdbrprop into lp:epics-base Andrew Johnson
[Merge] lp:~epics-core/epics-base/postdbrprop into lp:epics-base noreply

Navigate by Date:
Prev: Re: [Merge] lp:~epics-core/epics-base/thread-pool into lp:epics-base mdavidsaver
Next: Re: [Merge] lp:~epics-core/epics-base/devlib2mmio into lp:epics-base mdavidsaver
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019 
Navigate by Thread:
Prev: [Merge] lp:~johill-lanl/epics-base/epicsThreadOnce-atomics-based into lp:epics-base Andrew Johnson
Next: Re: [Merge] lp:~epics-core/epics-base/postdbrprop into lp:epics-base Andrew Johnson
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019 
ANJ, 04 Dec 2013 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·