EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: calcPerform expressions: 'NOT' operator
From: "Redman, Russell" <[email protected]>
To: "Andrew Johnson" <[email protected]>, "Tech Talk" <[email protected]>
Date: Fri, 3 Mar 2006 16:14:24 -0500
Not directly relevant to your message, but if you are working on the
calcPerfom routines, can I remind you of the efforts that Tim Mooney and
I (mostly Tim) put in a couple of years ago to add variable argument
lists to the MAX and MIN operators?  The ability to evaluate expressions
like MIN(H,MAX(A,B,C,D,E,F)) is really handy, especially when struggling
with the 40 character limit.  

Tim also added binary max and min operators, >? and <?, but as I recall
the parsing of these operators conflicted with expressions like A?B.  I
think that this compatability issue discouraged any effort to include
the changes in the standard EPICS versions.  However, I think the MAX
and MIN operators were OK.

Just a suggestion in case you are interested,
Russell O. Redman

-----Original Message-----
From: Andrew Johnson [mailto:[email protected]] 
Sent: Friday, March 03, 2006 12:56 PM
To: Tech Talk
Subject: calcPerform expressions: 'NOT' operator


Summary: I am working on changes and enhancements to the calcPerform 
code in R3.14, and am considering making a change that will alter the 
behaviour of expressions that use the 'NOT' operator in future versions 
of EPICS.  Please respond if this change will adversely affect your 
site, i.e. if you actually make heavy use of the 'NOT' operator (as 
against the related '-', '~' or '!' operators).

The libCom calc subsystem is used by the calc and calcout records, 
Channel Access security module, MEDM and probably some other client 
tools to evalutate expressions.  It provides separate operators for 
doing logical and bitwise operations, for example '&' is a bitwise AND 
while '&&' is a logical AND.  The operator 'AND' is also supported as a 
synonym for the bitwise operator, and has parallel operators 'OR' and
'XOR'.

When it comes to the unary NOT operations however, the operator 'NOT' 
does not match the bitwise '~' not operator, but instead performs a 
NEGATE operation like the unary minus operator.  This obscure behavior 
is documented in the Record Reference manual.

The current 'NOT' operator dates back to a time when the expression 
parser only supported the use of '-' as a binary subtraction operator, 
and for some reason the keyword 'NOT' was picked for the unary minus 
operator.  However the ability to use '-' for unary minus was added by 
Janet in R3.12.0beta7 about 11 years ago, so I'm now proposing to change

'NOT' to be a synonym for the bitwise operator '~'.

Please reply if you object to this change because your site uses 'NOT' 
in a significant number of CALC expressions of a 3.14 database or Access

Security configuration file.


To reward anyone who was interested enough to read to the bottom of this

message, here's what I'm up to:  I've been significantly improving the 
error checking and reporting from the expression parser, and have added 
an assignment operator ':=' and expression terminator ';'.  A single 
CALC record can now return multiple results, although it is still 
subject to the 40 character limit for the expression string.

- Andrew
-- 
There is no S in exprexxo.


Navigate by Date:
Prev: calcPerform expressions: 'NOT' operator Andrew Johnson
Next: RE: calcPerform expressions: 'NOT' operator Jeff Hill
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: calcPerform expressions: 'NOT' operator Tim Mooney
Next: RE: calcPerform expressions: 'NOT' operator Chestnut, Ronald P.
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 02 Sep 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·