Merged changes from 3.14 branch

Merged up to revno 12369 on 2012-10-17
This commit is contained in:
Andrew Johnson
2012-10-18 00:10:12 -05:00
12 changed files with 325 additions and 209 deletions

View File

@@ -28,6 +28,7 @@
#include "errlog.h"
#include "cantProceed.h"
#include "cvtFast.h"
#include "epicsMath.h"
#include "epicsTime.h"
#include "alarm.h"
#include "ellLib.h"
@@ -272,48 +273,41 @@ static void get_control(DBADDR *paddr, char **ppbuffer,
}
static void get_alarm(DBADDR *paddr, char **ppbuffer,
struct rset *prset,long *options)
struct rset *prset, long *options)
{
struct dbr_alDouble ald;
int got_data=FALSE;
char *pbuffer = *ppbuffer;
struct dbr_alDouble ald = {epicsNAN, epicsNAN, epicsNAN, epicsNAN};
long no_data = TRUE;
ald.upper_alarm_limit = ald.upper_warning_limit = 0.0;
ald.lower_warning_limit = ald.lower_alarm_limit = 0.0;
if( prset && prset->get_alarm_double ) {
(*prset->get_alarm_double)(paddr,&ald);
got_data=TRUE;
}
if( (*options) & (DBR_AL_LONG) ) {
char *pbuffer=*ppbuffer;
if (prset && prset->get_alarm_double)
no_data = prset->get_alarm_double(paddr, &ald);
if(got_data) {
struct dbr_alLong *pal=(struct dbr_alLong*)pbuffer;
pal->upper_alarm_limit = (epicsInt32)ald.upper_alarm_limit;
pal->upper_warning_limit = (epicsInt32)ald.upper_warning_limit;
pal->lower_warning_limit = (epicsInt32)ald.lower_warning_limit;
pal->lower_alarm_limit = (epicsInt32)ald.lower_alarm_limit;
} else {
memset(pbuffer,'\0',dbr_alLong_size);
*options = (*options) ^ DBR_AL_LONG; /*Turn off option*/
}
*ppbuffer = ((char *)*ppbuffer) + dbr_alLong_size;
}
if( (*options) & (DBR_AL_DOUBLE) ) {
char *pbuffer=*ppbuffer;
if (*options & DBR_AL_LONG) {
struct dbr_alLong *pal = (struct dbr_alLong*) pbuffer;
if(got_data) {
struct dbr_alDouble *pal=(struct dbr_alDouble*)pbuffer;
pal->upper_alarm_limit = ald.upper_alarm_limit;
pal->upper_warning_limit = ald.upper_warning_limit;
pal->lower_warning_limit = ald.lower_warning_limit;
pal->lower_alarm_limit = ald.lower_alarm_limit;
} else {
memset(pbuffer,'\0',dbr_alDouble_size);
*options = (*options) ^ DBR_AL_DOUBLE; /*Turn off option*/
}
*ppbuffer = ((char *)*ppbuffer) + dbr_alDouble_size;
}
return;
pal->upper_alarm_limit = (epicsInt32) ald.upper_alarm_limit;
pal->upper_warning_limit = (epicsInt32) ald.upper_warning_limit;
pal->lower_warning_limit = (epicsInt32) ald.lower_warning_limit;
pal->lower_alarm_limit = (epicsInt32) ald.lower_alarm_limit;
if (no_data)
*options ^= DBR_AL_LONG; /*Turn off option*/
*ppbuffer += dbr_alLong_size;
}
if (*options & DBR_AL_DOUBLE) {
struct dbr_alDouble *pal = (struct dbr_alDouble*) pbuffer;
pal->upper_alarm_limit = ald.upper_alarm_limit;
pal->upper_warning_limit = ald.upper_warning_limit;
pal->lower_warning_limit = ald.lower_warning_limit;
pal->lower_alarm_limit = ald.lower_alarm_limit;
if (no_data)
*options ^= DBR_AL_DOUBLE; /*Turn off option*/
*ppbuffer += dbr_alDouble_size;
}
}
/*
@@ -1182,8 +1176,9 @@ long dbPut(DBADDR *paddr, short dbrType,
status = prset->get_array_info(paddr, &dummy, &offset);
}
if (no_elements < nRequest) nRequest = no_elements;
status = dbPutConvertRoutine[dbrType][field_type](paddr, pbuffer,
nRequest, no_elements, offset);
if (!status)
status = dbPutConvertRoutine[dbrType][field_type](paddr, pbuffer,
nRequest, no_elements, offset);
/* update array info */
if (!status &&

View File

@@ -19,6 +19,7 @@
#include <limits.h>
#include "dbDefs.h"
#include "epicsMath.h"
#include "epicsTime.h"
#include "epicsPrint.h"
#include "dbBase.h"
@@ -106,64 +107,56 @@ void recGblRecSupError(long status, const struct dbAddr *paddr,
return;
}
void recGblGetPrec(const struct dbAddr *paddr,long *precision)
void recGblGetPrec(const struct dbAddr *paddr, long *precision)
{
dbFldDes *pdbFldDes = paddr->pfldDes;
switch(pdbFldDes->field_type){
case(DBF_SHORT):
*precision = 0;
break;
case(DBF_USHORT):
*precision = 0;
break;
case(DBF_LONG):
*precision = 0;
break;
case(DBF_ULONG):
*precision = 0;
break;
case(DBF_FLOAT):
case(DBF_DOUBLE):
if(*precision<0 || *precision>15) *precision=15;
break;
switch (pdbFldDes->field_type) {
case DBF_CHAR:
case DBF_UCHAR:
case DBF_SHORT:
case DBF_USHORT:
case DBF_LONG:
case DBF_ULONG:
*precision = 0;
break;
case DBF_FLOAT:
case DBF_DOUBLE:
if (*precision < 0 || *precision > 15)
*precision = 15;
break;
default:
break;
}
return;
}
void recGblGetGraphicDouble(
const struct dbAddr *paddr,struct dbr_grDouble *pgd)
void recGblGetGraphicDouble(const struct dbAddr *paddr,
struct dbr_grDouble *pgd)
{
dbFldDes *pdbFldDes = paddr->pfldDes;
getMaxRangeValues(pdbFldDes->field_type,&pgd->upper_disp_limit,
&pgd->lower_disp_limit);
return;
getMaxRangeValues(pdbFldDes->field_type,
&pgd->upper_disp_limit, &pgd->lower_disp_limit);
}
void recGblGetAlarmDouble(
const struct dbAddr *paddr,struct dbr_alDouble *pad)
void recGblGetAlarmDouble(const struct dbAddr *paddr,
struct dbr_alDouble *pad)
{
pad->upper_alarm_limit = 0;
pad->upper_warning_limit = 0;
pad->lower_warning_limit = 0;
pad->lower_alarm_limit = 0;
return;
pad->upper_alarm_limit = epicsNAN;
pad->upper_warning_limit = epicsNAN;
pad->lower_warning_limit = epicsNAN;
pad->lower_alarm_limit = epicsNAN;
}
void recGblGetControlDouble(
const struct dbAddr *paddr,struct dbr_ctrlDouble *pcd)
void recGblGetControlDouble(const struct dbAddr *paddr,
struct dbr_ctrlDouble *pcd)
{
dbFldDes *pdbFldDes=paddr->pfldDes;
dbFldDes *pdbFldDes = paddr->pfldDes;
getMaxRangeValues(pdbFldDes->field_type,&pcd->upper_ctrl_limit,
&pcd->lower_ctrl_limit);
return;
getMaxRangeValues(pdbFldDes->field_type,
&pcd->upper_ctrl_limit, &pcd->lower_ctrl_limit);
}
int recGblInitConstantLink(
@@ -286,40 +279,39 @@ static void getMaxRangeValues(short field_type, double *pupper_limit,
double *plower_limit)
{
switch(field_type){
case(DBF_CHAR):
*pupper_limit = -128.0;
*plower_limit = 127.0;
break;
case(DBF_UCHAR):
*pupper_limit = 255.0;
*plower_limit = 0.0;
break;
case(DBF_SHORT):
*pupper_limit = (double)SHRT_MAX;
*plower_limit = (double)SHRT_MIN;
break;
case(DBF_ENUM):
case(DBF_USHORT):
*pupper_limit = (double)USHRT_MAX;
*plower_limit = (double)0;
break;
case(DBF_LONG):
/* long did not work using cast to double */
*pupper_limit = 2147483647.;
*plower_limit = -2147483648.;
break;
case(DBF_ULONG):
*pupper_limit = (double)ULONG_MAX;
*plower_limit = (double)0;
break;
case(DBF_FLOAT):
*pupper_limit = (double)1e+30;
*plower_limit = (double)-1e30;
break;
case(DBF_DOUBLE):
*pupper_limit = (double)1e+30;
*plower_limit = (double)-1e30;
break;
case DBF_CHAR:
*pupper_limit = -128.0;
*plower_limit = 127.0;
break;
case DBF_UCHAR:
*pupper_limit = 255.0;
*plower_limit = 0.0;
break;
case DBF_SHORT:
*pupper_limit = (double) SHRT_MAX;
*plower_limit = (double) SHRT_MIN;
break;
case DBF_ENUM:
case DBF_USHORT:
*pupper_limit = (double) USHRT_MAX;
*plower_limit = 0.0;
break;
case DBF_LONG:
*pupper_limit = 2147483647.0;
*plower_limit = -2147483648.0;
break;
case DBF_ULONG:
*pupper_limit = (double) 0xffffffffU;
*plower_limit = 0.0;
break;
case DBF_FLOAT:
*pupper_limit = 1e30;
*plower_limit = -1e30;
break;
case DBF_DOUBLE:
*pupper_limit = 1e300;
*plower_limit = -1e300;
break;
}
return;
}

View File

@@ -94,6 +94,7 @@ epicsShareExtern devLibVME *pdevLibVME;
#ifndef NO_DEVLIB_COMPAT
# define pdevLibVirtualOS pdevLibVME
typedef devLibVME devLibVirtualOS;
#endif

View File

@@ -84,13 +84,12 @@ rset aSubRSET = {
epicsExportAddress(rset, aSubRSET);
static long initFields(epicsEnum16 *pft, epicsUInt32 *pno, epicsUInt32 *pne,
const char **fldnames, void **pval, void **povl);
epicsUInt32 *pon, const char **fldnames, void **pval, void **povl);
static long fetch_values(aSubRecord *prec);
static void monitor(aSubRecord *);
static long do_sub(aSubRecord *);
#define NUM_ARGS 21
#define MAX_ARRAY_SIZE 10000000
/* These are the names of the Input fields */
static const char *Ifldnames[] = {
@@ -116,10 +115,10 @@ static long init_record(aSubRecord *prec, int pass)
status = 0;
if (pass == 0) {
/* Allocate memory for arrays */
initFields(&prec->fta, &prec->noa, &prec->nea, Ifldnames,
&prec->a, NULL);
initFields(&prec->ftva, &prec->nova, &prec->neva, Ofldnames,
&prec->vala, &prec->ovla);
initFields(&prec->fta, &prec->noa, &prec->nea, NULL,
Ifldnames, &prec->a, NULL);
initFields(&prec->ftva, &prec->nova, &prec->neva, &prec->onva,
Ofldnames, &prec->vala, &prec->ovla);
return 0;
}
@@ -145,12 +144,8 @@ static long init_record(aSubRecord *prec, int pass)
struct link *plink = &(&prec->inpa)[i];
switch (plink->type) {
case CONSTANT:
if ((&prec->noa)[i] < 2) {
if (recGblInitConstantLink(plink, (&prec->fta)[i], (&prec->a)[i])) {
prec->udf = FALSE;
} else
prec->udf = TRUE;
}
if ((&prec->noa)[i] < 2)
recGblInitConstantLink(plink, (&prec->fta)[i], (&prec->a)[i]);
break;
case PV_LINK:
@@ -217,7 +212,7 @@ static long init_record(aSubRecord *prec, int pass)
static long initFields(epicsEnum16 *pft, epicsUInt32 *pno, epicsUInt32 *pne,
const char **fldnames, void **pval, void **povl)
epicsUInt32 *pon, const char **fldnames, void **pval, void **povl)
{
int i;
long status = 0;
@@ -234,22 +229,16 @@ static long initFields(epicsEnum16 *pft, epicsUInt32 *pno, epicsUInt32 *pne,
flen = dbValueSize(*pft);
num = *pno * flen;
if (num > MAX_ARRAY_SIZE) {
epicsPrintf("Link %s - Array too large! %d Bytes\n", fldnames[i], num);
*pno = num = 0;
status = S_db_errArg;
} else
*pval = (char *)callocMustSucceed(*pno, flen,
"aSubRecord::init_record");
*pval = callocMustSucceed(*pno, flen, "aSubRecord::init_record");
*pne = *pno;
if (povl) {
if (num)
*povl = (char *)callocMustSucceed(*pno, flen,
*povl = callocMustSucceed(*pno, flen,
"aSubRecord::init_record");
povl++;
*pon++ = *pne;
}
}
return status;
@@ -280,6 +269,7 @@ static long process(aSubRecord *prec)
/* Push the output link values */
if (!status) {
int i;
for (i = 0; i < NUM_ARGS; i++)
dbPutLink(&(&prec->outa)[i], (&prec->ftva)[i], (&prec->vala)[i],
(&prec->neva)[i]);
@@ -464,18 +454,29 @@ static void monitor(aSubRecord *prec)
break;
case aSubEFLG_ON_CHANGE:
for (i = 0; i < NUM_ARGS; i++) {
epicsUInt32 alen = dbValueSize((&prec->ftva)[i]) * (&prec->neva)[i];
void *povl = (&prec->ovla)[i];
void *pval = (&prec->vala)[i];
if (memcmp(povl, pval, alen)) {
epicsUInt32 *ponv = &(&prec->onva)[i];
epicsUInt32 *pnev = &(&prec->neva)[i];
epicsUInt32 onv = *ponv; /* Num Elements in OVLx */
epicsUInt32 nev = *pnev; /* Num Elements in VALx */
epicsUInt32 alen = dbValueSize((&prec->ftva)[i]) * nev;
if (nev != onv || memcmp(povl, pval, alen)) {
memcpy(povl, pval, alen);
db_post_events(prec, pval, monitor_mask);
if (nev != onv) {
*ponv = nev;
db_post_events(prec, pnev, monitor_mask);
}
}
}
break;
case aSubEFLG_ALWAYS:
for (i = 0; i < NUM_ARGS; i++)
for (i = 0; i < NUM_ARGS; i++) {
db_post_events(prec, (&prec->vala)[i], monitor_mask);
db_post_events(prec, &(&prec->neva)[i], monitor_mask);
}
break;
}
return;

View File

@@ -1055,127 +1055,148 @@ recordtype(aSub) {
prompt("Old Output A")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovla")
interest(4)
extra("void *ovla")
}
field(OVLB,DBF_NOACCESS) {
prompt("Old Output B")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlb")
interest(4)
extra("void *ovlb")
}
field(OVLC,DBF_NOACCESS) {
prompt("Old Output C")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlc")
interest(4)
extra("void *ovlc")
}
field(OVLD,DBF_NOACCESS) {
prompt("Old Output D")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovld")
interest(4)
extra("void *ovld")
}
field(OVLE,DBF_NOACCESS) {
prompt("Old Output E")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovle")
interest(4)
extra("void *ovle")
}
field(OVLF,DBF_NOACCESS) {
prompt("Old Output F")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlf")
interest(4)
extra("void *ovlf")
}
field(OVLG,DBF_NOACCESS) {
prompt("Old Output G")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlg")
interest(4)
extra("void *ovlg")
}
field(OVLH,DBF_NOACCESS) {
prompt("Old Output H")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlh")
interest(4)
extra("void *ovlh")
}
field(OVLI,DBF_NOACCESS) {
prompt("Old Output I")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovli")
interest(4)
extra("void *ovli")
}
field(OVLJ,DBF_NOACCESS) {
prompt("Old Output J")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlj")
interest(4)
extra("void *ovlj")
}
field(OVLK,DBF_NOACCESS) {
prompt("Old Output K")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlk")
interest(4)
extra("void *ovlk")
}
field(OVLL,DBF_NOACCESS) {
prompt("Old Output L")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovll")
interest(4)
extra("void *ovll")
}
field(OVLM,DBF_NOACCESS) {
prompt("Old Output M")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlm")
interest(4)
extra("void *ovlm")
}
field(OVLN,DBF_NOACCESS) {
prompt("Old Output N")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovln")
interest(4)
extra("void *ovln")
}
field(OVLO,DBF_NOACCESS) {
prompt("Old Output O")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlo")
interest(4)
extra("void *ovlo")
}
field(OVLP,DBF_NOACCESS) {
prompt("Old Output P")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlp")
interest(4)
extra("void *ovlp")
}
field(OVLQ,DBF_NOACCESS) {
prompt("Old Output Q")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlq")
interest(4)
extra("void *ovlq")
}
field(OVLR,DBF_NOACCESS) {
prompt("Old Output R")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlr")
interest(4)
extra("void *ovlr")
}
field(OVLS,DBF_NOACCESS) {
prompt("Old Output S")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovls")
interest(4)
extra("void *ovls")
}
field(OVLT,DBF_NOACCESS) {
prompt("Old Output T")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlt")
interest(4)
extra("void *ovlt")
}
field(OVLU,DBF_NOACCESS) {
prompt("Old Output U")
asl(ASL0)
special(SPC_NOMOD)
interest(4) extra("void *ovlu")
interest(4)
extra("void *ovlu")
}
field(FTVA,DBF_MENU) {
prompt("Type of VALA")
@@ -1494,149 +1515,254 @@ recordtype(aSub) {
}
field(NEVA,DBF_ULONG) {
prompt("Num. elements in VALA")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVB,DBF_ULONG) {
prompt("Num. elements in VALB")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVC,DBF_ULONG) {
prompt("Num. elements in VALC")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVD,DBF_ULONG) {
prompt("Num. elements in VALD")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVE,DBF_ULONG) {
prompt("Num. elements in VALE")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVF,DBF_ULONG) {
prompt("Num. elements in VALF")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVG,DBF_ULONG) {
prompt("Num. elements in VALG")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVH,DBF_ULONG) {
prompt("Num. elements in VAlH")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVI,DBF_ULONG) {
prompt("Num. elements in VALI")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVJ,DBF_ULONG) {
prompt("Num. elements in VALJ")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVK,DBF_ULONG) {
prompt("Num. elements in VALK")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVL,DBF_ULONG) {
prompt("Num. elements in VALL")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVM,DBF_ULONG) {
prompt("Num. elements in VALM")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVN,DBF_ULONG) {
prompt("Num. elements in VALN")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVO,DBF_ULONG) {
prompt("Num. elements in VALO")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVP,DBF_ULONG) {
prompt("Num. elements in VALP")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVQ,DBF_ULONG) {
prompt("Num. elements in VALQ")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVR,DBF_ULONG) {
prompt("Num. elements in VALR")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVS,DBF_ULONG) {
prompt("Num. elements in VALS")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVT,DBF_ULONG) {
prompt("Num. elements in VALT")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(NEVU,DBF_ULONG) {
prompt("Num. elements in VALU")
promptgroup(GUI_WAVE)
special(SPC_NOMOD)
interest(3)
initial("1")
}
field(ONVA,DBF_ULONG) {
prompt("Num. elements in OVLA")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVB,DBF_ULONG) {
prompt("Num. elements in OVLB")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVC,DBF_ULONG) {
prompt("Num. elements in OVLC")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVD,DBF_ULONG) {
prompt("Num. elements in OVLD")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVE,DBF_ULONG) {
prompt("Num. elements in OVLE")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVF,DBF_ULONG) {
prompt("Num. elements in OVLF")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVG,DBF_ULONG) {
prompt("Num. elements in OVLG")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVH,DBF_ULONG) {
prompt("Num. elements in VAlH")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVI,DBF_ULONG) {
prompt("Num. elements in OVLI")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVJ,DBF_ULONG) {
prompt("Num. elements in OVLJ")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVK,DBF_ULONG) {
prompt("Num. elements in OVLK")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVL,DBF_ULONG) {
prompt("Num. elements in OVLL")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVM,DBF_ULONG) {
prompt("Num. elements in OVLM")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVN,DBF_ULONG) {
prompt("Num. elements in OVLN")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVO,DBF_ULONG) {
prompt("Num. elements in OVLO")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVP,DBF_ULONG) {
prompt("Num. elements in OVLP")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVQ,DBF_ULONG) {
prompt("Num. elements in OVLQ")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVR,DBF_ULONG) {
prompt("Num. elements in OVLR")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVS,DBF_ULONG) {
prompt("Num. elements in OVLS")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVT,DBF_ULONG) {
prompt("Num. elements in OVLT")
special(SPC_NOMOD)
interest(4)
initial("1")
}
field(ONVU,DBF_ULONG) {
prompt("Num. elements in OVLU")
special(SPC_NOMOD)
interest(4)
initial("1")
}
}

View File

@@ -462,7 +462,7 @@ static void monitor(aiRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -472,7 +472,7 @@ static void monitor(aiRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -513,7 +513,7 @@ static void monitor(aoRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -522,7 +522,7 @@ static void monitor(aoRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -403,20 +403,20 @@ static void monitor(calcRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if (delta < 0.0) delta = -delta;
if (delta > prec->mdel) {
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
prec->mlst = prec->val;
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
prec->mlst = prec->val;
}
/* check for archive change */
delta = prec->alst - prec->val;
if (delta < 0.0) delta = -delta;
if (delta > prec->adel) {
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */
prec->alst = prec->val;
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */
prec->alst = prec->val;
}
/* send out monitors connected to the value field */

View File

@@ -216,7 +216,7 @@ static long init_record(calcoutRecord *prec, int pass)
static long process(calcoutRecord *prec)
{
rpvtStruct *prpvt = prec->rpvt;
int doOutput = 0;
int doOutput;
if (!prec->pact) {
prec->pact = TRUE;
@@ -238,21 +238,22 @@ static long process(calcoutRecord *prec)
doOutput = 1;
break;
case calcoutOOPT_On_Change:
if (fabs(prec->pval - prec->val) > prec->mdel) doOutput = 1;
doOutput = ! (fabs(prec->pval - prec->val) <= prec->mdel);
break;
case calcoutOOPT_Transition_To_Zero:
if ((prec->pval != 0.0) && (prec->val == 0.0)) doOutput = 1;
doOutput = ((prec->pval != 0.0) && (prec->val == 0.0));
break;
case calcoutOOPT_Transition_To_Non_zero:
if ((prec->pval == 0.0) && (prec->val != 0.0)) doOutput = 1;
doOutput = ((prec->pval == 0.0) && (prec->val != 0.0));
break;
case calcoutOOPT_When_Zero:
if (prec->val == 0.0) doOutput = 1;
doOutput = (prec->val == 0.0);
break;
case calcoutOOPT_When_Non_zero:
if (prec->val != 0.0) doOutput = 1;
doOutput = (prec->val != 0.0);
break;
default:
doOutput = 0;
break;
}
prec->pval = prec->val;
@@ -631,7 +632,7 @@ static void monitor(calcoutRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if (delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -640,7 +641,7 @@ static void monitor(calcoutRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if (delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -266,7 +266,7 @@ static void monitor(dfanoutRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -275,7 +275,7 @@ static void monitor(dfanoutRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -316,7 +316,7 @@ static void monitor(selRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -325,7 +325,7 @@ static void monitor(selRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -383,7 +383,7 @@ static void monitor(subRecord *prec)
/* check for value change */
delta = prec->val - prec->mlst;
if (delta < 0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -392,7 +392,7 @@ static void monitor(subRecord *prec)
/* check for archive change */
delta = prec->val - prec->alst;
if (delta < 0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */